Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 715a1dcf authored by Wale Ogunwale's avatar Wale Ogunwale
Browse files

Use realActivity name when comparing if intents are the same

The TaskRecord intent (usually the intent of the root activity) component
names are based on the realActivity (the activity we are actually launching
and not the input alias) and the ActivityRecord intent is based on the input
component name which can be an alias. This leads to issues when we are trying
to compare the intent of a task and an activity to see if they resolve to
the same thing since the component names will be different in the case of
aliasing.
We know base the activity intent component name on the realActivity before
comparing with the task record intent.

Bug: 27403679
Bug: 27112965
Change-Id: I196e03bb018582cbac977fb3ad45354f00f51578
parent 3f3d42e0
Loading
Loading
Loading
Loading
+1 −1
Original line number Diff line number Diff line
@@ -1416,7 +1416,7 @@ class ActivityStarter {
                }
                intentActivity.deliverNewIntentLocked(mCallingUid, mStartActivity.intent,
                        mStartActivity.launchedFromPackage);
            } else if (!mStartActivity.intent.filterEquals(intentActivity.intent)) {
            } else if (!intentActivity.task.isSameIntentResolution(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;
+13 −0
Original line number Diff line number Diff line
@@ -469,6 +469,19 @@ final class TaskRecord {
        setLockTaskAuth();
    }

    /**
     * Return true if the input activity has the same intent resolution as the intent this task
     * record is based on (normally the root activity intent).
     */
    boolean isSameIntentResolution(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
        // the component name pointing to the real activity not the alias in the activity record.
        intent.setComponent(r.realActivity);
        return this.intent.filterEquals(intent);
    }

    void setTaskToReturnTo(int taskToReturnTo) {
        mTaskToReturnTo = (taskToReturnTo == RECENTS_ACTIVITY_TYPE)
                ? HOME_ACTIVITY_TYPE : taskToReturnTo;