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

Commit c9af7ef9 authored by Chris Li's avatar Chris Li Committed by Android (Google) Code Review
Browse files

Merge "Use compat framework to guard bundling LaunchActivityItem" into main

parents 493ae53d 0a5004aa
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));
    }
}