diff options
| author | 2016-06-16 16:00:20 -0700 | |
|---|---|---|
| committer | 2016-06-17 12:41:39 -0700 | |
| commit | d3bbb13fe29e8b6c931497daeb124669e050b419 (patch) | |
| tree | 54ab4882dd4c7fe84d4a7d0bf63ed4f490e14312 | |
| parent | fc70b073858090d66323016e8985560816c8babb (diff) | |
Compare intent filter when launching adjacent
When we're looking for a task during adjacent launch, we need to
perform full intent filter comparison instead of just comparing
components.
Bug: 29424577
Change-Id: I10f271986a8dc405e28a053e4cb122c1e9aa6ee0
3 files changed, 18 insertions, 7 deletions
diff --git a/services/core/java/com/android/server/am/ActivityStack.java b/services/core/java/com/android/server/am/ActivityStack.java index 6af7a5db247e..9b90874c1762 100644 --- a/services/core/java/com/android/server/am/ActivityStack.java +++ b/services/core/java/com/android/server/am/ActivityStack.java @@ -825,7 +825,8 @@ final class ActivityStack { * is the same as the given activity. Returns null if no such activity * is found. */ - ActivityRecord findActivityLocked(Intent intent, ActivityInfo info) { + ActivityRecord findActivityLocked(Intent intent, ActivityInfo info, + boolean compareIntentFilters) { ComponentName cls = intent.getComponent(); if (info.targetActivity != null) { cls = new ComponentName(info.packageName, info.targetActivity); @@ -843,8 +844,16 @@ final class ActivityStack { if (notCurrentUserTask && (r.info.flags & FLAG_SHOW_FOR_ALL_USERS) == 0) { continue; } - if (!r.finishing && r.intent.getComponent().equals(cls) && r.userId == userId) { - return r; + if (!r.finishing && r.userId == userId) { + if (compareIntentFilters) { + if (r.intent.filterEquals(intent)) { + return r; + } + } else { + if (r.intent.getComponent().equals(cls)) { + return r; + } + } } } } diff --git a/services/core/java/com/android/server/am/ActivityStackSupervisor.java b/services/core/java/com/android/server/am/ActivityStackSupervisor.java index 738622fd923b..97bfeaf14ca5 100644 --- a/services/core/java/com/android/server/am/ActivityStackSupervisor.java +++ b/services/core/java/com/android/server/am/ActivityStackSupervisor.java @@ -2619,11 +2619,13 @@ public final class ActivityStackSupervisor implements DisplayListener { return mTmpFindTaskResult.r; } - ActivityRecord findActivityLocked(Intent intent, ActivityInfo info) { + ActivityRecord findActivityLocked(Intent intent, ActivityInfo info, + boolean compareIntentFilters) { for (int displayNdx = mActivityDisplays.size() - 1; displayNdx >= 0; --displayNdx) { final ArrayList<ActivityStack> stacks = mActivityDisplays.valueAt(displayNdx).mStacks; for (int stackNdx = stacks.size() - 1; stackNdx >= 0; --stackNdx) { - final ActivityRecord ar = stacks.get(stackNdx).findActivityLocked(intent, info); + final ActivityRecord ar = stacks.get(stackNdx) + .findActivityLocked(intent, info, compareIntentFilters); if (ar != null) { return ar; } diff --git a/services/core/java/com/android/server/am/ActivityStarter.java b/services/core/java/com/android/server/am/ActivityStarter.java index e42548488ebe..9c1c1cacba20 100644 --- a/services/core/java/com/android/server/am/ActivityStarter.java +++ b/services/core/java/com/android/server/am/ActivityStarter.java @@ -1409,11 +1409,11 @@ class ActivityStarter { if (mLaunchSingleInstance) { // There can be one and only one instance of single instance activity in the // history, and it is always in its own unique task, so we do a special search. - intentActivity = mSupervisor.findActivityLocked(mIntent, mStartActivity.info); + intentActivity = mSupervisor.findActivityLocked(mIntent, mStartActivity.info, false); } else if ((mLaunchFlags & FLAG_ACTIVITY_LAUNCH_ADJACENT) != 0) { // For the launch adjacent case we only want to put the activity in an existing // task if the activity already exists in the history. - intentActivity = mSupervisor.findActivityLocked(mIntent, mStartActivity.info); + intentActivity = mSupervisor.findActivityLocked(mIntent, mStartActivity.info, true); } else { // Otherwise find the best task to put the activity in. intentActivity = mSupervisor.findTaskLocked(mStartActivity); |