fix navscreen orientation
handle configuration change in navscreen
capture actual screen for tabs
size tabs correctly
Change-Id: I20ff72bdcab13678cdba4c55849bd5ff16cb6568
diff --git a/src/com/android/browser/NavScreen.java b/src/com/android/browser/NavScreen.java
index 1a25671..848b7b1 100644
--- a/src/com/android/browser/NavScreen.java
+++ b/src/com/android/browser/NavScreen.java
@@ -18,7 +18,9 @@
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.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,29 +64,36 @@
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();
}
+ @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 Tab getSelectedTab() {
return (Tab) mFlipper.getSelectedItem();
}
- protected void setTabDimensions(int w, int h) {
- mTabWidth = w;
- mTabHeight = h;
- requestLayout();
- }
-
protected void showMenu() {
Menu menu = mUi.getMenu();
menu.setGroupVisible(R.id.NAV_MENU, false);
@@ -110,6 +121,18 @@
}
}
+ // 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 @@
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 @@
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,16 +243,50 @@
}
}
+ 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();
+ }
+ });
+ }
+ }
+
+ 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);
- Tab tab = (Tab) mFlipper.getSelectedItem();
- if (tab != mUi.getActiveTab()) {
- mUiController.setActiveTab(tab);
- }
+ switchToSelected();
}
class TabGallery extends Gallery {
@@ -296,6 +355,7 @@
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 @@
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) {