diff --git a/core/api/system-current.txt b/core/api/system-current.txt index 1a6f569a5fe54..d80fb2af0f27a 100644 --- a/core/api/system-current.txt +++ b/core/api/system-current.txt @@ -11031,6 +11031,7 @@ package android.service.persistentdata { method @android.service.persistentdata.PersistentDataBlockManager.FlashLockState @RequiresPermission(anyOf={android.Manifest.permission.READ_OEM_UNLOCK_STATE, "android.permission.OEM_UNLOCK_STATE"}) public int getFlashLockState(); method public long getMaximumDataBlockSize(); method @Deprecated @RequiresPermission(anyOf={android.Manifest.permission.READ_OEM_UNLOCK_STATE, "android.permission.OEM_UNLOCK_STATE"}) public boolean getOemUnlockEnabled(); + method @NonNull public String getPersistentDataPackageName(); method public byte[] read(); method @Deprecated @RequiresPermission("android.permission.OEM_UNLOCK_STATE") public void setOemUnlockEnabled(boolean); method @RequiresPermission("android.permission.OEM_UNLOCK_STATE") public void wipe(); diff --git a/core/java/android/app/SystemServiceRegistry.java b/core/java/android/app/SystemServiceRegistry.java index 67c42f69d0798..40063e6263a01 100644 --- a/core/java/android/app/SystemServiceRegistry.java +++ b/core/java/android/app/SystemServiceRegistry.java @@ -1021,19 +1021,21 @@ public final class SystemServiceRegistry { }}); registerService(Context.PERSISTENT_DATA_BLOCK_SERVICE, PersistentDataBlockManager.class, - new StaticServiceFetcher() { + new CachedServiceFetcher() { @Override - public PersistentDataBlockManager createService() throws ServiceNotFoundException { + public PersistentDataBlockManager createService(ContextImpl ctx) + throws ServiceNotFoundException { IBinder b = ServiceManager.getServiceOrThrow(Context.PERSISTENT_DATA_BLOCK_SERVICE); IPersistentDataBlockService persistentDataBlockService = IPersistentDataBlockService.Stub.asInterface(b); if (persistentDataBlockService != null) { - return new PersistentDataBlockManager(persistentDataBlockService); + return new PersistentDataBlockManager(ctx, persistentDataBlockService); } else { // not supported return null; } - }}); + } + }); registerService(Context.OEM_LOCK_SERVICE, OemLockManager.class, new StaticServiceFetcher() { diff --git a/core/java/android/service/persistentdata/PersistentDataBlockManager.java b/core/java/android/service/persistentdata/PersistentDataBlockManager.java index 8242f4e2c9dca..44a886257d5aa 100644 --- a/core/java/android/service/persistentdata/PersistentDataBlockManager.java +++ b/core/java/android/service/persistentdata/PersistentDataBlockManager.java @@ -17,6 +17,7 @@ package android.service.persistentdata; import android.annotation.IntDef; +import android.annotation.NonNull; import android.annotation.RequiresPermission; import android.annotation.SuppressLint; import android.annotation.SystemApi; @@ -25,6 +26,8 @@ import android.content.Context; import android.os.RemoteException; import android.service.oemlock.OemLockManager; +import com.android.internal.R; + import java.lang.annotation.Retention; import java.lang.annotation.RetentionPolicy; @@ -50,6 +53,7 @@ import java.lang.annotation.RetentionPolicy; @SystemService(Context.PERSISTENT_DATA_BLOCK_SERVICE) public class PersistentDataBlockManager { private static final String TAG = PersistentDataBlockManager.class.getSimpleName(); + private final Context mContext; private IPersistentDataBlockService sService; /** @@ -74,7 +78,10 @@ public class PersistentDataBlockManager { public @interface FlashLockState {} /** @hide */ - public PersistentDataBlockManager(IPersistentDataBlockService service) { + public PersistentDataBlockManager( + Context context, + IPersistentDataBlockService service) { + mContext = context; sService = service; } @@ -204,4 +211,15 @@ public class PersistentDataBlockManager { throw e.rethrowFromSystemServer(); } } + + /** + * Returns the package name which can access the persistent data partition. + * + * @hide + */ + @SystemApi + @NonNull + public String getPersistentDataPackageName() { + return mContext.getString(R.string.config_persistentDataPackageName); + } }