From 7da1025bd7f15b04cf55c79b73e94e5e1bc959d9 Mon Sep 17 00:00:00 2001 From: Winson Chung Date: Thu, 28 Oct 2010 16:07:04 -0700 Subject: Layout and spacing changes for AllApps/Customization drawer - Also fixing issue where preview images in the customization drawer were not being scaled down Change-Id: I83d1abf019d591954204b87a437eac2ff916dd54 --- src/com/android/launcher2/AllAppsPagedView.java | 6 ++ src/com/android/launcher2/CustomizePagedView.java | 65 ++++++++++++++++------ .../launcher2/HolographicOutlineHelper.java | 2 +- src/com/android/launcher2/PagedView.java | 5 +- src/com/android/launcher2/PagedViewIcon.java | 6 +- src/com/android/launcher2/Workspace.java | 6 +- 6 files changed, 68 insertions(+), 22 deletions(-) (limited to 'src') diff --git a/src/com/android/launcher2/AllAppsPagedView.java b/src/com/android/launcher2/AllAppsPagedView.java index 149f9fb8a..351384f93 100644 --- a/src/com/android/launcher2/AllAppsPagedView.java +++ b/src/com/android/launcher2/AllAppsPagedView.java @@ -93,6 +93,12 @@ public class AllAppsPagedView extends PagedView setSoundEffectsEnabled(false); } + @Override + protected void init() { + super.init(); + mCenterPagesVertically = false; + } + @Override public void setLauncher(Launcher launcher) { mLauncher = launcher; diff --git a/src/com/android/launcher2/CustomizePagedView.java b/src/com/android/launcher2/CustomizePagedView.java index a475a50d2..156bc20bb 100644 --- a/src/com/android/launcher2/CustomizePagedView.java +++ b/src/com/android/launcher2/CustomizePagedView.java @@ -33,6 +33,7 @@ import android.content.res.TypedArray; import android.graphics.Bitmap; import android.graphics.Bitmap.Config; import android.graphics.Canvas; +import android.graphics.Color; import android.graphics.Rect; import android.graphics.Region.Op; import android.graphics.drawable.Drawable; @@ -130,6 +131,12 @@ public class CustomizePagedView extends PagedView setupWorkspaceLayout(); } + @Override + protected void init() { + super.init(); + mCenterPagesVertically = false; + } + public void setLauncher(Launcher launcher) { Context context = getContext(); mLauncher = launcher; @@ -439,6 +446,17 @@ public class CustomizePagedView extends PagedView return mWidgetPages.size(); } + /** + * Helper function to draw a drawable to the specified canvas with the specified bounds. + */ + private void renderDrawableToBitmap(Drawable d, Bitmap bitmap, int l, int t, int r, int b) { + if (bitmap != null) mCanvas.setBitmap(bitmap); + mCanvas.save(); + d.setBounds(l, t, r, b); + d.draw(mCanvas); + mCanvas.restore(); + } + /** * This method will extract the preview image specified by the widget developer (if it exists), * otherwise, it will try to generate a default image preview with the widget's package icon. @@ -453,28 +471,21 @@ public class CustomizePagedView extends PagedView if (drawable == null) { Log.w(TAG, "Can't load icon drawable 0x" + Integer.toHexString(info.icon) + " for provider: " + info.provider); - } else { - return drawable; } } // If we don't have a preview image, create a default one + final int minDim = mWorkspaceWidgetLayout.estimateCellWidth(1); + final int maxDim = mWorkspaceWidgetLayout.estimateCellWidth(3); if (drawable == null) { Resources resources = mLauncher.getResources(); // Create a new bitmap to hold the widget preview - final int minDim = mWorkspaceWidgetLayout.estimateCellWidth(1); - final int maxDim = mWorkspaceWidgetLayout.estimateCellWidth(3); int width = (int) (Math.max(minDim, Math.min(maxDim, info.minWidth)) * sScaleFactor); int height = (int) (Math.max(minDim, Math.min(maxDim, info.minHeight)) * sScaleFactor); - Bitmap bitmap = Bitmap.createBitmap(width, height, Config.ARGB_8888); - mCanvas.setBitmap(bitmap); - // For some reason, we must re-set the clip rect here, otherwise it will be wrong - mCanvas.clipRect(0, 0, width, height, Op.REPLACE); - - Drawable background = resources.getDrawable(R.drawable.default_widget_preview); - background.setBounds(0, 0, width, height); - background.draw(mCanvas); + final Bitmap bitmap = Bitmap.createBitmap(width, height, Config.ARGB_8888); + final Drawable background = resources.getDrawable(R.drawable.default_widget_preview); + renderDrawableToBitmap(background, bitmap, 0, 0, width, height); // Draw the icon vertically centered, flush left try { @@ -490,12 +501,33 @@ public class CustomizePagedView extends PagedView final int iconSize = minDim / 2; final int offset = iconSize / 4; - icon.setBounds(new Rect(offset, offset, offset + iconSize, offset + iconSize)); - icon.draw(mCanvas); + final int offsetIconSize = offset + iconSize; + renderDrawableToBitmap(icon, null, offset, offset, offsetIconSize, offsetIconSize); } catch (Resources.NotFoundException e) { // if we can't find the icon, then just don't draw it } + drawable = new FastBitmapDrawable(bitmap); + } else { + // Scale down the preview if necessary + final float aspect = (float) info.minWidth / info.minHeight; + final int boundedWidth = (int) Math.max(minDim, Math.min(maxDim, info.minWidth)); + final int boundedHeight = (int) Math.max(minDim, Math.min(maxDim, info.minHeight)); + final int scaledWidth = (int) (boundedWidth * sScaleFactor); + final int scaledHeight = (int) (boundedHeight * sScaleFactor); + int width; + int height; + if (scaledWidth > scaledHeight) { + width = scaledWidth; + height = (int) (width / aspect); + } else { + height = scaledHeight; + width = (int) (height * aspect); + } + + final Bitmap bitmap = Bitmap.createBitmap(width, height, Config.ARGB_8888); + renderDrawableToBitmap(drawable, bitmap, 0, 0, width, height); + drawable = new FastBitmapDrawable(bitmap); } drawable.setBounds(0, 0, drawable.getIntrinsicWidth(), drawable.getIntrinsicHeight()); @@ -607,7 +639,7 @@ public class CustomizePagedView extends PagedView PagedViewIcon icon = (PagedViewIcon) mInflater.inflate( R.layout.customize_paged_view_item, layout, false); - icon.applyFromResolveInfo(info, mPackageManager, mPageViewIconCache); + icon.applyFromResolveInfo(info, mPackageManager, mPageViewIconCache, true); switch (mCustomizationType) { case WallpaperCustomization: icon.setOnClickListener(this); @@ -661,7 +693,7 @@ public class CustomizePagedView extends PagedView final ApplicationInfo info = mApps.get(i); PagedViewIcon icon = (PagedViewIcon) mInflater.inflate( R.layout.all_apps_paged_view_application, layout, false); - icon.applyFromApplicationInfo(info, mPageViewIconCache, false); + icon.applyFromApplicationInfo(info, mPageViewIconCache, true); icon.setOnClickListener(this); icon.setOnLongClickListener(this); @@ -763,5 +795,4 @@ public class CustomizePagedView extends PagedView public boolean onActionItemClicked(ActionMode mode, MenuItem item) { return false; } - } diff --git a/src/com/android/launcher2/HolographicOutlineHelper.java b/src/com/android/launcher2/HolographicOutlineHelper.java index bca3f715e..658490acc 100644 --- a/src/com/android/launcher2/HolographicOutlineHelper.java +++ b/src/com/android/launcher2/HolographicOutlineHelper.java @@ -183,4 +183,4 @@ public class HolographicOutlineHelper { thickOuterBlur.recycle(); thickInnerBlur.recycle(); } -} \ No newline at end of file +} diff --git a/src/com/android/launcher2/PagedView.java b/src/com/android/launcher2/PagedView.java index c1256969b..e9829fbfa 100644 --- a/src/com/android/launcher2/PagedView.java +++ b/src/com/android/launcher2/PagedView.java @@ -102,6 +102,7 @@ public abstract class PagedView extends ViewGroup { protected int mPageLayoutHeightGap; protected int mCellCountX; protected int mCellCountY; + protected boolean mCenterPagesVertically; protected static final int INVALID_POINTER = -1; @@ -207,6 +208,7 @@ public abstract class PagedView extends ViewGroup { mPageViewIconCache = new PagedViewIconCache(); mScroller = new Scroller(getContext()); mCurrentPage = 0; + mCenterPagesVertically = true; final ViewConfiguration configuration = ViewConfiguration.get(getContext()); mTouchSlop = configuration.getScaledTouchSlop(); @@ -394,7 +396,8 @@ public abstract class PagedView extends ViewGroup { final View child = getChildAt(i); if (child.getVisibility() != View.GONE) { final int childWidth = child.getMeasuredWidth(); - final int childHeight = (getMeasuredHeight() - child.getMeasuredHeight()) / 2; + final int childHeight = (mCenterPagesVertically ? + (getMeasuredHeight() - child.getMeasuredHeight()) / 2 : 0); child.layout(childLeft, childHeight, childLeft + childWidth, childHeight + child.getMeasuredHeight()); childLeft += childWidth + mPageSpacing; diff --git a/src/com/android/launcher2/PagedViewIcon.java b/src/com/android/launcher2/PagedViewIcon.java index c59ef8014..6c6c4dcd4 100644 --- a/src/com/android/launcher2/PagedViewIcon.java +++ b/src/com/android/launcher2/PagedViewIcon.java @@ -156,12 +156,16 @@ public class PagedViewIcon extends TextView implements Checkable { } public void applyFromResolveInfo(ResolveInfo info, PackageManager packageManager, - PagedViewIconCache cache) { + PagedViewIconCache cache, boolean scaleUp) { mIconCache = cache; mIconCacheKey = info; mHolographicOutline = mIconCache.getOutline(mIconCacheKey); mIcon = Utilities.createIconBitmap(info.loadIcon(packageManager), mContext); + if (scaleUp) { + mIcon = Bitmap.createScaledBitmap(mIcon, mScaledIconSize, + mScaledIconSize, true); + } setCompoundDrawablesWithIntrinsicBounds(null, new FastBitmapDrawable(mIcon), null, null); setText(info.loadLabel(packageManager)); setTag(info); diff --git a/src/com/android/launcher2/Workspace.java b/src/com/android/launcher2/Workspace.java index c4ca9e1e1..263c3a6da 100644 --- a/src/com/android/launcher2/Workspace.java +++ b/src/com/android/launcher2/Workspace.java @@ -778,8 +778,7 @@ public class Workspace extends SmoothPagedView // We shrink and disappear to nothing in the case of all apps // (which is when we shrink to the bottom) newY = screenHeight - newY - scaledPageHeight; - finalAlpha = 0.0f; - extraShrinkFactor = 0.1f; + finalAlpha = 0.25f; } else if (shrinkPosition == ShrinkPosition.SHRINK_TO_MIDDLE) { newY = screenHeight / 2 - scaledPageHeight / 2; finalAlpha = 1.0f; @@ -910,6 +909,9 @@ public class Workspace extends SmoothPagedView // never dragged over public void onDragStopped() { updateWhichPagesAcceptDrops(mShrunkenState); + if (mShrunkenState == ShrinkPosition.SHRINK_TO_BOTTOM_VISIBLE) { + shrink(ShrinkPosition.SHRINK_TO_BOTTOM_HIDDEN, true); + } } // We call this when we trigger an unshrink by clicking on the CellLayout cl -- cgit v1.2.3