Commit 046946e5 authored by estade's avatar estade Committed by Commit bot

Hide the autofill keyboard accessory when the keyboard hides.

Doing this requires adding a new listener interface on WindowAndroid.

BUG=428087

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

Cr-Commit-Position: refs/heads/master@{#327407}
parent 15063712
...@@ -24,7 +24,8 @@ import java.util.HashSet; ...@@ -24,7 +24,8 @@ import java.util.HashSet;
* The Autofill suggestion view that lists relevant suggestions. It sits above the keyboard and * The Autofill suggestion view that lists relevant suggestions. It sits above the keyboard and
* below the content area. * below the content area.
*/ */
public class AutofillKeyboardAccessory extends ListView implements AdapterView.OnItemClickListener { public class AutofillKeyboardAccessory extends ListView implements AdapterView.OnItemClickListener,
WindowAndroid.KeyboardVisibilityListener {
private final WindowAndroid mWindowAndroid; private final WindowAndroid mWindowAndroid;
private final AutofillKeyboardAccessoryDelegate mAutofillCallback; private final AutofillKeyboardAccessoryDelegate mAutofillCallback;
...@@ -59,6 +60,7 @@ public class AutofillKeyboardAccessory extends ListView implements AdapterView.O ...@@ -59,6 +60,7 @@ public class AutofillKeyboardAccessory extends ListView implements AdapterView.O
mWindowAndroid = windowAndroid; mWindowAndroid = windowAndroid;
mAutofillCallback = autofillCallback; mAutofillCallback = autofillCallback;
mWindowAndroid.addKeyboardVisibilityListener(this);
setBackgroundResource(R.drawable.autofill_accessory_view_border); setBackgroundResource(R.drawable.autofill_accessory_view_border);
setOnItemClickListener(this); setOnItemClickListener(this);
setContentDescription(windowAndroid.getActivity().get().getString( setContentDescription(windowAndroid.getActivity().get().getString(
...@@ -108,10 +110,19 @@ public class AutofillKeyboardAccessory extends ListView implements AdapterView.O ...@@ -108,10 +110,19 @@ public class AutofillKeyboardAccessory extends ListView implements AdapterView.O
ViewGroup container = mWindowAndroid.getKeyboardAccessoryView(); ViewGroup container = mWindowAndroid.getKeyboardAccessoryView();
container.removeView(this); container.removeView(this);
container.setVisibility(View.GONE); container.setVisibility(View.GONE);
mWindowAndroid.removeKeyboardVisibilityListener(this);
} }
@Override @Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) { public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
mAutofillCallback.suggestionSelected(position); mAutofillCallback.suggestionSelected(position);
} }
@Override
public void keyboardVisibilityChanged(boolean isShowing) {
if (!isShowing) {
dismiss();
mAutofillCallback.dismissed();
}
}
} }
...@@ -26,6 +26,7 @@ import org.chromium.ui.VSyncMonitor; ...@@ -26,6 +26,7 @@ import org.chromium.ui.VSyncMonitor;
import java.lang.ref.WeakReference; import java.lang.ref.WeakReference;
import java.util.HashMap; import java.util.HashMap;
import java.util.HashSet; import java.util.HashSet;
import java.util.LinkedList;
/** /**
* The window base class that has the minimum functionality. * The window base class that has the minimum functionality.
...@@ -58,6 +59,15 @@ public class WindowAndroid { ...@@ -58,6 +59,15 @@ public class WindowAndroid {
private ViewGroup mKeyboardAccessoryView; private ViewGroup mKeyboardAccessoryView;
/**
* An interface to notify listeners of changes in the soft keyboard's visibility.
*/
public interface KeyboardVisibilityListener {
public void keyboardVisibilityChanged(boolean isShowing);
}
private LinkedList<KeyboardVisibilityListener> mKeyboardVisibilityListeners =
new LinkedList<KeyboardVisibilityListener>();
private final VSyncMonitor.Listener mVSyncListener = new VSyncMonitor.Listener() { private final VSyncMonitor.Listener mVSyncListener = new VSyncMonitor.Listener() {
@Override @Override
public void onVSync(VSyncMonitor monitor, long vsyncTimeMicros) { public void onVSync(VSyncMonitor monitor, long vsyncTimeMicros) {
...@@ -326,6 +336,34 @@ public class WindowAndroid { ...@@ -326,6 +336,34 @@ public class WindowAndroid {
return mKeyboardAccessoryView; return mKeyboardAccessoryView;
} }
/**
* Adds a listener that is updated of keyboard visibility changes. This works as a best guess.
* {@see UiUtils.isKeyboardShowing}
*/
public void addKeyboardVisibilityListener(KeyboardVisibilityListener listener) {
mKeyboardVisibilityListeners.add(listener);
}
/**
* {@see addKeyboardVisibilityListener()}.
*/
public void removeKeyboardVisibilityListener(KeyboardVisibilityListener listener) {
mKeyboardVisibilityListeners.remove(listener);
}
/**
* To be called when the keyboard visibility state has changed. Informs listeners of the state
* change.
*/
public void keyboardVisibilityChanged(boolean isShowing) {
// Clone the list in case a listener tries to remove itself during the callback.
LinkedList<KeyboardVisibilityListener> listeners =
new LinkedList<KeyboardVisibilityListener>(mKeyboardVisibilityListeners);
for (KeyboardVisibilityListener listener : listeners) {
listener.keyboardVisibilityChanged(isShowing);
}
}
/** /**
* Start a post-layout animation on top of web content. * Start a post-layout animation on top of web content.
* *
......
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