fix shortcut handling
Bugs: 3400078
3270434
3368141
3381411
Fixed controller to check for menu & ctrl keys for shortcuts
Changed focus handling in url bar
Keyboard focus transitions are not 100% working yet, but it's possible
to navigate to all the elements
Change-Id: I514d85a37dae2589e3ce1ecb18c7fc0bf4e715f3
diff --git a/src/com/android/browser/UrlInputView.java b/src/com/android/browser/UrlInputView.java
index 1f15b32..2ec2111 100644
--- a/src/com/android/browser/UrlInputView.java
+++ b/src/com/android/browser/UrlInputView.java
@@ -29,7 +29,6 @@
import android.util.Patterns;
import android.view.KeyEvent;
import android.view.View;
-import android.view.View.OnFocusChangeListener;
import android.view.inputmethod.InputMethodManager;
import android.widget.AdapterView;
import android.widget.AdapterView.OnItemClickListener;
@@ -44,7 +43,7 @@
* handling suggestions
*/
public class UrlInputView extends AutoCompleteTextView
- implements OnFocusChangeListener, OnEditorActionListener,
+ implements OnEditorActionListener,
CompletionListener, OnItemClickListener {
@@ -55,12 +54,11 @@
private UrlInputListener mListener;
private InputMethodManager mInputManager;
private SuggestionsAdapter mAdapter;
- private OnFocusChangeListener mWrappedFocusListener;
private View mContainer;
private boolean mLandscape;
- private boolean mInVoiceMode;
private boolean mIncognitoMode;
private int mVOffset;
+ private boolean mNeedsUpdate;
public UrlInputView(Context context, AttributeSet attrs, int defStyle) {
super(context, attrs, defStyle);
@@ -80,7 +78,6 @@
private void init(Context ctx) {
mInputManager = (InputMethodManager) ctx.getSystemService(Context.INPUT_METHOD_SERVICE);
setOnEditorActionListener(this);
- super.setOnFocusChangeListener(this);
mAdapter = new SuggestionsAdapter(ctx, this);
setAdapter(mAdapter);
setSelectAllOnFocus(true);
@@ -88,6 +85,21 @@
setThreshold(1);
setOnItemClickListener(this);
mVOffset = 0;
+ mNeedsUpdate = false;
+ }
+
+ /**
+ * check if focus change requires a title bar update
+ */
+ boolean needsUpdate() {
+ return mNeedsUpdate;
+ }
+
+ /**
+ * clear the focus change needs title bar update flag
+ */
+ void clearNeedsUpdate() {
+ mNeedsUpdate = false;
}
void setController(UiController controller) {
@@ -107,9 +119,12 @@
mContainer = container;
}
+ public void setUrlInputListener(UrlInputListener listener) {
+ mListener = listener;
+ }
+
void setVoiceResults(List<String> voiceResults) {
mAdapter.setVoiceResults(voiceResults);
- mInVoiceMode = (voiceResults != null);
}
@Override
@@ -148,43 +163,28 @@
}
@Override
- public void setOnFocusChangeListener(OnFocusChangeListener focusListener) {
- mWrappedFocusListener = focusListener;
- }
-
- @Override
public boolean onEditorAction(TextView v, int actionId, KeyEvent event) {
finishInput(getText().toString(), null, TYPED);
return true;
}
- @Override
- public void onFocusChange(View v, boolean hasFocus) {
- if (mWrappedFocusListener != null) {
- mWrappedFocusListener.onFocusChange(v, hasFocus);
- }
- if (hasFocus) {
- forceIme();
- if (mInVoiceMode) {
- performFiltering(getText().toString(), 0);
- showDropDown();
- }
- } else {
- finishInput(null, null, null);
- }
+ void forceFilter() {
+ performFiltering(getText().toString(), 0);
+ showDropDown();
}
- public void setUrlInputListener(UrlInputListener listener) {
- mListener = listener;
- }
-
- public void forceIme() {
+ void forceIme() {
mInputManager.focusIn(this);
mInputManager.showSoftInput(this, 0);
}
+ void hideIME() {
+ mInputManager.hideSoftInputFromWindow(getWindowToken(), 0);
+ }
+
private void finishInput(String url, String extra, String source) {
- this.dismissDropDown();
+ mNeedsUpdate = true;
+ dismissDropDown();
mInputManager.hideSoftInputFromWindow(getWindowToken(), 0);
if (TextUtils.isEmpty(url)) {
mListener.onDismiss();
@@ -230,17 +230,6 @@
}
@Override
- public boolean onKeyPreIme(int keyCode, KeyEvent evt) {
- if ((evt.getAction() == KeyEvent.ACTION_DOWN)
- && (keyCode == KeyEvent.KEYCODE_BACK)) {
- // catch back key in order to do slightly more cleanup than usual
- clearFocus();
- return true;
- }
- return super.onKeyPreIme(keyCode, evt);
- }
-
- @Override
public void onItemClick(
AdapterView<?> parent, View view, int position, long id) {
SuggestItem item = mAdapter.getItem(position);
@@ -263,4 +252,13 @@
mAdapter.setIncognitoMode(mIncognitoMode);
}
+ @Override
+ public boolean onKeyDown(int keyCode, KeyEvent evt) {
+ if (keyCode == KeyEvent.KEYCODE_ESCAPE && !isInTouchMode()) {
+ finishInput(null, null, null);
+ return true;
+ }
+ return super.onKeyDown(keyCode, evt);
+ }
+
}