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 Original line Diff line number Diff line
@@ -86,6 +86,7 @@ import android.app.IApplicationThread;
import android.app.PendingIntent;
import android.app.PendingIntent;
import android.app.ProfilerInfo;
import android.app.ProfilerInfo;
import android.app.WaitResult;
import android.app.WaitResult;
import android.content.ComponentName;
import android.content.IIntentSender;
import android.content.IIntentSender;
import android.content.Intent;
import android.content.Intent;
import android.content.IntentSender;
import android.content.IntentSender;
@@ -1221,6 +1222,20 @@ class ActivityStarter {
        mController.onExecutionComplete(this);
        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,
    boolean shouldAbortBackgroundActivityStart(int callingUid, int callingPid,
            final String callingPackage, int realCallingUid, int realCallingPid,
            final String callingPackage, int realCallingUid, int realCallingPid,
            WindowProcessController callerApp, PendingIntentRecord originatingPendingIntent,
            WindowProcessController callerApp, PendingIntentRecord originatingPendingIntent,
@@ -1236,7 +1251,7 @@ class ActivityStarter {
        }
        }


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