summaryrefslogtreecommitdiffstats
path: root/packages/SystemUI/src/com/android/systemui/recents/RecentsActivity.java
diff options
context:
space:
mode:
Diffstat (limited to 'packages/SystemUI/src/com/android/systemui/recents/RecentsActivity.java')
-rw-r--r--packages/SystemUI/src/com/android/systemui/recents/RecentsActivity.java30
1 files changed, 28 insertions, 2 deletions
diff --git a/packages/SystemUI/src/com/android/systemui/recents/RecentsActivity.java b/packages/SystemUI/src/com/android/systemui/recents/RecentsActivity.java
index f4fe677..9e08599 100644
--- a/packages/SystemUI/src/com/android/systemui/recents/RecentsActivity.java
+++ b/packages/SystemUI/src/com/android/systemui/recents/RecentsActivity.java
@@ -85,6 +85,8 @@ public class RecentsActivity extends Activity implements RecentsView.RecentsView
// Runnable to be executed after we paused ourselves
Runnable mAfterPauseRunnable;
+ private ReferenceCountedTrigger mExitTrigger;
+
/**
* A common Runnable to finish Recents either by calling finish() (with a custom animation) or
* launching Home with some ActivityOptions. Generally we always launch home when we exit
@@ -95,6 +97,7 @@ public class RecentsActivity extends Activity implements RecentsView.RecentsView
class FinishRecentsRunnable implements Runnable {
Intent mLaunchIntent;
ActivityOptions mLaunchOpts;
+ boolean mAbort = false;
/**
* Creates a finish runnable that starts the specified intent, using the given
@@ -105,8 +108,15 @@ public class RecentsActivity extends Activity implements RecentsView.RecentsView
mLaunchOpts = opts;
}
+ public void setAbort(boolean run) {
+ this.mAbort = run;
+ }
+
@Override
public void run() {
+ if (mAbort) {
+ return;
+ }
// Finish Recents
if (mLaunchIntent != null) {
try {
@@ -317,13 +327,26 @@ public class RecentsActivity extends Activity implements RecentsView.RecentsView
return false;
}
+ @Override
+ public void onWindowFocusChanged(boolean hasFocus) {
+ super.onWindowFocusChanged(hasFocus);
+ if (!hasFocus && mExitTrigger != null && mExitTrigger.getCount() > 0) {
+ // we are animating recents out and the window has lost focus during the
+ // animation. we need to stop everything we're doing now and get out
+ // without any animations (since we were already animating)
+ mFinishLaunchHomeRunnable.setAbort(true);
+ finish();
+ overridePendingTransition(0, 0);
+ }
+ }
+
/** Dismisses Recents directly to Home. */
void dismissRecentsToHomeRaw(boolean animated) {
if (animated) {
- ReferenceCountedTrigger exitTrigger = new ReferenceCountedTrigger(this,
+ mExitTrigger = new ReferenceCountedTrigger(this,
null, mFinishLaunchHomeRunnable, null);
mRecentsView.startExitToHomeAnimation(
- new ViewAnimation.TaskViewExitContext(exitTrigger));
+ new ViewAnimation.TaskViewExitContext(mExitTrigger));
} else {
mFinishLaunchHomeRunnable.run();
}
@@ -458,6 +481,9 @@ public class RecentsActivity extends Activity implements RecentsView.RecentsView
@Override
protected void onStop() {
super.onStop();
+
+ mExitTrigger = null;
+
MetricsLogger.hidden(this, MetricsLogger.OVERVIEW_ACTIVITY);
RecentsTaskLoader loader = RecentsTaskLoader.getInstance();
SystemServicesProxy ssp = loader.getSystemServicesProxy();