diff options
author | Patrick Dubroy <dubroy@google.com> | 2011-05-23 16:15:09 -0700 |
---|---|---|
committer | Patrick Dubroy <dubroy@google.com> | 2011-05-23 17:30:17 -0700 |
commit | 4a5ad095303ca1b6b745263269333bd087168d3c (patch) | |
tree | 8e4b206b5ea42d2ff52fac70a86aee1a8e139652 | |
parent | 4c5ac591f4c88203749a051cc9b7bce92e90abee (diff) | |
download | android_packages_apps_Trebuchet-4a5ad095303ca1b6b745263269333bd087168d3c.tar.gz android_packages_apps_Trebuchet-4a5ad095303ca1b6b745263269333bd087168d3c.tar.bz2 android_packages_apps_Trebuchet-4a5ad095303ca1b6b745263269333bd087168d3c.zip |
Dynamically determine size of customize tray.
Change-Id: I13235bbd01df8c31eb9bdfe88913db55624d8b9b
-rw-r--r-- | res/layout-large/customization_drawer.xml | 13 | ||||
-rw-r--r-- | res/layout-large/launcher.xml | 2 | ||||
-rw-r--r-- | res/values-large-land/dimens.xml | 14 | ||||
-rw-r--r-- | res/values-large-port/dimens.xml | 12 | ||||
-rw-r--r-- | res/values-large/dimens.xml | 10 | ||||
-rw-r--r-- | src/com/android/launcher2/AllAppsPagedView.java | 19 | ||||
-rw-r--r-- | src/com/android/launcher2/CustomizePagedView.java | 65 | ||||
-rw-r--r-- | src/com/android/launcher2/CustomizeTrayTabHost.java | 43 | ||||
-rw-r--r-- | src/com/android/launcher2/Launcher.java | 1 | ||||
-rw-r--r-- | src/com/android/launcher2/PagedViewCellLayout.java | 10 |
10 files changed, 135 insertions, 54 deletions
diff --git a/res/layout-large/customization_drawer.xml b/res/layout-large/customization_drawer.xml index d8db066b0..0c59a3f96 100644 --- a/res/layout-large/customization_drawer.xml +++ b/res/layout-large/customization_drawer.xml @@ -40,15 +40,12 @@ launcher:wallpaperCellSpanX="@integer/customization_drawer_contents_wallpaperCellSpanX" launcher:wallpaperCellCountX="@integer/customization_drawer_contents_wallpaperCellCountX" launcher:widgetCellCountX="@integer/customization_drawer_contents_widgetCellCountX" - launcher:cellCountX="@integer/customization_drawer_contents_cellCountX" - launcher:cellCountY="@integer/customization_drawer_contents_cellCountY" launcher:pageLayoutWidthGap="@dimen/customization_drawer_contents_pageLayoutWidthGap" - launcher:pageLayoutHeightGap="12dp" - launcher:pageLayoutPaddingTop="40dp" - launcher:pageLayoutPaddingBottom="25dp" - launcher:pageLayoutPaddingLeft="20dp" - launcher:pageLayoutPaddingRight="20dp" - launcher:pageLayoutMaxHeight="@dimen/customization_drawer_content_height" /> + launcher:pageLayoutHeightGap="@dimen/customization_drawer_contents_pageLayoutHeightGap" + launcher:pageLayoutPaddingTop="@dimen/customization_drawer_contents_pageLayoutPaddingTop" + launcher:pageLayoutPaddingBottom="@dimen/customization_drawer_contents_pageLayoutPaddingBottom" + launcher:pageLayoutPaddingLeft="@dimen/customization_drawer_contents_pageLayoutPaddingLeft" + launcher:pageLayoutPaddingRight="@dimen/customization_drawer_contents_pageLayoutPaddingRight" /> </FrameLayout> </LinearLayout> </com.android.launcher2.CustomizeTrayTabHost>
\ No newline at end of file diff --git a/res/layout-large/launcher.xml b/res/layout-large/launcher.xml index 6a16eb530..2d141373f 100644 --- a/res/layout-large/launcher.xml +++ b/res/layout-large/launcher.xml @@ -44,7 +44,7 @@ <include layout="@layout/customization_drawer" android:id="@+id/customization_drawer" android:layout_width="match_parent" - android:layout_height="@dimen/customization_drawer_height" + android:layout_height="wrap_content" android:layout_gravity="bottom" android:visibility="invisible" /> </com.android.launcher2.DragLayer> diff --git a/res/values-large-land/dimens.xml b/res/values-large-land/dimens.xml index 0f7e0eddf..eeb16f4d4 100644 --- a/res/values-large-land/dimens.xml +++ b/res/values-large-land/dimens.xml @@ -19,9 +19,6 @@ or right while you're dragging. --> <dimen name="scroll_zone">100dip</dimen> - <dimen name="customization_drawer_height">480dp</dimen> - <dimen name="customization_drawer_content_height">420dp</dimen> - <dimen name="all_apps_view_pageLayoutWidthGap">36dp</dimen> <dimen name="all_apps_view_pageLayoutHeightGap">6dp</dimen> <dimen name="all_apps_view_pageLayoutPaddingTop">20dp</dimen> @@ -29,10 +26,15 @@ <dimen name="all_apps_view_pageLayoutPaddingLeft">40dp</dimen> <dimen name="all_apps_view_pageLayoutPaddingRight">40dp</dimen> + <!-- Dimensions for customize should generally be the same as all apps, or very similar. --> + <dimen name="customization_drawer_contents_pageLayoutWidthGap">32dp</dimen> + <dimen name="customization_drawer_contents_pageLayoutHeightGap">12dp</dimen> + <dimen name="customization_drawer_contents_pageLayoutPaddingTop">20dp</dimen> + <dimen name="customization_drawer_contents_pageLayoutPaddingBottom">20dp</dimen> + <dimen name="customization_drawer_contents_pageLayoutPaddingLeft">40dp</dimen> + <dimen name="customization_drawer_contents_pageLayoutPaddingRight">40dp</dimen> + <integer name="customization_drawer_contents_wallpaperCellSpanX">3</integer> <integer name="customization_drawer_contents_wallpaperCellCountX">12</integer> <integer name="customization_drawer_contents_widgetCellCountX">14</integer> - <integer name="customization_drawer_contents_cellCountX">8</integer> - <integer name="customization_drawer_contents_cellCountY">3</integer> - <dimen name="customization_drawer_contents_pageLayoutWidthGap">32dp</dimen> </resources>
\ No newline at end of file diff --git a/res/values-large-port/dimens.xml b/res/values-large-port/dimens.xml index 2ea9e3875..89f86053e 100644 --- a/res/values-large-port/dimens.xml +++ b/res/values-large-port/dimens.xml @@ -19,9 +19,6 @@ or right while you're dragging. --> <dimen name="scroll_zone">40dp</dimen> - <dimen name="customization_drawer_height">800dp</dimen> - <dimen name="customization_drawer_content_height">420dp</dimen> - <dimen name="all_apps_view_pageLayoutWidthGap">36dp</dimen> <dimen name="all_apps_view_pageLayoutHeightGap">36dp</dimen> <dimen name="all_apps_view_pageLayoutPaddingTop">25dp</dimen> @@ -32,7 +29,12 @@ <integer name="customization_drawer_contents_wallpaperCellSpanX">3</integer> <integer name="customization_drawer_contents_wallpaperCellCountX">9</integer> <integer name="customization_drawer_contents_widgetCellCountX">9</integer> - <integer name="customization_drawer_contents_cellCountX">5</integer> - <integer name="customization_drawer_contents_cellCountY">3</integer> + + <!-- Dimensions for customize should generally be the same as all apps, or very similar. --> <dimen name="customization_drawer_contents_pageLayoutWidthGap">36dp</dimen> + <dimen name="customization_drawer_contents_pageLayoutHeightGap">12dp</dimen> + <dimen name="customization_drawer_contents_pageLayoutPaddingTop">25dp</dimen> + <dimen name="customization_drawer_contents_pageLayoutPaddingBottom">25dp</dimen> + <dimen name="customization_drawer_contents_pageLayoutPaddingLeft">20dp</dimen> + <dimen name="customization_drawer_contents_pageLayoutPaddingRight">20dp</dimen> </resources>
\ No newline at end of file diff --git a/res/values-large/dimens.xml b/res/values-large/dimens.xml index 241610917..10836b944 100644 --- a/res/values-large/dimens.xml +++ b/res/values-large/dimens.xml @@ -88,4 +88,14 @@ the drag view should be offset from the position of the original view. --> <dimen name="dragViewOffsetX">0dp</dimen> <dimen name="dragViewOffsetY">-12dp</dimen> + + <!-- The actual number of rows/columns will be determined dynamically based on the screen + size, but in portrait we want to cap the rows at 3, otherwise it looks weird. --> + <integer name="customization_drawer_contents_maxCellCountY">3</integer> + + <!-- The percentage of vertical space that the customize tray should try to fill. --> + <integer name="customization_drawer_verticalFillPercentage">65</integer> + + <!-- Max number of rows in all apps, because too many looks weird. --> + <integer name="all_apps_view_maxCellCountY">6</integer> </resources> diff --git a/src/com/android/launcher2/AllAppsPagedView.java b/src/com/android/launcher2/AllAppsPagedView.java index d3082092f..9d0c3ac79 100644 --- a/src/com/android/launcher2/AllAppsPagedView.java +++ b/src/com/android/launcher2/AllAppsPagedView.java @@ -72,6 +72,8 @@ public class AllAppsPagedView extends PagedViewWithDraggableItems implements All private int mLastMeasureWidth = -1; private int mLastMeasureHeight = -1; + private int mMaxCellCountY; + public AllAppsPagedView(Context context) { this(context, null); } @@ -89,9 +91,10 @@ public class AllAppsPagedView extends PagedViewWithDraggableItems implements All a.recycle(); setSoundEffectsEnabled(false); - Resources r = context.getResources(); + final Resources r = context.getResources(); setDragSlopeThreshold( r.getInteger(R.integer.config_appsCustomizeDragSlopeThreshold) / 100.0f); + mMaxCellCountY = r.getInteger(R.integer.all_apps_view_maxCellCountY); } @Override @@ -171,7 +174,19 @@ public class AllAppsPagedView extends PagedViewWithDraggableItems implements All availableHeight -= mPageLayoutPaddingTop + mPageLayoutPaddingBottom; availableHeight -= cellHeight; // Assume at least one row availableHeight -= screenHeight * 0.16f; - return (1 + availableHeight / (cellHeight + mPageLayoutHeightGap)); + if (availableHeight > 0) { + return Math.min(mMaxCellCountY, + 1 + availableHeight / (cellHeight + mPageLayoutHeightGap)); + } + return 0; + } + + int getCellCountX() { + return mCellCountX; + } + + int getCellCountY() { + return mCellCountY; } void allowHardwareLayerCreation() { diff --git a/src/com/android/launcher2/CustomizePagedView.java b/src/com/android/launcher2/CustomizePagedView.java index 68ec535d8..5ac261f10 100644 --- a/src/com/android/launcher2/CustomizePagedView.java +++ b/src/com/android/launcher2/CustomizePagedView.java @@ -108,6 +108,9 @@ public class CustomizePagedView extends PagedViewWithDraggableItems // The max number of wallpaper cells to take a "page" of wallpaper items private int mMaxWallpaperCellHSpan; + // The maximum number of rows in a paged view. + private int mMaxCellCountY; + // The raw sources of data for each of the different tabs of the customization page private List<AppWidgetProviderInfo> mWidgetList; private List<ResolveInfo> mShortcutList; @@ -143,7 +146,10 @@ public class CustomizePagedView extends PagedViewWithDraggableItems private int[] mDragViewOrigin = new int[2]; - private int mPageContentWidth; + private int mPageContentWidth = -1; + private int mPageContentHeight = -1; + + private AllAppsPagedView mAllAppsPagedView; public CustomizePagedView(Context context) { this(context, null, 0); @@ -162,10 +168,6 @@ public class CustomizePagedView extends PagedViewWithDraggableItems mMaxWallpaperCellHSpan = a.getInt(R.styleable.CustomizePagedView_wallpaperCellCountX, 8); mMaxWidgetsCellHSpan = a.getInt(R.styleable.CustomizePagedView_widgetCellCountX, 8); a.recycle(); - a = context.obtainStyledAttributes(attrs, R.styleable.PagedView, defStyle, 0); - mCellCountX = a.getInt(R.styleable.PagedView_cellCountX, 7); - mCellCountY = a.getInt(R.styleable.PagedView_cellCountY, 4); - a.recycle(); mCustomizationType = CustomizationType.WidgetCustomization; mWidgetPages = new ArrayList<ArrayList<AppWidgetProviderInfo>>(); @@ -176,6 +178,8 @@ public class CustomizePagedView extends PagedViewWithDraggableItems setDragSlopeThreshold( r.getInteger(R.integer.config_customizationDrawerDragSlopeThreshold) / 100.0f); + mMaxCellCountY = r.getInteger(R.integer.customization_drawer_contents_maxCellCountY); + setVisibility(View.GONE); setSoundEffectsEnabled(false); setupWorkspaceLayout(); @@ -188,29 +192,44 @@ public class CustomizePagedView extends PagedViewWithDraggableItems } @Override - protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { - super.onMeasure(widthMeasureSpec, heightMeasureSpec); - - final int widthSize = MeasureSpec.getSize(widthMeasureSpec); - final int heightSize = MeasureSpec.getSize(heightMeasureSpec); + protected void onMeasure(int widthSpec, int heightSpec) { + // Base the size of this control on the size of the All Apps view. + final int cellCountX = mAllAppsPagedView.getCellCountX(); + final int cellCountY = Math.min(mAllAppsPagedView.getCellCountY(), mMaxCellCountY); - if (mFirstMeasure) { - mFirstMeasure = false; - - // TODO: actually calculate mCellCountX/mCellCountY as some function of - // widthSize and heightSize - //mCellCountX = ? - //mCellCountY = ? - - // Since mCellCountX/mCellCountY changed, we need to update the pages - invalidatePageData(); + if (cellCountX != mCellCountX || cellCountY != mCellCountY) { + mCellCountX = cellCountX; + mCellCountY = cellCountY; - // Create a dummy page and set it up to find out the content width (used by our parent) + // Create a dummy page and set it up to determine our size. + // The size is based on the app shortcuts tab having the same dimensions as All Apps. PagedViewCellLayout layout = new PagedViewCellLayout(getContext()); setupPage(layout); mPageContentWidth = layout.getContentWidth(); + mPageContentHeight = layout.getContentHeight(); mMinPageWidth = layout.getWidthBeforeFirstLayout(); } + if (mPageContentHeight > 0) { + // Lock our height to the size of the page content + final int h = mPageContentHeight + mPageLayoutPaddingTop + mPageLayoutPaddingBottom; + heightSpec = MeasureSpec.makeMeasureSpec(h, MeasureSpec.EXACTLY); + } + super.onMeasure(widthSpec, heightSpec); + mFirstMeasure = false; + } + + @Override + protected void onLayout(boolean changed, int left, int top, int right, int bottom) { + if (mFirstLayout) { + invalidatePageData(); + + // invalidatePageData() is what causes the child pages to be created. We need the + // children to be measured before layout, so force a new measure here. + measure(MeasureSpec.makeMeasureSpec(getMeasuredWidth(), MeasureSpec.EXACTLY), + MeasureSpec.makeMeasureSpec(getMeasuredHeight(), MeasureSpec.EXACTLY)); + } + super.onLayout(changed, left, top, right, bottom); + mFirstLayout = false; } public void setLauncher(Launcher launcher) { @@ -219,6 +238,10 @@ public class CustomizePagedView extends PagedViewWithDraggableItems mPackageManager = context.getPackageManager(); } + public void setAllAppsPagedView(AllAppsPagedView view) { + mAllAppsPagedView = view; + } + /** * Sets the list of applications that launcher has loaded. */ diff --git a/src/com/android/launcher2/CustomizeTrayTabHost.java b/src/com/android/launcher2/CustomizeTrayTabHost.java index ab50cf161..6306bdae4 100644 --- a/src/com/android/launcher2/CustomizeTrayTabHost.java +++ b/src/com/android/launcher2/CustomizeTrayTabHost.java @@ -44,9 +44,14 @@ public class CustomizeTrayTabHost extends TabHost implements LauncherTransitiona private boolean mFirstLayout = true; + // How much of the vertical space this control should attempt to fill + private float mVerticalFillPercentage; + private final LayoutInflater mInflater; private Context mContext; + private CustomizePagedView mCustomizePagedView; + public CustomizeTrayTabHost(Context context, AttributeSet attrs) { super(context, attrs); mContext = context; @@ -55,15 +60,17 @@ public class CustomizeTrayTabHost extends TabHost implements LauncherTransitiona @Override protected void onFinishInflate() { + final Resources res = getResources(); + setup(); - final CustomizePagedView customizePagedView = + mCustomizePagedView = (CustomizePagedView) findViewById(R.id.customization_drawer_tab_contents); // Configure tabs TabContentFactory contentFactory = new TabContentFactory() { public View createTabContent(String tag) { - return customizePagedView; + return mCustomizePagedView; } }; @@ -87,26 +94,28 @@ public class CustomizeTrayTabHost extends TabHost implements LauncherTransitiona addTab(newTabSpec(SHORTCUTS_TAG) .setIndicator(tabView).setContent(contentFactory)); + mVerticalFillPercentage = + res.getInteger(R.integer.customization_drawer_verticalFillPercentage) / 100f; + setOnTabChangedListener(new OnTabChangeListener() { public void onTabChanged(String tabId) { final CustomizePagedView.CustomizationType newType = getCustomizeFilterForTabTag(tabId); - if (newType != customizePagedView.getCustomizationFilter()) { + if (newType != mCustomizePagedView.getCustomizationFilter()) { // animate the changing of the tab content by fading pages in and out - final Resources res = getResources(); final int duration = res.getInteger(R.integer.config_tabTransitionDuration); - final float alpha = customizePagedView.getAlpha(); - ValueAnimator alphaAnim = ObjectAnimator.ofFloat(customizePagedView, + final float alpha = mCustomizePagedView.getAlpha(); + ValueAnimator alphaAnim = ObjectAnimator.ofFloat(mCustomizePagedView, "alpha", alpha, 0.0f); alphaAnim.setDuration(duration); alphaAnim.addListener(new AnimatorListenerAdapter() { @Override public void onAnimationEnd(Animator animation) { - customizePagedView.setCustomizationFilter(newType); + mCustomizePagedView.setCustomizationFilter(newType); - final float alpha = customizePagedView.getAlpha(); + final float alpha = mCustomizePagedView.getAlpha(); ValueAnimator alphaAnim = ObjectAnimator.ofFloat( - customizePagedView, "alpha", alpha, 1.0f); + mCustomizePagedView, "alpha", alpha, 1.0f); alphaAnim.setDuration(duration); alphaAnim.start(); } @@ -138,6 +147,22 @@ public class CustomizeTrayTabHost extends TabHost implements LauncherTransitiona } @Override + protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { + super.onMeasure(widthMeasureSpec, heightMeasureSpec); + + // If there's extra room, try to grow to fill it + if (MeasureSpec.getMode(heightMeasureSpec) == MeasureSpec.AT_MOST) { + final int availableHeight = MeasureSpec.getSize(heightMeasureSpec); + final int finalHeight = Math.max(getMeasuredHeight(), + (int) (availableHeight * mVerticalFillPercentage)); + + // Measure a second time with EXACTLY so that we get sized correctly + heightMeasureSpec = MeasureSpec.makeMeasureSpec(finalHeight, MeasureSpec.EXACTLY); + super.onMeasure(widthMeasureSpec, heightMeasureSpec); + } + } + + @Override protected void onLayout(boolean changed, int l, int t, int r, int b) { if (mFirstLayout) { mFirstLayout = false; diff --git a/src/com/android/launcher2/Launcher.java b/src/com/android/launcher2/Launcher.java index 4569eac90..2a16e9978 100644 --- a/src/com/android/launcher2/Launcher.java +++ b/src/com/android/launcher2/Launcher.java @@ -933,6 +933,7 @@ public final class Launcher extends Activity if (mCustomizePagedView != null) { mCustomizePagedView.setLauncher(this); mCustomizePagedView.setDragController(dragController); + mCustomizePagedView.setAllAppsPagedView(mAllAppsPagedView); } else { ImageView hotseatLeft = (ImageView) findViewById(R.id.hotseat_left); hotseatLeft.setContentDescription(mHotseatLabels[0]); diff --git a/src/com/android/launcher2/PagedViewCellLayout.java b/src/com/android/launcher2/PagedViewCellLayout.java index 15b155fd9..0ae7a597c 100644 --- a/src/com/android/launcher2/PagedViewCellLayout.java +++ b/src/com/android/launcher2/PagedViewCellLayout.java @@ -286,11 +286,17 @@ public class PagedViewCellLayout extends ViewGroup implements Page { } int getContentHeight() { - return mCellCountY * mCellHeight + (mCellCountY - 1) * Math.max(0, mHeightGap); + if (mCellCountY > 0) { + return mCellCountY * mCellHeight + (mCellCountY - 1) * Math.max(0, mHeightGap); + } + return 0; } int getWidthBeforeFirstLayout() { - return mCellCountX * mCellWidth + (mCellCountX - 1) * Math.max(0, mWidthGap); + if (mCellCountX > 0) { + return mCellCountX * mCellWidth + (mCellCountX - 1) * Math.max(0, mWidthGap); + } + return 0; } @Override |