Merge "ResetListener in StorageManagerService"
This commit is contained in:
@@ -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);
|
||||
}
|
||||
|
||||
@@ -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.
|
||||
|
||||
Reference in New Issue
Block a user