diff options
-rw-r--r-- | cmds/sm/src/com/android/commands/sm/Sm.java | 15 | ||||
-rw-r--r-- | core/java/android/os/FileUtils.java | 12 | ||||
-rw-r--r-- | services/core/java/com/android/server/pm/PackageManagerService.java | 23 |
3 files changed, 35 insertions, 15 deletions
diff --git a/cmds/sm/src/com/android/commands/sm/Sm.java b/cmds/sm/src/com/android/commands/sm/Sm.java index 0dad4dc..0a1ba4d 100644 --- a/cmds/sm/src/com/android/commands/sm/Sm.java +++ b/cmds/sm/src/com/android/commands/sm/Sm.java @@ -81,6 +81,8 @@ public final class Sm { runUnmount(); } else if ("format".equals(op)) { runFormat(); + } else if ("benchmark".equals(op)) { + runBenchmark(); } else if ("forget".equals(op)) { runForget(); } else { @@ -89,9 +91,12 @@ public final class Sm { } public void runListDisks() throws RemoteException { + final boolean onlyAdoptable = "adoptable".equals(nextArg()); final DiskInfo[] disks = mSm.getDisks(); for (DiskInfo disk : disks) { - System.out.println(disk.getId()); + if (!onlyAdoptable || disk.isAdoptable()) { + System.out.println(disk.getId()); + } } } @@ -161,6 +166,11 @@ public final class Sm { mSm.format(volId); } + public void runBenchmark() throws RemoteException { + final String volId = nextArg(); + mSm.benchmark(volId); + } + public void runForget() throws RemoteException{ final String fsUuid = nextArg(); if ("all".equals(fsUuid)) { @@ -180,7 +190,7 @@ public final class Sm { } private static int showUsage() { - System.err.println("usage: sm list-disks"); + System.err.println("usage: sm list-disks [adoptable]"); System.err.println(" sm list-volumes [public|private|emulated|all]"); System.err.println(" sm has-adoptable"); System.err.println(" sm get-primary-storage-uuid"); @@ -190,6 +200,7 @@ public final class Sm { System.err.println(" sm mount VOLUME"); System.err.println(" sm unmount VOLUME"); System.err.println(" sm format VOLUME"); + System.err.println(" sm benchmark VOLUME"); System.err.println(""); System.err.println(" sm forget [UUID|all]"); System.err.println(""); diff --git a/core/java/android/os/FileUtils.java b/core/java/android/os/FileUtils.java index 864225a..af4c2bc 100644 --- a/core/java/android/os/FileUtils.java +++ b/core/java/android/os/FileUtils.java @@ -16,6 +16,7 @@ package android.os; +import android.annotation.NonNull; import android.provider.DocumentsContract.Document; import android.system.ErrnoException; import android.system.Os; @@ -69,6 +70,8 @@ public class FileUtils { /** Regular expression for safe filenames: no spaces or metacharacters */ private static final Pattern SAFE_FILENAME_PATTERN = Pattern.compile("[\\w%+,./=_-]+"); + private static final File[] EMPTY = new File[0]; + /** * Set owner and mode of of given {@link File}. * @@ -634,4 +637,13 @@ public class FileUtils { return new File(parent, name + "." + ext); } } + + public static @NonNull File[] listFilesOrEmpty(File dir) { + File[] res = dir.listFiles(); + if (res != null) { + return res; + } else { + return EMPTY; + } + } } diff --git a/services/core/java/com/android/server/pm/PackageManagerService.java b/services/core/java/com/android/server/pm/PackageManagerService.java index c139389..9e7e5ec 100644 --- a/services/core/java/com/android/server/pm/PackageManagerService.java +++ b/services/core/java/com/android/server/pm/PackageManagerService.java @@ -15600,12 +15600,8 @@ public class PackageManagerService extends IPackageManager.Stub { * recycled. */ private void reconcileUsers(String volumeUuid) { - final File[] files = Environment.getDataUserDirectory(volumeUuid).listFiles(); - if (ArrayUtils.isEmpty(files)) { - Slog.d(TAG, "No users found on " + volumeUuid); - return; - } - + final File[] files = FileUtils + .listFilesOrEmpty(Environment.getDataUserDirectory(volumeUuid)); for (File file : files) { if (!file.isDirectory()) continue; @@ -15661,12 +15657,8 @@ public class PackageManagerService extends IPackageManager.Stub { * another volume. */ private void reconcileApps(String volumeUuid) { - final File[] files = Environment.getDataAppDirectory(volumeUuid).listFiles(); - if (ArrayUtils.isEmpty(files)) { - Slog.d(TAG, "No apps found on " + volumeUuid); - return; - } - + final File[] files = FileUtils + .listFilesOrEmpty(Environment.getDataAppDirectory(volumeUuid)); for (File file : files) { final boolean isPackage = (isApkFile(file) || file.isDirectory()) && !PackageInstallerService.isStageName(file.getName()); @@ -15797,7 +15789,12 @@ public class PackageManagerService extends IPackageManager.Stub { } // Now that we're guarded by frozen state, kill app during move - killApplication(packageName, appId, "move pkg"); + final long token = Binder.clearCallingIdentity(); + try { + killApplication(packageName, appId, "move pkg"); + } finally { + Binder.restoreCallingIdentity(token); + } final Bundle extras = new Bundle(); extras.putString(Intent.EXTRA_PACKAGE_NAME, packageName); |