summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/com/android/launcher2/AllAppsView.java80
-rw-r--r--src/com/android/launcher2/Launcher.java60
-rw-r--r--src/com/android/launcher2/Workspace.java49
3 files changed, 132 insertions, 57 deletions
diff --git a/src/com/android/launcher2/AllAppsView.java b/src/com/android/launcher2/AllAppsView.java
index 722213d..a7a1e64 100644
--- a/src/com/android/launcher2/AllAppsView.java
+++ b/src/com/android/launcher2/AllAppsView.java
@@ -112,6 +112,9 @@ public class AllAppsView extends RSSurfaceView
private boolean mShouldGainFocus;
+ private boolean mZoomDirty = false;
+ private float mNextZoom;
+ private boolean mNextAnimate;
static class Defines {
public static final int ALLOC_PARAMS = 0;
@@ -185,7 +188,6 @@ public class AllAppsView extends RSSurfaceView
super.surfaceChanged(holder, format, w, h);
if (mRS == null) {
-
mRS = createRenderScript(true);
mRollo = new RolloRS();
mRollo.mHasSurface = true;
@@ -198,6 +200,7 @@ public class AllAppsView extends RSSurfaceView
gainFocus();
mShouldGainFocus = false;
}
+ mRollo.dirtyCheck();
} else {
mRollo.mHasSurface = true;
mRollo.dirtyCheck();
@@ -572,32 +575,44 @@ public class AllAppsView extends RSSurfaceView
}
/**
- * Zoom to the specifed amount.
+ * Zoom to the specifed level.
*
- * @param amount [0..1] 0 is hidden, 1 is open
+ * @param zoom [0..1] 0 is hidden, 1 is open
*/
- public void zoom(float amount) {
- if (mRollo == null) {
+ public void zoom(float zoom, boolean animate) {
+ cancelLongPress();
+ if (mRollo == null || !mRollo.mHasSurface) {
+ mZoomDirty = true;
+ mNextZoom = zoom;
+ mNextAnimate = animate;
return;
+ } else {
+ mRollo.setZoom(zoom, animate);
}
+ }
- cancelLongPress();
- mRollo.clearSelectedIcon();
- mRollo.setHomeSelected(SELECTED_NONE);
- if (amount > 0.001f) {
- // set in readback, so we're correct even before the next frame
- mRollo.mState.zoomTarget = amount;
+ public boolean isVisible() {
+ if (mZoomDirty) {
+ return mNextZoom > 0.001f;
} else {
- mRollo.mState.zoomTarget = 0;
+ if (mRollo == null) {
+ return false;
+ } else {
+ return mRollo.mMessageProc.mZoom > 0.001f;
+ }
}
- mRollo.mState.save();
}
- public boolean isVisible() {
- if (mRollo == null) {
- return false;
+ public boolean isOpaque() {
+ if (mZoomDirty) {
+ return mNextZoom > 0.999f;
+ } else {
+ if (mRollo == null) {
+ return false;
+ } else {
+ return mRollo.mMessageProc.mZoom > 0.999f;
+ }
}
- return mRollo.mMessageProc.mZoom > 0.001f;
}
/*
@@ -729,7 +744,7 @@ public class AllAppsView extends RSSurfaceView
private Script.Invokable mInvokeMoveTo;
private Script.Invokable mInvokeFling;
private Script.Invokable mInvokeResetWAR;
-
+ private Script.Invokable mInvokeSetZoom;
private ProgramStore mPSIcons;
private ProgramStore mPSText;
@@ -1003,6 +1018,7 @@ public class AllAppsView extends RSSurfaceView
mInvokeFling = sb.addInvokable("fling");
mInvokeMoveTo = sb.addInvokable("moveTo");
mInvokeResetWAR = sb.addInvokable("resetHWWar");
+ mInvokeSetZoom = sb.addInvokable("setZoom");
mScript = sb.create();
mScript.setClearColor(0.0f, 0.0f, 0.0f, 0.0f);
mScript.bindAllocation(mParams.mAlloc, Defines.ALLOC_PARAMS);
@@ -1022,10 +1038,16 @@ public class AllAppsView extends RSSurfaceView
}
void dirtyCheck() {
- if (mAppsDirty && mHasSurface) {
- uploadApps(mAllAppsList);
- saveAppsList();
- mAppsDirty = false;
+ if (mHasSurface) {
+ if (mAppsDirty) {
+ uploadApps(mAllAppsList);
+ saveAppsList();
+ mAppsDirty = false;
+ }
+ if (mZoomDirty) {
+ setZoom(mNextZoom, mNextAnimate);
+ mZoomDirty = false;
+ }
}
}
@@ -1053,6 +1075,20 @@ public class AllAppsView extends RSSurfaceView
saveAppsList();
}
+ private void setZoom(float zoom, boolean animate) {
+ mRollo.clearSelectedIcon();
+ mRollo.setHomeSelected(SELECTED_NONE);
+ if (zoom > 0.001f) {
+ mRollo.mState.zoomTarget = zoom;
+ } else {
+ mRollo.mState.zoomTarget = 0;
+ }
+ mRollo.mState.save();
+ if (!animate) {
+ mRollo.mInvokeSetZoom.execute();
+ }
+ }
+
private void frameBitmapAllocMips(Allocation alloc, int w, int h) {
int black[] = new int[w > h ? w : h];
Allocation.Adapter2D a = alloc.createAdapter2D();
diff --git a/src/com/android/launcher2/Launcher.java b/src/com/android/launcher2/Launcher.java
index 6a0978b..ce3d5a7 100644
--- a/src/com/android/launcher2/Launcher.java
+++ b/src/com/android/launcher2/Launcher.java
@@ -192,7 +192,6 @@ public final class Launcher extends Activity
private boolean mRestoring;
private boolean mWaitingForResult;
- private boolean mExitingBecauseOfLaunch;
private Bundle mSavedInstanceState;
@@ -446,10 +445,6 @@ public final class Launcher extends Activity
@Override
protected void onPause() {
super.onPause();
- if (mExitingBecauseOfLaunch) {
- mExitingBecauseOfLaunch = false;
- closeAllApps(false);
- }
dismissPreview(mPreviousView);
dismissPreview(mNextView);
}
@@ -511,6 +506,11 @@ public final class Launcher extends Activity
return;
}
+ final boolean allApps = savedState.getBoolean(RUNTIME_STATE_ALL_APPS_FOLDER, false);
+ if (allApps) {
+ showAllApps(false);
+ }
+
final int currentScreen = savedState.getInt(RUNTIME_STATE_CURRENT_SCREEN, -1);
if (currentScreen > -1) {
mWorkspace.setCurrentScreen(currentScreen);
@@ -856,23 +856,17 @@ public final class Launcher extends Activity
// for example onResume being called when the user pressed the 'back' button.
mIsNewIntent = true;
- if ((intent.getFlags() & Intent.FLAG_ACTIVITY_BROUGHT_TO_FRONT) !=
- Intent.FLAG_ACTIVITY_BROUGHT_TO_FRONT) {
-
- if (!mWorkspace.isDefaultScreenShowing()) {
- mWorkspace.moveToDefaultScreen();
- }
+ if (!mWorkspace.isDefaultScreenShowing()) {
+ mWorkspace.moveToDefaultScreen();
+ }
- closeAllApps(true);
+ closeAllApps(false);
- final View v = getWindow().peekDecorView();
- if (v != null && v.getWindowToken() != null) {
- InputMethodManager imm = (InputMethodManager)getSystemService(
- INPUT_METHOD_SERVICE);
- imm.hideSoftInputFromWindow(v.getWindowToken(), 0);
- }
- } else {
- closeAllApps(false);
+ final View v = getWindow().peekDecorView();
+ if (v != null && v.getWindowToken() != null) {
+ InputMethodManager imm = (InputMethodManager)getSystemService(
+ INPUT_METHOD_SERVICE);
+ imm.hideSoftInputFromWindow(v.getWindowToken(), 0);
}
}
}
@@ -902,10 +896,8 @@ public final class Launcher extends Activity
final boolean isConfigurationChange = getChangingConfigurations() != 0;
- // When the drawer is opened and we are saving the state because of a
- // configuration change
// TODO should not do this if the drawer is currently closing.
- if (isAllAppsVisible() && isConfigurationChange) {
+ if (isAllAppsVisible()) {
outState.putBoolean(RUNTIME_STATE_ALL_APPS_FOLDER, true);
}
@@ -1408,7 +1400,6 @@ public final class Launcher extends Activity
// Open shortcut
final Intent intent = ((ApplicationInfo) tag).intent;
startActivitySafely(intent);
- mExitingBecauseOfLaunch = true;
} else if (tag instanceof FolderInfo) {
handleFolderClick((FolderInfo) tag);
} else if (v == mHandleView) {
@@ -1416,7 +1407,7 @@ public final class Launcher extends Activity
if (isAllAppsVisible()) {
closeAllApps(true);
} else {
- showAllApps();
+ showAllApps(true);
}
}
}
@@ -1819,10 +1810,16 @@ public final class Launcher extends Activity
return mAllAppsGrid.isVisible();
}
- void showAllApps() {
- mAllAppsGrid.zoom(1.0f);
+ boolean isAllAppsOpaque() {
+ return mAllAppsGrid.isOpaque();
+ }
+
+ void showAllApps(boolean animated) {
+ mAllAppsGrid.zoom(1.0f, animated);
//mWorkspace.hide();
+ mWorkspace.startFading(false);
+
mAllAppsGrid.setFocusable(true);
mAllAppsGrid.requestFocus();
@@ -1833,10 +1830,10 @@ public final class Launcher extends Activity
void closeAllApps(boolean animated) {
if (mAllAppsGrid.isVisible()) {
- mAllAppsGrid.zoom(0.0f);
+ mAllAppsGrid.zoom(0.0f, animated);
mAllAppsGrid.setFocusable(false);
mWorkspace.getChildAt(mWorkspace.getCurrentScreen()).requestFocus();
-
+ mWorkspace.startFading(true);
// TODO: fade these two too
/*
@@ -2138,11 +2135,6 @@ public final class Launcher extends Activity
}
}
- final boolean allApps = mSavedState.getBoolean(RUNTIME_STATE_ALL_APPS_FOLDER, false);
- if (allApps) {
- showAllApps();
- }
-
mSavedState = null;
}
diff --git a/src/com/android/launcher2/Workspace.java b/src/com/android/launcher2/Workspace.java
index aa11e93..3b038cb 100644
--- a/src/com/android/launcher2/Workspace.java
+++ b/src/com/android/launcher2/Workspace.java
@@ -48,7 +48,7 @@ import java.util.ArrayList;
* A workspace is meant to be used with a fixed width only.
*/
public class Workspace extends ViewGroup implements DropTarget, DragSource, DragScroller {
- //private static final String TAG = "Launcher.Workspace";
+ private static final String TAG = "Launcher.Workspace";
private static final int INVALID_SCREEN = -1;
/**
@@ -111,6 +111,8 @@ public class Workspace extends ViewGroup implements DropTarget, DragSource, Drag
private Drawable mPreviousIndicator;
private Drawable mNextIndicator;
+ private boolean mFading = true;
+
/**
* Used to inflate the Workspace from XML.
*
@@ -474,8 +476,25 @@ public class Workspace extends ViewGroup implements DropTarget, DragSource, Drag
}
}
+ public void startFading(boolean dest) {
+ mFading = dest;
+ invalidate();
+ }
+
@Override
protected void dispatchDraw(Canvas canvas) {
+ final boolean allAppsOpaque = mLauncher.isAllAppsOpaque();
+ if (mFading == allAppsOpaque) {
+ invalidate();
+ } else {
+ mFading = !allAppsOpaque;
+ }
+ if (allAppsOpaque) {
+ // If the launcher is up, draw black.
+ canvas.drawARGB(0xff, 0, 0, 0);
+ return;
+ }
+
if (Launcher.lastStartTime != 0) {
int itemCount = 0;
for (int i=0; i<getChildCount(); i++) {
@@ -790,6 +809,34 @@ public class Workspace extends ViewGroup implements DropTarget, DragSource, Drag
return mTouchState != TOUCH_STATE_REST;
}
+ /**
+ * If one of our descendant views decides that it could be focused now, only
+ * pass that along if it's on the current screen.
+ *
+ * This happens when live folders requery, and if they're off screen, they
+ * end up calling requestFocus, which pulls it on screen.
+ */
+ @Override
+ public void focusableViewAvailable(View focused) {
+ View current = getChildAt(mCurrentScreen);
+ View v = focused;
+ while (true) {
+ if (v == current) {
+ super.focusableViewAvailable(focused);
+ return;
+ }
+ if (v == this) {
+ return;
+ }
+ ViewParent parent = v.getParent();
+ if (parent instanceof View) {
+ v = (View)v.getParent();
+ } else {
+ return;
+ }
+ }
+ }
+
void enableChildrenCache(int fromScreen, int toScreen) {
if (fromScreen > toScreen) {
fromScreen = toScreen;