Titlebar on phone UI update
introduce new states for titlebar:
normal, highlighted, editing, loading
Change-Id: I8a6f88afc3457a07063aba40ef4d3e5f6c806b8f
diff --git a/src/com/android/browser/UrlInputView.java b/src/com/android/browser/UrlInputView.java
index 7545e6a..8b5c292 100644
--- a/src/com/android/browser/UrlInputView.java
+++ b/src/com/android/browser/UrlInputView.java
@@ -16,14 +16,6 @@
package com.android.browser;
-import com.android.browser.SuggestionsAdapter.CompletionListener;
-import com.android.browser.SuggestionsAdapter.SuggestItem;
-import com.android.browser.UI.DropdownChangeListener;
-import com.android.browser.autocomplete.SuggestiveAutoCompleteTextView;
-import com.android.browser.search.SearchEngine;
-import com.android.browser.search.SearchEngineInfo;
-import com.android.browser.search.SearchEngines;
-
import android.content.Context;
import android.content.res.Configuration;
import android.database.DataSetObserver;
@@ -32,6 +24,7 @@
import android.util.AttributeSet;
import android.util.Patterns;
import android.view.KeyEvent;
+import android.view.MotionEvent;
import android.view.View;
import android.view.inputmethod.EditorInfo;
import android.view.inputmethod.InputMethodManager;
@@ -40,6 +33,15 @@
import android.widget.TextView;
import android.widget.TextView.OnEditorActionListener;
+import com.android.browser.SuggestionsAdapter.CompletionListener;
+import com.android.browser.SuggestionsAdapter.SuggestItem;
+import com.android.browser.UI.DropdownChangeListener;
+import com.android.browser.autocomplete.SuggestedTextController.TextChangeWatcher;
+import com.android.browser.autocomplete.SuggestiveAutoCompleteTextView;
+import com.android.browser.search.SearchEngine;
+import com.android.browser.search.SearchEngineInfo;
+import com.android.browser.search.SearchEngines;
+
import java.util.List;
/**
@@ -48,13 +50,20 @@
*/
public class UrlInputView extends SuggestiveAutoCompleteTextView
implements OnEditorActionListener,
- CompletionListener, OnItemClickListener {
-
+ CompletionListener, OnItemClickListener, TextChangeWatcher {
static final String TYPED = "browser-type";
static final String SUGGESTED = "browser-suggest";
static final String VOICE = "voice-search";
+ static interface StateListener {
+ static final int STATE_NORMAL = 0;
+ static final int STATE_HIGHLIGHTED = 1;
+ static final int STATE_EDITED = 2;
+
+ public void onStateChanged(int state);
+ }
+
private UrlInputListener mListener;
private InputMethodManager mInputManager;
private SuggestionsAdapter mAdapter;
@@ -64,6 +73,9 @@
private boolean mNeedsUpdate;
private DropdownChangeListener mDropdownListener;
+ private int mState;
+ private StateListener mStateListener;
+
public UrlInputView(Context context, AttributeSet attrs, int defStyle) {
super(context, attrs, defStyle);
init(context);
@@ -90,6 +102,7 @@
setOnItemClickListener(this);
mNeedsUpdate = false;
mDropdownListener = null;
+ addQueryTextWatcher(this);
mAdapter.registerDataSetObserver(new DataSetObserver() {
@Override
@@ -105,6 +118,32 @@
dispatchChange();
}
});
+ mState = StateListener.STATE_NORMAL;
+ }
+
+ protected void onFocusChanged(boolean focused, int direction, Rect prevRect) {
+ super.onFocusChanged(focused, direction, prevRect);
+ if (focused) {
+ if (hasSelection()) {
+ changeState(StateListener.STATE_HIGHLIGHTED);
+ } else {
+ changeState(StateListener.STATE_EDITED);
+ }
+ } else {
+ // reset the selection state
+ changeState(StateListener.STATE_NORMAL);
+ }
+ }
+
+ @Override
+ public boolean onTouchEvent(MotionEvent evt) {
+ boolean hasSelection = hasSelection();
+ boolean res = super.onTouchEvent(evt);
+ if ((MotionEvent.ACTION_DOWN == evt.getActionMasked())
+ && hasSelection) {
+ changeState(StateListener.STATE_EDITED);
+ }
+ return res;
}
/**
@@ -135,6 +174,19 @@
mListener = listener;
}
+ public void setStateListener(StateListener listener) {
+ mStateListener = listener;
+ // update listener
+ changeState(mState);
+ }
+
+ private void changeState(int newState) {
+ mState = newState;
+ if (mStateListener != null) {
+ mStateListener.onStateChanged(mState);
+ }
+ }
+
void setVoiceResults(List<String> voiceResults) {
mAdapter.setVoiceResults(voiceResults);
}
@@ -305,4 +357,12 @@
public boolean requestRectangleOnScreen(Rect rect, boolean immediate) {
return false;
}
+
+ @Override
+ public void onTextChanged(String newText) {
+ if (StateListener.STATE_HIGHLIGHTED == mState) {
+ changeState(StateListener.STATE_EDITED);
+ }
+ }
+
}