diff options
| author | 2017-01-16 20:58:40 -0700 | |
|---|---|---|
| committer | 2017-01-16 20:58:43 -0700 | |
| commit | 7d25fafea7b313cf3eee5bbf4eb959f4986ffce4 (patch) | |
| tree | a315ca88c0c1bf79d7eeb11c22d4d28904057229 | |
| parent | eda5d5183e5bc0fc63027b77b7dfd7d407bf22d6 (diff) | |
Invalidate installd when mounts change.
Test: builds, boots, common operations work
Bug: 34249218
Change-Id: Ia893b43dd7ff6078d91df50a9e8d644583617982
| -rw-r--r-- | services/core/java/com/android/server/pm/Installer.java | 9 | ||||
| -rw-r--r-- | services/usage/java/com/android/server/usage/StorageStatsService.java | 26 |
2 files changed, 33 insertions, 2 deletions
diff --git a/services/core/java/com/android/server/pm/Installer.java b/services/core/java/com/android/server/pm/Installer.java index 98249dd12634..de0d2a3db4ef 100644 --- a/services/core/java/com/android/server/pm/Installer.java +++ b/services/core/java/com/android/server/pm/Installer.java @@ -415,6 +415,15 @@ public class Installer extends SystemService { } } + public void invalidateMounts() throws InstallerException { + if (!checkBeforeRemote()) return; + try { + mInstalld.invalidateMounts(); + } catch (Exception e) { + throw InstallerException.from(e); + } + } + private static void assertValidInstructionSet(String instructionSet) throws InstallerException { for (String abi : Build.SUPPORTED_ABIS) { diff --git a/services/usage/java/com/android/server/usage/StorageStatsService.java b/services/usage/java/com/android/server/usage/StorageStatsService.java index 3be04d451cca..68765b643c66 100644 --- a/services/usage/java/com/android/server/usage/StorageStatsService.java +++ b/services/usage/java/com/android/server/usage/StorageStatsService.java @@ -31,9 +31,10 @@ import android.os.Environment; import android.os.SystemProperties; import android.os.UserHandle; import android.os.UserManager; +import android.os.storage.StorageEventListener; import android.os.storage.StorageManager; import android.os.storage.VolumeInfo; -import android.util.Log; +import android.util.Slog; import com.android.internal.util.ArrayUtils; import com.android.server.SystemService; @@ -66,6 +67,7 @@ public class StorageStatsService extends IStorageStatsManager.Stub { private final UserManager mUser; private final PackageManager mPackage; private final StorageManager mStorage; + private final Installer mInstaller; public StorageStatsService(Context context) { @@ -74,8 +76,28 @@ public class StorageStatsService extends IStorageStatsManager.Stub { mUser = context.getSystemService(UserManager.class); mPackage = context.getSystemService(PackageManager.class); mStorage = context.getSystemService(StorageManager.class); + mInstaller = new Installer(context); mInstaller.onStart(); + invalidateMounts(); + + mStorage.registerListener(new StorageEventListener() { + @Override + public void onVolumeStateChanged(VolumeInfo vol, int oldState, int newState) { + if ((vol.type == VolumeInfo.TYPE_PRIVATE) + && (newState == VolumeInfo.STATE_MOUNTED)) { + invalidateMounts(); + } + } + }); + } + + private void invalidateMounts() { + try { + mInstaller.invalidateMounts(); + } catch (InstallerException e) { + Slog.wtf(TAG, "Failed to invalidate mounts", e); + } } private void enforcePermission(int callingUid, String callingPackage) { @@ -242,7 +264,7 @@ public class StorageStatsService extends IStorageStatsManager.Stub { private static void checkEquals(String msg, long expected, long actual) { if (expected != actual) { - Log.e(TAG, msg + " expected " + expected + " actual " + actual); + Slog.e(TAG, msg + " expected " + expected + " actual " + actual); } } |