diff options
| author | 2018-10-31 10:10:12 +0900 | |
|---|---|---|
| committer | 2018-11-02 03:42:15 +0000 | |
| commit | aec0ee73d7191ce0947ee584906b7636a0f1a884 (patch) | |
| tree | 2bff06905a47310e59ecac2893074a21d44db536 | |
| parent | 0ac63d74fb794c3545215f23f3f4359723f13c30 (diff) | |
ResetListener in StorageManagerService
Bug: 110380403
Test: Manual test in ARC++, prototyped a way that reset reaches ARC++
service.
Change-Id: Icc7dcc8b5c726ed9f61226569227c4d47f44b386
| -rw-r--r-- | core/java/android/os/storage/StorageManagerInternal.java | 21 | ||||
| -rw-r--r-- | services/core/java/com/android/server/StorageManagerService.java | 20 |
2 files changed, 41 insertions, 0 deletions
diff --git a/core/java/android/os/storage/StorageManagerInternal.java b/core/java/android/os/storage/StorageManagerInternal.java index 816a730716e1..f521c683896e 100644 --- a/core/java/android/os/storage/StorageManagerInternal.java +++ b/core/java/android/os/storage/StorageManagerInternal.java @@ -18,6 +18,7 @@ package android.os.storage; import android.annotation.NonNull; import android.annotation.Nullable; +import android.os.IVold; /** * Mount service local interface. @@ -111,4 +112,24 @@ public abstract class StorageManagerInternal { * @return Labels of storage volumes that are visible to the given userId. */ public abstract String[] getVisibleVolumesForUser(int userId); + + /** + * 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 5643a6a66251..54c7d17d70a7 100644 --- a/services/core/java/com/android/server/StorageManagerService.java +++ b/services/core/java/com/android/server/StorageManagerService.java @@ -878,6 +878,7 @@ class StorageManagerService extends IStorageManager.Stub mStoraged.onUserStarted(userId); } mVold.onSecureKeyguardStateChanged(mSecureKeyguardShowing); + mStorageManagerInternal.onReset(mVold); } catch (Exception e) { Slog.wtf(TAG, e); } @@ -3635,6 +3636,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 @@ -3666,6 +3671,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. |