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

Commit bfc661ea authored by Jeff Sharkey's avatar Jeff Sharkey Committed by Android (Google) Code Review
Browse files

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

parents 8e88874e 3c6627d8
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));
    }
}