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

Commit 4291c76e authored by Tony Mak's avatar Tony Mak
Browse files

Use FLAG_ACTIVITY_TASK_ON_HOME to make sure back button brings user to home

In work challenge, we want to show home when user taps back button.
Previously, we do this by launching launcher before showing work challenge.
We now use FLAG_ACTIVITY_TASK_ON_HOME instead.

Bug: 27826548
Change-Id: I74cca611bf00c6f53b4752f2967a0c729ddf2d61
parent 482c7da6
Loading
Loading
Loading
Loading
+8 −10
Original line number Diff line number Diff line
@@ -11422,18 +11422,16 @@ public final class ActivityManagerService extends ActivityManagerNative
                try {
                    final int currentUserId = mUserController.getCurrentUserIdLocked();
                    // Get the focused task before launching launcher.
                    final int taskId = (mFocusedActivity == null)
                            ? -1 : mFocusedActivity.task.taskId;
                    startHomeActivityLocked(currentUserId, "notifyLockedProfile");
                    if (mUserController.isLockScreenDisabled(currentUserId)) {
                        // If there is no device lock, we first go to launcher and then resume the
                        // original task. Work challenge will be shown because we intercepted
                        // startActivityFromRecentsInner and the reason why we switch to home stack
                        // first is to prevent pressing back button brings user back to the work
                        // app.
                        if (taskId != -1) {
                            startActivityFromRecentsInner(taskId, null);
                        // If there is no device lock, we will show the profile's credential page.
                        // startActivityFromRecentsInner is intercepted and will forward user to it.
                        if (mFocusedActivity != null) {
                            startActivityFromRecentsInner(mFocusedActivity.task.taskId, null);
                        }
                    } else {
                        // Showing launcher to avoid user entering credential twice.
                        startHomeActivityLocked(currentUserId, "notifyLockedProfile");
                    }
                } finally {
                    Binder.restoreCallingIdentity(ident);
+3 −2
Original line number Diff line number Diff line
@@ -26,6 +26,7 @@ import static android.content.Intent.EXTRA_PACKAGE_NAME;
import static android.content.Intent.EXTRA_TASK_ID;
import static android.content.Intent.FLAG_ACTIVITY_EXCLUDE_FROM_RECENTS;
import static android.content.Intent.FLAG_ACTIVITY_NEW_TASK;
import static android.content.Intent.FLAG_ACTIVITY_TASK_ON_HOME;
import static android.content.pm.ApplicationInfo.FLAG_SUSPENDED;

import android.app.KeyguardManager;
@@ -192,14 +193,14 @@ class ActivityStartInterceptor {
                Binder.getCallingUid(), userId, null, null, 0, new Intent[]{ intent },
                new String[]{ resolvedType },
                FLAG_CANCEL_CURRENT | FLAG_ONE_SHOT | FLAG_IMMUTABLE, null);
        final int flags = intent.getFlags();
        final KeyguardManager km = (KeyguardManager) mService.mContext
                .getSystemService(KEYGUARD_SERVICE);
        final Intent newIntent = km.createConfirmDeviceCredentialIntent(null, null, userId);
        if (newIntent == null) {
            return null;
        }
        newIntent.setFlags(flags | FLAG_ACTIVITY_NEW_TASK | FLAG_ACTIVITY_EXCLUDE_FROM_RECENTS);
        newIntent.setFlags(FLAG_ACTIVITY_NEW_TASK | FLAG_ACTIVITY_EXCLUDE_FROM_RECENTS |
                FLAG_ACTIVITY_TASK_ON_HOME);
        newIntent.putExtra(EXTRA_PACKAGE_NAME, aInfo.packageName);
        newIntent.putExtra(EXTRA_INTENT, new IntentSender(target));
        return newIntent;