NavigationBarTablet.java revision 7cdc4906fc5852297a9a254c3251ad2f4dead6ee
1571b3762a5eb9e492283e0a1e437edd209fdc0deLeon Scroggins/*
2571b3762a5eb9e492283e0a1e437edd209fdc0deLeon Scroggins * Copyright (C) 2010 The Android Open Source Project
3571b3762a5eb9e492283e0a1e437edd209fdc0deLeon Scroggins *
4571b3762a5eb9e492283e0a1e437edd209fdc0deLeon Scroggins * Licensed under the Apache License, Version 2.0 (the "License");
5571b3762a5eb9e492283e0a1e437edd209fdc0deLeon Scroggins * you may not use this file except in compliance with the License.
6571b3762a5eb9e492283e0a1e437edd209fdc0deLeon Scroggins * You may obtain a copy of the License at
7571b3762a5eb9e492283e0a1e437edd209fdc0deLeon Scroggins *
8571b3762a5eb9e492283e0a1e437edd209fdc0deLeon Scroggins *      http://www.apache.org/licenses/LICENSE-2.0
9571b3762a5eb9e492283e0a1e437edd209fdc0deLeon Scroggins *
10571b3762a5eb9e492283e0a1e437edd209fdc0deLeon Scroggins * Unless required by applicable law or agreed to in writing, software
11571b3762a5eb9e492283e0a1e437edd209fdc0deLeon Scroggins * distributed under the License is distributed on an "AS IS" BASIS,
12571b3762a5eb9e492283e0a1e437edd209fdc0deLeon Scroggins * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13571b3762a5eb9e492283e0a1e437edd209fdc0deLeon Scroggins * See the License for the specific language governing permissions and
14571b3762a5eb9e492283e0a1e437edd209fdc0deLeon Scroggins * limitations under the License.
15571b3762a5eb9e492283e0a1e437edd209fdc0deLeon Scroggins */
16571b3762a5eb9e492283e0a1e437edd209fdc0deLeon Scroggins
17571b3762a5eb9e492283e0a1e437edd209fdc0deLeon Scrogginspackage com.android.browser;
18571b3762a5eb9e492283e0a1e437edd209fdc0deLeon Scroggins
19c7485ae06c6d5d33c57a03d02bbeed54edb3c66fMichael Kolbimport com.android.browser.UrlInputView.UrlInputListener;
20793e05e5f64dba439922304e3b95c29969b36fd5Michael Kolbimport com.android.browser.search.SearchEngine;
21c7485ae06c6d5d33c57a03d02bbeed54edb3c66fMichael Kolb
228233facddcc51865d612a919d450db6954aa48e3Michael Kolbimport android.app.Activity;
23fe25199a6f975c67d28afcc1de56b0f987b66cd8Michael Kolbimport android.app.SearchManager;
24571b3762a5eb9e492283e0a1e437edd209fdc0deLeon Scrogginsimport android.content.Context;
25fe25199a6f975c67d28afcc1de56b0f987b66cd8Michael Kolbimport android.content.Intent;
26571b3762a5eb9e492283e0a1e437edd209fdc0deLeon Scrogginsimport android.content.res.Resources;
27fe25199a6f975c67d28afcc1de56b0f987b66cd8Michael Kolbimport android.graphics.Bitmap;
28571b3762a5eb9e492283e0a1e437edd209fdc0deLeon Scrogginsimport android.graphics.drawable.Drawable;
29257cc2c8fcdd7117317e89861d4509955a622be8Michael Kolbimport android.os.Bundle;
30bd2dd64dda88ca8a7c2b148d88c5a44e73e1c331Michael Kolbimport android.speech.RecognizerResultsIntent;
3131d469bca6f6d5a8b444b7dac8038a1b75cd7e43Michael Kolbimport android.text.Editable;
321ce7813e6a0e42510fc1b3db5f5bb35999e1e87aMichael Kolbimport android.text.TextUtils;
3331d469bca6f6d5a8b444b7dac8038a1b75cd7e43Michael Kolbimport android.text.TextWatcher;
34571b3762a5eb9e492283e0a1e437edd209fdc0deLeon Scrogginsimport android.view.LayoutInflater;
35571b3762a5eb9e492283e0a1e437edd209fdc0deLeon Scrogginsimport android.view.View;
36a2b2ba8da913f26c820e49d3e43158e2fe6ebebaMichael Kolbimport android.view.View.OnClickListener;
3731d469bca6f6d5a8b444b7dac8038a1b75cd7e43Michael Kolbimport android.view.View.OnFocusChangeListener;
387cdc4906fc5852297a9a254c3251ad2f4dead6eeMichael Kolbimport android.view.ViewGroup;
39b6bc32c9c6ed3ec90d602a729a7bfa7741896cf4Michael Kolbimport android.webkit.WebView;
407cdc4906fc5852297a9a254c3251ad2f4dead6eeMichael Kolbimport android.widget.AbsoluteLayout;
417cdc4906fc5852297a9a254c3251ad2f4dead6eeMichael Kolbimport android.widget.FrameLayout;
425a72f1858c2f73be3558c6cdaa2c84b4c36fa748Michael Kolbimport android.widget.ImageButton;
43571b3762a5eb9e492283e0a1e437edd209fdc0deLeon Scrogginsimport android.widget.ImageView;
44571b3762a5eb9e492283e0a1e437edd209fdc0deLeon Scroggins
45cfa3af5c59abb38c895416a80ef16da0ec1b5287Michael Kolbimport java.util.List;
46cfa3af5c59abb38c895416a80ef16da0ec1b5287Michael Kolb
47571b3762a5eb9e492283e0a1e437edd209fdc0deLeon Scroggins/**
48fe25199a6f975c67d28afcc1de56b0f987b66cd8Michael Kolb * tabbed title bar for xlarge screen browser
49571b3762a5eb9e492283e0a1e437edd209fdc0deLeon Scroggins */
50fe25199a6f975c67d28afcc1de56b0f987b66cd8Michael Kolbpublic class TitleBarXLarge extends TitleBarBase
5131d469bca6f6d5a8b444b7dac8038a1b75cd7e43Michael Kolb    implements UrlInputListener, OnClickListener, OnFocusChangeListener,
5231d469bca6f6d5a8b444b7dac8038a1b75cd7e43Michael Kolb    TextWatcher {
53fe25199a6f975c67d28afcc1de56b0f987b66cd8Michael Kolb
54fe25199a6f975c67d28afcc1de56b0f987b66cd8Michael Kolb    private static final int PROGRESS_MAX = 100;
55fe25199a6f975c67d28afcc1de56b0f987b66cd8Michael Kolb
568233facddcc51865d612a919d450db6954aa48e3Michael Kolb    private UiController mUiController;
576670653d355fea0ae20dc51f6c693f994c4cbb54Michael Kolb    private XLargeUi mUi;
588233facddcc51865d612a919d450db6954aa48e3Michael Kolb
59a2b2ba8da913f26c820e49d3e43158e2fe6ebebaMichael Kolb    private Drawable mStopDrawable;
60a2b2ba8da913f26c820e49d3e43158e2fe6ebebaMichael Kolb    private Drawable mReloadDrawable;
61c7485ae06c6d5d33c57a03d02bbeed54edb3c66fMichael Kolb
623f65c3831ff82a20f6f0edb08df2d7edae540044Michael Kolb    private View mContainer;
635a72f1858c2f73be3558c6cdaa2c84b4c36fa748Michael Kolb    private ImageButton mBackButton;
645a72f1858c2f73be3558c6cdaa2c84b4c36fa748Michael Kolb    private ImageButton mForwardButton;
6531d469bca6f6d5a8b444b7dac8038a1b75cd7e43Michael Kolb    private ImageView mStar;
665b2299cc2fd9c8ca9c8ea2574d15dc867fa1e793Michael Kolb    private ImageView mWebIcon;
67a2b2ba8da913f26c820e49d3e43158e2fe6ebebaMichael Kolb    private View mSearchButton;
6831d469bca6f6d5a8b444b7dac8038a1b75cd7e43Michael Kolb    private View mUrlContainer;
69513286f421ad4aadc4d016d455ea7c520a0f2f59Michael Kolb    private View mGoButton;
70a2b2ba8da913f26c820e49d3e43158e2fe6ebebaMichael Kolb    private ImageView mStopButton;
71a2b2ba8da913f26c820e49d3e43158e2fe6ebebaMichael Kolb    private View mAllButton;
72b7b115e301334f813275aa13e7a2cc27bf15fe6aMichael Kolb    private View mClearButton;
7331d469bca6f6d5a8b444b7dac8038a1b75cd7e43Michael Kolb    private View mVoiceSearch;
74cfa3af5c59abb38c895416a80ef16da0ec1b5287Michael Kolb    private View mVoiceSearchIndicator;
75c7485ae06c6d5d33c57a03d02bbeed54edb3c66fMichael Kolb    private PageProgressView mProgressView;
7631d469bca6f6d5a8b444b7dac8038a1b75cd7e43Michael Kolb    private UrlInputView mUrlInput;
77cfa3af5c59abb38c895416a80ef16da0ec1b5287Michael Kolb    private Drawable mFocusDrawable;
78cfa3af5c59abb38c895416a80ef16da0ec1b5287Michael Kolb    private Drawable mUnfocusDrawable;
79cfa3af5c59abb38c895416a80ef16da0ec1b5287Michael Kolb    private boolean mInVoiceMode;
8081b6f83b7032f22fdaaa514afda2448f801b73daMichael Kolb
81a2b2ba8da913f26c820e49d3e43158e2fe6ebebaMichael Kolb    private boolean mInLoad;
82376b54116e38b3b94c4d64663d1bff38352b0e59Michael Kolb    private boolean mUseQuickControls;
83a2b2ba8da913f26c820e49d3e43158e2fe6ebebaMichael Kolb
8481b6f83b7032f22fdaaa514afda2448f801b73daMichael Kolb    public TitleBarXLarge(Activity activity, UiController controller,
856670653d355fea0ae20dc51f6c693f994c4cbb54Michael Kolb            XLargeUi ui) {
868233facddcc51865d612a919d450db6954aa48e3Michael Kolb        super(activity);
878233facddcc51865d612a919d450db6954aa48e3Michael Kolb        mUiController = controller;
8881b6f83b7032f22fdaaa514afda2448f801b73daMichael Kolb        mUi = ui;
898233facddcc51865d612a919d450db6954aa48e3Michael Kolb        Resources resources = activity.getResources();
905a72f1858c2f73be3558c6cdaa2c84b4c36fa748Michael Kolb        mStopDrawable = resources.getDrawable(R.drawable.ic_stop_holo_dark);
915a72f1858c2f73be3558c6cdaa2c84b4c36fa748Michael Kolb        mReloadDrawable = resources.getDrawable(R.drawable.ic_refresh_holo_dark);
92cfa3af5c59abb38c895416a80ef16da0ec1b5287Michael Kolb        mFocusDrawable = resources.getDrawable(
93cfa3af5c59abb38c895416a80ef16da0ec1b5287Michael Kolb                R.drawable.textfield_active_holo_dark);
94cfa3af5c59abb38c895416a80ef16da0ec1b5287Michael Kolb        mUnfocusDrawable = resources.getDrawable(
95cfa3af5c59abb38c895416a80ef16da0ec1b5287Michael Kolb                R.drawable.textfield_default_holo_dark);
961605bef4e1f99805a801308f97ade622b907dc7aJohn Reck        initLayout(activity);
97cfa3af5c59abb38c895416a80ef16da0ec1b5287Michael Kolb        mInVoiceMode = false;
98fe25199a6f975c67d28afcc1de56b0f987b66cd8Michael Kolb    }
99571b3762a5eb9e492283e0a1e437edd209fdc0deLeon Scroggins
1007cdc4906fc5852297a9a254c3251ad2f4dead6eeMichael Kolb    @Override
1017cdc4906fc5852297a9a254c3251ad2f4dead6eeMichael Kolb    void setTitleGravity(int gravity) {
1027cdc4906fc5852297a9a254c3251ad2f4dead6eeMichael Kolb        if (mUseQuickControls) {
1037cdc4906fc5852297a9a254c3251ad2f4dead6eeMichael Kolb            FrameLayout.LayoutParams lp =
1047cdc4906fc5852297a9a254c3251ad2f4dead6eeMichael Kolb                    (FrameLayout.LayoutParams) getLayoutParams();
1057cdc4906fc5852297a9a254c3251ad2f4dead6eeMichael Kolb            lp.gravity = gravity;
1067cdc4906fc5852297a9a254c3251ad2f4dead6eeMichael Kolb            setLayoutParams(lp);
1077cdc4906fc5852297a9a254c3251ad2f4dead6eeMichael Kolb        } else {
1087cdc4906fc5852297a9a254c3251ad2f4dead6eeMichael Kolb            super.setTitleGravity(gravity);
1097cdc4906fc5852297a9a254c3251ad2f4dead6eeMichael Kolb        }
1107cdc4906fc5852297a9a254c3251ad2f4dead6eeMichael Kolb    }
1117cdc4906fc5852297a9a254c3251ad2f4dead6eeMichael Kolb
1121605bef4e1f99805a801308f97ade622b907dc7aJohn Reck    private void initLayout(Context context) {
113fe25199a6f975c67d28afcc1de56b0f987b66cd8Michael Kolb        LayoutInflater factory = LayoutInflater.from(context);
114a2b2ba8da913f26c820e49d3e43158e2fe6ebebaMichael Kolb        factory.inflate(R.layout.url_bar, this);
115571b3762a5eb9e492283e0a1e437edd209fdc0deLeon Scroggins
1163f65c3831ff82a20f6f0edb08df2d7edae540044Michael Kolb        mContainer = findViewById(R.id.taburlbar);
11731d469bca6f6d5a8b444b7dac8038a1b75cd7e43Michael Kolb        mUrlInput = (UrlInputView) findViewById(R.id.url_focused);
118fe25199a6f975c67d28afcc1de56b0f987b66cd8Michael Kolb        mAllButton = findViewById(R.id.all_btn);
119fe25199a6f975c67d28afcc1de56b0f987b66cd8Michael Kolb        // TODO: Change enabled states based on whether you can go
120571b3762a5eb9e492283e0a1e437edd209fdc0deLeon Scroggins        // back/forward.  Probably should be done inside onPageStarted.
1215a72f1858c2f73be3558c6cdaa2c84b4c36fa748Michael Kolb        mBackButton = (ImageButton) findViewById(R.id.back);
1225a72f1858c2f73be3558c6cdaa2c84b4c36fa748Michael Kolb        mForwardButton = (ImageButton) findViewById(R.id.forward);
1235b2299cc2fd9c8ca9c8ea2574d15dc867fa1e793Michael Kolb        mWebIcon = (ImageView) findViewById(R.id.web_icon);
12431d469bca6f6d5a8b444b7dac8038a1b75cd7e43Michael Kolb        mStar = (ImageView) findViewById(R.id.star);
125a2b2ba8da913f26c820e49d3e43158e2fe6ebebaMichael Kolb        mStopButton = (ImageView) findViewById(R.id.stop);
126a2b2ba8da913f26c820e49d3e43158e2fe6ebebaMichael Kolb        mSearchButton = findViewById(R.id.search);
127a2b2ba8da913f26c820e49d3e43158e2fe6ebebaMichael Kolb        mLockIcon = (ImageView) findViewById(R.id.lock);
128513286f421ad4aadc4d016d455ea7c520a0f2f59Michael Kolb        mGoButton = findViewById(R.id.go);
129b7b115e301334f813275aa13e7a2cc27bf15fe6aMichael Kolb        mClearButton = findViewById(R.id.clear);
13031d469bca6f6d5a8b444b7dac8038a1b75cd7e43Michael Kolb        mVoiceSearch = findViewById(R.id.voicesearch);
131c7485ae06c6d5d33c57a03d02bbeed54edb3c66fMichael Kolb        mProgressView = (PageProgressView) findViewById(R.id.progress);
13231d469bca6f6d5a8b444b7dac8038a1b75cd7e43Michael Kolb        mUrlContainer = findViewById(R.id.urlbar_focused);
133cfa3af5c59abb38c895416a80ef16da0ec1b5287Michael Kolb        mVoiceSearchIndicator = findViewById(R.id.voice_icon);
134a2b2ba8da913f26c820e49d3e43158e2fe6ebebaMichael Kolb        mBackButton.setOnClickListener(this);
135a2b2ba8da913f26c820e49d3e43158e2fe6ebebaMichael Kolb        mForwardButton.setOnClickListener(this);
136a2b2ba8da913f26c820e49d3e43158e2fe6ebebaMichael Kolb        mStar.setOnClickListener(this);
137a2b2ba8da913f26c820e49d3e43158e2fe6ebebaMichael Kolb        mAllButton.setOnClickListener(this);
138a2b2ba8da913f26c820e49d3e43158e2fe6ebebaMichael Kolb        mStopButton.setOnClickListener(this);
139a2b2ba8da913f26c820e49d3e43158e2fe6ebebaMichael Kolb        mSearchButton.setOnClickListener(this);
140513286f421ad4aadc4d016d455ea7c520a0f2f59Michael Kolb        mGoButton.setOnClickListener(this);
141b7b115e301334f813275aa13e7a2cc27bf15fe6aMichael Kolb        mClearButton.setOnClickListener(this);
142cfa3af5c59abb38c895416a80ef16da0ec1b5287Michael Kolb        mVoiceSearch.setOnClickListener(this);
14331d469bca6f6d5a8b444b7dac8038a1b75cd7e43Michael Kolb        mUrlInput.setUrlInputListener(this);
14431d469bca6f6d5a8b444b7dac8038a1b75cd7e43Michael Kolb        mUrlInput.setContainer(mUrlContainer);
14531d469bca6f6d5a8b444b7dac8038a1b75cd7e43Michael Kolb        mUrlInput.setController(mUiController);
14631d469bca6f6d5a8b444b7dac8038a1b75cd7e43Michael Kolb        mUrlInput.setOnFocusChangeListener(this);
14731d469bca6f6d5a8b444b7dac8038a1b75cd7e43Michael Kolb        mUrlInput.setSelectAllOnFocus(true);
14831d469bca6f6d5a8b444b7dac8038a1b75cd7e43Michael Kolb        mUrlInput.addTextChangedListener(this);
14947171d85e40b3d89e347f950d157036f6b0c1d8dMichael Kolb        setEditMode(false);
15031d469bca6f6d5a8b444b7dac8038a1b75cd7e43Michael Kolb    }
15131d469bca6f6d5a8b444b7dac8038a1b75cd7e43Michael Kolb
1525a72f1858c2f73be3558c6cdaa2c84b4c36fa748Michael Kolb    void updateNavigationState(Tab tab) {
1535a72f1858c2f73be3558c6cdaa2c84b4c36fa748Michael Kolb        WebView web = tab.getWebView();
1545a72f1858c2f73be3558c6cdaa2c84b4c36fa748Michael Kolb        if (web != null) {
1555a72f1858c2f73be3558c6cdaa2c84b4c36fa748Michael Kolb            mBackButton.setImageResource(web.canGoBack()
1565a72f1858c2f73be3558c6cdaa2c84b4c36fa748Michael Kolb                    ? R.drawable.ic_back_holo_dark
1575a72f1858c2f73be3558c6cdaa2c84b4c36fa748Michael Kolb                    : R.drawable.ic_back_disabled_holo_dark);
1585a72f1858c2f73be3558c6cdaa2c84b4c36fa748Michael Kolb            mForwardButton.setImageResource(web.canGoForward()
1595a72f1858c2f73be3558c6cdaa2c84b4c36fa748Michael Kolb                    ? R.drawable.ic_forward_holo_dark
1605a72f1858c2f73be3558c6cdaa2c84b4c36fa748Michael Kolb                    : R.drawable.ic_forward_disabled_holo_dark);
1615a72f1858c2f73be3558c6cdaa2c84b4c36fa748Michael Kolb        }
1625a72f1858c2f73be3558c6cdaa2c84b4c36fa748Michael Kolb    }
1635a72f1858c2f73be3558c6cdaa2c84b4c36fa748Michael Kolb
1647cdc4906fc5852297a9a254c3251ad2f4dead6eeMichael Kolb    private ViewGroup.LayoutParams makeLayoutParams() {
1657cdc4906fc5852297a9a254c3251ad2f4dead6eeMichael Kolb        if (mUseQuickControls) {
1667cdc4906fc5852297a9a254c3251ad2f4dead6eeMichael Kolb            return new FrameLayout.LayoutParams(LayoutParams.MATCH_PARENT,
1677cdc4906fc5852297a9a254c3251ad2f4dead6eeMichael Kolb                    LayoutParams.WRAP_CONTENT);
168cfa3af5c59abb38c895416a80ef16da0ec1b5287Michael Kolb        } else {
1697cdc4906fc5852297a9a254c3251ad2f4dead6eeMichael Kolb            return new AbsoluteLayout.LayoutParams(
1707cdc4906fc5852297a9a254c3251ad2f4dead6eeMichael Kolb                    LayoutParams.MATCH_PARENT, LayoutParams.WRAP_CONTENT,
1717cdc4906fc5852297a9a254c3251ad2f4dead6eeMichael Kolb                    0, 0);
172cfa3af5c59abb38c895416a80ef16da0ec1b5287Michael Kolb        }
173cfa3af5c59abb38c895416a80ef16da0ec1b5287Michael Kolb    }
174cfa3af5c59abb38c895416a80ef16da0ec1b5287Michael Kolb
175376b54116e38b3b94c4d64663d1bff38352b0e59Michael Kolb    void setUseQuickControls(boolean useQuickControls) {
176376b54116e38b3b94c4d64663d1bff38352b0e59Michael Kolb        mUseQuickControls = useQuickControls;
17791902d5db3dcbd161bf824620567e210d6f4fcbeMichael Kolb        mUrlInput.setUseQuickControls(mUseQuickControls);
1787cdc4906fc5852297a9a254c3251ad2f4dead6eeMichael Kolb        setLayoutParams(makeLayoutParams());
179376b54116e38b3b94c4d64663d1bff38352b0e59Michael Kolb        if (mUseQuickControls) {
180376b54116e38b3b94c4d64663d1bff38352b0e59Michael Kolb            mBackButton.setVisibility(View.GONE);
181376b54116e38b3b94c4d64663d1bff38352b0e59Michael Kolb            mForwardButton.setVisibility(View.GONE);
182376b54116e38b3b94c4d64663d1bff38352b0e59Michael Kolb            mStopButton.setVisibility(View.GONE);
183376b54116e38b3b94c4d64663d1bff38352b0e59Michael Kolb            mAllButton.setVisibility(View.GONE);
184376b54116e38b3b94c4d64663d1bff38352b0e59Michael Kolb        } else {
185376b54116e38b3b94c4d64663d1bff38352b0e59Michael Kolb            mBackButton.setVisibility(View.VISIBLE);
186376b54116e38b3b94c4d64663d1bff38352b0e59Michael Kolb            mForwardButton.setVisibility(View.VISIBLE);
187376b54116e38b3b94c4d64663d1bff38352b0e59Michael Kolb            mStopButton.setVisibility(View.VISIBLE);
188376b54116e38b3b94c4d64663d1bff38352b0e59Michael Kolb            mAllButton.setVisibility(View.VISIBLE);
189376b54116e38b3b94c4d64663d1bff38352b0e59Michael Kolb        }
190376b54116e38b3b94c4d64663d1bff38352b0e59Michael Kolb    }
191376b54116e38b3b94c4d64663d1bff38352b0e59Michael Kolb
192376b54116e38b3b94c4d64663d1bff38352b0e59Michael Kolb    void setShowProgressOnly(boolean progress) {
193376b54116e38b3b94c4d64663d1bff38352b0e59Michael Kolb        if (progress) {
194376b54116e38b3b94c4d64663d1bff38352b0e59Michael Kolb            mContainer.setVisibility(View.GONE);
195376b54116e38b3b94c4d64663d1bff38352b0e59Michael Kolb        } else {
196376b54116e38b3b94c4d64663d1bff38352b0e59Michael Kolb            mContainer.setVisibility(View.VISIBLE);
197376b54116e38b3b94c4d64663d1bff38352b0e59Michael Kolb        }
198376b54116e38b3b94c4d64663d1bff38352b0e59Michael Kolb    }
199376b54116e38b3b94c4d64663d1bff38352b0e59Michael Kolb
20031d469bca6f6d5a8b444b7dac8038a1b75cd7e43Michael Kolb    @Override
20131d469bca6f6d5a8b444b7dac8038a1b75cd7e43Michael Kolb    public void onFocusChange(View view, boolean hasFocus) {
2027cdc4906fc5852297a9a254c3251ad2f4dead6eeMichael Kolb        setEditMode(hasFocus);
203cfa3af5c59abb38c895416a80ef16da0ec1b5287Michael Kolb        mUrlContainer.setBackgroundDrawable(hasFocus
204cfa3af5c59abb38c895416a80ef16da0ec1b5287Michael Kolb                ? mFocusDrawable : mUnfocusDrawable);
205c7485ae06c6d5d33c57a03d02bbeed54edb3c66fMichael Kolb    }
206b7b115e301334f813275aa13e7a2cc27bf15fe6aMichael Kolb
2074cd97793901e8f5681cf642d0b2684697964a37aLeon Scroggins    public void setCurrentUrlIsBookmark(boolean isBookmark) {
20831d469bca6f6d5a8b444b7dac8038a1b75cd7e43Michael Kolb        mStar.setActivated(isBookmark);
2094cd97793901e8f5681cf642d0b2684697964a37aLeon Scroggins    }
2104cd97793901e8f5681cf642d0b2684697964a37aLeon Scroggins
21181b6f83b7032f22fdaaa514afda2448f801b73daMichael Kolb    /**
21281b6f83b7032f22fdaaa514afda2448f801b73daMichael Kolb     * called from the Ui when the user wants to edit
21381b6f83b7032f22fdaaa514afda2448f801b73daMichael Kolb     * @param clearInput clear the input field
21481b6f83b7032f22fdaaa514afda2448f801b73daMichael Kolb     */
21581b6f83b7032f22fdaaa514afda2448f801b73daMichael Kolb    void onEditUrl(boolean clearInput) {
216bd018d44c193f7afe5f3c0839766ff1ab19712b9Michael Kolb        // editing takes preference of progress
217bd018d44c193f7afe5f3c0839766ff1ab19712b9Michael Kolb        mContainer.setVisibility(View.VISIBLE);
218bd018d44c193f7afe5f3c0839766ff1ab19712b9Michael Kolb        if (mUseQuickControls) {
219bd018d44c193f7afe5f3c0839766ff1ab19712b9Michael Kolb            mProgressView.setVisibility(View.GONE);
220bd018d44c193f7afe5f3c0839766ff1ab19712b9Michael Kolb        }
221cfa3af5c59abb38c895416a80ef16da0ec1b5287Michael Kolb        if (!mUrlInput.hasFocus()) {
222cfa3af5c59abb38c895416a80ef16da0ec1b5287Michael Kolb            mUrlInput.requestFocus();
223cfa3af5c59abb38c895416a80ef16da0ec1b5287Michael Kolb        }
22481b6f83b7032f22fdaaa514afda2448f801b73daMichael Kolb        if (clearInput) {
22581b6f83b7032f22fdaaa514afda2448f801b73daMichael Kolb            mUrlInput.setText("");
226cfa3af5c59abb38c895416a80ef16da0ec1b5287Michael Kolb        } else if (mInVoiceMode) {
227cfa3af5c59abb38c895416a80ef16da0ec1b5287Michael Kolb            mUrlInput.showDropDown();
22881b6f83b7032f22fdaaa514afda2448f801b73daMichael Kolb        }
22981b6f83b7032f22fdaaa514afda2448f801b73daMichael Kolb    }
23081b6f83b7032f22fdaaa514afda2448f801b73daMichael Kolb
23181b6f83b7032f22fdaaa514afda2448f801b73daMichael Kolb    boolean isEditingUrl() {
23281b6f83b7032f22fdaaa514afda2448f801b73daMichael Kolb        return mUrlInput.hasFocus();
23381b6f83b7032f22fdaaa514afda2448f801b73daMichael Kolb    }
23481b6f83b7032f22fdaaa514afda2448f801b73daMichael Kolb
2357cdc4906fc5852297a9a254c3251ad2f4dead6eeMichael Kolb    void stopEditingUrl() {
2367cdc4906fc5852297a9a254c3251ad2f4dead6eeMichael Kolb        mUrlInput.clearFocus();
2377cdc4906fc5852297a9a254c3251ad2f4dead6eeMichael Kolb    }
2387cdc4906fc5852297a9a254c3251ad2f4dead6eeMichael Kolb
239a2b2ba8da913f26c820e49d3e43158e2fe6ebebaMichael Kolb    @Override
240a2b2ba8da913f26c820e49d3e43158e2fe6ebebaMichael Kolb    public void onClick(View v) {
2417cdc4906fc5852297a9a254c3251ad2f4dead6eeMichael Kolb        if (mBackButton == v) {
2428233facddcc51865d612a919d450db6954aa48e3Michael Kolb            mUiController.getCurrentTopWebView().goBack();
243a2b2ba8da913f26c820e49d3e43158e2fe6ebebaMichael Kolb        } else if (mForwardButton == v) {
2448233facddcc51865d612a919d450db6954aa48e3Michael Kolb            mUiController.getCurrentTopWebView().goForward();
245a2b2ba8da913f26c820e49d3e43158e2fe6ebebaMichael Kolb        } else if (mStar == v) {
2468233facddcc51865d612a919d450db6954aa48e3Michael Kolb            mUiController.bookmarkCurrentPage(
24788d080394ca18120e05c6926b178fd6843ff9cecLeon Scroggins                    AddBookmarkPage.DEFAULT_FOLDER_ID);
248a2b2ba8da913f26c820e49d3e43158e2fe6ebebaMichael Kolb        } else if (mAllButton == v) {
2498233facddcc51865d612a919d450db6954aa48e3Michael Kolb            mUiController.bookmarksOrHistoryPicker(false);
250a2b2ba8da913f26c820e49d3e43158e2fe6ebebaMichael Kolb        } else if (mSearchButton == v) {
25181b6f83b7032f22fdaaa514afda2448f801b73daMichael Kolb            mUi.editUrl(true);
252a2b2ba8da913f26c820e49d3e43158e2fe6ebebaMichael Kolb        } else if (mStopButton == v) {
253a2b2ba8da913f26c820e49d3e43158e2fe6ebebaMichael Kolb            stopOrRefresh();
254513286f421ad4aadc4d016d455ea7c520a0f2f59Michael Kolb        } else if (mGoButton == v) {
25531d469bca6f6d5a8b444b7dac8038a1b75cd7e43Michael Kolb            if (!TextUtils.isEmpty(mUrlInput.getText())) {
25631d469bca6f6d5a8b444b7dac8038a1b75cd7e43Michael Kolb                onAction(mUrlInput.getText().toString(), null,
257257cc2c8fcdd7117317e89861d4509955a622be8Michael Kolb                        UrlInputView.TYPED);
2581ce7813e6a0e42510fc1b3db5f5bb35999e1e87aMichael Kolb            }
259b7b115e301334f813275aa13e7a2cc27bf15fe6aMichael Kolb        } else if (mClearButton == v) {
26031d469bca6f6d5a8b444b7dac8038a1b75cd7e43Michael Kolb            clearOrClose();
261cfa3af5c59abb38c895416a80ef16da0ec1b5287Michael Kolb        } else if (mVoiceSearch == v) {
262cfa3af5c59abb38c895416a80ef16da0ec1b5287Michael Kolb            mUiController.startVoiceSearch();
263fe25199a6f975c67d28afcc1de56b0f987b66cd8Michael Kolb        }
264fe25199a6f975c67d28afcc1de56b0f987b66cd8Michael Kolb    }
265fe25199a6f975c67d28afcc1de56b0f987b66cd8Michael Kolb
266a2b2ba8da913f26c820e49d3e43158e2fe6ebebaMichael Kolb    @Override
267a2b2ba8da913f26c820e49d3e43158e2fe6ebebaMichael Kolb    void setFavicon(Bitmap icon) { }
268fe25199a6f975c67d28afcc1de56b0f987b66cd8Michael Kolb
26931d469bca6f6d5a8b444b7dac8038a1b75cd7e43Michael Kolb    private void clearOrClose() {
27031d469bca6f6d5a8b444b7dac8038a1b75cd7e43Michael Kolb        if (TextUtils.isEmpty(mUrlInput.getText())) {
27131d469bca6f6d5a8b444b7dac8038a1b75cd7e43Michael Kolb            // close
2727cdc4906fc5852297a9a254c3251ad2f4dead6eeMichael Kolb            mUrlInput.clearFocus();
27331d469bca6f6d5a8b444b7dac8038a1b75cd7e43Michael Kolb        } else {
27431d469bca6f6d5a8b444b7dac8038a1b75cd7e43Michael Kolb            // clear
27531d469bca6f6d5a8b444b7dac8038a1b75cd7e43Michael Kolb            mUrlInput.setText("");
27631d469bca6f6d5a8b444b7dac8038a1b75cd7e43Michael Kolb        }
27731d469bca6f6d5a8b444b7dac8038a1b75cd7e43Michael Kolb    }
27831d469bca6f6d5a8b444b7dac8038a1b75cd7e43Michael Kolb
279fe25199a6f975c67d28afcc1de56b0f987b66cd8Michael Kolb    // UrlInputListener implementation
280fe25199a6f975c67d28afcc1de56b0f987b66cd8Michael Kolb
28181b6f83b7032f22fdaaa514afda2448f801b73daMichael Kolb    /**
28281b6f83b7032f22fdaaa514afda2448f801b73daMichael Kolb     * callback from suggestion dropdown
28381b6f83b7032f22fdaaa514afda2448f801b73daMichael Kolb     * user selected a suggestion
28481b6f83b7032f22fdaaa514afda2448f801b73daMichael Kolb     */
285fe25199a6f975c67d28afcc1de56b0f987b66cd8Michael Kolb    @Override
286257cc2c8fcdd7117317e89861d4509955a622be8Michael Kolb    public void onAction(String text, String extra, String source) {
2878233facddcc51865d612a919d450db6954aa48e3Michael Kolb        mUiController.getCurrentTopWebView().requestFocus();
2887cdc4906fc5852297a9a254c3251ad2f4dead6eeMichael Kolb        mUi.hideTitleBar();
289fe25199a6f975c67d28afcc1de56b0f987b66cd8Michael Kolb        Intent i = new Intent();
290bd2dd64dda88ca8a7c2b148d88c5a44e73e1c331Michael Kolb        String action = null;
291bd2dd64dda88ca8a7c2b148d88c5a44e73e1c331Michael Kolb        if (UrlInputView.VOICE.equals(source)) {
292bd2dd64dda88ca8a7c2b148d88c5a44e73e1c331Michael Kolb            action = RecognizerResultsIntent.ACTION_VOICE_SEARCH_RESULTS;
293bd2dd64dda88ca8a7c2b148d88c5a44e73e1c331Michael Kolb            source = null;
294bd2dd64dda88ca8a7c2b148d88c5a44e73e1c331Michael Kolb        } else {
295bd2dd64dda88ca8a7c2b148d88c5a44e73e1c331Michael Kolb            action = Intent.ACTION_SEARCH;
296bd2dd64dda88ca8a7c2b148d88c5a44e73e1c331Michael Kolb        }
297bd2dd64dda88ca8a7c2b148d88c5a44e73e1c331Michael Kolb        i.setAction(action);
298fe25199a6f975c67d28afcc1de56b0f987b66cd8Michael Kolb        i.putExtra(SearchManager.QUERY, text);
29940f720ecfd4ef7ebb657f0fc1906a9982b3bafbdJohn Reck        if (extra != null) {
30040f720ecfd4ef7ebb657f0fc1906a9982b3bafbdJohn Reck            i.putExtra(SearchManager.EXTRA_DATA_KEY, extra);
30140f720ecfd4ef7ebb657f0fc1906a9982b3bafbdJohn Reck        }
302257cc2c8fcdd7117317e89861d4509955a622be8Michael Kolb        if (source != null) {
303257cc2c8fcdd7117317e89861d4509955a622be8Michael Kolb            Bundle appData = new Bundle();
304257cc2c8fcdd7117317e89861d4509955a622be8Michael Kolb            appData.putString(com.android.common.Search.SOURCE, source);
305257cc2c8fcdd7117317e89861d4509955a622be8Michael Kolb            i.putExtra(SearchManager.APP_DATA, appData);
306257cc2c8fcdd7117317e89861d4509955a622be8Michael Kolb        }
3078233facddcc51865d612a919d450db6954aa48e3Michael Kolb        mUiController.handleNewIntent(i);
308513286f421ad4aadc4d016d455ea7c520a0f2f59Michael Kolb        setDisplayTitle(text);
309fe25199a6f975c67d28afcc1de56b0f987b66cd8Michael Kolb    }
310fe25199a6f975c67d28afcc1de56b0f987b66cd8Michael Kolb
311fe25199a6f975c67d28afcc1de56b0f987b66cd8Michael Kolb    @Override
312fe25199a6f975c67d28afcc1de56b0f987b66cd8Michael Kolb    public void onDismiss() {
31347171d85e40b3d89e347f950d157036f6b0c1d8dMichael Kolb        final Tab currentTab = mUi.getActiveTab();
3147cdc4906fc5852297a9a254c3251ad2f4dead6eeMichael Kolb        mUi.hideTitleBar();
31547171d85e40b3d89e347f950d157036f6b0c1d8dMichael Kolb        post(new Runnable() {
31647171d85e40b3d89e347f950d157036f6b0c1d8dMichael Kolb            public void run() {
31747171d85e40b3d89e347f950d157036f6b0c1d8dMichael Kolb                TitleBarXLarge.this.clearFocus();
31847171d85e40b3d89e347f950d157036f6b0c1d8dMichael Kolb                if ((currentTab != null) && !mInVoiceMode) {
31947171d85e40b3d89e347f950d157036f6b0c1d8dMichael Kolb                    setDisplayTitle(currentTab.getUrl());
32047171d85e40b3d89e347f950d157036f6b0c1d8dMichael Kolb                }
32147171d85e40b3d89e347f950d157036f6b0c1d8dMichael Kolb            }
32247171d85e40b3d89e347f950d157036f6b0c1d8dMichael Kolb        });
323513286f421ad4aadc4d016d455ea7c520a0f2f59Michael Kolb    }
324513286f421ad4aadc4d016d455ea7c520a0f2f59Michael Kolb
32581b6f83b7032f22fdaaa514afda2448f801b73daMichael Kolb    /**
32681b6f83b7032f22fdaaa514afda2448f801b73daMichael Kolb     * callback from the suggestion dropdown
32781b6f83b7032f22fdaaa514afda2448f801b73daMichael Kolb     * copy text to input field and stay in edit mode
32881b6f83b7032f22fdaaa514afda2448f801b73daMichael Kolb     */
329513286f421ad4aadc4d016d455ea7c520a0f2f59Michael Kolb    @Override
3307cdc4906fc5852297a9a254c3251ad2f4dead6eeMichael Kolb    public void onCopySuggestion(String text) {
3314851f9e1ad82f87bad3e7c88880be2936b242dd2John Reck        mUrlInput.setText(text, true);
332513286f421ad4aadc4d016d455ea7c520a0f2f59Michael Kolb        if (text != null) {
33331d469bca6f6d5a8b444b7dac8038a1b75cd7e43Michael Kolb            mUrlInput.setSelection(text.length());
334513286f421ad4aadc4d016d455ea7c520a0f2f59Michael Kolb        }
335513286f421ad4aadc4d016d455ea7c520a0f2f59Michael Kolb    }
336513286f421ad4aadc4d016d455ea7c520a0f2f59Michael Kolb
3377cdc4906fc5852297a9a254c3251ad2f4dead6eeMichael Kolb    private void setEditMode(boolean edit) {
33847171d85e40b3d89e347f950d157036f6b0c1d8dMichael Kolb        if (edit) {
33931d469bca6f6d5a8b444b7dac8038a1b75cd7e43Michael Kolb            mUrlInput.setDropDownWidth(mUrlContainer.getWidth());
34031d469bca6f6d5a8b444b7dac8038a1b75cd7e43Michael Kolb            mUrlInput.setDropDownHorizontalOffset(-mUrlInput.getLeft());
341b7b115e301334f813275aa13e7a2cc27bf15fe6aMichael Kolb            mSearchButton.setVisibility(View.GONE);
34231d469bca6f6d5a8b444b7dac8038a1b75cd7e43Michael Kolb            mStar.setVisibility(View.GONE);
34331d469bca6f6d5a8b444b7dac8038a1b75cd7e43Michael Kolb            mClearButton.setVisibility(View.VISIBLE);
344cfa3af5c59abb38c895416a80ef16da0ec1b5287Michael Kolb            if (mInVoiceMode) {
345cfa3af5c59abb38c895416a80ef16da0ec1b5287Michael Kolb                mVoiceSearchIndicator.setVisibility(View.VISIBLE);
346cfa3af5c59abb38c895416a80ef16da0ec1b5287Michael Kolb            }
3475b2299cc2fd9c8ca9c8ea2574d15dc867fa1e793Michael Kolb            mWebIcon.setImageResource(R.drawable.ic_search_holo_dark);
34831d469bca6f6d5a8b444b7dac8038a1b75cd7e43Michael Kolb            updateSearchMode();
349b7b115e301334f813275aa13e7a2cc27bf15fe6aMichael Kolb        } else {
350b7b115e301334f813275aa13e7a2cc27bf15fe6aMichael Kolb            mGoButton.setVisibility(View.GONE);
35131d469bca6f6d5a8b444b7dac8038a1b75cd7e43Michael Kolb            mVoiceSearch.setVisibility(View.GONE);
35231d469bca6f6d5a8b444b7dac8038a1b75cd7e43Michael Kolb            mStar.setVisibility(View.VISIBLE);
35331d469bca6f6d5a8b444b7dac8038a1b75cd7e43Michael Kolb            mClearButton.setVisibility(View.GONE);
354cfa3af5c59abb38c895416a80ef16da0ec1b5287Michael Kolb            mVoiceSearchIndicator.setVisibility(View.GONE);
355376b54116e38b3b94c4d64663d1bff38352b0e59Michael Kolb            if (mUseQuickControls) {
356376b54116e38b3b94c4d64663d1bff38352b0e59Michael Kolb                mSearchButton.setVisibility(View.GONE);
357376b54116e38b3b94c4d64663d1bff38352b0e59Michael Kolb            } else {
358376b54116e38b3b94c4d64663d1bff38352b0e59Michael Kolb                mSearchButton.setVisibility(View.VISIBLE);
359376b54116e38b3b94c4d64663d1bff38352b0e59Michael Kolb            }
3605b2299cc2fd9c8ca9c8ea2574d15dc867fa1e793Michael Kolb            mWebIcon.setImageResource(R.drawable.ic_web_holo_dark);
361b7b115e301334f813275aa13e7a2cc27bf15fe6aMichael Kolb        }
362b7b115e301334f813275aa13e7a2cc27bf15fe6aMichael Kolb    }
363b7b115e301334f813275aa13e7a2cc27bf15fe6aMichael Kolb
364a2b2ba8da913f26c820e49d3e43158e2fe6ebebaMichael Kolb    private void stopOrRefresh() {
365a2b2ba8da913f26c820e49d3e43158e2fe6ebebaMichael Kolb        if (mInLoad) {
3668233facddcc51865d612a919d450db6954aa48e3Michael Kolb            mUiController.stopLoading();
367571b3762a5eb9e492283e0a1e437edd209fdc0deLeon Scroggins        } else {
3688233facddcc51865d612a919d450db6954aa48e3Michael Kolb            mUiController.getCurrentTopWebView().reload();
369571b3762a5eb9e492283e0a1e437edd209fdc0deLeon Scroggins        }
370571b3762a5eb9e492283e0a1e437edd209fdc0deLeon Scroggins    }
371571b3762a5eb9e492283e0a1e437edd209fdc0deLeon Scroggins
372571b3762a5eb9e492283e0a1e437edd209fdc0deLeon Scroggins    /**
373a2b2ba8da913f26c820e49d3e43158e2fe6ebebaMichael Kolb     * Update the progress, from 0 to 100.
374fe25199a6f975c67d28afcc1de56b0f987b66cd8Michael Kolb     */
375fe25199a6f975c67d28afcc1de56b0f987b66cd8Michael Kolb    @Override
376a2b2ba8da913f26c820e49d3e43158e2fe6ebebaMichael Kolb    void setProgress(int newProgress) {
377bd018d44c193f7afe5f3c0839766ff1ab19712b9Michael Kolb        boolean blockvisuals = mUseQuickControls && isEditingUrl();
378a2b2ba8da913f26c820e49d3e43158e2fe6ebebaMichael Kolb        if (newProgress >= PROGRESS_MAX) {
379bd018d44c193f7afe5f3c0839766ff1ab19712b9Michael Kolb            if (!blockvisuals) {
380bd018d44c193f7afe5f3c0839766ff1ab19712b9Michael Kolb                mProgressView.setProgress(PageProgressView.MAX_PROGRESS);
381bd018d44c193f7afe5f3c0839766ff1ab19712b9Michael Kolb                mProgressView.setVisibility(View.GONE);
382bd018d44c193f7afe5f3c0839766ff1ab19712b9Michael Kolb                mStopButton.setImageDrawable(mReloadDrawable);
383bd018d44c193f7afe5f3c0839766ff1ab19712b9Michael Kolb            }
384a2b2ba8da913f26c820e49d3e43158e2fe6ebebaMichael Kolb            mInLoad = false;
385a2b2ba8da913f26c820e49d3e43158e2fe6ebebaMichael Kolb        } else {
386a2b2ba8da913f26c820e49d3e43158e2fe6ebebaMichael Kolb            if (!mInLoad) {
387bd018d44c193f7afe5f3c0839766ff1ab19712b9Michael Kolb                if (!blockvisuals) {
388bd018d44c193f7afe5f3c0839766ff1ab19712b9Michael Kolb                    mProgressView.setVisibility(View.VISIBLE);
389bd018d44c193f7afe5f3c0839766ff1ab19712b9Michael Kolb                    mStopButton.setImageDrawable(mStopDrawable);
390bd018d44c193f7afe5f3c0839766ff1ab19712b9Michael Kolb                }
391a2b2ba8da913f26c820e49d3e43158e2fe6ebebaMichael Kolb                mInLoad = true;
392fe25199a6f975c67d28afcc1de56b0f987b66cd8Michael Kolb            }
393b7b115e301334f813275aa13e7a2cc27bf15fe6aMichael Kolb            mProgressView.setProgress(newProgress * PageProgressView.MAX_PROGRESS
394b7b115e301334f813275aa13e7a2cc27bf15fe6aMichael Kolb                    / PROGRESS_MAX);
395fe25199a6f975c67d28afcc1de56b0f987b66cd8Michael Kolb        }
396fe25199a6f975c67d28afcc1de56b0f987b66cd8Michael Kolb    }
397fe25199a6f975c67d28afcc1de56b0f987b66cd8Michael Kolb
39831d469bca6f6d5a8b444b7dac8038a1b75cd7e43Michael Kolb    private void updateSearchMode() {
39931d469bca6f6d5a8b444b7dac8038a1b75cd7e43Michael Kolb        setSearchMode(TextUtils.isEmpty(mUrlInput.getText()));
40031d469bca6f6d5a8b444b7dac8038a1b75cd7e43Michael Kolb    }
40131d469bca6f6d5a8b444b7dac8038a1b75cd7e43Michael Kolb
40231d469bca6f6d5a8b444b7dac8038a1b75cd7e43Michael Kolb    private void setSearchMode(boolean voiceSearchEnabled) {
403793e05e5f64dba439922304e3b95c29969b36fd5Michael Kolb        SearchEngine searchEngine = BrowserSettings.getInstance()
404793e05e5f64dba439922304e3b95c29969b36fd5Michael Kolb                .getSearchEngine();
405793e05e5f64dba439922304e3b95c29969b36fd5Michael Kolb        boolean showvoicebutton = voiceSearchEnabled &&
406793e05e5f64dba439922304e3b95c29969b36fd5Michael Kolb                (searchEngine != null && searchEngine.supportsVoiceSearch());
407793e05e5f64dba439922304e3b95c29969b36fd5Michael Kolb        mVoiceSearch.setVisibility(showvoicebutton ? View.VISIBLE :
40831d469bca6f6d5a8b444b7dac8038a1b75cd7e43Michael Kolb                View.GONE);
40931d469bca6f6d5a8b444b7dac8038a1b75cd7e43Michael Kolb        mGoButton.setVisibility(voiceSearchEnabled ? View.GONE :
41031d469bca6f6d5a8b444b7dac8038a1b75cd7e43Michael Kolb                View.VISIBLE);
41131d469bca6f6d5a8b444b7dac8038a1b75cd7e43Michael Kolb    }
41231d469bca6f6d5a8b444b7dac8038a1b75cd7e43Michael Kolb
413fe25199a6f975c67d28afcc1de56b0f987b66cd8Michael Kolb    @Override
414a2b2ba8da913f26c820e49d3e43158e2fe6ebebaMichael Kolb    /* package */ void setDisplayTitle(String title) {
4154851f9e1ad82f87bad3e7c88880be2936b242dd2John Reck        if (!isEditingUrl()) {
4164851f9e1ad82f87bad3e7c88880be2936b242dd2John Reck            mUrlInput.setText(title, false);
4174851f9e1ad82f87bad3e7c88880be2936b242dd2John Reck        }
4187b20ddd4f03d59cca8fdd4aee790784421570aabMichael Kolb    }
4197b20ddd4f03d59cca8fdd4aee790784421570aabMichael Kolb
42031d469bca6f6d5a8b444b7dac8038a1b75cd7e43Michael Kolb    // UrlInput text watcher
4214cd97793901e8f5681cf642d0b2684697964a37aLeon Scroggins
42231d469bca6f6d5a8b444b7dac8038a1b75cd7e43Michael Kolb    @Override
42331d469bca6f6d5a8b444b7dac8038a1b75cd7e43Michael Kolb    public void afterTextChanged(Editable s) {
42431d469bca6f6d5a8b444b7dac8038a1b75cd7e43Michael Kolb        if (mUrlInput.hasFocus()) {
42581b6f83b7032f22fdaaa514afda2448f801b73daMichael Kolb            // check if input field is empty and adjust voice search state
42631d469bca6f6d5a8b444b7dac8038a1b75cd7e43Michael Kolb            updateSearchMode();
427cfa3af5c59abb38c895416a80ef16da0ec1b5287Michael Kolb            // clear voice mode when user types
428cfa3af5c59abb38c895416a80ef16da0ec1b5287Michael Kolb            setInVoiceMode(false, null);
4294cd97793901e8f5681cf642d0b2684697964a37aLeon Scroggins        }
43031d469bca6f6d5a8b444b7dac8038a1b75cd7e43Michael Kolb    }
4314cd97793901e8f5681cf642d0b2684697964a37aLeon Scroggins
43231d469bca6f6d5a8b444b7dac8038a1b75cd7e43Michael Kolb    @Override
43331d469bca6f6d5a8b444b7dac8038a1b75cd7e43Michael Kolb    public void beforeTextChanged(CharSequence s, int start, int count, int after) {
43431d469bca6f6d5a8b444b7dac8038a1b75cd7e43Michael Kolb    }
4354cd97793901e8f5681cf642d0b2684697964a37aLeon Scroggins
43631d469bca6f6d5a8b444b7dac8038a1b75cd7e43Michael Kolb    @Override
43731d469bca6f6d5a8b444b7dac8038a1b75cd7e43Michael Kolb    public void onTextChanged(CharSequence s, int start, int before, int count) {
4384cd97793901e8f5681cf642d0b2684697964a37aLeon Scroggins    }
43931d469bca6f6d5a8b444b7dac8038a1b75cd7e43Michael Kolb
440cfa3af5c59abb38c895416a80ef16da0ec1b5287Michael Kolb    // voicesearch
441cfa3af5c59abb38c895416a80ef16da0ec1b5287Michael Kolb
442cfa3af5c59abb38c895416a80ef16da0ec1b5287Michael Kolb    @Override
443cfa3af5c59abb38c895416a80ef16da0ec1b5287Michael Kolb    public void setInVoiceMode(boolean voicemode) {
444cfa3af5c59abb38c895416a80ef16da0ec1b5287Michael Kolb        setInVoiceMode(voicemode, null);
445cfa3af5c59abb38c895416a80ef16da0ec1b5287Michael Kolb    }
446cfa3af5c59abb38c895416a80ef16da0ec1b5287Michael Kolb
447cfa3af5c59abb38c895416a80ef16da0ec1b5287Michael Kolb    public void setInVoiceMode(boolean voicemode, List<String> voiceResults) {
448cfa3af5c59abb38c895416a80ef16da0ec1b5287Michael Kolb        mInVoiceMode = voicemode;
449cfa3af5c59abb38c895416a80ef16da0ec1b5287Michael Kolb        mUrlInput.setVoiceResults(voiceResults);
450cfa3af5c59abb38c895416a80ef16da0ec1b5287Michael Kolb        mVoiceSearchIndicator.setVisibility(mInVoiceMode
451cfa3af5c59abb38c895416a80ef16da0ec1b5287Michael Kolb                ? View.VISIBLE : View.GONE);
452cfa3af5c59abb38c895416a80ef16da0ec1b5287Michael Kolb    }
453cfa3af5c59abb38c895416a80ef16da0ec1b5287Michael Kolb
454117f07d08e3e25e3c920a1dabe31dcd7643bacb2John Reck    @Override
455117f07d08e3e25e3c920a1dabe31dcd7643bacb2John Reck    void setIncognitoMode(boolean incognito) {
456117f07d08e3e25e3c920a1dabe31dcd7643bacb2John Reck        mUrlInput.setIncognitoMode(incognito);
457117f07d08e3e25e3c920a1dabe31dcd7643bacb2John Reck    }
45847171d85e40b3d89e347f950d157036f6b0c1d8dMichael Kolb
459571b3762a5eb9e492283e0a1e437edd209fdc0deLeon Scroggins}
460