Merge "Better public volumes handling on secondary users." into pi-dev
diff --git a/src/com/android/settings/deviceinfo/StorageSettings.java b/src/com/android/settings/deviceinfo/StorageSettings.java
index aaa75e3..cf9d34b 100644
--- a/src/com/android/settings/deviceinfo/StorageSettings.java
+++ b/src/com/android/settings/deviceinfo/StorageSettings.java
@@ -36,6 +36,7 @@
import android.os.storage.VolumeInfo;
import android.os.storage.VolumeRecord;
import android.support.annotation.NonNull;
+import android.support.annotation.VisibleForTesting;
import android.support.v7.preference.Preference;
import android.support.v7.preference.PreferenceCategory;
import android.text.TextUtils;
@@ -71,10 +72,11 @@
private static final String TAG_VOLUME_UNMOUNTED = "volume_unmounted";
private static final String TAG_DISK_INIT = "disk_init";
+ private static final int METRICS_CATEGORY = MetricsEvent.DEVICEINFO_STORAGE;
static final int COLOR_PUBLIC = Color.parseColor("#ff9e9e9e");
- static final int[] COLOR_PRIVATE = new int[] {
+ static final int[] COLOR_PRIVATE = new int[]{
Color.parseColor("#ff26a69a"),
Color.parseColor("#ffab47bc"),
Color.parseColor("#fff2a600"),
@@ -94,7 +96,7 @@
@Override
public int getMetricsCategory() {
- return MetricsEvent.DEVICEINFO_STORAGE;
+ return METRICS_CATEGORY;
}
@Override
@@ -139,7 +141,7 @@
};
private static boolean isInteresting(VolumeInfo vol) {
- switch(vol.getType()) {
+ switch (vol.getType()) {
case VolumeInfo.TYPE_PRIVATE:
case VolumeInfo.TYPE_PUBLIC:
return true;
@@ -301,20 +303,7 @@
return true;
} else if (vol.getType() == VolumeInfo.TYPE_PUBLIC) {
- if (vol.isMountedReadable()) {
- startActivity(vol.buildBrowseIntent());
- return true;
- } else {
- final Bundle args = new Bundle();
- args.putString(VolumeInfo.EXTRA_VOLUME_ID, vol.getId());
- new SubSettingLauncher(getContext())
- .setDestination(PublicVolumeSettings.class.getCanonicalName())
- .setTitle(-1)
- .setSourceMetricsCategory(getMetricsCategory())
- .setArguments(args)
- .launch();
- return true;
- }
+ return handlePublicVolumeClick(getContext(), vol);
}
} else if (key.startsWith("disk:")) {
@@ -328,7 +317,7 @@
args.putString(VolumeRecord.EXTRA_FS_UUID, key);
new SubSettingLauncher(getContext())
.setDestination(PrivateVolumeForget.class.getCanonicalName())
- .setTitle(R.string.storage_menu_forget)
+ .setTitle(R.string.storage_menu_forget)
.setSourceMetricsCategory(getMetricsCategory())
.setArguments(args)
.launch();
@@ -338,6 +327,25 @@
return false;
}
+ @VisibleForTesting
+ static boolean handlePublicVolumeClick(Context context, VolumeInfo vol) {
+ final Intent intent = vol.buildBrowseIntent();
+ if (vol.isMountedReadable() && intent != null) {
+ context.startActivity(intent);
+ return true;
+ } else {
+ final Bundle args = new Bundle();
+ args.putString(VolumeInfo.EXTRA_VOLUME_ID, vol.getId());
+ new SubSettingLauncher(context)
+ .setDestination(PublicVolumeSettings.class.getCanonicalName())
+ .setTitle(-1)
+ .setSourceMetricsCategory(METRICS_CATEGORY)
+ .setArguments(args)
+ .launch();
+ return true;
+ }
+ }
+
public static class MountTask extends AsyncTask<Void, Void, Exception> {
private final Context mContext;
private final StorageManager mStorageManager;
@@ -440,40 +448,45 @@
builder.setPositiveButton(R.string.storage_menu_mount,
new DialogInterface.OnClickListener() {
- /**
- * Check if an {@link RestrictedLockUtils#sendShowAdminSupportDetailsIntent admin
- * details intent} should be shown for the restriction and show it.
- *
- * @param restriction The restriction to check
- * @return {@code true} iff a intent was shown.
- */
- private boolean wasAdminSupportIntentShown(@NonNull String restriction) {
- EnforcedAdmin admin = RestrictedLockUtils.checkIfRestrictionEnforced(
- getActivity(), restriction, UserHandle.myUserId());
- boolean hasBaseUserRestriction = RestrictedLockUtils.hasBaseUserRestriction(
- getActivity(), restriction, UserHandle.myUserId());
- if (admin != null && !hasBaseUserRestriction) {
- RestrictedLockUtils.sendShowAdminSupportDetailsIntent(getActivity(), admin);
- return true;
- }
+ /**
+ * Check if an {@link
+ * RestrictedLockUtils#sendShowAdminSupportDetailsIntent admin
+ * details intent} should be shown for the restriction and show it.
+ *
+ * @param restriction The restriction to check
+ * @return {@code true} iff a intent was shown.
+ */
+ private boolean wasAdminSupportIntentShown(@NonNull String restriction) {
+ EnforcedAdmin admin = RestrictedLockUtils.checkIfRestrictionEnforced(
+ getActivity(), restriction, UserHandle.myUserId());
+ boolean hasBaseUserRestriction =
+ RestrictedLockUtils.hasBaseUserRestriction(
+ getActivity(), restriction, UserHandle.myUserId());
+ if (admin != null && !hasBaseUserRestriction) {
+ RestrictedLockUtils.sendShowAdminSupportDetailsIntent(getActivity(),
+ admin);
+ return true;
+ }
- return false;
- }
+ return false;
+ }
- @Override
- public void onClick(DialogInterface dialog, int which) {
- if (wasAdminSupportIntentShown(UserManager.DISALLOW_MOUNT_PHYSICAL_MEDIA)) {
- return;
- }
+ @Override
+ public void onClick(DialogInterface dialog, int which) {
+ if (wasAdminSupportIntentShown(
+ UserManager.DISALLOW_MOUNT_PHYSICAL_MEDIA)) {
+ return;
+ }
- if (vol.disk != null && vol.disk.isUsb() &&
- wasAdminSupportIntentShown(UserManager.DISALLOW_USB_FILE_TRANSFER)) {
- return;
- }
+ if (vol.disk != null && vol.disk.isUsb() &&
+ wasAdminSupportIntentShown(
+ UserManager.DISALLOW_USB_FILE_TRANSFER)) {
+ return;
+ }
- new MountTask(context, vol).execute();
- }
- });
+ new MountTask(context, vol).execute();
+ }
+ });
builder.setNegativeButton(R.string.cancel, null);
return builder.create();
@@ -511,13 +524,13 @@
builder.setPositiveButton(R.string.storage_menu_set_up,
new DialogInterface.OnClickListener() {
- @Override
- public void onClick(DialogInterface dialog, int which) {
- final Intent intent = new Intent(context, StorageWizardInit.class);
- intent.putExtra(DiskInfo.EXTRA_DISK_ID, diskId);
- startActivity(intent);
- }
- });
+ @Override
+ public void onClick(DialogInterface dialog, int which) {
+ final Intent intent = new Intent(context, StorageWizardInit.class);
+ intent.putExtra(DiskInfo.EXTRA_DISK_ID, diskId);
+ startActivity(intent);
+ }
+ });
builder.setNegativeButton(R.string.cancel, null);
return builder.create();
@@ -586,7 +599,7 @@
for (VolumeInfo vol : vols) {
if (isInteresting(vol)) {
data.title = storage.getBestVolumeDescription(vol);
- data.key = "storage_settings_volume_" +vol.id;
+ data.key = "storage_settings_volume_" + vol.id;
data.screenTitle = context.getString(R.string.storage_settings);
result.add(data);
}
diff --git a/tests/robotests/src/com/android/settings/deviceinfo/StorageSettingsTest.java b/tests/robotests/src/com/android/settings/deviceinfo/StorageSettingsTest.java
index 0c9f313..943bd9d 100644
--- a/tests/robotests/src/com/android/settings/deviceinfo/StorageSettingsTest.java
+++ b/tests/robotests/src/com/android/settings/deviceinfo/StorageSettingsTest.java
@@ -16,14 +16,17 @@
package com.android.settings.deviceinfo;
+import static org.mockito.ArgumentMatchers.any;
import static org.mockito.ArgumentMatchers.nullable;
import static org.mockito.Mockito.RETURNS_DEEP_STUBS;
import static org.mockito.Mockito.mock;
+import static org.mockito.Mockito.never;
import static org.mockito.Mockito.verify;
import static org.mockito.Mockito.when;
import android.app.Activity;
import android.app.usage.StorageStatsManager;
+import android.content.Intent;
import android.icu.text.NumberFormat;
import android.os.storage.VolumeInfo;
import android.text.format.Formatter;
@@ -71,14 +74,14 @@
when(volumeInfo.isMountedReadable()).thenReturn(true);
when(volumeInfo.getType()).thenReturn(VolumeInfo.TYPE_PRIVATE);
when(mStorageManagerVolumeProvider
- .getTotalBytes(nullable(StorageStatsManager.class), nullable(VolumeInfo.class)))
- .thenReturn(500L);
+ .getTotalBytes(nullable(StorageStatsManager.class), nullable(VolumeInfo.class)))
+ .thenReturn(500L);
when(mStorageManagerVolumeProvider
- .getFreeBytes(nullable(StorageStatsManager.class), nullable(VolumeInfo.class)))
- .thenReturn(0L);
+ .getFreeBytes(nullable(StorageStatsManager.class), nullable(VolumeInfo.class)))
+ .thenReturn(0L);
ReflectionHelpers
- .setField(provider, "mStorageManagerVolumeProvider", mStorageManagerVolumeProvider);
+ .setField(provider, "mStorageManagerVolumeProvider", mStorageManagerVolumeProvider);
ReflectionHelpers.setField(provider, "mContext", RuntimeEnvironment.application);
provider.setListening(true);
@@ -89,4 +92,14 @@
RuntimeEnvironment.application.getString(
R.string.storage_summary, percentage, freeSpace));
}
+
+ @Test
+ public void handlePublicVolumeClick_startsANonNullActivityWhenVolumeHasNoBrowse() {
+ VolumeInfo volumeInfo = mock(VolumeInfo.class, RETURNS_DEEP_STUBS);
+ when(volumeInfo.isMountedReadable()).thenReturn(true);
+ StorageSettings.handlePublicVolumeClick(mActivity, volumeInfo);
+
+ verify(mActivity, never()).startActivity(null);
+ verify(mActivity).startActivity(any(Intent.class));
+ }
}