am 3a8820bd: Fix bug 2250457 - Open folder on home screen changes changes the behaviour of the home button

Merge commit '3a8820bdbad90642cf5cda4b00a8c92ecb699159' into eclair-mr2

* commit '3a8820bdbad90642cf5cda4b00a8c92ecb699159':
  Fix bug 2250457 - Open folder on home screen changes changes the behaviour of the home button
This commit is contained in:
Joe Onorato
2009-11-11 17:08:44 -08:00
committed by Android Git Automerger
4 changed files with 139 additions and 58 deletions
+6
View File
@@ -126,6 +126,12 @@ void moveTo() {
// debugF("======= moveTo", state->targetPos);
}
void setZoom() {
g_Zoom = state->zoomTarget;
g_DrawLastFrame = 1;
updateReadback();
}
void fling() {
g_LastTouchDown = 0;
g_PosVelocity = -state->flingVelocity * 4;
+59 -23
View File
@@ -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) {
return;
}
public void zoom(float zoom, boolean 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;
if (mRollo == null || !mRollo.mHasSurface) {
mZoomDirty = true;
mNextZoom = zoom;
mNextAnimate = animate;
return;
} else {
mRollo.mState.zoomTarget = 0;
mRollo.setZoom(zoom, animate);
}
mRollo.mState.save();
}
public boolean isVisible() {
if (mRollo == null) {
return false;
if (mZoomDirty) {
return mNextZoom > 0.001f;
} else {
if (mRollo == null) {
return false;
} else {
return mRollo.mMessageProc.mZoom > 0.001f;
}
}
}
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();
+26 -34
View File
@@ -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(false);
closeAllApps(true);
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;
}
+48 -1
View File
@@ -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;