diff options
| -rw-r--r-- | core/java/android/os/storage/StorageManagerInternal.java | 22 | ||||
| -rw-r--r-- | services/core/java/com/android/server/StorageManagerService.java | 20 |
2 files changed, 42 insertions, 0 deletions
diff --git a/core/java/android/os/storage/StorageManagerInternal.java b/core/java/android/os/storage/StorageManagerInternal.java index d102b194f86d..942bf94b1db6 100644 --- a/core/java/android/os/storage/StorageManagerInternal.java +++ b/core/java/android/os/storage/StorageManagerInternal.java @@ -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); } diff --git a/services/core/java/com/android/server/StorageManagerService.java b/services/core/java/com/android/server/StorageManagerService.java index 6c2903f34721..3b71cd9f3fa1 100644 --- a/services/core/java/com/android/server/StorageManagerService.java +++ b/services/core/java/com/android/server/StorageManagerService.java @@ -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. |