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

Commit 7d80fc90 authored by Bernardo Rufino's avatar Bernardo Rufino
Browse files

Also check for home activity in BAL

This is a CP from ag/15216475, see b/189896361#comment25 for details

-- Original message

Since checking for home process can fail if lancher has been killed but
we still want to allow launcher to start activities.

Bug: 189896361
Test: 1. Set app 1 as launcher, give PI for random activity to app 2
      2. With app 2 in fg, kill app 1
      3. Launch PI, verify it launches
Change-Id: Ia5eb5bfcf239b6dd2f732516edeac29a77c8a478
Merged-In: Ia5eb5bfcf239b6dd2f732516edeac29a77c8a478
(cherry picked from commit 67718627)
parent 5801ebb8
Loading
Loading
Loading
Loading
+16 −1
Original line number Diff line number Diff line
@@ -86,6 +86,7 @@ import android.app.IApplicationThread;
import android.app.PendingIntent;
import android.app.ProfilerInfo;
import android.app.WaitResult;
import android.content.ComponentName;
import android.content.IIntentSender;
import android.content.Intent;
import android.content.IntentSender;
@@ -1221,6 +1222,20 @@ class ActivityStarter {
        mController.onExecutionComplete(this);
    }

    private boolean isHomeApp(int uid, @Nullable String packageName) {
        if (mService.mHomeProcess != null) {
            // Fast check
            return uid == mService.mHomeProcess.mUid;
        }
        if (packageName == null) {
            return false;
        }
        ComponentName activity =
                mService.getPackageManagerInternalLocked().getDefaultHomeActivity(
                        UserHandle.getUserId(uid));
        return activity != null && packageName.equals(activity.getPackageName());
    }

    boolean shouldAbortBackgroundActivityStart(int callingUid, int callingPid,
            final String callingPackage, int realCallingUid, int realCallingPid,
            WindowProcessController callerApp, PendingIntentRecord originatingPendingIntent,
@@ -1236,7 +1251,7 @@ class ActivityStarter {
        }

        // Always allow home application to start activities.
        if (mService.mHomeProcess != null && callingUid == mService.mHomeProcess.mUid) {
        if (isHomeApp(callingUid, callingPackage)) {
            if (DEBUG_ACTIVITY_STARTS) {
                Slog.d(TAG, "Activity start allowed for home app callingUid (" + callingUid + ")");
            }
+1 −0
Original line number Diff line number Diff line
@@ -348,6 +348,7 @@ public class ActivityStarterTests extends WindowTestsBase {
                invocation -> {
                    throw new RuntimeException("Not stubbed");
                });
        doReturn(null).when(mMockPackageManager).getDefaultHomeActivity(anyInt());
        doReturn(mMockPackageManager).when(mAtm).getPackageManagerInternalLocked();
        doReturn(false).when(mMockPackageManager).isInstantAppInstallerComponent(any());
        doReturn(null).when(mMockPackageManager).resolveIntent(any(), any(), anyInt(), anyInt(),