blob: de5fb7f8501701d40d2056c94a69aedf78b18067 [file] [log] [blame]
Michael Kolb11d19782011-03-20 10:17:40 -07001/*
2 * Copyright (C) 2009 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
17package com.android.browser;
18
19import com.android.browser.autocomplete.SuggestedTextController.TextChangeWatcher;
Michael Kolb11d19782011-03-20 10:17:40 -070020
21import android.app.Activity;
22import android.content.Context;
Michael Kolb2814a362011-05-19 15:49:41 -070023import android.content.res.Resources;
24import android.graphics.drawable.Drawable;
Michael Kolb11d19782011-03-20 10:17:40 -070025import android.view.ContextMenu;
26import android.view.MenuInflater;
27import android.view.View;
28import android.view.View.OnClickListener;
29import android.view.View.OnFocusChangeListener;
Michael Kolb2814a362011-05-19 15:49:41 -070030import android.webkit.WebView;
Michael Kolbfdb70242011-03-24 09:41:11 -070031import android.widget.FrameLayout;
Michael Kolb2814a362011-05-19 15:49:41 -070032import android.widget.ImageButton;
Michael Kolb11d19782011-03-20 10:17:40 -070033import android.widget.ImageView;
34
35import java.util.List;
36
37/**
38 * This class represents a title bar for a particular "tab" or "window" in the
39 * browser.
40 */
41public class TitleBarPhone extends TitleBarBase implements OnFocusChangeListener,
42 OnClickListener, TextChangeWatcher {
43
44 private Activity mActivity;
Michael Kolbc16c5952011-03-29 15:37:03 -070045 private ImageView mStopButton;
Michael Kolb11d19782011-03-20 10:17:40 -070046 private ImageView mVoiceButton;
Michael Kolb11d19782011-03-20 10:17:40 -070047 private boolean mHasLockIcon;
Michael Kolb2814a362011-05-19 15:49:41 -070048 private ImageButton mForward;
49 private Drawable mStopDrawable;
50 private Drawable mRefreshDrawable;
Michael Kolb11d19782011-03-20 10:17:40 -070051
Michael Kolb46f987e2011-04-05 10:39:10 -070052 public TitleBarPhone(Activity activity, UiController controller, PhoneUi ui,
53 FrameLayout parent) {
54 super(activity, controller, ui, parent);
Michael Kolb11d19782011-03-20 10:17:40 -070055 mActivity = activity;
56 initLayout(activity, R.layout.title_bar);
57 }
58
59 @Override
60 protected void initLayout(Context context, int layoutId) {
61 super.initLayout(context, layoutId);
Michael Kolb11d19782011-03-20 10:17:40 -070062 mLockIcon = (ImageView) findViewById(R.id.lock);
63 mFavicon = (ImageView) findViewById(R.id.favicon);
Michael Kolbc16c5952011-03-29 15:37:03 -070064 mStopButton = (ImageView) findViewById(R.id.stop);
Michael Kolb11d19782011-03-20 10:17:40 -070065 mStopButton.setOnClickListener(this);
66 mVoiceButton = (ImageView) findViewById(R.id.voice);
67 mVoiceButton.setOnClickListener(this);
Michael Kolb2814a362011-05-19 15:49:41 -070068 mForward = (ImageButton) findViewById(R.id.forward);
69 mForward.setOnClickListener(this);
Michael Kolb11d19782011-03-20 10:17:40 -070070 setFocusState(false);
Michael Kolb2814a362011-05-19 15:49:41 -070071 Resources res = context.getResources();
72 mStopDrawable = res.getDrawable(R.drawable.ic_stop_holo_dark);
73 mRefreshDrawable = res.getDrawable(R.drawable.ic_refresh_holo_dark);
John Reck46500332011-06-07 14:36:10 -070074 setUaSwitcher(mFavicon);
John Reck67f33632011-06-17 16:23:42 -070075 mUrlInput.setContainer(this);
Michael Kolb11d19782011-03-20 10:17:40 -070076 }
77
78 @Override
Michael Kolb11d19782011-03-20 10:17:40 -070079 public void createContextMenu(ContextMenu menu) {
80 MenuInflater inflater = mActivity.getMenuInflater();
81 inflater.inflate(R.menu.title_context, menu);
82 mActivity.onCreateContextMenu(menu, this, null);
83 }
84
85 @Override
86 public void setInVoiceMode(boolean voicemode, List<String> voiceResults) {
87 super.setInVoiceMode(voicemode, voiceResults);
88 }
89
90 @Override
91 protected void setSearchMode(boolean voiceSearchEnabled) {
92 boolean showvoicebutton = voiceSearchEnabled &&
93 mUiController.supportsVoiceSearch();
94 mVoiceButton.setVisibility(showvoicebutton ? View.VISIBLE :
95 View.GONE);
96 }
97
98 @Override
99 protected void setFocusState(boolean focus) {
100 super.setFocusState(focus);
101 if (focus) {
102 mHasLockIcon = (mLockIcon.getVisibility() == View.VISIBLE);
Michael Kolb11d19782011-03-20 10:17:40 -0700103 mLockIcon.setVisibility(View.GONE);
104 mStopButton.setVisibility(View.GONE);
105 mVoiceButton.setVisibility(View.VISIBLE);
106 } else {
Michael Kolb11d19782011-03-20 10:17:40 -0700107 mLockIcon.setVisibility(mHasLockIcon ? View.VISIBLE : View.GONE);
Michael Kolb2814a362011-05-19 15:49:41 -0700108 mStopButton.setVisibility(View.VISIBLE);
Michael Kolb11d19782011-03-20 10:17:40 -0700109 mVoiceButton.setVisibility(View.GONE);
110 }
111 }
112
Michael Kolb11d19782011-03-20 10:17:40 -0700113 @Override
Michael Kolb2814a362011-05-19 15:49:41 -0700114 void setProgress(int progress) {
115 super.setProgress(progress);
116 if (progress == 100) {
117 mStopButton.setImageDrawable(mRefreshDrawable);
118 } else if (mStopButton.getDrawable() != mStopDrawable) {
119 mStopButton.setImageDrawable(mStopDrawable);
120 }
121 updateNavigationState();
122 }
123
Michael Kolb11d19782011-03-20 10:17:40 -0700124 /**
125 * Update the text displayed in the title bar.
126 * @param title String to display. If null, the new tab string will be
127 * shown.
128 */
129 @Override
130 void setDisplayTitle(String title) {
John Reck67f33632011-06-17 16:23:42 -0700131 if (!isEditingUrl()) {
132 if (title == null) {
133 mUrlInput.setText(R.string.new_tab);
134 } else {
135 mUrlInput.setText(title);
136 }
137 mUrlInput.setSelection(0);
138 updateNavigationState();
Michael Kolb11d19782011-03-20 10:17:40 -0700139 }
140 }
141
142 @Override
143 public void onFocusChange(View v, boolean hasFocus) {
144 if (v == mUrlInput) {
145 if (hasFocus) {
146 mActivity.closeOptionsMenu();
147 }
148 }
149 super.onFocusChange(v, hasFocus);
Michael Kolbf2055602011-04-09 17:20:03 -0700150 if (!hasFocus) {
Michael Kolbfdb70242011-03-24 09:41:11 -0700151 mBaseUi.hideTitleBar();
152 }
Michael Kolb11d19782011-03-20 10:17:40 -0700153 }
154
155 @Override
156 public void onClick(View v) {
157 if (v == mStopButton) {
Michael Kolb2814a362011-05-19 15:49:41 -0700158 if (mInLoad) {
159 mUiController.stopLoading();
160 } else {
161 WebView web = mBaseUi.getWebView();
162 if (web != null) {
163 web.reload();
164 }
165 }
Michael Kolb11d19782011-03-20 10:17:40 -0700166 } else if (v == mVoiceButton) {
167 mUiController.startVoiceSearch();
Michael Kolb2814a362011-05-19 15:49:41 -0700168 } else if (v == mForward) {
169 WebView web = mBaseUi.getWebView();
170 if (web != null) {
171 web.goForward();
172 }
Michael Kolb11d19782011-03-20 10:17:40 -0700173 } else {
174 super.onClick(v);
175 }
176 }
177
Michael Kolb2814a362011-05-19 15:49:41 -0700178 private void updateNavigationState() {
179 WebView web = mBaseUi.getWebView();
180 if (web != null) {
181 mForward.setVisibility(web.canGoForward() ? View.VISIBLE : View.GONE);
182 }
183 }
184
Michael Kolb11d19782011-03-20 10:17:40 -0700185}