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 60 public PieControlXLarge(Activity activity, UiController controller, BaseUi ui) { 61 super(activity, controller); 62 mUiController = controller; 63 mUi = ui; 64 } 65 66 @Override 67 protected void attachToContainer(FrameLayout container) { 68 super.attachToContainer(container); 69 mPie.setUseBackground(true); 70 } 71 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 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 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 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 168 public MenuAdapter(Context ctx, UiController ctl) { 169 mUiController = ctl; 170 mInflater = LayoutInflater.from(ctx); 171 mItems = new ArrayList<MenuItem>(); 172 } 173 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 186 public int getCount() { 187 return mItems.size(); 188 } 189 190 @Override 191 public MenuItem getItem(int position) { 192 return mItems.get(position); 193 } 194 195 @Override 196 public long getItemId(int position) { 197 return position; 198 } 199 200 @Override 201 public void onClick(View v) { 202 if (v.getTag() != null) { 203 mUiController.onOptionsItemSelected((MenuItem) v.getTag()); 204 } 205 } 206 207 @Override 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