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

Commit d17dabf5 authored by Risan's avatar Risan Committed by android-build-merger
Browse files

Merge "ResetListener in StorageManagerService" am: 6b3a5194

am: 493110e0

Change-Id: I25a0a9a949d17c0a0d05106dc91254f5fbc901e3
parents 6ec08156 493110e0
Loading
Loading
Loading
Loading
+22 −0
Original line number Diff line number Diff line
@@ -16,6 +16,8 @@

package android.os.storage;

import android.os.IVold;

/**
 * Mount service local interface.
 *
@@ -79,4 +81,24 @@ public abstract class StorageManagerInternal {
     * @return The mount mode.
     */
    public abstract int getExternalStorageMountMode(int uid, String packageName);

    /**
     * A listener for reset events in the StorageManagerService.
     */
    public interface ResetListener {
        /**
         * A method that should be triggered internally by StorageManagerInternal
         * when StorageManagerService reset happens.
         *
         * @param vold The binder object to vold.
         */
        void onReset(IVold vold);
    }

    /**
     * Add a listener to listen to reset event in StorageManagerService.
     *
     * @param listener The listener that will be notified on reset events.
     */
    public abstract void addResetListener(ResetListener listener);
}
+20 −0
Original line number Diff line number Diff line
@@ -876,6 +876,7 @@ class StorageManagerService extends IStorageManager.Stub
                    mStoraged.onUserStarted(userId);
                }
                mVold.onSecureKeyguardStateChanged(mSecureKeyguardShowing);
                mStorageManagerInternal.onReset(mVold);
            } catch (Exception e) {
                Slog.wtf(TAG, e);
            }
@@ -3629,6 +3630,10 @@ class StorageManagerService extends IStorageManager.Stub
        private final CopyOnWriteArrayList<ExternalStorageMountPolicy> mPolicies =
                new CopyOnWriteArrayList<>();

        @GuardedBy("mResetListeners")
        private final List<StorageManagerInternal.ResetListener> mResetListeners =
                new ArrayList<>();

        @Override
        public void addExternalStoragePolicy(ExternalStorageMountPolicy policy) {
            // No locking - CopyOnWriteArrayList
@@ -3658,6 +3663,21 @@ class StorageManagerService extends IStorageManager.Stub
            return mountMode;
        }

        @Override
        public void addResetListener(StorageManagerInternal.ResetListener listener) {
            synchronized (mResetListeners) {
                mResetListeners.add(listener);
            }
        }

        public void onReset(IVold vold) {
            synchronized (mResetListeners) {
                for (StorageManagerInternal.ResetListener listener : mResetListeners) {
                    listener.onReset(vold);
                }
            }
        }

        public boolean hasExternalStorage(int uid, String packageName) {
            // No need to check for system uid. This avoids a deadlock between
            // PackageManagerService and AppOpsService.