• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  * Copyright (C) 2010 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 
17 package com.android.browser;
18 
19 import android.app.Activity;
20 import android.content.Context;
21 import android.view.LayoutInflater;
22 import android.view.Menu;
23 import android.view.MenuItem;
24 import android.view.View;
25 import android.view.View.OnClickListener;
26 import android.view.ViewGroup;
27 import android.view.ViewGroup.LayoutParams;
28 import android.webkit.WebView;
29 import android.widget.BaseAdapter;
30 import android.widget.FrameLayout;
31 import android.widget.TextView;
32 
33 import com.android.browser.UI.ComboViews;
34 import com.android.browser.view.PieItem;
35 import com.android.browser.view.PieListView;
36 import com.android.browser.view.PieMenu.PieView.OnLayoutListener;
37 import com.android.browser.view.PieStackView;
38 
39 import java.util.ArrayList;
40 import java.util.List;
41 
42 /**
43  * controller for Quick Controls pie menu
44  */
45 public class PieControlXLarge extends PieControlBase implements OnClickListener {
46 
47     private BaseUi mUi;
48     private PieItem mBack;
49     private PieItem mForward;
50     private PieItem mRefresh;
51     private PieItem mUrl;
52     private PieItem mOptions;
53     private PieItem mBookmarks;
54     private PieItem mNewTab;
55     private PieItem mClose;
56     private MenuAdapter mMenuAdapter;
57     private PieItem mShowTabs;
58     private TabAdapter mTabAdapter;
59 
PieControlXLarge(Activity activity, UiController controller, BaseUi ui)60     public PieControlXLarge(Activity activity, UiController controller, BaseUi ui) {
61         super(activity, controller);
62         mUiController = controller;
63         mUi = ui;
64     }
65 
66     @Override
attachToContainer(FrameLayout container)67     protected void attachToContainer(FrameLayout container) {
68         super.attachToContainer(container);
69         mPie.setUseBackground(true);
70     }
71 
populateMenu()72     protected void populateMenu() {
73         mBack = makeItem(R.drawable.ic_back_holo_dark, 1);
74         mUrl = makeItem(R.drawable.ic_web_holo_dark, 1);
75         mBookmarks = makeItem(R.drawable.ic_bookmarks_holo_dark, 1);
76         mRefresh = makeItem(R.drawable.ic_refresh_holo_dark, 2);
77         mForward = makeItem(R.drawable.ic_forward_holo_dark, 2);
78         mNewTab = makeItem(R.drawable.ic_new_window_holo_dark, 2);
79         mClose = makeItem(R.drawable.ic_close_window_holo_dark, 2);
80         View tabs = makeTabsView();
81         mShowTabs = new PieItem(tabs, 2);
82         mOptions = makeItem(com.android.internal.R.drawable.ic_menu_moreoverflow_normal_holo_dark,
83                                         2);
84         mMenuAdapter = new MenuAdapter(mActivity, mUiController);
85         mTabAdapter = new TabAdapter(mActivity, mUiController);
86         PieStackView stack = new PieStackView(mActivity);
87         stack.setLayoutListener(new OnLayoutListener() {
88             @Override
89             public void onLayout(int ax, int ay, boolean left) {
90                 buildTabs();
91             }
92         });
93         stack.setOnCurrentListener(mTabAdapter);
94         stack.setAdapter(mTabAdapter);
95         mShowTabs.setPieView(stack);
96         PieListView menuview = new PieListView(mActivity);
97         menuview.setLayoutListener(new OnLayoutListener() {
98             @Override
99             public void onLayout(int ax, int ay, boolean left) {
100                 buildMenu();
101             }
102         });
103 
104         mOptions.setPieView(menuview);
105         menuview.setAdapter(mMenuAdapter);
106         setClickListener(this, mBack, mRefresh, mForward, mUrl, mBookmarks, mNewTab,
107                 mClose);
108         // level 1
109         mPie.addItem(mBack);
110         mPie.addItem(mUrl);
111         mPie.addItem(mBookmarks);
112         // level 2
113         mPie.addItem(mForward);
114         mPie.addItem(mRefresh);
115         mPie.addItem(mOptions);
116         mPie.addItem(mShowTabs);
117         mPie.addItem(mNewTab);
118         mPie.addItem(mClose);
119     }
120 
buildTabs()121     private void buildTabs() {
122         final List<Tab> tabs = mUiController.getTabs();
123         mUi.getActiveTab().capture();
124         mTabAdapter.setTabs(tabs);
125         PieStackView sym = (PieStackView) mShowTabs.getPieView();
126         sym.setCurrent(mUiController.getTabControl().getCurrentPosition());
127     }
128 
buildMenu()129     private void buildMenu() {
130         Menu menu = mUi.getMenu();
131         menu.setGroupVisible(R.id.NAV_MENU, false);
132         mMenuAdapter.setMenu(menu);
133     }
134 
135     @Override
onClick(View v)136     public void onClick(View v) {
137         Tab tab = mUiController.getTabControl().getCurrentTab();
138         WebView web = tab.getWebView();
139         if (mBack.getView() == v) {
140             tab.goBack();
141         } else if (mForward.getView() == v) {
142             tab.goForward();
143         } else if (mRefresh.getView() == v) {
144             if (tab.inPageLoad()) {
145                 web.stopLoading();
146             } else {
147                 web.reload();
148             }
149         } else if (mUrl.getView() == v) {
150             mUi.editUrl(false);
151         } else if (mBookmarks.getView() == v) {
152             mUiController.bookmarksOrHistoryPicker(ComboViews.Bookmarks);
153         } else if (mNewTab.getView() == v) {
154             mUiController.openTabToHomePage();
155             mUi.editUrl(false);
156         } else if (mClose.getView() == v) {
157             mUiController.closeCurrentTab();
158         }
159     }
160 
161     private static class MenuAdapter extends BaseAdapter
162             implements OnClickListener {
163 
164         List<MenuItem> mItems;
165         UiController mUiController;
166         LayoutInflater mInflater;
167 
MenuAdapter(Context ctx, UiController ctl)168         public MenuAdapter(Context ctx, UiController ctl) {
169             mUiController = ctl;
170             mInflater = LayoutInflater.from(ctx);
171             mItems = new ArrayList<MenuItem>();
172         }
173 
setMenu(Menu menu)174         public void setMenu(Menu menu) {
175             mItems.clear();
176             for (int i = 0; i < menu.size(); i++) {
177                 MenuItem item = menu.getItem(i);
178                 if (item.isEnabled() && item.isVisible()) {
179                     mItems.add(item);
180                 }
181             }
182             notifyDataSetChanged();
183         }
184 
185         @Override
getCount()186         public int getCount() {
187             return mItems.size();
188         }
189 
190         @Override
getItem(int position)191         public MenuItem getItem(int position) {
192             return mItems.get(position);
193         }
194 
195         @Override
getItemId(int position)196         public long getItemId(int position) {
197             return position;
198         }
199 
200         @Override
onClick(View v)201         public void onClick(View v) {
202             if (v.getTag() != null) {
203                 mUiController.onOptionsItemSelected((MenuItem) v.getTag());
204             }
205         }
206 
207         @Override
getView(int position, View convertView, ViewGroup parent)208         public View getView(int position, View convertView, ViewGroup parent) {
209             final MenuItem item = mItems.get(position);
210             View view = mInflater.inflate(
211                     R.layout.qc_menu_item, null);
212             TextView label =
213                     (TextView) view.findViewById(R.id.title);
214             label.setText(item.getTitle());
215             label.setTag(item);
216             label.setOnClickListener(this);
217             label.setLayoutParams(new LayoutParams(240, 32));
218             return label;
219         }
220 
221     }
222 
223 }
224