More info to support CTS, fix reconcile bug.

Surface more details and commands for storage volumes to support
CTS testing.  Fix user reconciliation bug that skipped user setup on
empty volumes.

Bug: 22658804, 22633097
Change-Id: I4221312d1cce24d1f5a2c108095cf3cf471598ed
This commit is contained in:
Jeff Sharkey
2015-07-22 11:11:46 -07:00
parent 54d42be6eb
commit 85ced63268
3 changed files with 35 additions and 15 deletions

View File

@@ -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("");

View File

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

View File

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