diff options
author | Sunny Goyal <sunnygoyal@google.com> | 2019-05-14 15:23:48 -0700 |
---|---|---|
committer | Sunny Goyal <sunnygoyal@google.com> | 2019-05-15 16:33:06 -0700 |
commit | dedda05568a3f144c548d60e2bb1d7f5e7c58c6c (patch) | |
tree | e075cf6cd4d7fa5981428d14a00c132ba21837c2 /src/com/android/launcher3/Launcher.java | |
parent | 7daf892f66d58715863c1ec4fb3f6f7cd373654d (diff) | |
download | android_packages_apps_Trebuchet-dedda05568a3f144c548d60e2bb1d7f5e7c58c6c.tar.gz android_packages_apps_Trebuchet-dedda05568a3f144c548d60e2bb1d7f5e7c58c6c.tar.bz2 android_packages_apps_Trebuchet-dedda05568a3f144c548d60e2bb1d7f5e7c58c6c.zip |
Using a proxy activity for startActivityForResult
This ensures that the home task is never blocked by a different task
Bug: 74500048
Change-Id: I01fd26f1d6242e39b2d8fabac5e064b748aebe62
Diffstat (limited to 'src/com/android/launcher3/Launcher.java')
-rw-r--r-- | src/com/android/launcher3/Launcher.java | 47 |
1 files changed, 39 insertions, 8 deletions
diff --git a/src/com/android/launcher3/Launcher.java b/src/com/android/launcher3/Launcher.java index 359d8d932..40eb912df 100644 --- a/src/com/android/launcher3/Launcher.java +++ b/src/com/android/launcher3/Launcher.java @@ -72,7 +72,6 @@ import android.view.LayoutInflater; import android.view.Menu; import android.view.View; import android.view.ViewGroup; -import android.view.WindowManager; import android.view.accessibility.AccessibilityEvent; import android.view.animation.OvershootInterpolator; import android.widget.Toast; @@ -191,6 +190,8 @@ public class Launcher extends BaseDraggingActivity implements LauncherExterns, private static final String RUNTIME_STATE = "launcher.state"; // Type: PendingRequestArgs private static final String RUNTIME_STATE_PENDING_REQUEST_ARGS = "launcher.request_args"; + // Type: int + private static final String RUNTIME_STATE_PENDING_REQUEST_CODE = "launcher.request_code"; // Type: ActivityResultInfo private static final String RUNTIME_STATE_PENDING_ACTIVITY_RESULT = "launcher.activity_result"; // Type: SparseArray<Parcelable> @@ -264,6 +265,8 @@ public class Launcher extends BaseDraggingActivity implements LauncherExterns, * {@link #startActivityForResult(Intent, int)} or {@link #requestPermissions(String[], int)} */ private PendingRequestArgs mPendingRequestArgs; + // Request id for any pending activity result + private int mPendingActivityRequestCode = -1; public ViewGroupFocusHelper mFocusHandler; @@ -762,6 +765,7 @@ public class Launcher extends BaseDraggingActivity implements LauncherExterns, @Override public void onActivityResult( final int requestCode, final int resultCode, final Intent data) { + mPendingActivityRequestCode = -1; handleActivityResult(requestCode, resultCode, data); if (mLauncherCallbacks != null) { mLauncherCallbacks.onActivityResult(requestCode, resultCode, data); @@ -890,9 +894,21 @@ public class Launcher extends BaseDraggingActivity implements LauncherExterns, UiFactory.onLauncherStateOrResumeChanged(this); AppLaunchTracker.INSTANCE.get(this).onReturnedToHome(); + resetPendingActivityResultIfNeeded(); + } + } + + private void resetPendingActivityResultIfNeeded() { + if (hasBeenResumed() && mPendingActivityRequestCode != -1 && isInState(NORMAL)) { + UiFactory.resetPendingActivityResults(this, mPendingActivityRequestCode); } } + protected void onStateSet(LauncherState state) { + getAppWidgetHost().setResumed(state == LauncherState.NORMAL); + resetPendingActivityResultIfNeeded(); + } + @Override protected void onResume() { RaceConditionTracker.onEvent(ON_RESUME_EVT, ENTER); @@ -1009,6 +1025,7 @@ public class Launcher extends BaseDraggingActivity implements LauncherExterns, if (requestArgs != null) { setWaitingForResult(requestArgs); } + mPendingActivityRequestCode = savedState.getInt(RUNTIME_STATE_PENDING_REQUEST_CODE); mPendingActivityResult = savedState.getParcelable(RUNTIME_STATE_PENDING_ACTIVITY_RESULT); @@ -1392,6 +1409,8 @@ public class Launcher extends BaseDraggingActivity implements LauncherExterns, if (mPendingRequestArgs != null) { outState.putParcelable(RUNTIME_STATE_PENDING_REQUEST_ARGS, mPendingRequestArgs); } + outState.putInt(RUNTIME_STATE_PENDING_REQUEST_CODE, mPendingActivityRequestCode); + if (mPendingActivityResult != null) { outState.putParcelable(RUNTIME_STATE_PENDING_ACTIVITY_RESULT, mPendingActivityResult); } @@ -1448,17 +1467,29 @@ public class Launcher extends BaseDraggingActivity implements LauncherExterns, @Override public void startActivityForResult(Intent intent, int requestCode, Bundle options) { - super.startActivityForResult(intent, requestCode, options); + if (requestCode != -1) { + mPendingActivityRequestCode = requestCode; + } + if (requestCode == -1 + || !UiFactory.startActivityForResult(this, intent, requestCode, options)) { + super.startActivityForResult(intent, requestCode, options); + } } @Override - public void startIntentSenderForResult (IntentSender intent, int requestCode, + public void startIntentSenderForResult(IntentSender intent, int requestCode, Intent fillInIntent, int flagsMask, int flagsValues, int extraFlags, Bundle options) { - try { - super.startIntentSenderForResult(intent, requestCode, - fillInIntent, flagsMask, flagsValues, extraFlags, options); - } catch (IntentSender.SendIntentException e) { - throw new ActivityNotFoundException(); + if (requestCode != -1) { + mPendingActivityRequestCode = requestCode; + } + if (requestCode == -1 || !UiFactory.startIntentSenderForResult(this, intent, requestCode, + fillInIntent, flagsMask, flagsValues, extraFlags, options)) { + try { + super.startIntentSenderForResult(intent, requestCode, + fillInIntent, flagsMask, flagsValues, extraFlags, options); + } catch (IntentSender.SendIntentException e) { + throw new ActivityNotFoundException(); + } } } |