diff options
| author | Michael Kolb <kolby@google.com> | 2012-04-10 10:50:06 -0700 |
|---|---|---|
| committer | Michael Kolb <kolby@google.com> | 2012-04-11 16:22:56 -0700 |
| commit | 80f750852edf43c6b09e5633f2c6ebdb2ed94a5b (patch) | |
| tree | 03c7221422487fe91567b270200de3768a9bf800 /src/com/android/browser/PieControl.java | |
| parent | 9faa676ad7191d746b186c6b86a727c8fc9241f2 (diff) | |
Submenus in QuickControls
Change-Id: I5d4fe7fdac1fb58e2e89afe00c468eed632428db
Diffstat (limited to 'src/com/android/browser/PieControl.java')
| -rw-r--r-- | src/com/android/browser/PieControl.java | 329 |
1 files changed, 329 insertions, 0 deletions
diff --git a/src/com/android/browser/PieControl.java b/src/com/android/browser/PieControl.java new file mode 100644 index 00000000..68b0c7b9 --- /dev/null +++ b/src/com/android/browser/PieControl.java @@ -0,0 +1,329 @@ +/* + * Copyright (C) 2011 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.android.browser; + +import android.app.Activity; +import android.content.Context; +import android.graphics.Bitmap; +import android.view.LayoutInflater; +import android.view.View; +import android.view.View.OnClickListener; +import android.view.ViewGroup; +import android.view.ViewGroup.LayoutParams; +import android.webkit.WebView; +import android.widget.BaseAdapter; +import android.widget.FrameLayout; +import android.widget.ImageView; +import android.widget.ImageView.ScaleType; +import android.widget.TextView; + +import com.android.browser.UI.ComboViews; +import com.android.browser.view.PieItem; +import com.android.browser.view.PieMenu; +import com.android.browser.view.PieMenu.PieView.OnLayoutListener; +import com.android.browser.view.PieStackView; +import com.android.browser.view.PieStackView.OnCurrentListener; + +import java.util.ArrayList; +import java.util.List; + +/** + * Controller for Quick Controls pie menu + */ +public class PieControl implements PieMenu.PieController, OnClickListener { + + protected Activity mActivity; + protected UiController mUiController; + protected PieMenu mPie; + protected int mItemSize; + protected TextView mTabsCount; + private BaseUi mUi; + private PieItem mBack; + private PieItem mForward; + private PieItem mRefresh; + private PieItem mUrl; + private PieItem mOptions; + private PieItem mBookmarks; + private PieItem mHistory; + private PieItem mAddBookmark; + private PieItem mNewTab; + private PieItem mIncognito; + private PieItem mClose; + private PieItem mShowTabs; + private PieItem mInfo; + private PieItem mFind; + private PieItem mShare; + private PieItem mRDS; + private TabAdapter mTabAdapter; + + public PieControl(Activity activity, UiController controller, BaseUi ui) { + mActivity = activity; + mUiController = controller; + mItemSize = (int) activity.getResources().getDimension(R.dimen.qc_item_size); + mUi = ui; + } + + public void stopEditingUrl() { + mUi.stopEditingUrl(); + } + + protected void attachToContainer(FrameLayout container) { + if (mPie == null) { + mPie = new PieMenu(mActivity); + LayoutParams lp = new LayoutParams(LayoutParams.MATCH_PARENT, + LayoutParams.MATCH_PARENT); + mPie.setLayoutParams(lp); + populateMenu(); + mPie.setController(this); + } + container.addView(mPie); + } + + protected void removeFromContainer(FrameLayout container) { + container.removeView(mPie); + } + + protected void forceToTop(FrameLayout container) { + if (mPie.getParent() != null) { + container.removeView(mPie); + container.addView(mPie); + } + } + + protected void setClickListener(OnClickListener listener, PieItem... items) { + for (PieItem item : items) { + item.getView().setOnClickListener(listener); + } + } + + @Override + public boolean onOpen() { + int n = mUiController.getTabControl().getTabCount(); + mTabsCount.setText(Integer.toString(n)); + Tab tab = mUiController.getCurrentTab(); + mForward.setEnabled(tab.canGoForward()); + return true; + } + + protected void populateMenu() { + mBack = makeItem(R.drawable.ic_back_holo_dark, 1); + mUrl = makeItem(R.drawable.ic_web_holo_dark, 1); + mBookmarks = makeItem(R.drawable.ic_bookmarks_holo_dark, 1); + mHistory = makeItem(R.drawable.ic_history_holo_dark, 1); + mAddBookmark = makeItem(R.drawable.ic_bookmark_on_holo_dark, 1); + mRefresh = makeItem(R.drawable.ic_refresh_holo_dark, 1); + mForward = makeItem(R.drawable.ic_forward_holo_dark, 1); + mNewTab = makeItem(R.drawable.ic_new_window_holo_dark, 1); + mIncognito = makeItem(R.drawable.ic_new_incognito_holo_dark, 1); + mClose = makeItem(R.drawable.ic_close_window_holo_dark, 1); + mInfo = makeItem(android.R.drawable.ic_menu_info_details, 1); + mFind = makeItem(R.drawable.ic_search_holo_dark, 1); + mShare = makeItem(R.drawable.ic_share_holo_dark, 1); + View tabs = makeTabsView(); + mShowTabs = new PieItem(tabs, 1); + mOptions = makeItem(R.drawable.ic_settings_holo_dark, 1); + mRDS = makeItem(R.drawable.ic_desktop_holo_dark, 1); + mTabAdapter = new TabAdapter(mActivity, mUiController); + PieStackView stack = new PieStackView(mActivity); + stack.setLayoutListener(new OnLayoutListener() { + @Override + public void onLayout(int ax, int ay, boolean left) { + buildTabs(); + } + }); + stack.setOnCurrentListener(mTabAdapter); + stack.setAdapter(mTabAdapter); + mShowTabs.setPieView(stack); + setClickListener(this, mBack, mRefresh, mForward, mUrl, mFind, mInfo, + mShare, mBookmarks, mNewTab, mIncognito, mClose, mHistory, + mAddBookmark, mOptions, mRDS); + // level 1 + mPie.addItem(mOptions); + mOptions.addItem(mRDS); + mOptions.addItem(makeFiller()); + mOptions.addItem(makeFiller()); + mOptions.addItem(makeFiller()); + mPie.addItem(mBack); + mBack.addItem(mRefresh); + mBack.addItem(mForward); + mBack.addItem(makeFiller()); + mBack.addItem(makeFiller()); + mPie.addItem(mUrl); + mUrl.addItem(mFind); + mUrl.addItem(mShare); + mUrl.addItem(makeFiller()); + mUrl.addItem(makeFiller()); + mPie.addItem(mShowTabs); + mShowTabs.addItem(mClose); + mShowTabs.addItem(mIncognito); + mShowTabs.addItem(mNewTab); + mShowTabs.addItem(makeFiller()); + mPie.addItem(mBookmarks); + mBookmarks.addItem(makeFiller()); + mBookmarks.addItem(makeFiller()); + mBookmarks.addItem(mAddBookmark); + mBookmarks.addItem(mHistory); + } + + @Override + public void onClick(View v) { + Tab tab = mUiController.getTabControl().getCurrentTab(); + WebView web = tab.getWebView(); + if (mBack.getView() == v) { + tab.goBack(); + } else if (mForward.getView() == v) { + tab.goForward(); + } else if (mRefresh.getView() == v) { + if (tab.inPageLoad()) { + web.stopLoading(); + } else { + web.reload(); + } + } else if (mUrl.getView() == v) { + mUi.editUrl(false); + } else if (mBookmarks.getView() == v) { + mUiController.bookmarksOrHistoryPicker(ComboViews.Bookmarks); + } else if (mHistory.getView() == v) { + mUiController.bookmarksOrHistoryPicker(ComboViews.History); + } else if (mAddBookmark.getView() == v) { + mUiController.bookmarkCurrentPage(); + } else if (mNewTab.getView() == v) { + mUiController.openTabToHomePage(); + mUi.editUrl(false); + } else if (mIncognito.getView() == v) { + mUiController.openIncognitoTab(); + mUi.editUrl(false); + } else if (mClose.getView() == v) { + mUiController.closeCurrentTab(); + } else if (mOptions.getView() == v) { + mUiController.openPreferences(); + } else if (mShare.getView() == v) { + mUiController.shareCurrentPage(); + } else if (mInfo.getView() == v) { + mUiController.showPageInfo(); + } else if (mFind.getView() == v) { + mUiController.findOnPage(); + } else if (mRDS.getView() == v) { + mUiController.toggleUserAgent(); + } + } + + private void buildTabs() { + final List<Tab> tabs = mUiController.getTabs(); + mUi.getActiveTab().capture(); + mTabAdapter.setTabs(tabs); + PieStackView sym = (PieStackView) mShowTabs.getPieView(); + sym.setCurrent(mUiController.getTabControl().getCurrentPosition()); + } + + protected PieItem makeItem(int image, int l) { + ImageView view = new ImageView(mActivity); + view.setImageResource(image); + view.setMinimumWidth(mItemSize); + view.setMinimumHeight(mItemSize); + view.setScaleType(ScaleType.CENTER); + LayoutParams lp = new LayoutParams(mItemSize, mItemSize); + view.setLayoutParams(lp); + return new PieItem(view, l); + } + + protected PieItem makeFiller() { + return new PieItem(null, 1); + } + + protected View makeTabsView() { + View v = mActivity.getLayoutInflater().inflate(R.layout.qc_tabs_view, null); + mTabsCount = (TextView) v.findViewById(R.id.label); + mTabsCount.setText("1"); + ImageView image = (ImageView) v.findViewById(R.id.icon); + image.setImageResource(R.drawable.ic_windows_holo_dark); + image.setScaleType(ScaleType.CENTER); + LayoutParams lp = new LayoutParams(mItemSize, mItemSize); + v.setLayoutParams(lp); + return v; + } + + static class TabAdapter extends BaseAdapter implements OnCurrentListener { + + LayoutInflater mInflater; + UiController mUiController; + private List<Tab> mTabs; + private int mCurrent; + + public TabAdapter(Context ctx, UiController ctl) { + mInflater = LayoutInflater.from(ctx); + mUiController = ctl; + mTabs = new ArrayList<Tab>(); + mCurrent = -1; + } + + public void setTabs(List<Tab> tabs) { + mTabs = tabs; + notifyDataSetChanged(); + } + + @Override + public int getCount() { + return mTabs.size(); + } + + @Override + public Tab getItem(int position) { + return mTabs.get(position); + } + + @Override + public long getItemId(int position) { + return position; + } + + @Override + public View getView(int position, View convertView, ViewGroup parent) { + final Tab tab = mTabs.get(position); + View view = mInflater.inflate(R.layout.qc_tab, + null); + ImageView thumb = (ImageView) view.findViewById(R.id.thumb); + TextView title1 = (TextView) view.findViewById(R.id.title1); + TextView title2 = (TextView) view.findViewById(R.id.title2); + Bitmap b = tab.getScreenshot(); + if (b != null) { + thumb.setImageBitmap(b); + } + if (position > mCurrent) { + title1.setVisibility(View.GONE); + title2.setText(tab.getTitle()); + } else { + title2.setVisibility(View.GONE); + title1.setText(tab.getTitle()); + } + view.setOnClickListener(new OnClickListener() { + @Override + public void onClick(View v) { + mUiController.switchToTab(tab); + } + }); + return view; + } + + @Override + public void onSetCurrent(int index) { + mCurrent = index; + } + + } + +} |
