From c3cb6c9b22ffd9907fd602fcace763c4ba9525e9 Mon Sep 17 00:00:00 2001 From: Adam Powell Date: Tue, 14 Jul 2015 19:08:39 -0700 Subject: Relax strict ActionMode instance checking when finishing action modes In previous platform versions, finishing an action mode would clean up the current action mode even if it was not the same ActionMode instance. Some common shared code inadvertently relied on this behavior, so stay bug-compatible with it based on targetSdkVersion. New apps will get the stricter behavior. Bug 22265882 Change-Id: Id5d6341aefc07a3cb788d5d6d0b531816f761e42 --- .../com/android/internal/policy/PhoneWindow.java | 26 ++++++++++++++++++++-- 1 file changed, 24 insertions(+), 2 deletions(-) (limited to 'core/java/com') diff --git a/core/java/com/android/internal/policy/PhoneWindow.java b/core/java/com/android/internal/policy/PhoneWindow.java index 016d010..9bd2eec 100644 --- a/core/java/com/android/internal/policy/PhoneWindow.java +++ b/core/java/com/android/internal/policy/PhoneWindow.java @@ -27,6 +27,7 @@ import android.animation.Animator; import android.animation.ObjectAnimator; import android.app.ActivityManagerNative; import android.app.SearchManager; +import android.os.Build; import android.os.UserHandle; import android.view.ActionMode; @@ -3531,7 +3532,28 @@ public class PhoneWindow extends Window implements MenuBuilder.Callback { public void onDestroyActionMode(ActionMode mode) { mWrapped.onDestroyActionMode(mode); - if (mode == mPrimaryActionMode) { + final boolean isMncApp = mContext.getApplicationInfo().targetSdkVersion + >= Build.VERSION_CODES.MNC; + final boolean isPrimary; + final boolean isFloating; + if (isMncApp) { + isPrimary = mode == mPrimaryActionMode; + isFloating = mode == mFloatingActionMode; + if (!isPrimary && mode.getType() == ActionMode.TYPE_PRIMARY) { + Log.e(TAG, "Destroying unexpected ActionMode instance of TYPE_PRIMARY; " + + mode + " was not the current primary action mode! Expected " + + mPrimaryActionMode); + } + if (!isFloating && mode.getType() == ActionMode.TYPE_FLOATING) { + Log.e(TAG, "Destroying unexpected ActionMode instance of TYPE_FLOATING; " + + mode + " was not the current floating action mode! Expected " + + mFloatingActionMode); + } + } else { + isPrimary = mode.getType() == ActionMode.TYPE_PRIMARY; + isFloating = mode.getType() == ActionMode.TYPE_FLOATING; + } + if (isPrimary) { if (mPrimaryActionModePopup != null) { removeCallbacks(mShowPrimaryActionModePopup); } @@ -3569,7 +3591,7 @@ public class PhoneWindow extends Window implements MenuBuilder.Callback { } mPrimaryActionMode = null; - } else if (mode == mFloatingActionMode) { + } else if (isFloating) { cleanupFloatingActionModeViews(); mFloatingActionMode = null; } -- cgit v1.1