Merge "ResetListener in StorageManagerService"

am: 6b3a5194d9

Change-Id: Ibb3e89017328e2414d11078915913781d7aba226
This commit is contained in:
Risan
2018-11-02 21:23:56 -07:00
committed by android-build-merger
2 changed files with 42 additions and 0 deletions

View File

@@ -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);
}

View File

@@ -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.