Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 978d2dd5 authored by Jeff Sharkey's avatar Jeff Sharkey Committed by android-build-merger
Browse files

Merge "Better public volumes handling on secondary users." into pi-dev

am: bfc661ea

Change-Id: I6bca0f8eb74f30251a4d06bd462b4590ee030d92
parents 06a25558 bfc661ea
Loading
Loading
Loading
Loading
+70 −57
Original line number Diff line number Diff line
@@ -36,6 +36,7 @@ import android.os.storage.StorageManager;
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,6 +72,7 @@ public class StorageSettings extends SettingsPreferenceFragment implements Index

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

@@ -94,7 +96,7 @@ public class StorageSettings extends SettingsPreferenceFragment implements Index

    @Override
    public int getMetricsCategory() {
        return MetricsEvent.DEVICEINFO_STORAGE;
        return METRICS_CATEGORY;
    }

    @Override
@@ -301,20 +303,7 @@ public class StorageSettings extends SettingsPreferenceFragment implements Index
                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:")) {
@@ -338,6 +327,25 @@ public class StorageSettings extends SettingsPreferenceFragment implements Index
        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;
@@ -441,7 +449,8 @@ public class StorageSettings extends SettingsPreferenceFragment implements Index
            builder.setPositiveButton(R.string.storage_menu_mount,
                    new DialogInterface.OnClickListener() {
                        /**
                 * Check if an {@link RestrictedLockUtils#sendShowAdminSupportDetailsIntent admin
                         * Check if an {@link
                         * RestrictedLockUtils#sendShowAdminSupportDetailsIntent admin
                         * details intent} should be shown for the restriction and show it.
                         *
                         * @param restriction The restriction to check
@@ -450,10 +459,12 @@ public class StorageSettings extends SettingsPreferenceFragment implements Index
                        private boolean wasAdminSupportIntentShown(@NonNull String restriction) {
                            EnforcedAdmin admin = RestrictedLockUtils.checkIfRestrictionEnforced(
                                    getActivity(), restriction, UserHandle.myUserId());
                    boolean hasBaseUserRestriction = RestrictedLockUtils.hasBaseUserRestriction(
                            boolean hasBaseUserRestriction =
                                    RestrictedLockUtils.hasBaseUserRestriction(
                                            getActivity(), restriction, UserHandle.myUserId());
                            if (admin != null && !hasBaseUserRestriction) {
                        RestrictedLockUtils.sendShowAdminSupportDetailsIntent(getActivity(), admin);
                                RestrictedLockUtils.sendShowAdminSupportDetailsIntent(getActivity(),
                                        admin);
                                return true;
                            }

@@ -462,12 +473,14 @@ public class StorageSettings extends SettingsPreferenceFragment implements Index

                        @Override
                        public void onClick(DialogInterface dialog, int which) {
                    if (wasAdminSupportIntentShown(UserManager.DISALLOW_MOUNT_PHYSICAL_MEDIA)) {
                            if (wasAdminSupportIntentShown(
                                    UserManager.DISALLOW_MOUNT_PHYSICAL_MEDIA)) {
                                return;
                            }

                            if (vol.disk != null && vol.disk.isUsb() &&
                            wasAdminSupportIntentShown(UserManager.DISALLOW_USB_FILE_TRANSFER)) {
                                    wasAdminSupportIntentShown(
                                            UserManager.DISALLOW_USB_FILE_TRANSFER)) {
                                return;
                            }

+18 −5
Original line number Diff line number Diff line
@@ -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;
@@ -89,4 +92,14 @@ public class StorageSettingsTest {
                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));
    }
}