diff options
author | Michael Kolb <kolby@google.com> | 2011-05-05 11:27:37 -0700 |
---|---|---|
committer | Michael Kolb <kolby@google.com> | 2011-05-09 09:40:35 -0700 |
commit | a4261fd53fef2b311e733fcfee4be3a9967ad967 (patch) | |
tree | 330f47d4f7f8afc42811e565302eed3422b16869 /src/com/android/browser/NavScreen.java | |
parent | 86138446b4f7c922a650e8bffe62b36adf5210ff (diff) | |
download | android_packages_apps_Gello-a4261fd53fef2b311e733fcfee4be3a9967ad967.tar.gz android_packages_apps_Gello-a4261fd53fef2b311e733fcfee4be3a9967ad967.tar.bz2 android_packages_apps_Gello-a4261fd53fef2b311e733fcfee4be3a9967ad967.zip |
fix navscreen orientation
handle configuration change in navscreen
capture actual screen for tabs
size tabs correctly
Change-Id: I20ff72bdcab13678cdba4c55849bd5ff16cb6568
Diffstat (limited to 'src/com/android/browser/NavScreen.java')
-rw-r--r-- | src/com/android/browser/NavScreen.java | 102 |
1 files changed, 87 insertions, 15 deletions
diff --git a/src/com/android/browser/NavScreen.java b/src/com/android/browser/NavScreen.java index 1a256715..848b7b10 100644 --- a/src/com/android/browser/NavScreen.java +++ b/src/com/android/browser/NavScreen.java @@ -18,7 +18,9 @@ package com.android.browser; import android.app.Activity; import android.content.Context; +import android.content.res.Configuration; import android.graphics.Bitmap; +import android.graphics.Matrix; import android.view.LayoutInflater; import android.view.Menu; import android.view.MenuItem; @@ -31,9 +33,11 @@ import android.widget.AdapterView.OnItemClickListener; import android.widget.AdapterView.OnItemSelectedListener; import android.widget.BaseAdapter; import android.widget.FrameLayout; +import android.widget.FrameLayout.LayoutParams; import android.widget.Gallery; import android.widget.ImageButton; import android.widget.ImageView; +import android.widget.ImageView.ScaleType; import android.widget.LinearLayout; import android.widget.ListPopupWindow; import android.widget.TextView; @@ -60,27 +64,34 @@ public class NavScreen extends LinearLayout implements OnClickListener { FrameLayout mHolder; Gallery mFlipper; + float mTabAspect = 0.66f; int mTabWidth; int mTabHeight; TabAdapter mAdapter; ListPopupWindow mPopup; + int mOrientation; public NavScreen(Activity activity, UiController ctl, PhoneUi ui) { super(activity); mActivity = activity; mUiController = ctl; mUi = ui; + mOrientation = activity.getResources().getConfiguration().orientation; init(); } - protected Tab getSelectedTab() { - return (Tab) mFlipper.getSelectedItem(); + @Override + public void onMeasure(int wspec, int hspec) { + super.onMeasure(wspec, hspec); + mTabHeight = mFlipper.getMeasuredHeight(); + mTabWidth = (int) (mTabHeight * mTabAspect); + if (mAdapter != null) { + mAdapter.notifyDataSetChanged(); + } } - protected void setTabDimensions(int w, int h) { - mTabWidth = w; - mTabHeight = h; - requestLayout(); + protected Tab getSelectedTab() { + return (Tab) mFlipper.getSelectedItem(); } protected void showMenu() { @@ -110,6 +121,18 @@ public class NavScreen extends LinearLayout implements OnClickListener { } } + // for configuration changes + @Override + protected void onConfigurationChanged(Configuration newconfig) { + if (newconfig.orientation != mOrientation) { + int selIx = mFlipper.getSelectedItemPosition(); + removeAllViews(); + init(); + mFlipper.setSelection(selIx); + mOrientation = newconfig.orientation; + } + } + private void init() { LayoutInflater.from(mContext).inflate(R.layout.nav_screen, this); LinearLayout content = (LinearLayout) findViewById(R.id.nav_screen); @@ -136,6 +159,7 @@ public class NavScreen extends LinearLayout implements OnClickListener { mFlipper = new TabGallery(mContext); mFlipper.setSpacing((int)(mContext.getResources() .getDimension(R.dimen.nav_tab_spacing))); + mFlipper.setUnselectedAlpha(0.8f); mFlipper.setLayoutParams(lp); mHolder.addView(mFlipper, 0); mAdapter = new TabAdapter(mContext, mUiController.getTabControl()); @@ -192,24 +216,25 @@ public class NavScreen extends LinearLayout implements OnClickListener { if (web != null) { if (mBack == v) { mUi.hideNavScreen(true); + switchToSelected(); web.goBack(); } else if (mForward == v) { mUi.hideNavScreen(true); + switchToSelected(); web.goForward(); } else if (mRefresh == v) { mUi.hideNavScreen(true); + switchToSelected(); web.reload(); } } if (mBookmarks == v) { mUi.hideNavScreen(false); + switchToSelected(); mUiController.bookmarksOrHistoryPicker(false); } else if (mTabs == v) { - mUi.hideNavScreen(false); - mUi.showActiveTabsPage(); } else if (mNewTab == v) { - mUi.hideNavScreen(true); - mUiController.openTabToHomePage(); + openNewTab(); } else if (mMore == v) { showMenu(); } else if (mNewIncognito == v) { @@ -218,18 +243,52 @@ public class NavScreen extends LinearLayout implements OnClickListener { } } - protected void close() { - close(true); + private void openNewTab() { + Tab tab = mUiController.createNewTab( + BrowserSettings.getInstance().getHomePage(), + false); + mAdapter.notifyDataSetChanged(); + + if (tab != null) { + // set tab as the selected in flipper, then hide + final int tix = mUi.mTabControl.getTabIndex(tab); + post(new Runnable() { + public void run() { + if (tix != -1) { + for (int i = mFlipper.getSelectedItemPosition(); + i <= tix; i++) { + mFlipper.setSelection(i, true); + mFlipper.invalidate(); + try { + Thread.sleep(100); + } catch (InterruptedException e) { + e.printStackTrace(); + } + } + } + mUi.hideNavScreen(true); + switchToSelected(); + } + }); + } } - protected void close(boolean animate) { - mUi.hideNavScreen(animate); + private void switchToSelected() { Tab tab = (Tab) mFlipper.getSelectedItem(); if (tab != mUi.getActiveTab()) { mUiController.setActiveTab(tab); } } + protected void close() { + close(true); + } + + protected void close(boolean animate) { + mUi.hideNavScreen(animate); + switchToSelected(); + } + class TabGallery extends Gallery { public TabGallery(Context ctx) { @@ -296,6 +355,7 @@ public class NavScreen extends LinearLayout implements OnClickListener { content.setLayoutParams(new LayoutParams(mTabWidth, mTabHeight)); } else { content = (ImageView) convertView.findViewById(R.id.content); + content.setLayoutParams(new LayoutParams(mTabWidth, mTabHeight)); } View tbar = convertView.findViewById(R.id.titlebar); TextView title = (TextView) convertView.findViewById(R.id.title); @@ -304,8 +364,20 @@ public class NavScreen extends LinearLayout implements OnClickListener { final Tab tab = getItem(position); icon.setImageDrawable(mUi.getFaviconDrawable(tab.getFavicon())); title.setText(tab.getUrl()); + content.setScaleType(ScaleType.MATRIX); + Matrix matrix = new Matrix(); Bitmap screen = tab.getScreenshot(); - content.setImageBitmap(screen); + if (screen != null) { + float scale = 1.0f; + if (mTabWidth > mTabHeight) { + scale = mTabWidth / (float) screen.getWidth(); + } else { + scale = mTabHeight / (float) screen.getHeight(); + } + matrix.setScale(scale, scale); + content.setImageMatrix(matrix); + content.setImageBitmap(screen); + } close.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { |