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);
+        }
+    }
+
 }