diff options
Diffstat (limited to 'src/com/android/browser/NavigationBarTablet.java')
| -rw-r--r-- | src/com/android/browser/NavigationBarTablet.java | 236 |
1 files changed, 236 insertions, 0 deletions
diff --git a/src/com/android/browser/NavigationBarTablet.java b/src/com/android/browser/NavigationBarTablet.java new file mode 100644 index 000000000..b7b3ed956 --- /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()); + } + } + +} |
