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

Commit 44208c12 authored by Samiul Islam's avatar Samiul Islam
Browse files

Annotate System Manager classes that are restricted in SdkSandbox 2/n

These manager classes are inaccessible from SdkSandbox due to selinux
policies added back in Android U. Currently, developers trying to access
these managers/api will receive runtime error and crash, if they don't
handle the RTE properly.

To help developers understand if an API is available to the environment
they are running from, we are annotating these managers with the new
@RestrictedForEnvironment annotation.

This is a documentation enhancement feature. We are not adding any new
restriction. We are only highlighting the ALREADY existing restrictions
to users.

The annotation will be used to:
    - Update the javadoc in developer site.
    - Add lint support in IDE.

The annotation cannot be flag guarded (see flag stanza below). This
should still be safe since it's a documentation only change.

Bug: 325606627
Test: atest SdkSandboxSystemServiceRestrictionsTests
Flag: EXEMPT RestrictedForEnvironment makes javadoc changes which cannot
      be disabled with flag. See b/396346859#comment11.

Change-Id: If2667b0bb1bb306b6e8e7cc8066127c4ced2d3ec
parent 89b1b469
Loading
Loading
Loading
Loading
+6 −0
Original line number Diff line number Diff line
@@ -15,6 +15,8 @@
 */
package android.app.blob;

import static android.annotation.RestrictedForEnvironment.ENVIRONMENT_SDK_RUNTIME;

import android.annotation.BytesLong;
import android.annotation.CallbackExecutor;
import android.annotation.CurrentTimeMillisLong;
@@ -22,9 +24,11 @@ import android.annotation.IdRes;
import android.annotation.IntRange;
import android.annotation.NonNull;
import android.annotation.Nullable;
import android.annotation.RestrictedForEnvironment;
import android.annotation.SystemService;
import android.annotation.TestApi;
import android.content.Context;
import android.os.Build;
import android.os.LimitExceededException;
import android.os.ParcelFileDescriptor;
import android.os.ParcelableException;
@@ -142,6 +146,8 @@ import java.util.function.Consumer;
 *     }
 * </pre>
 */
@RestrictedForEnvironment(
        environments = ENVIRONMENT_SDK_RUNTIME, from = Build.VERSION_CODES.UPSIDE_DOWN_CAKE)
@SystemService(Context.BLOB_STORE_SERVICE)
public class BlobStoreManager {
    /** @hide */
+5 −5
Original line number Diff line number Diff line
@@ -9377,7 +9377,7 @@ package android.app.blob {
    field @NonNull public static final android.os.Parcelable.Creator<android.app.blob.BlobHandle> CREATOR;
  }
  public class BlobStoreManager {
  @RestrictedForEnvironment(environments=android.annotation.RestrictedForEnvironment.ENVIRONMENT_SDK_RUNTIME, from=android.os.Build.VERSION_CODES.UPSIDE_DOWN_CAKE) public class BlobStoreManager {
    method public void abandonSession(@IntRange(from=1) long) throws java.io.IOException;
    method public void acquireLease(@NonNull android.app.blob.BlobHandle, @IdRes int, long) throws java.io.IOException;
    method public void acquireLease(@NonNull android.app.blob.BlobHandle, @NonNull CharSequence, long) throws java.io.IOException;
@@ -9837,7 +9837,7 @@ package android.app.slice {
    field @Deprecated public static final String FORMAT_TEXT = "text";
  }
  @Deprecated public class SliceManager {
  @Deprecated @RestrictedForEnvironment(environments=android.annotation.RestrictedForEnvironment.ENVIRONMENT_SDK_RUNTIME, from=android.os.Build.VERSION_CODES.UPSIDE_DOWN_CAKE) public class SliceManager {
    method @Deprecated @Nullable public android.app.slice.Slice bindSlice(@NonNull android.net.Uri, @NonNull java.util.Set<android.app.slice.SliceSpec>);
    method @Deprecated @Nullable public android.app.slice.Slice bindSlice(@NonNull android.content.Intent, @NonNull java.util.Set<android.app.slice.SliceSpec>);
    method @Deprecated public int checkSlicePermission(@NonNull android.net.Uri, int, int);
@@ -10502,7 +10502,7 @@ package android.companion.virtual {
    field @NonNull public static final android.os.Parcelable.Creator<android.companion.virtual.VirtualDevice> CREATOR;
  }
  public final class VirtualDeviceManager {
  @RestrictedForEnvironment(environments=android.annotation.RestrictedForEnvironment.ENVIRONMENT_SDK_RUNTIME, from=android.os.Build.VERSION_CODES.UPSIDE_DOWN_CAKE) public final class VirtualDeviceManager {
    method @Nullable public android.companion.virtual.VirtualDevice getVirtualDevice(int);
    method @NonNull public java.util.List<android.companion.virtual.VirtualDevice> getVirtualDevices();
    method public void registerVirtualDeviceListener(@NonNull java.util.concurrent.Executor, @NonNull android.companion.virtual.VirtualDeviceManager.VirtualDeviceListener);
@@ -19609,7 +19609,7 @@ package android.hardware {
package android.hardware.biometrics {
  public class BiometricManager {
  @RestrictedForEnvironment(environments=android.annotation.RestrictedForEnvironment.ENVIRONMENT_SDK_RUNTIME, from=android.os.Build.VERSION_CODES.UPSIDE_DOWN_CAKE) public class BiometricManager {
    method @Deprecated @RequiresPermission(android.Manifest.permission.USE_BIOMETRIC) public int canAuthenticate();
    method @RequiresPermission(android.Manifest.permission.USE_BIOMETRIC) public int canAuthenticate(int);
    method @RequiresPermission(android.Manifest.permission.USE_BIOMETRIC) public long getLastAuthenticationTime(int);
@@ -21178,7 +21178,7 @@ package android.hardware.display {
package android.hardware.fingerprint {
  @Deprecated public class FingerprintManager {
  @Deprecated @RestrictedForEnvironment(environments=android.annotation.RestrictedForEnvironment.ENVIRONMENT_SDK_RUNTIME, from=android.os.Build.VERSION_CODES.UPSIDE_DOWN_CAKE) public class FingerprintManager {
    method @Deprecated @RequiresPermission(anyOf={android.Manifest.permission.USE_BIOMETRIC, android.Manifest.permission.USE_FINGERPRINT}) public void authenticate(@Nullable android.hardware.fingerprint.FingerprintManager.CryptoObject, @Nullable android.os.CancellationSignal, int, @NonNull android.hardware.fingerprint.FingerprintManager.AuthenticationCallback, @Nullable android.os.Handler);
    method @Deprecated @RequiresPermission(android.Manifest.permission.USE_FINGERPRINT) public boolean hasEnrolledFingerprints();
    method @Deprecated @RequiresPermission(android.Manifest.permission.USE_FINGERPRINT) public boolean isHardwareDetected();
+2 −2
Original line number Diff line number Diff line
@@ -3556,7 +3556,7 @@ package android.companion.virtual {
    method public boolean hasCustomCameraSupport();
  }
  public final class VirtualDeviceManager {
  @RestrictedForEnvironment(environments=android.annotation.RestrictedForEnvironment.ENVIRONMENT_SDK_RUNTIME, from=android.os.Build.VERSION_CODES.UPSIDE_DOWN_CAKE) public final class VirtualDeviceManager {
    method @NonNull @RequiresPermission(android.Manifest.permission.CREATE_VIRTUAL_DEVICE) public android.companion.virtual.VirtualDeviceManager.VirtualDevice createVirtualDevice(int, @NonNull android.companion.virtual.VirtualDeviceParams);
    method @NonNull public java.util.Set<java.lang.String> getAllPersistentDeviceIds();
    method @Nullable public CharSequence getDisplayNameForPersistentDeviceId(@NonNull String);
@@ -5175,7 +5175,7 @@ package android.hardware.biometrics {
    method public int getStrength();
  }
  public class BiometricManager {
  @RestrictedForEnvironment(environments=android.annotation.RestrictedForEnvironment.ENVIRONMENT_SDK_RUNTIME, from=android.os.Build.VERSION_CODES.UPSIDE_DOWN_CAKE) public class BiometricManager {
    method @FlaggedApi("android.hardware.biometrics.move_fm_api_to_bm") @NonNull @RequiresPermission(android.Manifest.permission.SET_BIOMETRIC_DIALOG_ADVANCED) public java.util.Map<java.lang.Integer,android.hardware.biometrics.BiometricEnrollmentStatus> getEnrollmentStatus();
    field @FlaggedApi("android.hardware.biometrics.move_fm_api_to_bm") public static final int TYPE_FACE = 8; // 0x8
    field @FlaggedApi("android.hardware.biometrics.move_fm_api_to_bm") public static final int TYPE_FINGERPRINT = 2; // 0x2
+4 −4
Original line number Diff line number Diff line
@@ -794,7 +794,7 @@ package android.app.assist {

package android.app.blob {

  public class BlobStoreManager {
  @RestrictedForEnvironment(environments=android.annotation.RestrictedForEnvironment.ENVIRONMENT_SDK_RUNTIME, from=android.os.Build.VERSION_CODES.UPSIDE_DOWN_CAKE) public class BlobStoreManager {
    method @Nullable public android.app.blob.LeaseInfo getLeaseInfo(@NonNull android.app.blob.BlobHandle) throws java.io.IOException;
    method public void waitForIdle(long) throws java.lang.InterruptedException, java.util.concurrent.TimeoutException;
  }
@@ -962,7 +962,7 @@ package android.companion {

package android.companion.virtual {

  public final class VirtualDeviceManager {
  @RestrictedForEnvironment(environments=android.annotation.RestrictedForEnvironment.ENVIRONMENT_SDK_RUNTIME, from=android.os.Build.VERSION_CODES.UPSIDE_DOWN_CAKE) public final class VirtualDeviceManager {
    method public int getAudioPlaybackSessionId(int);
    method public int getAudioRecordingSessionId(int);
    method public int getDeviceIdForDisplayId(int);
@@ -1595,7 +1595,7 @@ package android.hardware {

package android.hardware.biometrics {

  public class BiometricManager {
  @RestrictedForEnvironment(environments=android.annotation.RestrictedForEnvironment.ENVIRONMENT_SDK_RUNTIME, from=android.os.Build.VERSION_CODES.UPSIDE_DOWN_CAKE) public class BiometricManager {
    method @NonNull @RequiresPermission(android.Manifest.permission.TEST_BIOMETRIC) public android.hardware.biometrics.BiometricTestSession createTestSession(int);
    method @NonNull @RequiresPermission(android.Manifest.permission.TEST_BIOMETRIC) public java.util.List<android.hardware.biometrics.SensorProperties> getSensorProperties();
    method @NonNull @RequiresPermission(android.Manifest.permission.TEST_BIOMETRIC) public String getUiPackage();
@@ -1807,7 +1807,7 @@ package android.hardware.display {

package android.hardware.fingerprint {

  @Deprecated public class FingerprintManager {
  @Deprecated @RestrictedForEnvironment(environments=android.annotation.RestrictedForEnvironment.ENVIRONMENT_SDK_RUNTIME, from=android.os.Build.VERSION_CODES.UPSIDE_DOWN_CAKE) public class FingerprintManager {
    method @Deprecated @NonNull @RequiresPermission(android.Manifest.permission.TEST_BIOMETRIC) public android.hardware.biometrics.BiometricTestSession createTestSession(int);
    method @Deprecated @NonNull @RequiresPermission(android.Manifest.permission.TEST_BIOMETRIC) public java.util.List<android.hardware.biometrics.SensorProperties> getSensorProperties();
  }
+5 −0
Original line number Diff line number Diff line
@@ -16,10 +16,12 @@

package android.app.slice;

import static android.annotation.RestrictedForEnvironment.ENVIRONMENT_SDK_RUNTIME;
import static android.content.pm.PackageManager.PERMISSION_DENIED;

import android.annotation.NonNull;
import android.annotation.Nullable;
import android.annotation.RestrictedForEnvironment;
import android.annotation.SdkConstant;
import android.annotation.SdkConstant.SdkConstantType;
import android.annotation.SystemService;
@@ -33,6 +35,7 @@ import android.content.pm.PackageManager.PermissionResult;
import android.content.pm.ResolveInfo;
import android.net.Uri;
import android.os.Binder;
import android.os.Build;
import android.os.Bundle;
import android.os.Handler;
import android.os.IBinder;
@@ -65,6 +68,8 @@ import java.util.Set;
 *          {@link android.app.appsearch.AppSearchManager}.
 */
@Deprecated
@RestrictedForEnvironment(
        environments = ENVIRONMENT_SDK_RUNTIME, from = Build.VERSION_CODES.UPSIDE_DOWN_CAKE)
@SystemService(Context.SLICE_SERVICE)
public class SliceManager {

Loading