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

Commit 876aef9b authored by Adam Bookatz's avatar Adam Bookatz
Browse files

SpecialUserHandle annotation for Context and AM

Add @CanBeALL and @CanBeCURRENT to methods in Context and within the
ActivityManager world.

Test: N/A Just documentation annotations
Flag: EXEMPT annotations
Bug: 373455030
Change-Id: I9819f23f549bc37a1611495db8a5f16dae0eb7ee
parent 47473c5e
Loading
Loading
Loading
Loading
+7 −6
Original line number Diff line number Diff line
@@ -42,6 +42,7 @@ import android.annotation.MainThread;
import android.annotation.NonNull;
import android.annotation.Nullable;
import android.annotation.RequiresPermission;
import android.annotation.SpecialUsers.CanBeCURRENT;
import android.annotation.StyleRes;
import android.annotation.SuppressLint;
import android.annotation.SystemApi;
@@ -6087,7 +6088,7 @@ public class Activity extends ContextThemeWrapper
    @SystemApi
    @RequiresPermission(anyOf = {INTERACT_ACROSS_USERS, INTERACT_ACROSS_USERS_FULL})
    public void startActivityForResultAsUser(@NonNull Intent intent, int requestCode,
            @NonNull UserHandle user) {
            @NonNull @CanBeCURRENT UserHandle user) {
        startActivityForResultAsUser(intent, requestCode, null, user);
    }

@@ -6126,7 +6127,7 @@ public class Activity extends ContextThemeWrapper
    @SystemApi
    @RequiresPermission(anyOf = {INTERACT_ACROSS_USERS, INTERACT_ACROSS_USERS_FULL})
    public void startActivityForResultAsUser(@NonNull Intent intent, int requestCode,
            @Nullable Bundle options, @NonNull UserHandle user) {
            @Nullable Bundle options, @NonNull @CanBeCURRENT UserHandle user) {
        startActivityForResultAsUser(intent, mEmbeddedID, requestCode, options, user);
    }

@@ -6166,7 +6167,7 @@ public class Activity extends ContextThemeWrapper
    @RequiresPermission(anyOf = {INTERACT_ACROSS_USERS, INTERACT_ACROSS_USERS_FULL})
    public void startActivityForResultAsUser(@NonNull Intent intent, @NonNull String resultWho,
            int requestCode,
            @Nullable Bundle options, @NonNull UserHandle user) {
            @Nullable Bundle options, @NonNull @CanBeCURRENT UserHandle user) {
        if (mParent != null) {
            throw new RuntimeException("Can't be called from a child");
        }
@@ -6196,7 +6197,7 @@ public class Activity extends ContextThemeWrapper
     * @hide Implement to provide correct calling token.
     */
    @Override
    public void startActivityAsUser(Intent intent, UserHandle user) {
    public void startActivityAsUser(Intent intent, @CanBeCURRENT UserHandle user) {
        startActivityAsUser(intent, null, user);
    }

@@ -6216,7 +6217,7 @@ public class Activity extends ContextThemeWrapper
     */
    @RequiresPermission(anyOf = {INTERACT_ACROSS_USERS, INTERACT_ACROSS_USERS_FULL})
    public void startActivityAsUser(@NonNull Intent intent,
            @Nullable Bundle options, @NonNull UserHandle user) {
            @Nullable Bundle options, @NonNull @CanBeCURRENT UserHandle user) {
        if (mParent != null) {
            throw new RuntimeException("Can't be called from a child");
        }
@@ -6809,7 +6810,7 @@ public class Activity extends ContextThemeWrapper

    private void startActivityAsUserFromFragment(@NonNull Fragment fragment,
            @RequiresPermission Intent intent, int requestCode, @Nullable Bundle options,
            UserHandle user) {
            @CanBeCURRENT UserHandle user) {
        startActivityForResultAsUser(intent, fragment.mWho, requestCode, options, user);
    }

+22 −12
Original line number Diff line number Diff line
@@ -31,6 +31,9 @@ import android.annotation.IntRange;
import android.annotation.NonNull;
import android.annotation.Nullable;
import android.annotation.RequiresPermission;
import android.annotation.SpecialUsers.CanBeALL;
import android.annotation.SpecialUsers.CanBeCURRENT;
import android.annotation.SpecialUsers.CannotBeSpecialUser;
import android.annotation.SuppressLint;
import android.annotation.SystemApi;
import android.annotation.SystemService;
@@ -2334,7 +2337,8 @@ public class ActivityManager {

        /** @hide */
        @UnsupportedAppUsage
        public static Bitmap loadTaskDescriptionIcon(String iconFilename, int userId) {
        public static Bitmap loadTaskDescriptionIcon(String iconFilename,
                @CanBeCURRENT @UserIdInt int userId) {
            if (iconFilename != null) {
                try {
                    return getTaskService().getTaskDescriptionIcon(iconFilename,
@@ -4250,7 +4254,8 @@ public class ActivityManager {
     * @return Returns true if successful.
     * @hide
     */
    public boolean setProcessMemoryTrimLevel(String process, int userId, int level) {
    public boolean setProcessMemoryTrimLevel(
            String process, @CanBeALL @CanBeCURRENT @UserIdInt int userId, int level) {
        try {
            return getService().setProcessMemoryTrimLevel(process, userId,
                    level);
@@ -4938,7 +4943,8 @@ public class ActivityManager {
     * services, removing their alarms, etc.
     */
    @UnsupportedAppUsage
    public void forceStopPackageAsUser(String packageName, int userId) {
    public void forceStopPackageAsUser(String packageName,
            @CanBeALL @CanBeCURRENT @UserIdInt int userId) {
        try {
            getService().forceStopPackage(packageName, userId);
        } catch (RemoteException e) {
@@ -4963,7 +4969,8 @@ public class ActivityManager {
     * @hide
     */
    @RequiresPermission(Manifest.permission.FORCE_STOP_PACKAGES)
    public void forceStopPackageAsUserEvenWhenStopping(String packageName, @UserIdInt int userId) {
    public void forceStopPackageAsUserEvenWhenStopping(String packageName,
            @CanBeALL @CanBeCURRENT @UserIdInt int userId) {
        try {
            getService().forceStopPackageEvenWhenStopping(packageName, userId);
        } catch (RemoteException e) {
@@ -5419,7 +5426,7 @@ public class ActivityManager {
     */
    @Nullable
    @RequiresPermission(Manifest.permission.MANAGE_USERS)
    public String getSwitchingFromUserMessage(@UserIdInt int userId) {
    public String getSwitchingFromUserMessage(@CannotBeSpecialUser @UserIdInt int userId) {
        try {
            return getService().getSwitchingFromUserMessage(userId);
        } catch (RemoteException re) {
@@ -5434,7 +5441,7 @@ public class ActivityManager {
     */
    @Nullable
    @RequiresPermission(Manifest.permission.MANAGE_USERS)
    public String getSwitchingToUserMessage(@UserIdInt int userId) {
    public String getSwitchingToUserMessage(@CannotBeSpecialUser @UserIdInt int userId) {
        try {
            return getService().getSwitchingToUserMessage(userId);
        } catch (RemoteException re) {
@@ -5688,7 +5695,8 @@ public class ActivityManager {
    /**
     * @hide
     */
    public static void broadcastStickyIntent(Intent intent, int userId) {
    public static void broadcastStickyIntent(Intent intent,
            @CanBeALL @CanBeCURRENT @UserIdInt int userId) {
        broadcastStickyIntent(intent, AppOpsManager.OP_NONE, null, userId);
    }

@@ -5697,7 +5705,8 @@ public class ActivityManager {
     *
     * @hide
     */
    public static void broadcastStickyIntent(Intent intent, int appOp, int userId) {
    public static void broadcastStickyIntent(Intent intent, int appOp,
            @CanBeALL @CanBeCURRENT @UserIdInt  int userId) {
        broadcastStickyIntent(intent, appOp, null, userId);
    }

@@ -5706,7 +5715,8 @@ public class ActivityManager {
     *
     * @hide
     */
    public static void broadcastStickyIntent(Intent intent, int appOp, Bundle options, int userId) {
    public static void broadcastStickyIntent(Intent intent, int appOp, Bundle options,
            @CanBeALL @CanBeCURRENT @UserIdInt  int userId) {
        broadcastStickyIntent(intent, null, appOp, options, userId);
    }

@@ -5716,7 +5726,7 @@ public class ActivityManager {
     * @hide
     */
    public static void broadcastStickyIntent(Intent intent, String[] excludedPackages,
            int appOp, Bundle options, int userId) {
            int appOp, Bundle options, @CanBeALL @CanBeCURRENT @UserIdInt  int userId) {
        try {
            getService().broadcastIntentWithFeature(
                    null, null, intent, null, null, Activity.RESULT_OK, null, null,
@@ -5977,7 +5987,7 @@ public class ActivityManager {
            android.Manifest.permission.MANAGE_USERS,
            android.Manifest.permission.CREATE_USERS
    })
    public boolean isProfileForeground(@NonNull UserHandle userHandle) {
    public boolean isProfileForeground(@NonNull @CannotBeSpecialUser UserHandle userHandle) {
        UserManager userManager = mContext.getSystemService(UserManager.class);
        if (userManager != null) {
            for (UserInfo userInfo : userManager.getProfiles(getCurrentUser())) {
@@ -6275,7 +6285,7 @@ public class ActivityManager {
     * @hide
     */
    @RequiresPermission(Manifest.permission.SET_THEME_OVERLAY_CONTROLLER_READY)
    public void setThemeOverlayReady(@UserIdInt int userId) {
    public void setThemeOverlayReady(@CannotBeSpecialUser @UserIdInt int userId) {
        try {
            getService().setThemeOverlayReady(userId);
        } catch (RemoteException e) {
+3 −2
Original line number Diff line number Diff line
@@ -24,6 +24,7 @@ import android.annotation.Nullable;
import android.annotation.PermissionMethod;
import android.annotation.PermissionName;
import android.annotation.SpecialUsers.CanBeALL;
import android.annotation.SpecialUsers.CanBeCURRENT;
import android.annotation.UserIdInt;
import android.app.ActivityManager.ProcessCapability;
import android.app.ActivityManager.RestrictionLevel;
@@ -869,7 +870,7 @@ public abstract class ActivityManagerInternal {
    public abstract int broadcastIntent(Intent intent,
            IIntentReceiver resultTo,
            String[] requiredPermissions, boolean serialized,
            int userId, int[] appIdAllowList,
            @CanBeALL @CanBeCURRENT @UserIdInt int userId, int[] appIdAllowList,
            @Nullable BiFunction<Integer, Bundle, Bundle> filterExtrasForReceiver,
            @Nullable Bundle bOptions);

@@ -882,7 +883,7 @@ public abstract class ActivityManagerInternal {
    public abstract int broadcastIntentWithCallback(Intent intent,
            IIntentReceiver resultTo,
            String[] requiredPermissions,
            int userId, int[] appIdAllowList,
            @CanBeALL @CanBeCURRENT @UserIdInt int userId, int[] appIdAllowList,
            @Nullable BiFunction<Integer, Bundle, Bundle> filterExtrasForReceiver,
            @Nullable Bundle bOptions);

+2 −1
Original line number Diff line number Diff line
@@ -20,6 +20,7 @@ import android.annotation.FlaggedApi;
import android.annotation.IntDef;
import android.annotation.NonNull;
import android.annotation.Nullable;
import android.annotation.SpecialUsers.CanBeCURRENT;
import android.compat.annotation.UnsupportedAppUsage;
import android.content.ActivityNotFoundException;
import android.content.ComponentName;
@@ -2200,7 +2201,7 @@ public class Instrumentation {
    @UnsupportedAppUsage
    public ActivityResult execStartActivity(
            Context who, IBinder contextThread, IBinder token, String resultWho,
            Intent intent, int requestCode, Bundle options, UserHandle user) {
            Intent intent, int requestCode, Bundle options, @CanBeCURRENT UserHandle user) {
        if (DEBUG_START_ACTIVITY) {
            Log.d(TAG, "startActivity: who=" + who + " user=" + user + " intent=" + intent
                    + " requestCode=" + requestCode + " resultWho=" + resultWho
+43 −34
Original line number Diff line number Diff line
@@ -37,6 +37,8 @@ import android.annotation.PermissionMethod;
import android.annotation.PermissionName;
import android.annotation.RequiresFeature;
import android.annotation.RequiresPermission;
import android.annotation.SpecialUsers.CanBeALL;
import android.annotation.SpecialUsers.CanBeCURRENT;
import android.annotation.StringDef;
import android.annotation.StringRes;
import android.annotation.StyleRes;
@@ -2223,7 +2225,7 @@ public abstract class Context {
    @RequiresPermission(android.Manifest.permission.INTERACT_ACROSS_USERS)
    @SystemApi
    public void startActivityAsUser(@RequiresPermission @NonNull Intent intent,
            @NonNull UserHandle user) {
            @NonNull @CanBeCURRENT UserHandle user) {
        throw new RuntimeException("Not implemented. Must override in a subclass.");
    }

@@ -2271,7 +2273,7 @@ public abstract class Context {
    @RequiresPermission(android.Manifest.permission.INTERACT_ACROSS_USERS)
    @SystemApi
    public void startActivityAsUser(@RequiresPermission @NonNull Intent intent,
            @Nullable Bundle options, @NonNull UserHandle userId) {
            @Nullable Bundle options, @NonNull @CanBeCURRENT UserHandle userId) {
        throw new RuntimeException("Not implemented. Must override in a subclass.");
    }

@@ -2375,7 +2377,8 @@ public abstract class Context {
     * @see PackageManager#resolveActivity
     */
    @RequiresPermission(android.Manifest.permission.INTERACT_ACROSS_USERS)
    public int startActivitiesAsUser(Intent[] intents, Bundle options, UserHandle userHandle) {
    public int startActivitiesAsUser(Intent[] intents, Bundle options,
            @CanBeCURRENT UserHandle userHandle) {
        throw new RuntimeException("Not implemented. Must override in a subclass.");
    }

@@ -2636,8 +2639,8 @@ public abstract class Context {
     * @hide
     */
    @SuppressWarnings("HiddenAbstractMethod")
    public abstract void sendBroadcastAsUserMultiplePermissions(Intent intent, UserHandle user,
            String[] receiverPermissions);
    public abstract void sendBroadcastAsUserMultiplePermissions(Intent intent,
            @CanBeALL @CanBeCURRENT UserHandle user, String[] receiverPermissions);

    /**
     * Broadcast the given intent to all interested BroadcastReceivers, allowing
@@ -2847,7 +2850,7 @@ public abstract class Context {
     */
    @RequiresPermission(android.Manifest.permission.INTERACT_ACROSS_USERS)
    public abstract void sendBroadcastAsUser(@RequiresPermission Intent intent,
            UserHandle user);
            @CanBeALL @CanBeCURRENT UserHandle user);

    /**
     * Version of {@link #sendBroadcast(Intent, String)} that allows you to specify the
@@ -2865,7 +2868,7 @@ public abstract class Context {
     */
    @RequiresPermission(android.Manifest.permission.INTERACT_ACROSS_USERS)
    public abstract void sendBroadcastAsUser(@RequiresPermission Intent intent,
            UserHandle user, @Nullable String receiverPermission);
            @CanBeALL @CanBeCURRENT UserHandle user, @Nullable String receiverPermission);

    /**
     * Version of {@link #sendBroadcast(Intent, String, Bundle)} that allows you to specify the
@@ -2888,7 +2891,8 @@ public abstract class Context {
    @SystemApi
    @RequiresPermission(android.Manifest.permission.INTERACT_ACROSS_USERS)
    public abstract void sendBroadcastAsUser(@RequiresPermission Intent intent,
            UserHandle user, @Nullable String receiverPermission, @Nullable Bundle options);
            @CanBeALL @CanBeCURRENT UserHandle user, @Nullable String receiverPermission,
            @Nullable Bundle options);

    /**
     * Version of {@link #sendBroadcast(Intent, String)} that allows you to specify the
@@ -2911,7 +2915,8 @@ public abstract class Context {
    @RequiresPermission(android.Manifest.permission.INTERACT_ACROSS_USERS)
    @UnsupportedAppUsage(maxTargetSdk = Build.VERSION_CODES.R, trackingBug = 170729553)
    public abstract void sendBroadcastAsUser(@RequiresPermission Intent intent,
            UserHandle user, @Nullable String receiverPermission, int appOp);
            @CanBeALL @CanBeCURRENT UserHandle user, @Nullable String receiverPermission,
            int appOp);

    /**
     * Version of
@@ -2944,7 +2949,8 @@ public abstract class Context {
     */
    @RequiresPermission(android.Manifest.permission.INTERACT_ACROSS_USERS)
    public abstract void sendOrderedBroadcastAsUser(@RequiresPermission Intent intent,
            UserHandle user, @Nullable String receiverPermission, BroadcastReceiver resultReceiver,
            @CanBeALL @CanBeCURRENT UserHandle user, @Nullable String receiverPermission,
            BroadcastReceiver resultReceiver,
            @Nullable Handler scheduler, int initialCode, @Nullable String initialData,
            @Nullable  Bundle initialExtras);

@@ -2957,10 +2963,10 @@ public abstract class Context {
    @SuppressWarnings("HiddenAbstractMethod")
    @RequiresPermission(android.Manifest.permission.INTERACT_ACROSS_USERS)
    @UnsupportedAppUsage(maxTargetSdk = Build.VERSION_CODES.R, trackingBug = 170729553)
    public abstract void sendOrderedBroadcastAsUser(Intent intent, UserHandle user,
            @Nullable String receiverPermission, int appOp, BroadcastReceiver resultReceiver,
            @Nullable Handler scheduler, int initialCode, @Nullable String initialData,
            @Nullable  Bundle initialExtras);
    public abstract void sendOrderedBroadcastAsUser(Intent intent,
            @CanBeALL @CanBeCURRENT UserHandle user, @Nullable String receiverPermission, int appOp,
            BroadcastReceiver resultReceiver, @Nullable Handler scheduler, int initialCode,
            @Nullable String initialData, @Nullable  Bundle initialExtras);

    /**
     * Similar to above but takes an appOp as well, to enforce restrictions, and an options Bundle.
@@ -2971,10 +2977,10 @@ public abstract class Context {
    @SuppressWarnings("HiddenAbstractMethod")
    @RequiresPermission(android.Manifest.permission.INTERACT_ACROSS_USERS)
    @UnsupportedAppUsage
    public abstract void sendOrderedBroadcastAsUser(Intent intent, UserHandle user,
            @Nullable String receiverPermission, int appOp, @Nullable Bundle options,
            BroadcastReceiver resultReceiver, @Nullable Handler scheduler, int initialCode,
            @Nullable String initialData, @Nullable  Bundle initialExtras);
    public abstract void sendOrderedBroadcastAsUser(Intent intent,
            @CanBeALL @CanBeCURRENT UserHandle user, @Nullable String receiverPermission, int appOp,
            @Nullable Bundle options, BroadcastReceiver resultReceiver, @Nullable Handler scheduler,
            int initialCode, @Nullable String initialData, @Nullable  Bundle initialExtras);

    /**
     * Similar to above but takes array of names of permissions that a receiver must hold in order
@@ -2987,8 +2993,8 @@ public abstract class Context {
    @SuppressWarnings("HiddenAbstractMethod")
    @RequiresPermission(android.Manifest.permission.INTERACT_ACROSS_USERS)
    public void sendOrderedBroadcastAsUserMultiplePermissions(Intent intent,
            UserHandle user, String[] receiverPermissions, int appOp, Bundle options,
            BroadcastReceiver resultReceiver, Handler scheduler, int initialCode,
            @CanBeALL @CanBeCURRENT UserHandle user, String[] receiverPermissions, int appOp,
            Bundle options, BroadcastReceiver resultReceiver, Handler scheduler, int initialCode,
            String initialData, Bundle initialExtras) {
        throw new RuntimeException("Not implemented. Must override in a subclass.");
    }
@@ -3239,7 +3245,7 @@ public abstract class Context {
            android.Manifest.permission.BROADCAST_STICKY
    })
    public abstract void sendStickyBroadcastAsUser(@RequiresPermission Intent intent,
            UserHandle user);
            @CanBeALL @CanBeCURRENT UserHandle user);

    /**
     * @hide
@@ -3252,7 +3258,7 @@ public abstract class Context {
            android.Manifest.permission.BROADCAST_STICKY
    })
    public abstract void sendStickyBroadcastAsUser(@RequiresPermission Intent intent,
            UserHandle user, Bundle options);
            @CanBeALL @CanBeCURRENT UserHandle user, Bundle options);

    /**
     * <p>Version of
@@ -3292,7 +3298,7 @@ public abstract class Context {
            android.Manifest.permission.BROADCAST_STICKY
    })
    public abstract void sendStickyOrderedBroadcastAsUser(@RequiresPermission Intent intent,
            UserHandle user, BroadcastReceiver resultReceiver,
            @CanBeALL @CanBeCURRENT UserHandle user, BroadcastReceiver resultReceiver,
            @Nullable Handler scheduler, int initialCode, @Nullable String initialData,
            @Nullable Bundle initialExtras);

@@ -3322,7 +3328,7 @@ public abstract class Context {
            android.Manifest.permission.BROADCAST_STICKY
    })
    public abstract void removeStickyBroadcastAsUser(@RequiresPermission Intent intent,
            UserHandle user);
            @CanBeALL @CanBeCURRENT UserHandle user);

    /**
     * Register a BroadcastReceiver to be run in the main activity thread.  The
@@ -3646,8 +3652,8 @@ public abstract class Context {
    @RequiresPermission(android.Manifest.permission.INTERACT_ACROSS_USERS_FULL)
    @UnsupportedAppUsage
    public abstract Intent registerReceiverAsUser(BroadcastReceiver receiver,
            UserHandle user, IntentFilter filter, @Nullable String broadcastPermission,
            @Nullable Handler scheduler);
            @CanBeALL @CanBeCURRENT UserHandle user, IntentFilter filter,
            @Nullable String broadcastPermission, @Nullable Handler scheduler);

    /**
     * @hide
@@ -3687,7 +3693,8 @@ public abstract class Context {
    @RequiresPermission(android.Manifest.permission.INTERACT_ACROSS_USERS_FULL)
    @UnsupportedAppUsage
    public abstract Intent registerReceiverAsUser(BroadcastReceiver receiver,
            UserHandle user, IntentFilter filter, @Nullable String broadcastPermission,
            @CanBeALL @CanBeCURRENT UserHandle user, IntentFilter filter,
            @Nullable String broadcastPermission,
            @Nullable Handler scheduler, @RegisterReceiverFlags int flags);

    /**
@@ -3871,7 +3878,8 @@ public abstract class Context {
    @SuppressWarnings("HiddenAbstractMethod")
    @Nullable
    @RequiresPermission(android.Manifest.permission.INTERACT_ACROSS_USERS)
    public abstract ComponentName startForegroundServiceAsUser(Intent service, UserHandle user);
    public abstract ComponentName startForegroundServiceAsUser(Intent service,
            @CanBeCURRENT UserHandle user);

    /**
     * Request that a given application service be stopped.  If the service is
@@ -3917,14 +3925,14 @@ public abstract class Context {
    @Nullable
    @RequiresPermission(android.Manifest.permission.INTERACT_ACROSS_USERS)
    @UnsupportedAppUsage
    public abstract ComponentName startServiceAsUser(Intent service, UserHandle user);
    public abstract ComponentName startServiceAsUser(Intent service, @CanBeCURRENT UserHandle user);

    /**
     * @hide like {@link #stopService(Intent)} but for a specific user.
     */
    @SuppressWarnings("HiddenAbstractMethod")
    @RequiresPermission(android.Manifest.permission.INTERACT_ACROSS_USERS)
    public abstract boolean stopServiceAsUser(Intent service, UserHandle user);
    public abstract boolean stopServiceAsUser(Intent service, @CanBeCURRENT UserHandle user);

    /**
     * Connects to an application service, creating it if needed.  This defines
@@ -4122,7 +4130,7 @@ public abstract class Context {
            }, conditional = true)
    public boolean bindServiceAsUser(
            @NonNull @RequiresPermission Intent service, @NonNull ServiceConnection conn, int flags,
            @NonNull UserHandle user) {
            @NonNull @CanBeCURRENT UserHandle user) {
        throw new RuntimeException("Not implemented. Must override in a subclass.");
    }

@@ -4138,7 +4146,7 @@ public abstract class Context {
    }, conditional = true)
    public boolean bindServiceAsUser(
            @NonNull @RequiresPermission Intent service, @NonNull ServiceConnection conn,
            @NonNull BindServiceFlags flags, @NonNull UserHandle user) {
            @NonNull BindServiceFlags flags, @NonNull @CanBeCURRENT UserHandle user) {
        throw new RuntimeException("Not implemented. Must override in a subclass.");
    }

@@ -4154,7 +4162,7 @@ public abstract class Context {
            }, conditional = true)
    @UnsupportedAppUsage(trackingBug = 136728678)
    public boolean bindServiceAsUser(Intent service, ServiceConnection conn, int flags,
            Handler handler, UserHandle user) {
            Handler handler, @CanBeCURRENT UserHandle user) {
        throw new RuntimeException("Not implemented. Must override in a subclass.");
    }

@@ -4170,7 +4178,8 @@ public abstract class Context {
    }, conditional = true)
    @UnsupportedAppUsage(trackingBug = 136728678)
    public boolean bindServiceAsUser(@NonNull Intent service, @NonNull ServiceConnection conn,
            @NonNull BindServiceFlags flags, @NonNull Handler handler, @NonNull UserHandle user) {
            @NonNull BindServiceFlags flags, @NonNull Handler handler,
            @NonNull @CanBeCURRENT UserHandle user) {
        throw new RuntimeException("Not implemented. Must override in a subclass.");
    }

Loading