Improved support for workspace screen thumbnails

- Shrinking workspace view in All Apps
- Added vertical margin for workspace screen thumnbnails
- Fixed bugs in a few of the Launcher state transitions (e.g. customization to all apps)

Change-Id: I9ad1c8861585d78fdb2e3bc986a614526b3cfe5f
This commit is contained in:
Michael Jurka 2010-07-28 11:29:25 -07:00
parent dee0589388
commit 213d96354e
3 changed files with 51 additions and 15 deletions

View File

@ -41,4 +41,7 @@
<!-- horizontal spacing between mini screen thumbnails ie. in all
apps and in customization mode -->
<dimen name="smallScreenSpacing">10dip</dimen>
<!-- vertical spacing between edge of screen and mini screen thumbnails -->
<dimen name="smallScreenVerticalMargin">20dip</dimen>
</resources>

View File

@ -1266,7 +1266,7 @@ public final class Launcher extends Activity
// Animate the widget chooser up from the bottom of the screen
if (!isCustomizationDrawerVisible()) {
showCustomizationDrawer();
mWorkspace.shrink();
mWorkspace.shrinkToTop();
}
} else {
showAddDialog(mMenuAddInfo);
@ -2023,7 +2023,8 @@ public final class Launcher extends Activity
// AllAppsView.Watcher
public void zoomed(float zoom) {
if (zoom == 1.0f) {
// In XLarge view, we zoom down the workspace below all apps so it's still visible
if (zoom == 1.0f && !LauncherApplication.isScreenXLarge()) {
mWorkspace.setVisibility(View.GONE);
}
}
@ -2036,6 +2037,7 @@ public final class Launcher extends Activity
mAllAppsGrid.zoom(1.0f, false);
Animation anim = AnimationUtils.loadAnimation(this, R.anim.all_apps_zoom_in);
((View) mAllAppsGrid).startAnimation(anim);
mWorkspace.shrinkToBottom();
} else {
mAllAppsGrid.zoom(1.0f, animated);
}
@ -2099,6 +2101,7 @@ public final class Launcher extends Activity
}
});
((View)mAllAppsGrid).startAnimation(anim);
mWorkspace.unshrink();
} else {
mAllAppsGrid.zoom(0.0f, animated);
}
@ -2128,7 +2131,7 @@ public final class Launcher extends Activity
mHomeCustomizationDrawer.startAnimation(AnimationUtils.loadAnimation(this, R.anim.home_customization_drawer_slide_up));
}
void hideCustomizationDrawer() {
private void hideCustomizationDrawer() {
if (isCustomizationDrawerVisible()) {
Animation slideDownAnimation = AnimationUtils.loadAnimation(this, R.anim.home_customization_drawer_slide_down);
slideDownAnimation.setAnimationListener(new Animation.AnimationListener() {
@ -2142,6 +2145,16 @@ public final class Launcher extends Activity
}
}
void onWorkspaceUnshrink() {
if (isAllAppsVisible()) {
// TODO: Make a smoother transition here
closeAllApps(false);
}
if (isCustomizationDrawerVisible()) {
hideCustomizationDrawer();
}
}
/**
* Displays the shortcut creation dialog and launches, if necessary, the
* appropriate activity.

View File

@ -548,7 +548,7 @@ public class Workspace extends ViewGroup
// this is an intercepted event being forwarded from a cell layout
if (mIsSmall) {
unshrink((CellLayout)v);
mLauncher.hideCustomizationDrawer();
mLauncher.onWorkspaceUnshrink();
}
return false;
}
@ -710,8 +710,9 @@ public class Workspace extends ViewGroup
final View child = getChildAt(i);
if (child.getVisibility() != View.GONE) {
final int childX = child.getX();
child.layout(
childX, 0, childX + child.getMeasuredWidth(), child.getMeasuredHeight());
final int childY = child.getY();
child.layout(childX, childY,
childX + child.getMeasuredWidth(), childY + child.getMeasuredHeight());
}
}
@ -1117,16 +1118,30 @@ public class Workspace extends ViewGroup
return true;
}
void shrinkToTop() {
shrink(true);
}
void shrinkToBottom() {
shrink(false);
}
// we use this to shrink the workspace for the all apps view and the customize view
void shrink() {
private void shrink(boolean shrinkToTop) {
mIsSmall = true;
final int screenWidth = getWidth();
final int scaledWorkspacePageWidth = (int)(SHRINK_FACTOR*screenWidth);
final int screenHeight = getHeight();
final int scaledScreenWidth = (int)(SHRINK_FACTOR*screenWidth);
final int scaledScreenHeight = (int)(SHRINK_FACTOR*screenHeight);
final float scaledSpacing = getResources().getDimension(R.dimen.smallScreenSpacing);
final int screenCount = getChildCount();
float totalWidth = screenCount * scaledWorkspacePageWidth + (screenCount - 1) * scaledSpacing;
float totalWidth = screenCount * scaledScreenWidth + (screenCount - 1) * scaledSpacing;
float newY = getResources().getDimension(R.dimen.smallScreenVerticalMargin);
if (!shrinkToTop) {
newY = screenHeight - newY - scaledScreenHeight;
}
// We animate all the screens to the centered position in workspace
// At the same time, the screens become greyed/dimmed
@ -1136,20 +1151,23 @@ public class Workspace extends ViewGroup
Sequencer s = new Sequencer();
for (int i = 0; i < screenCount; i++) {
CellLayout cl = (CellLayout) getChildAt(i);
PropertyAnimator translate = new PropertyAnimator(
PropertyAnimator translateX = new PropertyAnimator(
500, cl, "x", cl.getX(), (int) newX);
PropertyAnimator translateY = new PropertyAnimator(
500, cl, "y", cl.getY(), (int) newY);
PropertyAnimator scaleX = new PropertyAnimator(
500, cl, "scaleX", cl.getScaleX(), SHRINK_FACTOR);
PropertyAnimator scaleY = new PropertyAnimator(
500, cl, "scaleY", cl.getScaleY(), SHRINK_FACTOR);
PropertyAnimator alpha = new PropertyAnimator(
500, cl, "dimmedBitmapAlpha", cl.getDimmedBitmapAlpha(), 1.0f);
Sequencer.Builder b = s.play(translate);
Sequencer.Builder b = s.play(translateX);
b.with(translateY);
b.with(scaleX);
b.with(scaleY);
b.with(alpha);
// increment newX for the next screen
newX += scaledWorkspacePageWidth + scaledSpacing;
newX += scaledScreenWidth + scaledSpacing;
cl.setOnInterceptTouchListener(this);
}
setChildrenDrawnWithCacheEnabled(true);
@ -1184,12 +1202,14 @@ public class Workspace extends ViewGroup
CellLayout cl = (CellLayout)getChildAt(i);
int x = screenWidth * i;
PropertyAnimator translate = new PropertyAnimator(500, cl, "x", cl.getX(), x);
PropertyAnimator translateX = new PropertyAnimator(500, cl, "x", cl.getX(), x);
PropertyAnimator translateY = new PropertyAnimator(500, cl, "y", cl.getY(), 0);
PropertyAnimator scaleX = new PropertyAnimator(500, cl, "scaleX", cl.getScaleX(), 1.0f);
PropertyAnimator scaleY = new PropertyAnimator(500, cl, "scaleY", cl.getScaleY(), 1.0f);
PropertyAnimator alpha = new PropertyAnimator(
500, cl, "dimmedBitmapAlpha", cl.getDimmedBitmapAlpha(), 0.0f);
Sequencer.Builder b = s.play(translate);
Sequencer.Builder b = s.play(translateX);
b.with(translateY);
b.with(scaleX);
b.with(scaleY);
b.with(alpha);