NavigationBarTablet.java revision cfa3af5c59abb38c895416a80ef16da0ec1b5287
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; 20c7485ae06c6d5d33c57a03d02bbeed54edb3c66fMichael Kolb 218233facddcc51865d612a919d450db6954aa48e3Michael Kolbimport android.app.Activity; 22fe25199a6f975c67d28afcc1de56b0f987b66cd8Michael Kolbimport android.app.SearchManager; 23571b3762a5eb9e492283e0a1e437edd209fdc0deLeon Scrogginsimport android.content.Context; 24fe25199a6f975c67d28afcc1de56b0f987b66cd8Michael Kolbimport android.content.Intent; 25571b3762a5eb9e492283e0a1e437edd209fdc0deLeon Scrogginsimport android.content.res.Resources; 26fe25199a6f975c67d28afcc1de56b0f987b66cd8Michael Kolbimport android.graphics.Bitmap; 27571b3762a5eb9e492283e0a1e437edd209fdc0deLeon Scrogginsimport android.graphics.drawable.Drawable; 28257cc2c8fcdd7117317e89861d4509955a622be8Michael Kolbimport android.os.Bundle; 2931d469bca6f6d5a8b444b7dac8038a1b75cd7e43Michael Kolbimport android.text.Editable; 301ce7813e6a0e42510fc1b3db5f5bb35999e1e87aMichael Kolbimport android.text.TextUtils; 3131d469bca6f6d5a8b444b7dac8038a1b75cd7e43Michael Kolbimport android.text.TextWatcher; 32571b3762a5eb9e492283e0a1e437edd209fdc0deLeon Scrogginsimport android.view.LayoutInflater; 33571b3762a5eb9e492283e0a1e437edd209fdc0deLeon Scrogginsimport android.view.View; 34a2b2ba8da913f26c820e49d3e43158e2fe6ebebaMichael Kolbimport android.view.View.OnClickListener; 3531d469bca6f6d5a8b444b7dac8038a1b75cd7e43Michael Kolbimport android.view.View.OnFocusChangeListener; 36b6bc32c9c6ed3ec90d602a729a7bfa7741896cf4Michael Kolbimport android.webkit.WebView; 37571b3762a5eb9e492283e0a1e437edd209fdc0deLeon Scrogginsimport android.widget.ImageView; 38571b3762a5eb9e492283e0a1e437edd209fdc0deLeon Scroggins 39cfa3af5c59abb38c895416a80ef16da0ec1b5287Michael Kolbimport java.util.List; 40cfa3af5c59abb38c895416a80ef16da0ec1b5287Michael Kolb 41571b3762a5eb9e492283e0a1e437edd209fdc0deLeon Scroggins/** 42fe25199a6f975c67d28afcc1de56b0f987b66cd8Michael Kolb * tabbed title bar for xlarge screen browser 43571b3762a5eb9e492283e0a1e437edd209fdc0deLeon Scroggins */ 44fe25199a6f975c67d28afcc1de56b0f987b66cd8Michael Kolbpublic class TitleBarXLarge extends TitleBarBase 4531d469bca6f6d5a8b444b7dac8038a1b75cd7e43Michael Kolb implements UrlInputListener, OnClickListener, OnFocusChangeListener, 4631d469bca6f6d5a8b444b7dac8038a1b75cd7e43Michael Kolb TextWatcher { 47fe25199a6f975c67d28afcc1de56b0f987b66cd8Michael Kolb 48fe25199a6f975c67d28afcc1de56b0f987b66cd8Michael Kolb private static final int PROGRESS_MAX = 100; 49fe25199a6f975c67d28afcc1de56b0f987b66cd8Michael Kolb 508233facddcc51865d612a919d450db6954aa48e3Michael Kolb private UiController mUiController; 516670653d355fea0ae20dc51f6c693f994c4cbb54Michael Kolb private XLargeUi mUi; 528233facddcc51865d612a919d450db6954aa48e3Michael Kolb 53a2b2ba8da913f26c820e49d3e43158e2fe6ebebaMichael Kolb private Drawable mStopDrawable; 54a2b2ba8da913f26c820e49d3e43158e2fe6ebebaMichael Kolb private Drawable mReloadDrawable; 55c7485ae06c6d5d33c57a03d02bbeed54edb3c66fMichael Kolb 563f65c3831ff82a20f6f0edb08df2d7edae540044Michael Kolb private View mContainer; 57a2b2ba8da913f26c820e49d3e43158e2fe6ebebaMichael Kolb private View mBackButton; 58a2b2ba8da913f26c820e49d3e43158e2fe6ebebaMichael Kolb private View mForwardButton; 5931d469bca6f6d5a8b444b7dac8038a1b75cd7e43Michael Kolb private ImageView mStar; 60a2b2ba8da913f26c820e49d3e43158e2fe6ebebaMichael Kolb private View mSearchButton; 6131d469bca6f6d5a8b444b7dac8038a1b75cd7e43Michael Kolb private View mUrlContainer; 62513286f421ad4aadc4d016d455ea7c520a0f2f59Michael Kolb private View mGoButton; 63a2b2ba8da913f26c820e49d3e43158e2fe6ebebaMichael Kolb private ImageView mStopButton; 64a2b2ba8da913f26c820e49d3e43158e2fe6ebebaMichael Kolb private View mAllButton; 65b7b115e301334f813275aa13e7a2cc27bf15fe6aMichael Kolb private View mClearButton; 6631d469bca6f6d5a8b444b7dac8038a1b75cd7e43Michael Kolb private View mVoiceSearch; 67cfa3af5c59abb38c895416a80ef16da0ec1b5287Michael Kolb private View mVoiceSearchIndicator; 68c7485ae06c6d5d33c57a03d02bbeed54edb3c66fMichael Kolb private PageProgressView mProgressView; 6931d469bca6f6d5a8b444b7dac8038a1b75cd7e43Michael Kolb private UrlInputView mUrlInput; 70cfa3af5c59abb38c895416a80ef16da0ec1b5287Michael Kolb private Drawable mFocusDrawable; 71cfa3af5c59abb38c895416a80ef16da0ec1b5287Michael Kolb private Drawable mUnfocusDrawable; 72cfa3af5c59abb38c895416a80ef16da0ec1b5287Michael Kolb private boolean mInVoiceMode; 7381b6f83b7032f22fdaaa514afda2448f801b73daMichael Kolb 74a2b2ba8da913f26c820e49d3e43158e2fe6ebebaMichael Kolb private boolean mInLoad; 75cfa3af5c59abb38c895416a80ef16da0ec1b5287Michael Kolb private boolean mEditable; 76a2b2ba8da913f26c820e49d3e43158e2fe6ebebaMichael Kolb 7781b6f83b7032f22fdaaa514afda2448f801b73daMichael Kolb public TitleBarXLarge(Activity activity, UiController controller, 786670653d355fea0ae20dc51f6c693f994c4cbb54Michael Kolb XLargeUi ui) { 798233facddcc51865d612a919d450db6954aa48e3Michael Kolb super(activity); 808233facddcc51865d612a919d450db6954aa48e3Michael Kolb mUiController = controller; 8181b6f83b7032f22fdaaa514afda2448f801b73daMichael Kolb mUi = ui; 828233facddcc51865d612a919d450db6954aa48e3Michael Kolb Resources resources = activity.getResources(); 83c7485ae06c6d5d33c57a03d02bbeed54edb3c66fMichael Kolb mStopDrawable = resources.getDrawable(R.drawable.ic_stop_normal); 84c7485ae06c6d5d33c57a03d02bbeed54edb3c66fMichael Kolb mReloadDrawable = resources.getDrawable(R.drawable.ic_refresh_normal); 85cfa3af5c59abb38c895416a80ef16da0ec1b5287Michael Kolb mFocusDrawable = resources.getDrawable( 86cfa3af5c59abb38c895416a80ef16da0ec1b5287Michael Kolb R.drawable.textfield_active_holo_dark); 87cfa3af5c59abb38c895416a80ef16da0ec1b5287Michael Kolb mUnfocusDrawable = resources.getDrawable( 88cfa3af5c59abb38c895416a80ef16da0ec1b5287Michael Kolb R.drawable.textfield_default_holo_dark); 898233facddcc51865d612a919d450db6954aa48e3Michael Kolb rebuildLayout(activity, true); 90cfa3af5c59abb38c895416a80ef16da0ec1b5287Michael Kolb mInVoiceMode = false; 91fe25199a6f975c67d28afcc1de56b0f987b66cd8Michael Kolb } 92571b3762a5eb9e492283e0a1e437edd209fdc0deLeon Scroggins 93fe25199a6f975c67d28afcc1de56b0f987b66cd8Michael Kolb private void rebuildLayout(Context context, boolean rebuildData) { 94fe25199a6f975c67d28afcc1de56b0f987b66cd8Michael Kolb LayoutInflater factory = LayoutInflater.from(context); 95a2b2ba8da913f26c820e49d3e43158e2fe6ebebaMichael Kolb factory.inflate(R.layout.url_bar, this); 96571b3762a5eb9e492283e0a1e437edd209fdc0deLeon Scroggins 973f65c3831ff82a20f6f0edb08df2d7edae540044Michael Kolb mContainer = findViewById(R.id.taburlbar); 9831d469bca6f6d5a8b444b7dac8038a1b75cd7e43Michael Kolb mUrlInput = (UrlInputView) findViewById(R.id.url_focused); 99fe25199a6f975c67d28afcc1de56b0f987b66cd8Michael Kolb mAllButton = findViewById(R.id.all_btn); 100fe25199a6f975c67d28afcc1de56b0f987b66cd8Michael Kolb // TODO: Change enabled states based on whether you can go 101571b3762a5eb9e492283e0a1e437edd209fdc0deLeon Scroggins // back/forward. Probably should be done inside onPageStarted. 102571b3762a5eb9e492283e0a1e437edd209fdc0deLeon Scroggins mBackButton = findViewById(R.id.back); 103571b3762a5eb9e492283e0a1e437edd209fdc0deLeon Scroggins mForwardButton = findViewById(R.id.forward); 10431d469bca6f6d5a8b444b7dac8038a1b75cd7e43Michael Kolb mStar = (ImageView) findViewById(R.id.star); 105a2b2ba8da913f26c820e49d3e43158e2fe6ebebaMichael Kolb mStopButton = (ImageView) findViewById(R.id.stop); 106a2b2ba8da913f26c820e49d3e43158e2fe6ebebaMichael Kolb mSearchButton = findViewById(R.id.search); 107a2b2ba8da913f26c820e49d3e43158e2fe6ebebaMichael Kolb mLockIcon = (ImageView) findViewById(R.id.lock); 108513286f421ad4aadc4d016d455ea7c520a0f2f59Michael Kolb mGoButton = findViewById(R.id.go); 109b7b115e301334f813275aa13e7a2cc27bf15fe6aMichael Kolb mClearButton = findViewById(R.id.clear); 11031d469bca6f6d5a8b444b7dac8038a1b75cd7e43Michael Kolb mVoiceSearch = findViewById(R.id.voicesearch); 111c7485ae06c6d5d33c57a03d02bbeed54edb3c66fMichael Kolb mProgressView = (PageProgressView) findViewById(R.id.progress); 11231d469bca6f6d5a8b444b7dac8038a1b75cd7e43Michael Kolb mUrlContainer = findViewById(R.id.urlbar_focused); 113cfa3af5c59abb38c895416a80ef16da0ec1b5287Michael Kolb mVoiceSearchIndicator = findViewById(R.id.voice_icon); 114a2b2ba8da913f26c820e49d3e43158e2fe6ebebaMichael Kolb mBackButton.setOnClickListener(this); 115a2b2ba8da913f26c820e49d3e43158e2fe6ebebaMichael Kolb mForwardButton.setOnClickListener(this); 116a2b2ba8da913f26c820e49d3e43158e2fe6ebebaMichael Kolb mStar.setOnClickListener(this); 117a2b2ba8da913f26c820e49d3e43158e2fe6ebebaMichael Kolb mAllButton.setOnClickListener(this); 118a2b2ba8da913f26c820e49d3e43158e2fe6ebebaMichael Kolb mStopButton.setOnClickListener(this); 119a2b2ba8da913f26c820e49d3e43158e2fe6ebebaMichael Kolb mSearchButton.setOnClickListener(this); 120513286f421ad4aadc4d016d455ea7c520a0f2f59Michael Kolb mGoButton.setOnClickListener(this); 121b7b115e301334f813275aa13e7a2cc27bf15fe6aMichael Kolb mClearButton.setOnClickListener(this); 122cfa3af5c59abb38c895416a80ef16da0ec1b5287Michael Kolb mVoiceSearch.setOnClickListener(this); 12331d469bca6f6d5a8b444b7dac8038a1b75cd7e43Michael Kolb mUrlContainer.setOnClickListener(this); 12431d469bca6f6d5a8b444b7dac8038a1b75cd7e43Michael Kolb mUrlInput.setUrlInputListener(this); 12531d469bca6f6d5a8b444b7dac8038a1b75cd7e43Michael Kolb mUrlInput.setContainer(mUrlContainer); 12631d469bca6f6d5a8b444b7dac8038a1b75cd7e43Michael Kolb mUrlInput.setController(mUiController); 12731d469bca6f6d5a8b444b7dac8038a1b75cd7e43Michael Kolb mUrlInput.setOnFocusChangeListener(this); 12831d469bca6f6d5a8b444b7dac8038a1b75cd7e43Michael Kolb mUrlInput.setSelectAllOnFocus(true); 12931d469bca6f6d5a8b444b7dac8038a1b75cd7e43Michael Kolb mUrlInput.addTextChangedListener(this); 13031d469bca6f6d5a8b444b7dac8038a1b75cd7e43Michael Kolb setUrlMode(false); 13131d469bca6f6d5a8b444b7dac8038a1b75cd7e43Michael Kolb } 13231d469bca6f6d5a8b444b7dac8038a1b75cd7e43Michael Kolb 133cfa3af5c59abb38c895416a80ef16da0ec1b5287Michael Kolb public void setEditable(boolean editable) { 134cfa3af5c59abb38c895416a80ef16da0ec1b5287Michael Kolb mEditable = editable; 135cfa3af5c59abb38c895416a80ef16da0ec1b5287Michael Kolb mUrlInput.setFocusable(mEditable); 136cfa3af5c59abb38c895416a80ef16da0ec1b5287Michael Kolb if (!mEditable) { 137cfa3af5c59abb38c895416a80ef16da0ec1b5287Michael Kolb mUrlInput.setOnClickListener(this); 138cfa3af5c59abb38c895416a80ef16da0ec1b5287Michael Kolb } else { 139cfa3af5c59abb38c895416a80ef16da0ec1b5287Michael Kolb mUrlContainer.setOnClickListener(null); 140cfa3af5c59abb38c895416a80ef16da0ec1b5287Michael Kolb } 141cfa3af5c59abb38c895416a80ef16da0ec1b5287Michael Kolb } 142cfa3af5c59abb38c895416a80ef16da0ec1b5287Michael Kolb 14331d469bca6f6d5a8b444b7dac8038a1b75cd7e43Michael Kolb @Override 14431d469bca6f6d5a8b444b7dac8038a1b75cd7e43Michael Kolb public void onFocusChange(View view, boolean hasFocus) { 145cfa3af5c59abb38c895416a80ef16da0ec1b5287Michael Kolb if (!mEditable && hasFocus) { 146cfa3af5c59abb38c895416a80ef16da0ec1b5287Michael Kolb mUi.editUrl(false); 147cfa3af5c59abb38c895416a80ef16da0ec1b5287Michael Kolb } else { 148cfa3af5c59abb38c895416a80ef16da0ec1b5287Michael Kolb setUrlMode(hasFocus); 149cfa3af5c59abb38c895416a80ef16da0ec1b5287Michael Kolb } 150cfa3af5c59abb38c895416a80ef16da0ec1b5287Michael Kolb mUrlContainer.setBackgroundDrawable(hasFocus 151cfa3af5c59abb38c895416a80ef16da0ec1b5287Michael Kolb ? mFocusDrawable : mUnfocusDrawable); 152c7485ae06c6d5d33c57a03d02bbeed54edb3c66fMichael Kolb } 153b7b115e301334f813275aa13e7a2cc27bf15fe6aMichael Kolb 1544cd97793901e8f5681cf642d0b2684697964a37aLeon Scroggins public void setCurrentUrlIsBookmark(boolean isBookmark) { 15531d469bca6f6d5a8b444b7dac8038a1b75cd7e43Michael Kolb mStar.setActivated(isBookmark); 1564cd97793901e8f5681cf642d0b2684697964a37aLeon Scroggins } 1574cd97793901e8f5681cf642d0b2684697964a37aLeon Scroggins 15881b6f83b7032f22fdaaa514afda2448f801b73daMichael Kolb /** 15981b6f83b7032f22fdaaa514afda2448f801b73daMichael Kolb * called from the Ui when the user wants to edit 16081b6f83b7032f22fdaaa514afda2448f801b73daMichael Kolb * Note: only the fake titlebar will get this callback 16181b6f83b7032f22fdaaa514afda2448f801b73daMichael Kolb * independent of which input field started the edit mode 16281b6f83b7032f22fdaaa514afda2448f801b73daMichael Kolb * @param clearInput clear the input field 16381b6f83b7032f22fdaaa514afda2448f801b73daMichael Kolb */ 16481b6f83b7032f22fdaaa514afda2448f801b73daMichael Kolb void onEditUrl(boolean clearInput) { 165cfa3af5c59abb38c895416a80ef16da0ec1b5287Michael Kolb if (!mUrlInput.hasFocus()) { 166cfa3af5c59abb38c895416a80ef16da0ec1b5287Michael Kolb mUrlInput.requestFocus(); 167cfa3af5c59abb38c895416a80ef16da0ec1b5287Michael Kolb } 16881b6f83b7032f22fdaaa514afda2448f801b73daMichael Kolb if (clearInput) { 16981b6f83b7032f22fdaaa514afda2448f801b73daMichael Kolb mUrlInput.setText(""); 170cfa3af5c59abb38c895416a80ef16da0ec1b5287Michael Kolb } else if (mInVoiceMode) { 171cfa3af5c59abb38c895416a80ef16da0ec1b5287Michael Kolb mUrlInput.showDropDown(); 17281b6f83b7032f22fdaaa514afda2448f801b73daMichael Kolb } 17381b6f83b7032f22fdaaa514afda2448f801b73daMichael Kolb } 17481b6f83b7032f22fdaaa514afda2448f801b73daMichael Kolb 17581b6f83b7032f22fdaaa514afda2448f801b73daMichael Kolb boolean isEditingUrl() { 17681b6f83b7032f22fdaaa514afda2448f801b73daMichael Kolb return mUrlInput.hasFocus(); 17781b6f83b7032f22fdaaa514afda2448f801b73daMichael Kolb } 17881b6f83b7032f22fdaaa514afda2448f801b73daMichael Kolb 179a2b2ba8da913f26c820e49d3e43158e2fe6ebebaMichael Kolb @Override 180a2b2ba8da913f26c820e49d3e43158e2fe6ebebaMichael Kolb public void onClick(View v) { 18181b6f83b7032f22fdaaa514afda2448f801b73daMichael Kolb if (mUrlInput == v) { 182cfa3af5c59abb38c895416a80ef16da0ec1b5287Michael Kolb mUi.editUrl(false); 183cfa3af5c59abb38c895416a80ef16da0ec1b5287Michael Kolb } else if (mUrlContainer == v) { 18481b6f83b7032f22fdaaa514afda2448f801b73daMichael Kolb if (!mUrlInput.hasFocus()) { 18581b6f83b7032f22fdaaa514afda2448f801b73daMichael Kolb mUi.editUrl(false); 18681b6f83b7032f22fdaaa514afda2448f801b73daMichael Kolb } 18781b6f83b7032f22fdaaa514afda2448f801b73daMichael Kolb } else if (mBackButton == v) { 1888233facddcc51865d612a919d450db6954aa48e3Michael Kolb mUiController.getCurrentTopWebView().goBack(); 189a2b2ba8da913f26c820e49d3e43158e2fe6ebebaMichael Kolb } else if (mForwardButton == v) { 1908233facddcc51865d612a919d450db6954aa48e3Michael Kolb mUiController.getCurrentTopWebView().goForward(); 191a2b2ba8da913f26c820e49d3e43158e2fe6ebebaMichael Kolb } else if (mStar == v) { 1928233facddcc51865d612a919d450db6954aa48e3Michael Kolb mUiController.bookmarkCurrentPage( 19388d080394ca18120e05c6926b178fd6843ff9cecLeon Scroggins AddBookmarkPage.DEFAULT_FOLDER_ID); 194a2b2ba8da913f26c820e49d3e43158e2fe6ebebaMichael Kolb } else if (mAllButton == v) { 1958233facddcc51865d612a919d450db6954aa48e3Michael Kolb mUiController.bookmarksOrHistoryPicker(false); 196a2b2ba8da913f26c820e49d3e43158e2fe6ebebaMichael Kolb } else if (mSearchButton == v) { 19781b6f83b7032f22fdaaa514afda2448f801b73daMichael Kolb mUi.editUrl(true); 198a2b2ba8da913f26c820e49d3e43158e2fe6ebebaMichael Kolb } else if (mStopButton == v) { 199a2b2ba8da913f26c820e49d3e43158e2fe6ebebaMichael Kolb stopOrRefresh(); 200513286f421ad4aadc4d016d455ea7c520a0f2f59Michael Kolb } else if (mGoButton == v) { 20131d469bca6f6d5a8b444b7dac8038a1b75cd7e43Michael Kolb if (!TextUtils.isEmpty(mUrlInput.getText())) { 20231d469bca6f6d5a8b444b7dac8038a1b75cd7e43Michael Kolb onAction(mUrlInput.getText().toString(), null, 203257cc2c8fcdd7117317e89861d4509955a622be8Michael Kolb UrlInputView.TYPED); 2041ce7813e6a0e42510fc1b3db5f5bb35999e1e87aMichael Kolb } 205b7b115e301334f813275aa13e7a2cc27bf15fe6aMichael Kolb } else if (mClearButton == v) { 20631d469bca6f6d5a8b444b7dac8038a1b75cd7e43Michael Kolb clearOrClose(); 207cfa3af5c59abb38c895416a80ef16da0ec1b5287Michael Kolb } else if (mVoiceSearch == v) { 208cfa3af5c59abb38c895416a80ef16da0ec1b5287Michael Kolb mUiController.startVoiceSearch(); 209fe25199a6f975c67d28afcc1de56b0f987b66cd8Michael Kolb } 210fe25199a6f975c67d28afcc1de56b0f987b66cd8Michael Kolb } 211fe25199a6f975c67d28afcc1de56b0f987b66cd8Michael Kolb 2123f65c3831ff82a20f6f0edb08df2d7edae540044Michael Kolb int getHeightWithoutProgress() { 2133f65c3831ff82a20f6f0edb08df2d7edae540044Michael Kolb return mContainer.getHeight(); 2143f65c3831ff82a20f6f0edb08df2d7edae540044Michael Kolb } 2153f65c3831ff82a20f6f0edb08df2d7edae540044Michael Kolb 216a2b2ba8da913f26c820e49d3e43158e2fe6ebebaMichael Kolb @Override 217a2b2ba8da913f26c820e49d3e43158e2fe6ebebaMichael Kolb void setFavicon(Bitmap icon) { } 218fe25199a6f975c67d28afcc1de56b0f987b66cd8Michael Kolb 21931d469bca6f6d5a8b444b7dac8038a1b75cd7e43Michael Kolb private void clearOrClose() { 22031d469bca6f6d5a8b444b7dac8038a1b75cd7e43Michael Kolb if (TextUtils.isEmpty(mUrlInput.getText())) { 22131d469bca6f6d5a8b444b7dac8038a1b75cd7e43Michael Kolb // close 22231d469bca6f6d5a8b444b7dac8038a1b75cd7e43Michael Kolb setUrlMode(false); 22331d469bca6f6d5a8b444b7dac8038a1b75cd7e43Michael Kolb } else { 22431d469bca6f6d5a8b444b7dac8038a1b75cd7e43Michael Kolb // clear 22531d469bca6f6d5a8b444b7dac8038a1b75cd7e43Michael Kolb mUrlInput.setText(""); 22631d469bca6f6d5a8b444b7dac8038a1b75cd7e43Michael Kolb } 22731d469bca6f6d5a8b444b7dac8038a1b75cd7e43Michael Kolb } 22831d469bca6f6d5a8b444b7dac8038a1b75cd7e43Michael Kolb 229fe25199a6f975c67d28afcc1de56b0f987b66cd8Michael Kolb // UrlInputListener implementation 230fe25199a6f975c67d28afcc1de56b0f987b66cd8Michael Kolb 23181b6f83b7032f22fdaaa514afda2448f801b73daMichael Kolb /** 23281b6f83b7032f22fdaaa514afda2448f801b73daMichael Kolb * callback from suggestion dropdown 23381b6f83b7032f22fdaaa514afda2448f801b73daMichael Kolb * user selected a suggestion 23481b6f83b7032f22fdaaa514afda2448f801b73daMichael Kolb */ 235fe25199a6f975c67d28afcc1de56b0f987b66cd8Michael Kolb @Override 236257cc2c8fcdd7117317e89861d4509955a622be8Michael Kolb public void onAction(String text, String extra, String source) { 2378233facddcc51865d612a919d450db6954aa48e3Michael Kolb mUiController.getCurrentTopWebView().requestFocus(); 2386670653d355fea0ae20dc51f6c693f994c4cbb54Michael Kolb mUi.hideFakeTitleBar(); 239fe25199a6f975c67d28afcc1de56b0f987b66cd8Michael Kolb Intent i = new Intent(); 240fe25199a6f975c67d28afcc1de56b0f987b66cd8Michael Kolb i.setAction(Intent.ACTION_SEARCH); 241fe25199a6f975c67d28afcc1de56b0f987b66cd8Michael Kolb i.putExtra(SearchManager.QUERY, text); 24240f720ecfd4ef7ebb657f0fc1906a9982b3bafbdJohn Reck if (extra != null) { 24340f720ecfd4ef7ebb657f0fc1906a9982b3bafbdJohn Reck i.putExtra(SearchManager.EXTRA_DATA_KEY, extra); 24440f720ecfd4ef7ebb657f0fc1906a9982b3bafbdJohn Reck } 245257cc2c8fcdd7117317e89861d4509955a622be8Michael Kolb if (source != null) { 246257cc2c8fcdd7117317e89861d4509955a622be8Michael Kolb Bundle appData = new Bundle(); 247257cc2c8fcdd7117317e89861d4509955a622be8Michael Kolb appData.putString(com.android.common.Search.SOURCE, source); 248257cc2c8fcdd7117317e89861d4509955a622be8Michael Kolb i.putExtra(SearchManager.APP_DATA, appData); 249257cc2c8fcdd7117317e89861d4509955a622be8Michael Kolb } 2508233facddcc51865d612a919d450db6954aa48e3Michael Kolb mUiController.handleNewIntent(i); 251b7b115e301334f813275aa13e7a2cc27bf15fe6aMichael Kolb setUrlMode(false); 252513286f421ad4aadc4d016d455ea7c520a0f2f59Michael Kolb setDisplayTitle(text); 253fe25199a6f975c67d28afcc1de56b0f987b66cd8Michael Kolb } 254fe25199a6f975c67d28afcc1de56b0f987b66cd8Michael Kolb 255fe25199a6f975c67d28afcc1de56b0f987b66cd8Michael Kolb @Override 256fe25199a6f975c67d28afcc1de56b0f987b66cd8Michael Kolb public void onDismiss() { 257b6bc32c9c6ed3ec90d602a729a7bfa7741896cf4Michael Kolb WebView top = mUiController.getCurrentTopWebView(); 258b6bc32c9c6ed3ec90d602a729a7bfa7741896cf4Michael Kolb if (top != null) { 259b6bc32c9c6ed3ec90d602a729a7bfa7741896cf4Michael Kolb mUiController.getCurrentTopWebView().requestFocus(); 260b6bc32c9c6ed3ec90d602a729a7bfa7741896cf4Michael Kolb } 2616670653d355fea0ae20dc51f6c693f994c4cbb54Michael Kolb mUi.hideFakeTitleBar(); 262b7b115e301334f813275aa13e7a2cc27bf15fe6aMichael Kolb setUrlMode(false); 263b6bc32c9c6ed3ec90d602a729a7bfa7741896cf4Michael Kolb // if top != null current must be set 264cfa3af5c59abb38c895416a80ef16da0ec1b5287Michael Kolb if ((top != null) && !mInVoiceMode) { 265b6bc32c9c6ed3ec90d602a729a7bfa7741896cf4Michael Kolb setDisplayTitle(mUiController.getCurrentWebView().getUrl()); 266b6bc32c9c6ed3ec90d602a729a7bfa7741896cf4Michael Kolb } 267513286f421ad4aadc4d016d455ea7c520a0f2f59Michael Kolb } 268513286f421ad4aadc4d016d455ea7c520a0f2f59Michael Kolb 26981b6f83b7032f22fdaaa514afda2448f801b73daMichael Kolb /** 27081b6f83b7032f22fdaaa514afda2448f801b73daMichael Kolb * callback from the suggestion dropdown 27181b6f83b7032f22fdaaa514afda2448f801b73daMichael Kolb * copy text to input field and stay in edit mode 27281b6f83b7032f22fdaaa514afda2448f801b73daMichael Kolb */ 273513286f421ad4aadc4d016d455ea7c520a0f2f59Michael Kolb @Override 274513286f421ad4aadc4d016d455ea7c520a0f2f59Michael Kolb public void onEdit(String text) { 2757b20ddd4f03d59cca8fdd4aee790784421570aabMichael Kolb setDisplayTitle(text, true); 276513286f421ad4aadc4d016d455ea7c520a0f2f59Michael Kolb if (text != null) { 27731d469bca6f6d5a8b444b7dac8038a1b75cd7e43Michael Kolb mUrlInput.setSelection(text.length()); 278513286f421ad4aadc4d016d455ea7c520a0f2f59Michael Kolb } 279513286f421ad4aadc4d016d455ea7c520a0f2f59Michael Kolb } 280513286f421ad4aadc4d016d455ea7c520a0f2f59Michael Kolb 28181b6f83b7032f22fdaaa514afda2448f801b73daMichael Kolb void setUrlMode(boolean focused) { 282b7b115e301334f813275aa13e7a2cc27bf15fe6aMichael Kolb if (focused) { 28331d469bca6f6d5a8b444b7dac8038a1b75cd7e43Michael Kolb mUrlInput.setDropDownWidth(mUrlContainer.getWidth()); 28431d469bca6f6d5a8b444b7dac8038a1b75cd7e43Michael Kolb mUrlInput.setDropDownHorizontalOffset(-mUrlInput.getLeft()); 285b7b115e301334f813275aa13e7a2cc27bf15fe6aMichael Kolb mSearchButton.setVisibility(View.GONE); 28631d469bca6f6d5a8b444b7dac8038a1b75cd7e43Michael Kolb mStar.setVisibility(View.GONE); 28731d469bca6f6d5a8b444b7dac8038a1b75cd7e43Michael Kolb mClearButton.setVisibility(View.VISIBLE); 288cfa3af5c59abb38c895416a80ef16da0ec1b5287Michael Kolb if (mInVoiceMode) { 289cfa3af5c59abb38c895416a80ef16da0ec1b5287Michael Kolb mVoiceSearchIndicator.setVisibility(View.VISIBLE); 290cfa3af5c59abb38c895416a80ef16da0ec1b5287Michael Kolb } 29131d469bca6f6d5a8b444b7dac8038a1b75cd7e43Michael Kolb updateSearchMode(); 292b7b115e301334f813275aa13e7a2cc27bf15fe6aMichael Kolb } else { 29331d469bca6f6d5a8b444b7dac8038a1b75cd7e43Michael Kolb mUrlInput.clearFocus(); 294b7b115e301334f813275aa13e7a2cc27bf15fe6aMichael Kolb mSearchButton.setVisibility(View.VISIBLE); 295b7b115e301334f813275aa13e7a2cc27bf15fe6aMichael Kolb mGoButton.setVisibility(View.GONE); 29631d469bca6f6d5a8b444b7dac8038a1b75cd7e43Michael Kolb mVoiceSearch.setVisibility(View.GONE); 29731d469bca6f6d5a8b444b7dac8038a1b75cd7e43Michael Kolb mStar.setVisibility(View.VISIBLE); 29831d469bca6f6d5a8b444b7dac8038a1b75cd7e43Michael Kolb mClearButton.setVisibility(View.GONE); 299cfa3af5c59abb38c895416a80ef16da0ec1b5287Michael Kolb mVoiceSearchIndicator.setVisibility(View.GONE); 300b7b115e301334f813275aa13e7a2cc27bf15fe6aMichael Kolb } 301b7b115e301334f813275aa13e7a2cc27bf15fe6aMichael Kolb } 302b7b115e301334f813275aa13e7a2cc27bf15fe6aMichael Kolb 303a2b2ba8da913f26c820e49d3e43158e2fe6ebebaMichael Kolb private void stopOrRefresh() { 304a2b2ba8da913f26c820e49d3e43158e2fe6ebebaMichael Kolb if (mInLoad) { 3058233facddcc51865d612a919d450db6954aa48e3Michael Kolb mUiController.stopLoading(); 306571b3762a5eb9e492283e0a1e437edd209fdc0deLeon Scroggins } else { 3078233facddcc51865d612a919d450db6954aa48e3Michael Kolb mUiController.getCurrentTopWebView().reload(); 308571b3762a5eb9e492283e0a1e437edd209fdc0deLeon Scroggins } 309571b3762a5eb9e492283e0a1e437edd209fdc0deLeon Scroggins } 310571b3762a5eb9e492283e0a1e437edd209fdc0deLeon Scroggins 311571b3762a5eb9e492283e0a1e437edd209fdc0deLeon Scroggins /** 312a2b2ba8da913f26c820e49d3e43158e2fe6ebebaMichael Kolb * Update the progress, from 0 to 100. 313fe25199a6f975c67d28afcc1de56b0f987b66cd8Michael Kolb */ 314fe25199a6f975c67d28afcc1de56b0f987b66cd8Michael Kolb @Override 315a2b2ba8da913f26c820e49d3e43158e2fe6ebebaMichael Kolb void setProgress(int newProgress) { 316a2b2ba8da913f26c820e49d3e43158e2fe6ebebaMichael Kolb if (newProgress >= PROGRESS_MAX) { 317b7b115e301334f813275aa13e7a2cc27bf15fe6aMichael Kolb mProgressView.setProgress(PageProgressView.MAX_PROGRESS); 318a2b2ba8da913f26c820e49d3e43158e2fe6ebebaMichael Kolb mProgressView.setVisibility(View.GONE); 319a2b2ba8da913f26c820e49d3e43158e2fe6ebebaMichael Kolb mInLoad = false; 320a2b2ba8da913f26c820e49d3e43158e2fe6ebebaMichael Kolb mStopButton.setImageDrawable(mReloadDrawable); 321a2b2ba8da913f26c820e49d3e43158e2fe6ebebaMichael Kolb } else { 322a2b2ba8da913f26c820e49d3e43158e2fe6ebebaMichael Kolb if (!mInLoad) { 323a2b2ba8da913f26c820e49d3e43158e2fe6ebebaMichael Kolb mProgressView.setVisibility(View.VISIBLE); 324a2b2ba8da913f26c820e49d3e43158e2fe6ebebaMichael Kolb mInLoad = true; 325a2b2ba8da913f26c820e49d3e43158e2fe6ebebaMichael Kolb mStopButton.setImageDrawable(mStopDrawable); 326fe25199a6f975c67d28afcc1de56b0f987b66cd8Michael Kolb } 327b7b115e301334f813275aa13e7a2cc27bf15fe6aMichael Kolb mProgressView.setProgress(newProgress * PageProgressView.MAX_PROGRESS 328b7b115e301334f813275aa13e7a2cc27bf15fe6aMichael Kolb / PROGRESS_MAX); 329fe25199a6f975c67d28afcc1de56b0f987b66cd8Michael Kolb } 330fe25199a6f975c67d28afcc1de56b0f987b66cd8Michael Kolb } 331fe25199a6f975c67d28afcc1de56b0f987b66cd8Michael Kolb 33231d469bca6f6d5a8b444b7dac8038a1b75cd7e43Michael Kolb private void updateSearchMode() { 33331d469bca6f6d5a8b444b7dac8038a1b75cd7e43Michael Kolb setSearchMode(TextUtils.isEmpty(mUrlInput.getText())); 33431d469bca6f6d5a8b444b7dac8038a1b75cd7e43Michael Kolb } 33531d469bca6f6d5a8b444b7dac8038a1b75cd7e43Michael Kolb 33631d469bca6f6d5a8b444b7dac8038a1b75cd7e43Michael Kolb private void setSearchMode(boolean voiceSearchEnabled) { 33731d469bca6f6d5a8b444b7dac8038a1b75cd7e43Michael Kolb mVoiceSearch.setVisibility(voiceSearchEnabled ? View.VISIBLE : 33831d469bca6f6d5a8b444b7dac8038a1b75cd7e43Michael Kolb View.GONE); 33931d469bca6f6d5a8b444b7dac8038a1b75cd7e43Michael Kolb mGoButton.setVisibility(voiceSearchEnabled ? View.GONE : 34031d469bca6f6d5a8b444b7dac8038a1b75cd7e43Michael Kolb View.VISIBLE); 34131d469bca6f6d5a8b444b7dac8038a1b75cd7e43Michael Kolb } 34231d469bca6f6d5a8b444b7dac8038a1b75cd7e43Michael Kolb 343fe25199a6f975c67d28afcc1de56b0f987b66cd8Michael Kolb @Override 344a2b2ba8da913f26c820e49d3e43158e2fe6ebebaMichael Kolb /* package */ void setDisplayTitle(String title) { 34531d469bca6f6d5a8b444b7dac8038a1b75cd7e43Michael Kolb mUrlInput.setText(title, false); 346571b3762a5eb9e492283e0a1e437edd209fdc0deLeon Scroggins } 347571b3762a5eb9e492283e0a1e437edd209fdc0deLeon Scroggins 3487b20ddd4f03d59cca8fdd4aee790784421570aabMichael Kolb void setDisplayTitle(String title, boolean filter) { 34931d469bca6f6d5a8b444b7dac8038a1b75cd7e43Michael Kolb mUrlInput.setText(title, filter); 3507b20ddd4f03d59cca8fdd4aee790784421570aabMichael Kolb } 3517b20ddd4f03d59cca8fdd4aee790784421570aabMichael Kolb 35231d469bca6f6d5a8b444b7dac8038a1b75cd7e43Michael Kolb // UrlInput text watcher 3534cd97793901e8f5681cf642d0b2684697964a37aLeon Scroggins 35431d469bca6f6d5a8b444b7dac8038a1b75cd7e43Michael Kolb @Override 35531d469bca6f6d5a8b444b7dac8038a1b75cd7e43Michael Kolb public void afterTextChanged(Editable s) { 35631d469bca6f6d5a8b444b7dac8038a1b75cd7e43Michael Kolb if (mUrlInput.hasFocus()) { 35781b6f83b7032f22fdaaa514afda2448f801b73daMichael Kolb // check if input field is empty and adjust voice search state 35831d469bca6f6d5a8b444b7dac8038a1b75cd7e43Michael Kolb updateSearchMode(); 359cfa3af5c59abb38c895416a80ef16da0ec1b5287Michael Kolb // clear voice mode when user types 360cfa3af5c59abb38c895416a80ef16da0ec1b5287Michael Kolb setInVoiceMode(false, null); 3614cd97793901e8f5681cf642d0b2684697964a37aLeon Scroggins } 36231d469bca6f6d5a8b444b7dac8038a1b75cd7e43Michael Kolb } 3634cd97793901e8f5681cf642d0b2684697964a37aLeon Scroggins 36431d469bca6f6d5a8b444b7dac8038a1b75cd7e43Michael Kolb @Override 36531d469bca6f6d5a8b444b7dac8038a1b75cd7e43Michael Kolb public void beforeTextChanged(CharSequence s, int start, int count, int after) { 36631d469bca6f6d5a8b444b7dac8038a1b75cd7e43Michael Kolb } 3674cd97793901e8f5681cf642d0b2684697964a37aLeon Scroggins 36831d469bca6f6d5a8b444b7dac8038a1b75cd7e43Michael Kolb @Override 36931d469bca6f6d5a8b444b7dac8038a1b75cd7e43Michael Kolb public void onTextChanged(CharSequence s, int start, int before, int count) { 3704cd97793901e8f5681cf642d0b2684697964a37aLeon Scroggins } 37131d469bca6f6d5a8b444b7dac8038a1b75cd7e43Michael Kolb 372cfa3af5c59abb38c895416a80ef16da0ec1b5287Michael Kolb // voicesearch 373cfa3af5c59abb38c895416a80ef16da0ec1b5287Michael Kolb 374cfa3af5c59abb38c895416a80ef16da0ec1b5287Michael Kolb @Override 375cfa3af5c59abb38c895416a80ef16da0ec1b5287Michael Kolb public void setInVoiceMode(boolean voicemode) { 376cfa3af5c59abb38c895416a80ef16da0ec1b5287Michael Kolb setInVoiceMode(voicemode, null); 377cfa3af5c59abb38c895416a80ef16da0ec1b5287Michael Kolb } 378cfa3af5c59abb38c895416a80ef16da0ec1b5287Michael Kolb 379cfa3af5c59abb38c895416a80ef16da0ec1b5287Michael Kolb public void setInVoiceMode(boolean voicemode, List<String> voiceResults) { 380cfa3af5c59abb38c895416a80ef16da0ec1b5287Michael Kolb mInVoiceMode = voicemode; 381cfa3af5c59abb38c895416a80ef16da0ec1b5287Michael Kolb mUrlInput.setVoiceResults(voiceResults); 382cfa3af5c59abb38c895416a80ef16da0ec1b5287Michael Kolb mVoiceSearchIndicator.setVisibility(mInVoiceMode 383cfa3af5c59abb38c895416a80ef16da0ec1b5287Michael Kolb ? View.VISIBLE : View.GONE); 384cfa3af5c59abb38c895416a80ef16da0ec1b5287Michael Kolb } 385cfa3af5c59abb38c895416a80ef16da0ec1b5287Michael Kolb 386571b3762a5eb9e492283e0a1e437edd209fdc0deLeon Scroggins} 387