From 3f26271da454e560be2bf38081124f6e45313246 Mon Sep 17 00:00:00 2001 From: Nate Myren Date: Fri, 31 May 2019 09:36:08 -0700 Subject: [PATCH] added methods to @TestApi Added ActivityManager.switchUser(UserHandle), Context.startActivityAsUser, and UserHandle.of to @TestApi Test: None Bug: 135282431 Change-Id: Iefbaa3c8f02649dd7d01be3093fa47104b077f58 --- api/test-current.txt | 2 + api/test-lint-baseline.txt | 48 +++++++++++++--------- core/java/android/app/ActivityManager.java | 1 + core/java/android/content/Context.java | 1 + 4 files changed, 33 insertions(+), 19 deletions(-) diff --git a/api/test-current.txt b/api/test-current.txt index 4e94ef27134f5..36e2d454528b3 100644 --- a/api/test-current.txt +++ b/api/test-current.txt @@ -73,6 +73,7 @@ package android.app { method @RequiresPermission(android.Manifest.permission.PACKAGE_USAGE_STATS) public void removeOnUidImportanceListener(android.app.ActivityManager.OnUidImportanceListener); method public static void resumeAppSwitches() throws android.os.RemoteException; method @RequiresPermission(android.Manifest.permission.CHANGE_CONFIGURATION) public void scheduleApplicationInfoChanged(java.util.List, int); + method @RequiresPermission("android.permission.MANAGE_USERS") public boolean switchUser(@NonNull android.os.UserHandle); field public static final int PROCESS_CAPABILITY_ALL = 1; // 0x1 field public static final int PROCESS_CAPABILITY_FOREGROUND_LOCATION = 1; // 0x1 field public static final int PROCESS_CAPABILITY_NONE = 0; // 0x0 @@ -756,6 +757,7 @@ package android.content { method public int getUserId(); method public void setAutofillOptions(@Nullable android.content.AutofillOptions); method public void setContentCaptureOptions(@Nullable android.content.ContentCaptureOptions); + method @RequiresPermission("android.permission.INTERACT_ACROSS_USERS") public void startActivityAsUser(@NonNull @RequiresPermission android.content.Intent, @NonNull android.os.UserHandle); field public static final String BLOB_STORE_SERVICE = "blob_store"; field public static final String BUGREPORT_SERVICE = "bugreport"; field public static final String CONTENT_CAPTURE_MANAGER_SERVICE = "content_capture"; diff --git a/api/test-lint-baseline.txt b/api/test-lint-baseline.txt index 6d1f29122b71a..603f7a2594622 100644 --- a/api/test-lint-baseline.txt +++ b/api/test-lint-baseline.txt @@ -400,7 +400,7 @@ GetterSetterNames: android.location.GnssClock#setLeapSecond(int): GetterSetterNames: android.location.GnssClock#setTimeUncertaintyNanos(double): GetterSetterNames: android.location.GnssMeasurement#setBasebandCn0DbHz(double): - + GetterSetterNames: android.location.GnssMeasurement#setCarrierFrequencyHz(float): GetterSetterNames: android.location.GnssMeasurement#setCodeType(String): @@ -466,7 +466,7 @@ InternalField: android.telephony.ims.ImsConferenceState#mParticipants: KotlinOperator: android.os.WorkSource#get(int): KotlinOperator: android.util.SparseArrayMap#get(int, String): - Method can be invoked with an indexing operator from Kotlin: `get` (this is usually desirable; just make sure it makes sense for this type of object) + ListenerInterface: android.media.audiopolicy.AudioPolicy.AudioPolicyFocusListener: @@ -2059,6 +2059,18 @@ MissingNullability: android.view.FocusFinder#sort(android.view.View[], int, int, MissingNullability: android.view.KeyEvent#actionToString(int): +MissingNullability: android.view.SurfaceControlViewHost#SurfaceControlViewHost(android.content.Context, android.view.Display, android.view.SurfaceControl) parameter #0: + +MissingNullability: android.view.SurfaceControlViewHost#SurfaceControlViewHost(android.content.Context, android.view.Display, android.view.SurfaceControl) parameter #1: + +MissingNullability: android.view.SurfaceControlViewHost#SurfaceControlViewHost(android.content.Context, android.view.Display, android.view.SurfaceControl) parameter #2: + +MissingNullability: android.view.SurfaceControlViewHost#addView(android.view.View, android.view.WindowManager.LayoutParams) parameter #0: + +MissingNullability: android.view.SurfaceControlViewHost#addView(android.view.View, android.view.WindowManager.LayoutParams) parameter #1: + +MissingNullability: android.view.SurfaceControlViewHost#relayout(android.view.WindowManager.LayoutParams) parameter #0: + MissingNullability: android.view.View#getTooltipView(): MissingNullability: android.view.View#isDefaultFocusHighlightNeeded(android.graphics.drawable.Drawable, android.graphics.drawable.Drawable) parameter #0: @@ -2079,18 +2091,6 @@ MissingNullability: android.view.ViewDebug#startRenderingCommandsCapture(android MissingNullability: android.view.WindowManager.LayoutParams#accessibilityTitle: -MissingNullability: android.view.SurfaceControlViewHost#SurfaceControlViewHost(android.content.Context, android.view.Display, android.view.SurfaceControl) parameter #0: - -MissingNullability: android.view.SurfaceControlViewHost#SurfaceControlViewHost(android.content.Context, android.view.Display, android.view.SurfaceControl) parameter #1: - -MissingNullability: android.view.SurfaceControlViewHost#SurfaceControlViewHost(android.content.Context, android.view.Display, android.view.SurfaceControl) parameter #2: - -MissingNullability: android.view.SurfaceControlViewHost#addView(android.view.View, android.view.WindowManager.LayoutParams) parameter #0: - -MissingNullability: android.view.SurfaceControlViewHost#addView(android.view.View, android.view.WindowManager.LayoutParams) parameter #1: - -MissingNullability: android.view.SurfaceControlViewHost#relayout(android.view.WindowManager.LayoutParams) parameter #0: - MissingNullability: android.view.accessibility.AccessibilityManager.AccessibilityServicesStateChangeListener#onAccessibilityServicesStateChanged(android.view.accessibility.AccessibilityManager) parameter #0: MissingNullability: android.view.accessibility.AccessibilityNodeInfo#setNumInstancesInUseCounter(java.util.concurrent.atomic.AtomicInteger) parameter #0: @@ -2426,11 +2426,13 @@ ProtectedMember: android.view.View#resetResolvedDrawables(): ProtectedMember: android.view.ViewGroup#resetResolvedDrawables(): -PublicTypedef: android.os.HwParcel.Status: Don't expose @IntDef: @Status must be hidden. -PublicTypedef: android.telephony.ims.feature.MmTelFeature.MmTelCapabilities.MmTelCapability: Don't expose @IntDef: @MmTelCapability must be hidden. - -PublicTypedef: android.telephony.ims.feature.MmTelFeature.ProcessCallResult: Don't expose @IntDef: @ProcessCallResult must be hidden. +PublicTypedef: android.os.HwParcel.Status: + +PublicTypedef: android.telephony.ims.feature.MmTelFeature.MmTelCapabilities.MmTelCapability: + +PublicTypedef: android.telephony.ims.feature.MmTelFeature.ProcessCallResult: + RawAidl: android.telephony.mbms.vendor.MbmsDownloadServiceBase: @@ -2513,6 +2515,8 @@ SamShouldBeLast: android.database.sqlite.SQLiteDebug#dump(android.util.Printer, SamShouldBeLast: android.database.sqlite.SQLiteDirectCursorDriver#query(android.database.sqlite.SQLiteDatabase.CursorFactory, String[]): +SamShouldBeLast: android.location.LocationManager#requestLocationUpdates(android.location.LocationRequest, android.location.LocationListener, android.os.Looper): + SAM-compatible parameters (such as parameter 2, "listener", in android.location.LocationManager.requestLocationUpdates) should be last to improve Kotlin interoperability; see https://kotlinlang.org/docs/reference/java-interop.html#sam-conversions SamShouldBeLast: android.location.LocationManager#requestLocationUpdates(android.location.LocationRequest, java.util.concurrent.Executor, android.location.LocationListener): SamShouldBeLast: android.os.BugreportManager#startBugreport(android.os.ParcelFileDescriptor, android.os.ParcelFileDescriptor, android.os.BugreportParams, java.util.concurrent.Executor, android.os.BugreportManager.BugreportCallback): @@ -2593,6 +2597,8 @@ UseParcelFileDescriptor: android.util.proto.ProtoOutputStream#ProtoOutputStream( +UserHandle: android.app.ActivityManager#switchUser(android.os.UserHandle): + When a method overload is needed to target a specific UserHandle, callers should be directed to use Context.createPackageContextAsUser() and re-obtain the relevant Manager, and no new API should be added UserHandle: android.app.admin.DevicePolicyManager#getOwnerInstalledCaCerts(android.os.UserHandle): UserHandle: android.app.role.RoleManager#addOnRoleHoldersChangedListenerAsUser(java.util.concurrent.Executor, android.app.role.OnRoleHoldersChangedListener, android.os.UserHandle): @@ -2607,8 +2613,12 @@ UserHandle: android.app.role.RoleManager#removeOnRoleHoldersChangedListenerAsUse UserHandle: android.app.role.RoleManager#removeRoleHolderAsUser(String, String, int, android.os.UserHandle, java.util.concurrent.Executor, java.util.function.Consumer): -UserHandle: android.companion.CompanionDeviceManager#isDeviceAssociated(String, android.net.MacAddress, android.os.UserHandle): +UserHandle: android.app.usage.StorageStatsManager#queryCratesForPackage(java.util.UUID, String, android.os.UserHandle): When a method overload is needed to target a specific UserHandle, callers should be directed to use Context.createPackageContextAsUser() and re-obtain the relevant Manager, and no new API should be added +UserHandle: android.app.usage.StorageStatsManager#queryCratesForUser(java.util.UUID, android.os.UserHandle): + When a method overload is needed to target a specific UserHandle, callers should be directed to use Context.createPackageContextAsUser() and re-obtain the relevant Manager, and no new API should be added +UserHandle: android.companion.CompanionDeviceManager#isDeviceAssociated(String, android.net.MacAddress, android.os.UserHandle): + UserHandle: android.content.pm.PackageManager#getInstallReason(String, android.os.UserHandle): UserHandle: android.content.pm.PackageManager#getPermissionFlags(String, String, android.os.UserHandle): diff --git a/core/java/android/app/ActivityManager.java b/core/java/android/app/ActivityManager.java index c3b07c8644dae..2010cc98ef2d2 100644 --- a/core/java/android/app/ActivityManager.java +++ b/core/java/android/app/ActivityManager.java @@ -4064,6 +4064,7 @@ public class ActivityManager { * @hide */ @SystemApi + @TestApi @RequiresPermission(android.Manifest.permission.MANAGE_USERS) public boolean switchUser(@NonNull UserHandle user) { if (user == null) { diff --git a/core/java/android/content/Context.java b/core/java/android/content/Context.java index 3860508a77948..679de8a281c3d 100644 --- a/core/java/android/content/Context.java +++ b/core/java/android/content/Context.java @@ -1827,6 +1827,7 @@ public abstract class Context { */ @RequiresPermission(android.Manifest.permission.INTERACT_ACROSS_USERS) @SystemApi + @TestApi public void startActivityAsUser(@RequiresPermission @NonNull Intent intent, @NonNull UserHandle user) { throw new RuntimeException("Not implemented. Must override in a subclass.");