NavigationBarPhone.java revision ef654f1dd80f55609060005342fc4f2cde62990c
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 */ 16package com.android.browser; 17 18import android.app.Activity; 19import android.content.Context; 20import android.content.res.Resources; 21import android.graphics.drawable.Drawable; 22import android.util.AttributeSet; 23import android.view.ContextMenu; 24import android.view.Menu; 25import android.view.MenuInflater; 26import android.view.MenuItem; 27import android.view.View; 28import android.view.ViewConfiguration; 29import android.webkit.WebView; 30import android.widget.ImageView; 31import android.widget.PopupMenu; 32import android.widget.PopupMenu.OnDismissListener; 33 34import com.android.browser.UrlInputView.StateListener; 35 36public class NavigationBarPhone extends NavigationBarBase implements 37 StateListener, OnDismissListener { 38 39 private ImageView mStopButton; 40 private ImageView mVoiceButton; 41 private Drawable mStopDrawable; 42 private Drawable mRefreshDrawable; 43 private View mTabSwitcher; 44 private View mComboIcon; 45 private View mTitleContainer; 46 private View mMore; 47 private Drawable mTextfieldBgDrawable; 48 private boolean mMenuShowing; 49 private boolean mNeedsMenu; 50 51 public NavigationBarPhone(Context context) { 52 super(context); 53 } 54 55 public NavigationBarPhone(Context context, AttributeSet attrs) { 56 super(context, attrs); 57 } 58 59 public NavigationBarPhone(Context context, AttributeSet attrs, int defStyle) { 60 super(context, attrs, defStyle); 61 } 62 63 @Override 64 protected void onFinishInflate() { 65 super.onFinishInflate(); 66 mStopButton = (ImageView) findViewById(R.id.stop); 67 mStopButton.setOnClickListener(this); 68 mVoiceButton = (ImageView) findViewById(R.id.voice); 69 mVoiceButton.setOnClickListener(this); 70 mTabSwitcher = findViewById(R.id.tab_switcher); 71 mTabSwitcher.setOnClickListener(this); 72 mMore = findViewById(R.id.more); 73 mMore.setOnClickListener(this); 74 mComboIcon = findViewById(R.id.iconcombo); 75 mTitleContainer = findViewById(R.id.title_bg); 76 setFocusState(false); 77 Resources res = getContext().getResources(); 78 mStopDrawable = res.getDrawable(R.drawable.ic_stop_holo_dark); 79 mRefreshDrawable = res.getDrawable(R.drawable.ic_refresh_holo_dark); 80 mTextfieldBgDrawable = res.getDrawable(R.drawable.textfield_active_holo_dark); 81 setUaSwitcher(mComboIcon); 82 mUrlInput.setContainer(this); 83 mUrlInput.setStateListener(this); 84 mNeedsMenu = !ViewConfiguration.get(getContext()).hasPermanentMenuKey(); 85 } 86 87 @Override 88 public void createContextMenu(ContextMenu menu) { 89 Activity activity = mBaseUi.getActivity(); 90 MenuInflater inflater = activity.getMenuInflater(); 91 inflater.inflate(R.menu.title_context, menu); 92 activity.onCreateContextMenu(menu, this, null); 93 } 94 95 @Override 96 protected void setSearchMode(boolean voiceSearchEnabled) { 97 boolean showvoicebutton = voiceSearchEnabled && 98 mUiController.supportsVoiceSearch(); 99 mVoiceButton.setVisibility(showvoicebutton ? View.VISIBLE : 100 View.GONE); 101 } 102 103 @Override 104 public void onProgressStarted() { 105 super.onProgressStarted(); 106 if (mStopButton.getDrawable() != mStopDrawable) { 107 mStopButton.setImageDrawable(mStopDrawable); 108 if (mStopButton.getVisibility() != View.VISIBLE) { 109 mComboIcon.setVisibility(View.GONE); 110 mStopButton.setVisibility(View.VISIBLE); 111 } 112 } 113 } 114 115 @Override 116 public void onProgressStopped() { 117 super.onProgressStopped(); 118 mStopButton.setVisibility(View.GONE); 119 mStopButton.setImageDrawable(mRefreshDrawable); 120 if (!isEditingUrl()) { 121 mComboIcon.setVisibility(View.VISIBLE); 122 } 123 } 124 125 /** 126 * Update the text displayed in the title bar. 127 * @param title String to display. If null, the new tab string will be 128 * shown. 129 */ 130 @Override 131 void setDisplayTitle(String title) { 132 if (!isEditingUrl()) { 133 if (title == null) { 134 mUrlInput.setText(R.string.new_tab); 135 } else { 136 mUrlInput.setText(title); 137 } 138 mUrlInput.setSelection(0); 139 } 140 } 141 142 @Override 143 public void onClick(View v) { 144 if (v == mStopButton) { 145 if (mTitleBar.isInLoad()) { 146 mUiController.stopLoading(); 147 } else { 148 WebView web = mBaseUi.getWebView(); 149 if (web != null) { 150 stopEditingUrl(); 151 web.reload(); 152 } 153 } 154 } else if (v == mVoiceButton) { 155 mUiController.startVoiceSearch(); 156 } else if (v == mTabSwitcher) { 157 mBaseUi.onMenuKey(); 158 } else if (mMore == v) { 159 showMenu(mMore); 160 } else { 161 super.onClick(v); 162 } 163 } 164 165 public boolean isMenuShowing() { 166 return mMenuShowing; 167 } 168 169 void showMenu(View anchor) { 170 mMenuShowing = true; 171 PopupMenu popup = new PopupMenu(mContext, anchor); 172 Menu menu = popup.getMenu(); 173 popup.getMenuInflater().inflate(R.menu.browser, menu); 174 menu.setGroupVisible(R.id.NAV_MENU, false); 175 popup.setOnMenuItemClickListener(this); 176 popup.setOnDismissListener(this); 177 popup.show(); 178 } 179 180 @Override 181 public void onDismiss(PopupMenu menu) { 182 onMenuHidden(); 183 } 184 185 @Override 186 public boolean onMenuItemClick(MenuItem item) { 187 onMenuHidden(); 188 boolean res = mUiController.onOptionsItemSelected(item); 189 if (!res) { 190 return super.onMenuItemClick(item); 191 } 192 return res; 193 } 194 195 private void onMenuHidden() { 196 mMenuShowing = false; 197 mBaseUi.showTitleBarForDuration(); 198 } 199 200 @Override 201 public void onStateChanged(int state) { 202 switch(state) { 203 case StateListener.STATE_NORMAL: 204 mComboIcon.setVisibility(View.VISIBLE); 205 mStopButton.setVisibility(View.GONE); 206 setSearchMode(false); 207 mTabSwitcher.setVisibility(View.VISIBLE); 208 mTitleContainer.setBackgroundDrawable(null); 209 mMore.setVisibility(mNeedsMenu ? View.VISIBLE : View.GONE); 210 break; 211 case StateListener.STATE_HIGHLIGHTED: 212 mComboIcon.setVisibility(View.GONE); 213 mStopButton.setVisibility(View.VISIBLE); 214 setSearchMode(true); 215 mTabSwitcher.setVisibility(View.GONE); 216 mMore.setVisibility(View.GONE); 217 mTitleContainer.setBackgroundDrawable(mTextfieldBgDrawable); 218 break; 219 case StateListener.STATE_EDITED: 220 mComboIcon.setVisibility(View.GONE); 221 mStopButton.setVisibility(View.GONE); 222 setSearchMode(false); 223 mTabSwitcher.setVisibility(View.GONE); 224 mMore.setVisibility(View.GONE); 225 mTitleContainer.setBackgroundDrawable(mTextfieldBgDrawable); 226 break; 227 } 228 } 229} 230