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

Commit ff59d618 authored by Achim Thesmann's avatar Achim Thesmann
Browse files

Use the new enum value to check if we grant BAL permission

Test: atest BackgroundActivityLaunchTest BackgroundActivityStartContriller*Test
Flag: com.android.window.flags.bal_additional_start_modes
Bug: 352182359
Change-Id: I1eaaebd31c4e06c71f46b28094e444083892d6ad
parent d066266e
Loading
Loading
Loading
Loading
+23 −5
Original line number Diff line number Diff line
@@ -20,9 +20,11 @@ import static android.Manifest.permission.START_ACTIVITIES_FROM_BACKGROUND;
import static android.app.ActivityManager.PROCESS_STATE_NONEXISTENT;
import static android.app.ActivityOptions.BackgroundActivityStartMode;
import static android.app.ActivityOptions.MODE_BACKGROUND_ACTIVITY_START_ALLOWED;
import static android.app.ActivityOptions.MODE_BACKGROUND_ACTIVITY_START_ALLOW_ALWAYS;
import static android.app.ActivityOptions.MODE_BACKGROUND_ACTIVITY_START_COMPAT;
import static android.app.ActivityOptions.MODE_BACKGROUND_ACTIVITY_START_DENIED;
import static android.app.ActivityOptions.MODE_BACKGROUND_ACTIVITY_START_SYSTEM_DEFINED;
import static android.app.ActivityOptions.MODE_BACKGROUND_ACTIVITY_START_ALLOW_IF_VISIBLE;
import static android.content.Intent.FLAG_ACTIVITY_NEW_TASK;
import static android.content.pm.PackageManager.PERMISSION_GRANTED;
import static android.os.Build.VERSION_CODES.UPSIDE_DOWN_CAKE;
@@ -226,6 +228,21 @@ public class BackgroundActivityStartController {
        };
    }

    static String balStartModeToString(@BackgroundActivityStartMode int startMode) {
        return switch (startMode) {
            case MODE_BACKGROUND_ACTIVITY_START_ALLOWED -> "MODE_BACKGROUND_ACTIVITY_START_ALLOWED";
            case MODE_BACKGROUND_ACTIVITY_START_SYSTEM_DEFINED ->
                    "MODE_BACKGROUND_ACTIVITY_START_SYSTEM_DEFINED";
            case MODE_BACKGROUND_ACTIVITY_START_COMPAT -> "MODE_BACKGROUND_ACTIVITY_START_COMPAT";
            case MODE_BACKGROUND_ACTIVITY_START_DENIED -> "MODE_BACKGROUND_ACTIVITY_START_DENIED";
            case MODE_BACKGROUND_ACTIVITY_START_ALLOW_ALWAYS ->
                    "MODE_BACKGROUND_ACTIVITY_START_ALWAYS";
            case MODE_BACKGROUND_ACTIVITY_START_ALLOW_IF_VISIBLE ->
                    "MODE_BACKGROUND_ACTIVITY_START_ALLOW_IF_VISIBLE";
            default -> "MODE_BACKGROUND_ACTIVITY_START_ALLOWED(" + startMode + ")";
        };
    }

    @GuardedBy("mService.mGlobalLock")
    private final HashMap<Integer, FinishedActivityEntry> mTaskIdToFinishedActivity =
            new HashMap<>();
@@ -464,10 +481,6 @@ public class BackgroundActivityStartController {
            this.mResultForRealCaller = resultForRealCaller;
        }

        public boolean isPendingIntentBalAllowedByPermission() {
            return PendingIntentRecord.isPendingIntentBalAllowedByPermission(mCheckedOptions);
        }

        public boolean callerExplicitOptInOrAutoOptIn() {
            if (mAutoOptInCaller) {
                return !callerExplicitOptOut();
@@ -528,6 +541,8 @@ public class BackgroundActivityStartController {
            sb.append("; balAllowedByPiCreatorWithHardening: ")
                    .append(mBalAllowedByPiCreatorWithHardening);
            sb.append("; resultIfPiCreatorAllowsBal: ").append(mResultForCaller);
            sb.append("; callerStartMode: ").append(balStartModeToString(
                    mCheckedOptions.getPendingIntentBackgroundActivityStartMode()));
            sb.append("; hasRealCaller: ").append(hasRealCaller());
            sb.append("; isCallForResult: ").append(mIsCallForResult);
            sb.append("; isPendingIntent: ").append(isPendingIntent());
@@ -553,6 +568,8 @@ public class BackgroundActivityStartController {
                }
                sb.append("; balAllowedByPiSender: ").append(mBalAllowedByPiSender);
                sb.append("; resultIfPiSenderAllowsBal: ").append(mResultForRealCaller);
                sb.append("; realCallerStartMode: ").append(balStartModeToString(
                        mCheckedOptions.getPendingIntentCreatorBackgroundActivityStartMode()));
            }
            // features
            sb.append("; balImproveRealCallerVisibilityCheck: ")
@@ -949,7 +966,8 @@ public class BackgroundActivityStartController {
            }
        }

        if (state.isPendingIntentBalAllowedByPermission()
        if (state.mCheckedOptions.getPendingIntentBackgroundActivityStartMode()
                == MODE_BACKGROUND_ACTIVITY_START_ALLOW_ALWAYS
                && hasBalPermission(state.mRealCallingUid, state.mRealCallingPid)) {
            return new BalVerdict(BAL_ALLOW_PERMISSION,
                    /*background*/ false,