• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  * Copyright (C) 2011 The Android Open Source Project
3  *
4  * Licensed under the Apache License, Version 2.0 (the "License");
5  * you may not use this file except in compliance with the License.
6  * You may obtain a copy of the License at
7  *
8  *      http://www.apache.org/licenses/LICENSE-2.0
9  *
10  * Unless required by applicable law or agreed to in writing, software
11  * distributed under the License is distributed on an "AS IS" BASIS,
12  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13  * See the License for the specific language governing permissions and
14  * limitations under the License.
15  */
16 package com.android.browser;
17 
18 import android.app.Activity;
19 import android.content.Context;
20 import android.content.res.Resources;
21 import android.graphics.drawable.Drawable;
22 import android.util.AttributeSet;
23 import android.view.Menu;
24 import android.view.MenuItem;
25 import android.view.View;
26 import android.view.ViewConfiguration;
27 import android.webkit.WebView;
28 import android.widget.ImageView;
29 import android.widget.PopupMenu;
30 import android.widget.PopupMenu.OnDismissListener;
31 import android.widget.PopupMenu.OnMenuItemClickListener;
32 
33 import com.android.browser.UrlInputView.StateListener;
34 
35 public class NavigationBarPhone extends NavigationBarBase implements
36         StateListener, OnMenuItemClickListener, OnDismissListener {
37 
38     private ImageView mStopButton;
39     private ImageView mVoiceButton;
40     private ImageView mMagnify;
41     private ImageView mClearButton;
42     private Drawable mStopDrawable;
43     private Drawable mRefreshDrawable;
44     private String mStopDescription;
45     private String mRefreshDescription;
46     private View mTabSwitcher;
47     private View mComboIcon;
48     private View mTitleContainer;
49     private View mMore;
50     private Drawable mTextfieldBgDrawable;
51     private PopupMenu mPopupMenu;
52     private boolean mOverflowMenuShowing;
53     private boolean mNeedsMenu;
54     private View mIncognitoIcon;
55 
NavigationBarPhone(Context context)56     public NavigationBarPhone(Context context) {
57         super(context);
58     }
59 
NavigationBarPhone(Context context, AttributeSet attrs)60     public NavigationBarPhone(Context context, AttributeSet attrs) {
61         super(context, attrs);
62     }
63 
NavigationBarPhone(Context context, AttributeSet attrs, int defStyle)64     public NavigationBarPhone(Context context, AttributeSet attrs, int defStyle) {
65         super(context, attrs, defStyle);
66     }
67 
68     @Override
onFinishInflate()69     protected void onFinishInflate() {
70         super.onFinishInflate();
71         mStopButton = (ImageView) findViewById(R.id.stop);
72         mStopButton.setOnClickListener(this);
73         mVoiceButton = (ImageView) findViewById(R.id.voice);
74         mVoiceButton.setOnClickListener(this);
75         mClearButton = (ImageView) findViewById(R.id.clear);
76         mClearButton.setOnClickListener(this);
77         mMagnify = (ImageView) findViewById(R.id.magnify);
78         mTabSwitcher = findViewById(R.id.tab_switcher);
79         mTabSwitcher.setOnClickListener(this);
80         mMore = findViewById(R.id.more);
81         mMore.setOnClickListener(this);
82         mComboIcon = findViewById(R.id.iconcombo);
83         mComboIcon.setOnClickListener(this);
84         mTitleContainer = findViewById(R.id.title_bg);
85         setFocusState(false);
86         Resources res = getContext().getResources();
87         mStopDrawable = res.getDrawable(R.drawable.ic_stop_holo_dark);
88         mRefreshDrawable = res.getDrawable(R.drawable.ic_refresh_holo_dark);
89         mStopDescription = res.getString(R.string.accessibility_button_stop);
90         mRefreshDescription = res.getString(R.string.accessibility_button_refresh);
91         mTextfieldBgDrawable = res.getDrawable(R.drawable.textfield_active_holo_dark);
92         mUrlInput.setContainer(this);
93         mUrlInput.setStateListener(this);
94         mNeedsMenu = !ViewConfiguration.get(getContext()).hasPermanentMenuKey();
95         mIncognitoIcon = findViewById(R.id.incognito_icon);
96     }
97 
98     @Override
setSearchMode(boolean voiceSearchEnabled)99     protected void setSearchMode(boolean voiceSearchEnabled) {
100         boolean showvoicebutton = voiceSearchEnabled &&
101                 mUiController.supportsVoiceSearch();
102         mVoiceButton.setVisibility(showvoicebutton ? View.VISIBLE :
103                 View.GONE);
104     }
105 
106     @Override
onProgressStarted()107     public void onProgressStarted() {
108         super.onProgressStarted();
109         if (mStopButton.getDrawable() != mStopDrawable) {
110             mStopButton.setImageDrawable(mStopDrawable);
111             mStopButton.setContentDescription(mStopDescription);
112             if (mStopButton.getVisibility() != View.VISIBLE) {
113                 mComboIcon.setVisibility(View.GONE);
114                 mStopButton.setVisibility(View.VISIBLE);
115             }
116         }
117     }
118 
119     @Override
onProgressStopped()120     public void onProgressStopped() {
121         super.onProgressStopped();
122         mStopButton.setImageDrawable(mRefreshDrawable);
123         mStopButton.setContentDescription(mRefreshDescription);
124         if (!isEditingUrl()) {
125             mComboIcon.setVisibility(View.VISIBLE);
126         }
127         onStateChanged(mUrlInput.getState());
128     }
129 
130     /**
131      * Update the text displayed in the title bar.
132      * @param title String to display.  If null, the new tab string will be
133      *      shown.
134      */
135     @Override
setDisplayTitle(String title)136     void setDisplayTitle(String title) {
137         mUrlInput.setTag(title);
138         if (!isEditingUrl()) {
139             if (title == null) {
140                 mUrlInput.setText(R.string.new_tab);
141             } else {
142                 mUrlInput.setText(UrlUtils.stripUrl(title), false);
143             }
144             mUrlInput.setSelection(0);
145         }
146     }
147 
148     @Override
onClick(View v)149     public void onClick(View v) {
150         if (v == mStopButton) {
151             if (mTitleBar.isInLoad()) {
152                 mUiController.stopLoading();
153             } else {
154                 WebView web = mBaseUi.getWebView();
155                 if (web != null) {
156                     stopEditingUrl();
157                     web.reload();
158                 }
159             }
160         } else if (v == mVoiceButton) {
161             mUiController.startVoiceSearch();
162         } else if (v == mTabSwitcher) {
163             ((PhoneUi) mBaseUi).toggleNavScreen();
164         } else if (mMore == v) {
165             showMenu(mMore);
166         } else if (mClearButton == v) {
167             mUrlInput.setText("");
168         } else if (mComboIcon == v) {
169             mUiController.showPageInfo();
170         } else {
171             super.onClick(v);
172         }
173     }
174 
175     @Override
isMenuShowing()176     public boolean isMenuShowing() {
177         return super.isMenuShowing() || mOverflowMenuShowing;
178     }
179 
showMenu(View anchor)180     void showMenu(View anchor) {
181         Activity activity = mUiController.getActivity();
182         if (mPopupMenu == null) {
183             mPopupMenu = new PopupMenu(mContext, anchor);
184             mPopupMenu.setOnMenuItemClickListener(this);
185             mPopupMenu.setOnDismissListener(this);
186             if (!activity.onCreateOptionsMenu(mPopupMenu.getMenu())) {
187                 mPopupMenu = null;
188                 return;
189             }
190         }
191         Menu menu = mPopupMenu.getMenu();
192         if (activity.onPrepareOptionsMenu(menu)) {
193             mOverflowMenuShowing = true;
194             mPopupMenu.show();
195         }
196     }
197 
198     @Override
onDismiss(PopupMenu menu)199     public void onDismiss(PopupMenu menu) {
200         if (menu == mPopupMenu) {
201             onMenuHidden();
202         }
203     }
204 
onMenuHidden()205     private void onMenuHidden() {
206         mOverflowMenuShowing = false;
207         mBaseUi.showTitleBarForDuration();
208     }
209 
210     @Override
onFocusChange(View view, boolean hasFocus)211     public void onFocusChange(View view, boolean hasFocus) {
212         if (view == mUrlInput) {
213             if (hasFocus && !mUrlInput.getText().toString().equals(mUrlInput.getTag())) {
214                 // only change text if different
215                 mUrlInput.setText((String) mUrlInput.getTag(), false);
216             } else {
217                 setDisplayTitle(mUrlInput.getText().toString());
218             }
219         }
220         super.onFocusChange(view, hasFocus);
221     }
222 
223     @Override
onStateChanged(int state)224     public void onStateChanged(int state) {
225         switch(state) {
226         case StateListener.STATE_NORMAL:
227             mComboIcon.setVisibility(View.VISIBLE);
228             mStopButton.setVisibility(View.GONE);
229             mClearButton.setVisibility(View.GONE);
230             mMagnify.setVisibility(View.GONE);
231             setSearchMode(mInVoiceMode);
232             mTabSwitcher.setVisibility(View.VISIBLE);
233             mTitleContainer.setBackgroundDrawable(null);
234             mMore.setVisibility(mNeedsMenu ? View.VISIBLE : View.GONE);
235             break;
236         case StateListener.STATE_HIGHLIGHTED:
237             mComboIcon.setVisibility(View.GONE);
238             mStopButton.setVisibility(View.VISIBLE);
239             mClearButton.setVisibility(View.GONE);
240             mMagnify.setVisibility(View.GONE);
241             setSearchMode(true);
242             mTabSwitcher.setVisibility(View.GONE);
243             mMore.setVisibility(View.GONE);
244             mTitleContainer.setBackgroundDrawable(mTextfieldBgDrawable);
245             break;
246         case StateListener.STATE_EDITED:
247             mComboIcon.setVisibility(View.GONE);
248             mStopButton.setVisibility(View.GONE);
249             mClearButton.setVisibility(View.VISIBLE);
250             mMagnify.setVisibility(View.VISIBLE);
251             setSearchMode(false);
252             mTabSwitcher.setVisibility(View.GONE);
253             mMore.setVisibility(View.GONE);
254             mTitleContainer.setBackgroundDrawable(mTextfieldBgDrawable);
255             break;
256         }
257     }
258 
259     @Override
onTabDataChanged(Tab tab)260     public void onTabDataChanged(Tab tab) {
261         super.onTabDataChanged(tab);
262         mIncognitoIcon.setVisibility(tab.isPrivateBrowsingEnabled()
263                 ? View.VISIBLE : View.GONE);
264     }
265 
266     @Override
onMenuItemClick(MenuItem item)267     public boolean onMenuItemClick(MenuItem item) {
268         return mUiController.onOptionsItemSelected(item);
269     }
270 
271 }
272