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

Commit ee06ef54 authored by HJ ChangLiao's avatar HJ ChangLiao Committed by hjchangliao
Browse files

Convert Smart Storage to BasePrefController

Convert Smart Storage (Storage manager) controller:
AutomaticStorageManagementSwitchPreferenceController
to BasePreferenceController for slices

Change-Id: Ieb22cb97cd46a43557dfbdd2c959e87842890fc6
Fixes: 74916013
Test: make RunSettingsRoboTests
parent 90e70411
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);