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

Commit 478e03ed authored by TreeHugger Robot's avatar TreeHugger Robot Committed by Android (Google) Code Review
Browse files

Merge "Add isAppIoBlocked TestApi" into sc-dev

parents 16f76731 ae30d154
Loading
Loading
Loading
Loading
+1 −0
Original line number Diff line number Diff line
@@ -1838,6 +1838,7 @@ package android.os.storage {
  public class StorageManager {
    method @NonNull public static java.util.UUID convert(@NonNull String);
    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);
  }

+1 −0
Original line number Diff line number Diff line
@@ -201,4 +201,5 @@ interface IStorageManager {
    void notifyAppIoBlocked(in String volumeUuid, int uid, int tid, int reason) = 91;
    void notifyAppIoResumed(in String volumeUuid, int uid, int tid, int reason) = 92;
    PendingIntent getManageSpaceActivityIntent(in String packageName, int requestCode) = 93;
    boolean isAppIoBlocked(in String volumeUuid, int uid, int tid, int reason) = 94;
    }
+24 −0
Original line number Diff line number Diff line
@@ -2803,6 +2803,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();

    @GuardedBy("mFuseAppLoopLock")
+11 −2
Original line number Diff line number Diff line
@@ -3377,19 +3377,28 @@ class StorageManagerService extends IStorageManager.Stub
    }

    @Override
    public void notifyAppIoBlocked(String volumeUuid, int uid, int tid, int reason) {
    public void notifyAppIoBlocked(String volumeUuid, int uid, int tid,
            @StorageManager.AppIoBlockedReason int reason) {
        enforceExternalStorageService();

        mStorageSessionController.notifyAppIoBlocked(volumeUuid, uid, tid, reason);
    }

    @Override
    public void notifyAppIoResumed(String volumeUuid, int uid, int tid, int reason) {
    public void notifyAppIoResumed(String volumeUuid, int uid, int tid,
            @StorageManager.AppIoBlockedReason int reason) {
        enforceExternalStorageService();

        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) {
        return mStorageSessionController.isAppIoBlocked(uid);
    }
+4 −0
Original line number Diff line number Diff line
@@ -265,6 +265,10 @@ public final class StorageUserConnection {
        synchronized (mSessionsLock) {
            int ioBlockedCounter = mUidsBlockedOnIo.get(uid, 0);
            if (ioBlockedCounter == 0) {
                Slog.w(TAG, "Unexpected app IO resumption for uid: " + uid);
            }

            if (ioBlockedCounter <= 1) {
                mUidsBlockedOnIo.remove(uid);
            } else {
                mUidsBlockedOnIo.put(uid, --ioBlockedCounter);