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

Commit 0a5004aa authored by Chris Li's avatar Chris Li
Browse files

Use compat framework to guard bundling LaunchActivityItem

Bug: 324203798
Test: pass existing tests
Change-Id: Icbb771c6a05d43b881c07f031fd95c53aa562922
parent 24128834
Loading
Loading
Loading
Loading
+2 −2
Original line number Diff line number Diff line
@@ -75,7 +75,7 @@ import static com.android.server.wm.ActivityTaskManagerDebugConfig.TAG_WITH_CLAS
import static com.android.server.wm.ActivityTaskManagerService.ANIMATE;
import static com.android.server.wm.ActivityTaskManagerService.H.FIRST_SUPERVISOR_TASK_MSG;
import static com.android.server.wm.ActivityTaskManagerService.RELAUNCH_REASON_NONE;
import static com.android.server.wm.ClientLifecycleManager.shouldDispatchCompatClientTransactionIndependently;
import static com.android.server.wm.ClientLifecycleManager.shouldDispatchLaunchActivityItemIndependently;
import static com.android.server.wm.LockTaskController.LOCK_TASK_AUTH_ALLOWLISTED;
import static com.android.server.wm.LockTaskController.LOCK_TASK_AUTH_LAUNCHABLE;
import static com.android.server.wm.LockTaskController.LOCK_TASK_AUTH_LAUNCHABLE_PRIV;
@@ -953,7 +953,7 @@ public class ActivityTaskSupervisor implements RecentTasks.Callbacks {
                }

                // Schedule transaction.
                if (shouldDispatchCompatClientTransactionIndependently(r.mTargetSdk)) {
                if (shouldDispatchLaunchActivityItemIndependently(r.info.packageName, r.getUid())) {
                    // LaunchActivityItem has @UnsupportedAppUsage usages.
                    // Guard the bundleClientTransactionFlag feature with targetSDK on Android 15+.
                    // To not bundle the transaction, dispatch the pending before schedule new
+20 −11
Original line number Diff line number Diff line
@@ -18,14 +18,19 @@ package com.android.server.wm;

import android.annotation.NonNull;
import android.app.IApplicationThread;
import android.app.compat.CompatChanges;
import android.app.servertransaction.ActivityLifecycleItem;
import android.app.servertransaction.ClientTransaction;
import android.app.servertransaction.ClientTransactionItem;
import android.app.servertransaction.LaunchActivityItem;
import android.compat.annotation.ChangeId;
import android.compat.annotation.EnabledSince;
import android.os.Binder;
import android.os.Build;
import android.os.IBinder;
import android.os.RemoteException;
import android.os.Trace;
import android.os.UserHandle;
import android.util.ArrayMap;
import android.util.Slog;

@@ -42,6 +47,15 @@ class ClientLifecycleManager {

    private static final String TAG = "ClientLifecycleManager";

    /**
     * To prevent any existing apps from having app compat issue with the non-sdk usages of
     * {@link ClientTransaction#getActivityToken()}, only allow bundling {@link LaunchActivityItem}
     * for apps with targetSDK of V and above.
     */
    @ChangeId
    @EnabledSince(targetSdkVersion = Build.VERSION_CODES.VANILLA_ICE_CREAM)
    private static final long ENABLE_BUNDLE_LAUNCH_ACTIVITY_ITEM = 324203798L;

    /** Mapping from client process binder to its pending transaction. */
    @VisibleForTesting
    final ArrayMap<IBinder, ClientTransaction> mPendingTransactions = new ArrayMap<>();
@@ -251,16 +265,11 @@ class ClientLifecycleManager {
                && !mWms.mWindowPlacerLocked.isInLayout();
    }

    /**
     * Guards the bundleClientTransactionFlag feature with targetSDK on Android 15+.
     *
     * Suppressing because it can't guard with @EnabledSince on VANILLA_ICE_CREAM yet since the
     * version is not published.
     *
     * TODO(b/324203798): update in V
     */
    @SuppressWarnings("AndroidFrameworkCompatChange")
    static boolean shouldDispatchCompatClientTransactionIndependently(int appTargetSdk) {
        return appTargetSdk <= Build.VERSION_CODES.UPSIDE_DOWN_CAKE;
    /** Guards bundling {@link LaunchActivityItem} with targetSDK. */
    static boolean shouldDispatchLaunchActivityItemIndependently(
            @NonNull String appPackageName, int appUid) {
        return !CompatChanges.isChangeEnabled(ENABLE_BUNDLE_LAUNCH_ACTIVITY_ITEM,
                appPackageName,
                UserHandle.getUserHandleForUid(appUid));
    }
}