Merge "Fix task selection logic" into nyc-dev
am: 265bd89c3c
* commit '265bd89c3cb6f99d38d2f126a88c12fc6502431c':
Fix task selection logic
Change-Id: Ic80d782ca53d8cf7a565a9337a686441edbd2c72
This commit is contained in:
@@ -785,17 +785,8 @@ final class ActivityStack {
|
||||
+ taskIntent.getComponent().flattenToShortString()
|
||||
+ "/aff=" + r.task.rootAffinity + " to new cls="
|
||||
+ intent.getComponent().flattenToShortString() + "/aff=" + info.taskAffinity);
|
||||
if (!isDocument && !taskIsDocument
|
||||
&& result.r == null && task.canMatchRootAffinity()) {
|
||||
if (task.rootAffinity.equals(target.taskAffinity)) {
|
||||
if (DEBUG_TASKS) Slog.d(TAG_TASKS, "Found matching affinity candidate!");
|
||||
// It is possible for multiple tasks to have the same root affinity especially
|
||||
// if they are in separate stacks. We save off this candidate, but keep looking
|
||||
// to see if there is a better candidate.
|
||||
result.r = r;
|
||||
result.matchedByRootAffinity = true;
|
||||
}
|
||||
} else if (taskIntent != null && taskIntent.getComponent() != null &&
|
||||
// TODO Refactor to remove duplications. Check if logic can be simplified.
|
||||
if (taskIntent != null && taskIntent.getComponent() != null &&
|
||||
taskIntent.getComponent().compareTo(cls) == 0 &&
|
||||
Objects.equals(documentData, taskDocumentData)) {
|
||||
if (DEBUG_TASKS) Slog.d(TAG_TASKS, "Found matching class!");
|
||||
@@ -815,6 +806,16 @@ final class ActivityStack {
|
||||
result.r = r;
|
||||
result.matchedByRootAffinity = false;
|
||||
break;
|
||||
} else if (!isDocument && !taskIsDocument
|
||||
&& result.r == null && task.canMatchRootAffinity()) {
|
||||
if (task.rootAffinity.equals(target.taskAffinity)) {
|
||||
if (DEBUG_TASKS) Slog.d(TAG_TASKS, "Found matching affinity candidate!");
|
||||
// It is possible for multiple tasks to have the same root affinity especially
|
||||
// if they are in separate stacks. We save off this candidate, but keep looking
|
||||
// to see if there is a better candidate.
|
||||
result.r = r;
|
||||
result.matchedByRootAffinity = true;
|
||||
}
|
||||
} else if (DEBUG_TASKS) Slog.d(TAG_TASKS, "Not a match: " + task);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1580,7 +1580,7 @@ class ActivityStarter {
|
||||
}
|
||||
intentActivity.deliverNewIntentLocked(mCallingUid, mStartActivity.intent,
|
||||
mStartActivity.launchedFromPackage);
|
||||
} else if (!intentActivity.task.isSameIntentResolution(mStartActivity)) {
|
||||
} else if (!intentActivity.task.isSameIntentFilter(mStartActivity)) {
|
||||
// In this case we are launching the root activity of the task, but with a
|
||||
// different intent. We should start a new instance on top.
|
||||
mAddingToTask = true;
|
||||
|
||||
@@ -492,10 +492,10 @@ final class TaskRecord {
|
||||
}
|
||||
|
||||
/**
|
||||
* Return true if the input activity has the same intent resolution as the intent this task
|
||||
* Return true if the input activity has the same intent filter as the intent this task
|
||||
* record is based on (normally the root activity intent).
|
||||
*/
|
||||
boolean isSameIntentResolution(ActivityRecord r) {
|
||||
boolean isSameIntentFilter(ActivityRecord r) {
|
||||
final Intent intent = new Intent(r.intent);
|
||||
// Correct the activity intent for aliasing. The task record intent will always be based on
|
||||
// the real activity that will be launched not the alias, so we need to use an intent with
|
||||
|
||||
Reference in New Issue
Block a user