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 | |
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')
-rw-r--r-- | src/com/android/launcher3/Launcher.java | 47 | ||||
-rw-r--r-- | src/com/android/launcher3/LauncherStateManager.java | 2 | ||||
-rw-r--r-- | src/com/android/launcher3/dragndrop/DragView.java | 25 |
3 files changed, 64 insertions, 10 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(); + } } } diff --git a/src/com/android/launcher3/LauncherStateManager.java b/src/com/android/launcher3/LauncherStateManager.java index f5040b3ba..b1a3fc992 100644 --- a/src/com/android/launcher3/LauncherStateManager.java +++ b/src/com/android/launcher3/LauncherStateManager.java @@ -452,7 +452,7 @@ public class LauncherStateManager { } mState = state; mState.onStateEnabled(mLauncher); - mLauncher.getAppWidgetHost().setResumed(state == LauncherState.NORMAL); + mLauncher.onStateSet(mState); if (state.disablePageClipping) { // Only disable clipping if needed, otherwise leave it as previous value. diff --git a/src/com/android/launcher3/dragndrop/DragView.java b/src/com/android/launcher3/dragndrop/DragView.java index 77b2cdc34..7af12c57d 100644 --- a/src/com/android/launcher3/dragndrop/DragView.java +++ b/src/com/android/launcher3/dragndrop/DragView.java @@ -46,6 +46,8 @@ import com.android.launcher3.ItemInfo; import com.android.launcher3.Launcher; import com.android.launcher3.LauncherModel; import com.android.launcher3.LauncherSettings; +import com.android.launcher3.LauncherState; +import com.android.launcher3.LauncherStateManager; import com.android.launcher3.R; import com.android.launcher3.Utilities; import com.android.launcher3.FirstFrameAnimatorHelper; @@ -60,7 +62,7 @@ import androidx.dynamicanimation.animation.FloatPropertyCompat; import androidx.dynamicanimation.animation.SpringAnimation; import androidx.dynamicanimation.animation.SpringForce; -public class DragView extends View { +public class DragView extends View implements LauncherStateManager.StateListener { private static final ColorMatrix sTempMatrix1 = new ColorMatrix(); private static final ColorMatrix sTempMatrix2 = new ColorMatrix(); @@ -172,6 +174,27 @@ public class DragView extends View { setElevation(getResources().getDimension(R.dimen.drag_elevation)); } + @Override + protected void onAttachedToWindow() { + super.onAttachedToWindow(); + mLauncher.getStateManager().addStateListener(this); + } + + @Override + protected void onDetachedFromWindow() { + super.onDetachedFromWindow(); + mLauncher.getStateManager().removeStateListener(this); + } + + @Override + public void onStateTransitionStart(LauncherState toState) { } + + @Override + public void onStateTransitionComplete(LauncherState finalState) { + setVisibility((finalState == LauncherState.NORMAL + || finalState == LauncherState.SPRING_LOADED) ? VISIBLE : INVISIBLE); + } + /** * Initialize {@code #mIconDrawable} if the item can be represented using * an {@link AdaptiveIconDrawable} or {@link FolderAdaptiveIcon}. |