Loading core/api/test-current.txt +1 −0 Original line number Original line Diff line number Diff line Loading @@ -1843,6 +1843,7 @@ package android.os.storage { public class StorageManager { public class StorageManager { method @NonNull public static java.util.UUID convert(@NonNull String); method @NonNull public static java.util.UUID convert(@NonNull String); method @NonNull public static String convert(@NonNull java.util.UUID); method @NonNull public static String convert(@NonNull java.util.UUID); method public boolean isAppIoBlocked(@NonNull java.util.UUID, int, int, int); method public static boolean isUserKeyUnlocked(int); method public static boolean isUserKeyUnlocked(int); } } Loading core/java/android/os/storage/IStorageManager.aidl +2 −1 Original line number Original line Diff line number Diff line Loading @@ -202,4 +202,5 @@ interface IStorageManager { void notifyAppIoBlocked(in String volumeUuid, int uid, int tid, int reason) = 92; void notifyAppIoBlocked(in String volumeUuid, int uid, int tid, int reason) = 92; void notifyAppIoResumed(in String volumeUuid, int uid, int tid, int reason) = 93; void notifyAppIoResumed(in String volumeUuid, int uid, int tid, int reason) = 93; int getExternalStorageMountMode(int uid, in String packageName) = 94; int getExternalStorageMountMode(int uid, in String packageName) = 94; boolean isAppIoBlocked(in String volumeUuid, int uid, int tid, int reason) = 95; } } No newline at end of file core/java/android/os/storage/StorageManager.java +24 −0 Original line number Original line Diff line number Diff line Loading @@ -2871,6 +2871,30 @@ public class StorageManager { } } } } /** * Check if {@code uid} with {@code tid} is blocked on IO for {@code reason}. * * This requires {@link ExternalStorageService} the * {@link android.Manifest.permission#WRITE_MEDIA_STORAGE} permission. * * @param volumeUuid the UUID of the storage volume to check IO blocked status * @param uid the UID of the app to check IO blocked status * @param tid the tid of the app to check IO blocked status * @param reason the reason to check IO blocked status for * * @hide */ @TestApi public boolean isAppIoBlocked(@NonNull UUID volumeUuid, int uid, int tid, @AppIoBlockedReason int reason) { Objects.requireNonNull(volumeUuid); try { return mStorageManager.isAppIoBlocked(convert(volumeUuid), uid, tid, reason); } catch (RemoteException e) { throw e.rethrowFromSystemServer(); } } private final Object mFuseAppLoopLock = new Object(); private final Object mFuseAppLoopLock = new Object(); @GuardedBy("mFuseAppLoopLock") @GuardedBy("mFuseAppLoopLock") Loading services/core/java/com/android/server/StorageManagerService.java +8 −1 Original line number Original line Diff line number Diff line Loading @@ -3375,7 +3375,7 @@ class StorageManagerService extends IStorageManager.Stub } } } } /* /** * Returns PendingIntent which can be used by Apps with MANAGE_EXTERNAL_STORAGE permission * Returns PendingIntent which can be used by Apps with MANAGE_EXTERNAL_STORAGE permission * to launch the manageSpaceActivity of the App specified by packageName. * to launch the manageSpaceActivity of the App specified by packageName. */ */ Loading Loading @@ -3437,6 +3437,13 @@ class StorageManagerService extends IStorageManager.Stub mStorageSessionController.notifyAppIoResumed(volumeUuid, uid, tid, reason); mStorageSessionController.notifyAppIoResumed(volumeUuid, uid, tid, reason); } } @Override public boolean isAppIoBlocked(String volumeUuid, int uid, int tid, @StorageManager.AppIoBlockedReason int reason) { return isAppIoBlocked(uid); } private boolean isAppIoBlocked(int uid) { private boolean isAppIoBlocked(int uid) { return mStorageSessionController.isAppIoBlocked(uid); return mStorageSessionController.isAppIoBlocked(uid); } } Loading services/core/java/com/android/server/storage/StorageUserConnection.java +4 −0 Original line number Original line Diff line number Diff line Loading @@ -265,6 +265,10 @@ public final class StorageUserConnection { synchronized (mSessionsLock) { synchronized (mSessionsLock) { int ioBlockedCounter = mUidsBlockedOnIo.get(uid, 0); int ioBlockedCounter = mUidsBlockedOnIo.get(uid, 0); if (ioBlockedCounter == 0) { if (ioBlockedCounter == 0) { Slog.w(TAG, "Unexpected app IO resumption for uid: " + uid); } if (ioBlockedCounter <= 1) { mUidsBlockedOnIo.remove(uid); mUidsBlockedOnIo.remove(uid); } else { } else { mUidsBlockedOnIo.put(uid, --ioBlockedCounter); mUidsBlockedOnIo.put(uid, --ioBlockedCounter); Loading Loading
core/api/test-current.txt +1 −0 Original line number Original line Diff line number Diff line Loading @@ -1843,6 +1843,7 @@ package android.os.storage { public class StorageManager { public class StorageManager { method @NonNull public static java.util.UUID convert(@NonNull String); method @NonNull public static java.util.UUID convert(@NonNull String); method @NonNull public static String convert(@NonNull java.util.UUID); method @NonNull public static String convert(@NonNull java.util.UUID); method public boolean isAppIoBlocked(@NonNull java.util.UUID, int, int, int); method public static boolean isUserKeyUnlocked(int); method public static boolean isUserKeyUnlocked(int); } } Loading
core/java/android/os/storage/IStorageManager.aidl +2 −1 Original line number Original line Diff line number Diff line Loading @@ -202,4 +202,5 @@ interface IStorageManager { void notifyAppIoBlocked(in String volumeUuid, int uid, int tid, int reason) = 92; void notifyAppIoBlocked(in String volumeUuid, int uid, int tid, int reason) = 92; void notifyAppIoResumed(in String volumeUuid, int uid, int tid, int reason) = 93; void notifyAppIoResumed(in String volumeUuid, int uid, int tid, int reason) = 93; int getExternalStorageMountMode(int uid, in String packageName) = 94; int getExternalStorageMountMode(int uid, in String packageName) = 94; boolean isAppIoBlocked(in String volumeUuid, int uid, int tid, int reason) = 95; } } No newline at end of file
core/java/android/os/storage/StorageManager.java +24 −0 Original line number Original line Diff line number Diff line Loading @@ -2871,6 +2871,30 @@ public class StorageManager { } } } } /** * Check if {@code uid} with {@code tid} is blocked on IO for {@code reason}. * * This requires {@link ExternalStorageService} the * {@link android.Manifest.permission#WRITE_MEDIA_STORAGE} permission. * * @param volumeUuid the UUID of the storage volume to check IO blocked status * @param uid the UID of the app to check IO blocked status * @param tid the tid of the app to check IO blocked status * @param reason the reason to check IO blocked status for * * @hide */ @TestApi public boolean isAppIoBlocked(@NonNull UUID volumeUuid, int uid, int tid, @AppIoBlockedReason int reason) { Objects.requireNonNull(volumeUuid); try { return mStorageManager.isAppIoBlocked(convert(volumeUuid), uid, tid, reason); } catch (RemoteException e) { throw e.rethrowFromSystemServer(); } } private final Object mFuseAppLoopLock = new Object(); private final Object mFuseAppLoopLock = new Object(); @GuardedBy("mFuseAppLoopLock") @GuardedBy("mFuseAppLoopLock") Loading
services/core/java/com/android/server/StorageManagerService.java +8 −1 Original line number Original line Diff line number Diff line Loading @@ -3375,7 +3375,7 @@ class StorageManagerService extends IStorageManager.Stub } } } } /* /** * Returns PendingIntent which can be used by Apps with MANAGE_EXTERNAL_STORAGE permission * Returns PendingIntent which can be used by Apps with MANAGE_EXTERNAL_STORAGE permission * to launch the manageSpaceActivity of the App specified by packageName. * to launch the manageSpaceActivity of the App specified by packageName. */ */ Loading Loading @@ -3437,6 +3437,13 @@ class StorageManagerService extends IStorageManager.Stub mStorageSessionController.notifyAppIoResumed(volumeUuid, uid, tid, reason); mStorageSessionController.notifyAppIoResumed(volumeUuid, uid, tid, reason); } } @Override public boolean isAppIoBlocked(String volumeUuid, int uid, int tid, @StorageManager.AppIoBlockedReason int reason) { return isAppIoBlocked(uid); } private boolean isAppIoBlocked(int uid) { private boolean isAppIoBlocked(int uid) { return mStorageSessionController.isAppIoBlocked(uid); return mStorageSessionController.isAppIoBlocked(uid); } } Loading
services/core/java/com/android/server/storage/StorageUserConnection.java +4 −0 Original line number Original line Diff line number Diff line Loading @@ -265,6 +265,10 @@ public final class StorageUserConnection { synchronized (mSessionsLock) { synchronized (mSessionsLock) { int ioBlockedCounter = mUidsBlockedOnIo.get(uid, 0); int ioBlockedCounter = mUidsBlockedOnIo.get(uid, 0); if (ioBlockedCounter == 0) { if (ioBlockedCounter == 0) { Slog.w(TAG, "Unexpected app IO resumption for uid: " + uid); } if (ioBlockedCounter <= 1) { mUidsBlockedOnIo.remove(uid); mUidsBlockedOnIo.remove(uid); } else { } else { mUidsBlockedOnIo.put(uid, --ioBlockedCounter); mUidsBlockedOnIo.put(uid, --ioBlockedCounter); Loading