Commit 1b64b5ed authored by boliu's avatar boliu Committed by Commit bot

Do not register onLayoutListener unless it is needed

isKeyboardShowing calls getWindowVisibleDisplayFrame which may be very
expensive sine it involves ipc to other processes. Also layout happens a
lot more often in webview than chrome, so this disproportionately
affects webview.

BUG=487487

Review URL: https://codereview.chromium.org/1140163004

Cr-Commit-Position: refs/heads/master@{#329973}
parent a3988993
...@@ -51,12 +51,25 @@ public class ActivityWindowAndroid ...@@ -51,12 +51,25 @@ public class ActivityWindowAndroid
public ActivityWindowAndroid(Activity activity, boolean listenToActivityState) { public ActivityWindowAndroid(Activity activity, boolean listenToActivityState) {
super(activity.getApplicationContext()); super(activity.getApplicationContext());
mActivityRef = new WeakReference<Activity>(activity); mActivityRef = new WeakReference<Activity>(activity);
activity.findViewById(android.R.id.content).addOnLayoutChangeListener(this);
if (listenToActivityState) { if (listenToActivityState) {
ApplicationStatus.registerStateListenerForActivity(this, activity); ApplicationStatus.registerStateListenerForActivity(this, activity);
} }
} }
@Override
protected void registerKeyboardVisibilityCallbacks() {
Activity activity = mActivityRef.get();
if (activity == null) return;
activity.findViewById(android.R.id.content).addOnLayoutChangeListener(this);
}
@Override
protected void unregisterKeyboardVisibilityCallbacks() {
Activity activity = mActivityRef.get();
if (activity == null) return;
activity.findViewById(android.R.id.content).removeOnLayoutChangeListener(this);
}
@Override @Override
public int showCancelableIntent( public int showCancelableIntent(
PendingIntent intent, IntentCallback callback, Integer errorId) { PendingIntent intent, IntentCallback callback, Integer errorId) {
......
...@@ -405,11 +405,20 @@ public class WindowAndroid { ...@@ -405,11 +405,20 @@ public class WindowAndroid {
return mKeyboardAccessoryView; return mKeyboardAccessoryView;
} }
protected void registerKeyboardVisibilityCallbacks() {
}
protected void unregisterKeyboardVisibilityCallbacks() {
}
/** /**
* Adds a listener that is updated of keyboard visibility changes. This works as a best guess. * Adds a listener that is updated of keyboard visibility changes. This works as a best guess.
* {@see UiUtils.isKeyboardShowing} * {@see UiUtils.isKeyboardShowing}
*/ */
public void addKeyboardVisibilityListener(KeyboardVisibilityListener listener) { public void addKeyboardVisibilityListener(KeyboardVisibilityListener listener) {
if (mKeyboardVisibilityListeners.isEmpty()) {
registerKeyboardVisibilityCallbacks();
}
mKeyboardVisibilityListeners.add(listener); mKeyboardVisibilityListeners.add(listener);
} }
...@@ -418,6 +427,9 @@ public class WindowAndroid { ...@@ -418,6 +427,9 @@ public class WindowAndroid {
*/ */
public void removeKeyboardVisibilityListener(KeyboardVisibilityListener listener) { public void removeKeyboardVisibilityListener(KeyboardVisibilityListener listener) {
mKeyboardVisibilityListeners.remove(listener); mKeyboardVisibilityListeners.remove(listener);
if (mKeyboardVisibilityListeners.isEmpty()) {
unregisterKeyboardVisibilityCallbacks();
}
} }
/** /**
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment