Home | History | Annotate | Download | only in browser
      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