TitleBar refactor
Change-Id: I0a2df041529143c8e0ff17af341376a3f827be04
diff --git a/src/com/android/browser/NavigationBarTablet.java b/src/com/android/browser/NavigationBarTablet.java
new file mode 100644
index 0000000..b7b3ed9
--- /dev/null
+++ b/src/com/android/browser/NavigationBarTablet.java
@@ -0,0 +1,236 @@
+/*
+ * Copyright (C) 2011 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package com.android.browser;
+
+import android.content.Context;
+import android.content.res.Resources;
+import android.graphics.drawable.Drawable;
+import android.text.TextUtils;
+import android.util.AttributeSet;
+import android.view.View;
+import android.webkit.WebView;
+import android.widget.ImageButton;
+import android.widget.ImageView;
+
+import java.util.List;
+
+public class NavigationBarTablet extends NavigationBarBase {
+
+ private Drawable mStopDrawable;
+ private Drawable mReloadDrawable;
+
+ private View mUrlContainer;
+ private ImageButton mBackButton;
+ private ImageButton mForwardButton;
+ private ImageView mStar;
+ private ImageView mUrlIcon;
+ private ImageView mSearchButton;
+ private View mGoButton;
+ private ImageView mStopButton;
+ private View mAllButton;
+ private View mClearButton;
+ private ImageView mVoiceSearch;
+ private Drawable mFocusDrawable;
+ private Drawable mUnfocusDrawable;
+
+ public NavigationBarTablet(Context context) {
+ super(context);
+ init(context);
+ }
+
+ public NavigationBarTablet(Context context, AttributeSet attrs) {
+ super(context, attrs);
+ init(context);
+ }
+
+ public NavigationBarTablet(Context context, AttributeSet attrs, int defStyle) {
+ super(context, attrs, defStyle);
+ init(context);
+ }
+
+ private void init(Context context) {
+ Resources resources = context.getResources();
+ mStopDrawable = resources.getDrawable(R.drawable.ic_stop_holo_dark);
+ mReloadDrawable = resources.getDrawable(R.drawable.ic_refresh_holo_dark);
+ mFocusDrawable = resources.getDrawable(
+ R.drawable.textfield_active_holo_dark);
+ mUnfocusDrawable = resources.getDrawable(
+ R.drawable.textfield_default_holo_dark);
+ }
+
+ @Override
+ protected void onFinishInflate() {
+ super.onFinishInflate();
+ mAllButton = findViewById(R.id.all_btn);
+ // TODO: Change enabled states based on whether you can go
+ // back/forward. Probably should be done inside onPageStarted.
+ mBackButton = (ImageButton) findViewById(R.id.back);
+ mForwardButton = (ImageButton) findViewById(R.id.forward);
+ mUrlIcon = (ImageView) findViewById(R.id.url_icon);
+ mStar = (ImageView) findViewById(R.id.star);
+ mStopButton = (ImageView) findViewById(R.id.stop);
+ mSearchButton = (ImageView) findViewById(R.id.search);
+ mGoButton = findViewById(R.id.go);
+ mClearButton = findViewById(R.id.clear);
+ mVoiceSearch = (ImageView) findViewById(R.id.voicesearch);
+ mUrlContainer = findViewById(R.id.urlbar_focused);
+ mBackButton.setOnClickListener(this);
+ mForwardButton.setOnClickListener(this);
+ mStar.setOnClickListener(this);
+ mAllButton.setOnClickListener(this);
+ mStopButton.setOnClickListener(this);
+ mSearchButton.setOnClickListener(this);
+ mGoButton.setOnClickListener(this);
+ mClearButton.setOnClickListener(this);
+ mVoiceSearch.setOnClickListener(this);
+ setUaSwitcher(mUrlIcon);
+ mUrlInput.setContainer(mUrlContainer);
+ }
+
+ @Override
+ public void setTitleBar(TitleBar titleBar) {
+ super.setTitleBar(titleBar);
+ setFocusState(false);
+ }
+
+ void updateNavigationState(Tab tab) {
+ WebView web = tab.getWebView();
+ if (web != null) {
+ mBackButton.setImageResource(web.canGoBack()
+ ? R.drawable.ic_back_holo_dark
+ : R.drawable.ic_back_disabled_holo_dark);
+ mForwardButton.setImageResource(web.canGoForward()
+ ? R.drawable.ic_forward_holo_dark
+ : R.drawable.ic_forward_disabled_holo_dark);
+ }
+ updateUrlIcon();
+ }
+
+ @Override
+ public void setCurrentUrlIsBookmark(boolean isBookmark) {
+ mStar.setActivated(isBookmark);
+ }
+
+ @Override
+ public void onClick(View v) {
+ if (mBackButton == v) {
+ mUiController.getCurrentTopWebView().goBack();
+ } else if (mForwardButton == v) {
+ mUiController.getCurrentTopWebView().goForward();
+ } else if (mStar == v) {
+ mUiController.bookmarkCurrentPage(true);
+ } else if (mAllButton == v) {
+ mUiController.bookmarksOrHistoryPicker(false);
+ } else if (mSearchButton == v) {
+ mBaseUi.editUrl(true);
+ } else if (mStopButton == v) {
+ stopOrRefresh();
+ } else if (mGoButton == v) {
+ if (!TextUtils.isEmpty(mUrlInput.getText())) {
+ onAction(mUrlInput.getText().toString(), null,
+ UrlInputView.TYPED);
+ }
+ } else if (mClearButton == v) {
+ clearOrClose();
+ } else if (mVoiceSearch == v) {
+ mUiController.startVoiceSearch();
+ } else {
+ super.onClick(v);
+ }
+ }
+
+ private void clearOrClose() {
+ if (TextUtils.isEmpty(mUrlInput.getUserText())) {
+ // close
+ mUrlInput.clearFocus();
+ } else {
+ // clear
+ mUrlInput.setText("");
+ }
+ }
+
+ void updateUrlIcon() {
+ mUrlIcon.setImageResource(mInVoiceMode ?
+ R.drawable.ic_search_holo_dark
+ : R.drawable.ic_web_holo_dark);
+ }
+
+ @Override
+ protected void setFocusState(boolean focus) {
+ super.setFocusState(focus);
+ if (focus) {
+ mSearchButton.setVisibility(View.GONE);
+ mStar.setVisibility(View.GONE);
+ mClearButton.setVisibility(View.VISIBLE);
+ mUrlIcon.setImageResource(R.drawable.ic_search_holo_dark);
+ updateSearchMode(false);
+ } else {
+ mGoButton.setVisibility(View.GONE);
+ mVoiceSearch.setVisibility(View.GONE);
+ mStar.setVisibility(View.VISIBLE);
+ mClearButton.setVisibility(View.GONE);
+ if (mTitleBar.useQuickControls()) {
+ mSearchButton.setVisibility(View.GONE);
+ } else {
+ mSearchButton.setVisibility(View.VISIBLE);
+ }
+ updateUrlIcon();
+ }
+ mUrlContainer.setBackgroundDrawable(focus
+ ? mFocusDrawable : mUnfocusDrawable);
+ }
+
+ private void stopOrRefresh() {
+ if (mTitleBar.isInLoad()) {
+ mUiController.stopLoading();
+ } else {
+ mUiController.getCurrentTopWebView().reload();
+ }
+ }
+
+ @Override
+ public void onProgressStarted() {
+ mStopButton.setImageDrawable(mStopDrawable);
+ }
+
+ @Override
+ public void onProgressStopped() {
+ mStopButton.setImageDrawable(mReloadDrawable);
+ }
+
+ protected void updateSearchMode(boolean userEdited) {
+ setSearchMode(!userEdited || TextUtils.isEmpty(mUrlInput.getUserText()));
+ }
+
+ @Override
+ protected void setSearchMode(boolean voiceSearchEnabled) {
+ boolean showvoicebutton = voiceSearchEnabled &&
+ mUiController.supportsVoiceSearch();
+ mVoiceSearch.setVisibility(showvoicebutton ? View.VISIBLE :
+ View.GONE);
+ mGoButton.setVisibility(voiceSearchEnabled ? View.GONE :
+ View.VISIBLE);
+ }
+
+ @Override
+ public void setInVoiceMode(boolean voicemode, List<String> voiceResults) {
+ super.setInVoiceMode(voicemode, voiceResults);
+ if (voicemode) {
+ mUrlIcon.setImageDrawable(mSearchButton.getDrawable());
+ }
+ }
+
+}