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

Commit 9648d579 authored by Fan Zhang's avatar Fan Zhang Committed by Android (Google) Code Review
Browse files

Merge "Convert Smart Storage to BasePrefController"

parents b976044f ee06ef54
Loading
Loading
Loading
Loading
+2 −1
Original line number Diff line number Diff line
@@ -30,7 +30,8 @@
        android:icon="@drawable/ic_storage"
        android:order="1"
        settings:allowDividerAbove="true"
        settings:allowDividerBelow="true"/>
        settings:allowDividerBelow="true"
        settings:controller="com.android.settings.deviceinfo.storage.AutomaticStorageManagementSwitchPreferenceController" />
    <com.android.settings.deviceinfo.StorageItemPreference
        android:key="pref_photos_videos"
        android:title="@string/storage_photos_videos"
+7 −5
Original line number Diff line number Diff line
@@ -93,6 +93,13 @@ public class StorageDashboardFragment extends DashboardFragment
        initializeOptionsMenu(activity);
    }

    @Override
    public void onAttach(Context context) {
        super.onAttach(context);
        use(AutomaticStorageManagementSwitchPreferenceController.class).setFragmentManager(
                getFragmentManager());
    }

    @VisibleForTesting
    void initializeOptionsMenu(Activity activity) {
        mOptionMenuController = new PrivateVolumeOptionMenuController(
@@ -189,11 +196,6 @@ public class StorageDashboardFragment extends DashboardFragment
        mSecondaryUsers = SecondaryUserController.getSecondaryUserControllers(context, userManager);
        controllers.addAll(mSecondaryUsers);

        final AutomaticStorageManagementSwitchPreferenceController asmController =
                new AutomaticStorageManagementSwitchPreferenceController(
                        context, mMetricsFeatureProvider, getFragmentManager());
        getLifecycle().addObserver(asmController);
        controllers.add(asmController);
        return controllers;
    }

+22 −24
Original line number Diff line number Diff line
@@ -21,54 +21,52 @@ import android.app.FragmentManager;
import android.content.Context;
import android.os.SystemProperties;
import android.provider.Settings;
import androidx.annotation.VisibleForTesting;
import androidx.preference.PreferenceScreen;

import com.android.internal.logging.nano.MetricsProto.MetricsEvent;
import com.android.settings.core.PreferenceControllerMixin;
import com.android.settings.core.BasePreferenceController;
import com.android.settings.deletionhelper.ActivationWarningFragment;
import com.android.settings.overlay.FeatureFactory;
import com.android.settings.widget.MasterSwitchController;
import com.android.settings.widget.MasterSwitchPreference;
import com.android.settings.widget.SwitchWidgetController;
import com.android.settingslib.Utils;
import com.android.settingslib.core.AbstractPreferenceController;
import com.android.settingslib.core.instrumentation.MetricsFeatureProvider;
import com.android.settingslib.core.lifecycle.LifecycleObserver;
import com.android.settingslib.core.lifecycle.events.OnResume;

import androidx.annotation.VisibleForTesting;
import androidx.preference.PreferenceScreen;

public class AutomaticStorageManagementSwitchPreferenceController extends
        AbstractPreferenceController implements PreferenceControllerMixin, LifecycleObserver,
        OnResume, SwitchWidgetController.OnSwitchChangeListener {
    private static final String KEY_TOGGLE_ASM = "toggle_asm";
        BasePreferenceController implements LifecycleObserver, OnResume,
        SwitchWidgetController.OnSwitchChangeListener {
    @VisibleForTesting
    static final String STORAGE_MANAGER_ENABLED_BY_DEFAULT_PROPERTY = "ro.storage_manager.enabled";

    private final MetricsFeatureProvider mMetricsFeatureProvider;
    private MasterSwitchPreference mSwitch;
    private MasterSwitchController mSwitchController;
    private final MetricsFeatureProvider mMetricsFeatureProvider;
    private final FragmentManager mFragmentManager;
    private FragmentManager mFragmentManager;

    public AutomaticStorageManagementSwitchPreferenceController(Context context, String key) {
        super(context, key);
        mMetricsFeatureProvider = FeatureFactory.getFactory(context).getMetricsFeatureProvider();
    }

    public AutomaticStorageManagementSwitchPreferenceController(Context context,
            MetricsFeatureProvider metricsFeatureProvider, FragmentManager fragmentManager) {
        super(context);
        mMetricsFeatureProvider = metricsFeatureProvider;
    public AutomaticStorageManagementSwitchPreferenceController setFragmentManager(
            FragmentManager fragmentManager) {
        mFragmentManager = fragmentManager;
        return this;
    }

    @Override
    public void displayPreference(PreferenceScreen screen) {
        super.displayPreference(screen);
        mSwitch = (MasterSwitchPreference) screen.findPreference(KEY_TOGGLE_ASM);
    }

    @Override
    public boolean isAvailable() {
        return !ActivityManager.isLowRamDeviceStatic();
        mSwitch = (MasterSwitchPreference) screen.findPreference(getPreferenceKey());
    }

    @Override
    public String getPreferenceKey() {
        return KEY_TOGGLE_ASM;
    public int getAvailabilityStatus() {
        return !ActivityManager.isLowRamDeviceStatic() ? AVAILABLE : UNSUPPORTED_ON_DEVICE;
    }

    @Override
@@ -103,7 +101,7 @@ public class AutomaticStorageManagementSwitchPreferenceController extends
                        != 0;
        // Show warning if it is disabled by default and turning it on or if it was disabled by
        // policy and we're turning it on.
        if ((isChecked && (!storageManagerEnabledByDefault || storageManagerDisabledByPolicy))) {
        if (isChecked && (!storageManagerEnabledByDefault || storageManagerDisabledByPolicy)) {
            ActivationWarningFragment fragment = ActivationWarningFragment.newInstance();
            fragment.show(mFragmentManager, ActivationWarningFragment.TAG);
        }
+11 −7
Original line number Diff line number Diff line
@@ -36,12 +36,12 @@ import androidx.preference.PreferenceScreen;

import com.android.internal.logging.nano.MetricsProto.MetricsEvent;
import com.android.internal.os.RoSystemProperties;
import com.android.settings.core.BasePreferenceController;
import com.android.settings.deletionhelper.ActivationWarningFragment;
import com.android.settings.overlay.FeatureFactory;
import com.android.settings.testutils.FakeFeatureFactory;
import com.android.settings.testutils.SettingsRobolectricTestRunner;
import com.android.settings.widget.MasterSwitchPreference;
import com.android.settingslib.core.instrumentation.MetricsFeatureProvider;

import org.junit.Before;
import org.junit.Test;
@@ -72,22 +72,25 @@ public class AutomaticStorageManagementSwitchPreferenceControllerTest {
        MockitoAnnotations.initMocks(this);
        mContext = RuntimeEnvironment.application.getApplicationContext();
        final FeatureFactory factory = FeatureFactory.getFactory(mContext);
        final MetricsFeatureProvider metricsFeature = factory.getMetricsFeatureProvider();

        mController = new AutomaticStorageManagementSwitchPreferenceController(
                mContext, metricsFeature, mFragmentManager);
        mController = new AutomaticStorageManagementSwitchPreferenceController(mContext, "testkey");
        mController.setFragmentManager(mFragmentManager);
        when(mScreen.findPreference(mController.getPreferenceKey())).thenReturn(mPreference);
    }

    @Test
    public void isAvailable_shouldReturnTrue_forHighRamDevice() {
        assertThat(mController.isAvailable()).isTrue();
        assertThat(mController.getAvailabilityStatus()).isEqualTo(
                BasePreferenceController.AVAILABLE);
    }

    @Test
    public void isAvailable_shouldAlwaysReturnFalse_forLowRamDevice() {
        ReflectionHelpers.setStaticField(RoSystemProperties.class, "CONFIG_LOW_RAM", true);
        assertThat(mController.isAvailable()).isFalse();
        assertThat(mController.getAvailabilityStatus()).isEqualTo(
                BasePreferenceController.UNSUPPORTED_ON_DEVICE);
        ReflectionHelpers.setStaticField(RoSystemProperties.class, "CONFIG_LOW_RAM", false);
    }

@@ -117,8 +120,10 @@ public class AutomaticStorageManagementSwitchPreferenceControllerTest {
        // the instance variables.
        final FakeFeatureFactory factory = FakeFeatureFactory.setupForTest();
        final AutomaticStorageManagementSwitchPreferenceController controller =
                new AutomaticStorageManagementSwitchPreferenceController(
                        mMockContext, factory.metricsFeatureProvider, mFragmentManager);
                new AutomaticStorageManagementSwitchPreferenceController(mMockContext, "testkey");
        ReflectionHelpers.setField(controller, "mMetricsFeatureProvider",
                factory.metricsFeatureProvider);
        controller.setFragmentManager(mFragmentManager);

        controller.onSwitchToggled(true);

@@ -158,7 +163,6 @@ public class AutomaticStorageManagementSwitchPreferenceControllerTest {
        verify(transaction, never()).add(any(), eq(ActivationWarningFragment.TAG));
    }


    @Test
    public void togglingOnShouldNotTriggerWarningFragmentIfEnabledByDefault() {
        final FragmentTransaction transaction = mock(FragmentTransaction.class);