Merge "Convert Smart Storage to BasePrefController"

This commit is contained in:
Fan Zhang
2018-05-16 00:21:51 +00:00
committed by Android (Google) Code Review
4 changed files with 42 additions and 37 deletions

View File

@@ -30,7 +30,8 @@
android:icon="@drawable/ic_storage" android:icon="@drawable/ic_storage"
android:order="1" android:order="1"
settings:allowDividerAbove="true" settings:allowDividerAbove="true"
settings:allowDividerBelow="true"/> settings:allowDividerBelow="true"
settings:controller="com.android.settings.deviceinfo.storage.AutomaticStorageManagementSwitchPreferenceController" />
<com.android.settings.deviceinfo.StorageItemPreference <com.android.settings.deviceinfo.StorageItemPreference
android:key="pref_photos_videos" android:key="pref_photos_videos"
android:title="@string/storage_photos_videos" android:title="@string/storage_photos_videos"

View File

@@ -93,6 +93,13 @@ public class StorageDashboardFragment extends DashboardFragment
initializeOptionsMenu(activity); initializeOptionsMenu(activity);
} }
@Override
public void onAttach(Context context) {
super.onAttach(context);
use(AutomaticStorageManagementSwitchPreferenceController.class).setFragmentManager(
getFragmentManager());
}
@VisibleForTesting @VisibleForTesting
void initializeOptionsMenu(Activity activity) { void initializeOptionsMenu(Activity activity) {
mOptionMenuController = new PrivateVolumeOptionMenuController( mOptionMenuController = new PrivateVolumeOptionMenuController(
@@ -189,11 +196,6 @@ public class StorageDashboardFragment extends DashboardFragment
mSecondaryUsers = SecondaryUserController.getSecondaryUserControllers(context, userManager); mSecondaryUsers = SecondaryUserController.getSecondaryUserControllers(context, userManager);
controllers.addAll(mSecondaryUsers); controllers.addAll(mSecondaryUsers);
final AutomaticStorageManagementSwitchPreferenceController asmController =
new AutomaticStorageManagementSwitchPreferenceController(
context, mMetricsFeatureProvider, getFragmentManager());
getLifecycle().addObserver(asmController);
controllers.add(asmController);
return controllers; return controllers;
} }

View File

@@ -21,54 +21,52 @@ import android.app.FragmentManager;
import android.content.Context; import android.content.Context;
import android.os.SystemProperties; import android.os.SystemProperties;
import android.provider.Settings; import android.provider.Settings;
import androidx.annotation.VisibleForTesting;
import androidx.preference.PreferenceScreen;
import com.android.internal.logging.nano.MetricsProto.MetricsEvent; 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.deletionhelper.ActivationWarningFragment;
import com.android.settings.overlay.FeatureFactory;
import com.android.settings.widget.MasterSwitchController; import com.android.settings.widget.MasterSwitchController;
import com.android.settings.widget.MasterSwitchPreference; import com.android.settings.widget.MasterSwitchPreference;
import com.android.settings.widget.SwitchWidgetController; import com.android.settings.widget.SwitchWidgetController;
import com.android.settingslib.Utils; import com.android.settingslib.Utils;
import com.android.settingslib.core.AbstractPreferenceController;
import com.android.settingslib.core.instrumentation.MetricsFeatureProvider; import com.android.settingslib.core.instrumentation.MetricsFeatureProvider;
import com.android.settingslib.core.lifecycle.LifecycleObserver; import com.android.settingslib.core.lifecycle.LifecycleObserver;
import com.android.settingslib.core.lifecycle.events.OnResume; import com.android.settingslib.core.lifecycle.events.OnResume;
import androidx.annotation.VisibleForTesting;
import androidx.preference.PreferenceScreen;
public class AutomaticStorageManagementSwitchPreferenceController extends public class AutomaticStorageManagementSwitchPreferenceController extends
AbstractPreferenceController implements PreferenceControllerMixin, LifecycleObserver, BasePreferenceController implements LifecycleObserver, OnResume,
OnResume, SwitchWidgetController.OnSwitchChangeListener { SwitchWidgetController.OnSwitchChangeListener {
private static final String KEY_TOGGLE_ASM = "toggle_asm";
@VisibleForTesting @VisibleForTesting
static final String STORAGE_MANAGER_ENABLED_BY_DEFAULT_PROPERTY = "ro.storage_manager.enabled"; static final String STORAGE_MANAGER_ENABLED_BY_DEFAULT_PROPERTY = "ro.storage_manager.enabled";
private final MetricsFeatureProvider mMetricsFeatureProvider;
private MasterSwitchPreference mSwitch; private MasterSwitchPreference mSwitch;
private MasterSwitchController mSwitchController; private MasterSwitchController mSwitchController;
private final MetricsFeatureProvider mMetricsFeatureProvider; private FragmentManager mFragmentManager;
private final FragmentManager mFragmentManager;
public AutomaticStorageManagementSwitchPreferenceController(Context context, public AutomaticStorageManagementSwitchPreferenceController(Context context, String key) {
MetricsFeatureProvider metricsFeatureProvider, FragmentManager fragmentManager) { super(context, key);
super(context); mMetricsFeatureProvider = FeatureFactory.getFactory(context).getMetricsFeatureProvider();
mMetricsFeatureProvider = metricsFeatureProvider; }
public AutomaticStorageManagementSwitchPreferenceController setFragmentManager(
FragmentManager fragmentManager) {
mFragmentManager = fragmentManager; mFragmentManager = fragmentManager;
return this;
} }
@Override @Override
public void displayPreference(PreferenceScreen screen) { public void displayPreference(PreferenceScreen screen) {
super.displayPreference(screen); super.displayPreference(screen);
mSwitch = (MasterSwitchPreference) screen.findPreference(KEY_TOGGLE_ASM); mSwitch = (MasterSwitchPreference) screen.findPreference(getPreferenceKey());
} }
@Override @Override
public boolean isAvailable() { public int getAvailabilityStatus() {
return !ActivityManager.isLowRamDeviceStatic(); return !ActivityManager.isLowRamDeviceStatic() ? AVAILABLE : UNSUPPORTED_ON_DEVICE;
}
@Override
public String getPreferenceKey() {
return KEY_TOGGLE_ASM;
} }
@Override @Override
@@ -103,7 +101,7 @@ public class AutomaticStorageManagementSwitchPreferenceController extends
!= 0; != 0;
// Show warning if it is disabled by default and turning it on or if it was disabled by // 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. // policy and we're turning it on.
if ((isChecked && (!storageManagerEnabledByDefault || storageManagerDisabledByPolicy))) { if (isChecked && (!storageManagerEnabledByDefault || storageManagerDisabledByPolicy)) {
ActivationWarningFragment fragment = ActivationWarningFragment.newInstance(); ActivationWarningFragment fragment = ActivationWarningFragment.newInstance();
fragment.show(mFragmentManager, ActivationWarningFragment.TAG); fragment.show(mFragmentManager, ActivationWarningFragment.TAG);
} }

View File

@@ -36,12 +36,12 @@ import androidx.preference.PreferenceScreen;
import com.android.internal.logging.nano.MetricsProto.MetricsEvent; import com.android.internal.logging.nano.MetricsProto.MetricsEvent;
import com.android.internal.os.RoSystemProperties; import com.android.internal.os.RoSystemProperties;
import com.android.settings.core.BasePreferenceController;
import com.android.settings.deletionhelper.ActivationWarningFragment; import com.android.settings.deletionhelper.ActivationWarningFragment;
import com.android.settings.overlay.FeatureFactory; import com.android.settings.overlay.FeatureFactory;
import com.android.settings.testutils.FakeFeatureFactory; import com.android.settings.testutils.FakeFeatureFactory;
import com.android.settings.testutils.SettingsRobolectricTestRunner; import com.android.settings.testutils.SettingsRobolectricTestRunner;
import com.android.settings.widget.MasterSwitchPreference; import com.android.settings.widget.MasterSwitchPreference;
import com.android.settingslib.core.instrumentation.MetricsFeatureProvider;
import org.junit.Before; import org.junit.Before;
import org.junit.Test; import org.junit.Test;
@@ -72,22 +72,25 @@ public class AutomaticStorageManagementSwitchPreferenceControllerTest {
MockitoAnnotations.initMocks(this); MockitoAnnotations.initMocks(this);
mContext = RuntimeEnvironment.application.getApplicationContext(); mContext = RuntimeEnvironment.application.getApplicationContext();
final FeatureFactory factory = FeatureFactory.getFactory(mContext); final FeatureFactory factory = FeatureFactory.getFactory(mContext);
final MetricsFeatureProvider metricsFeature = factory.getMetricsFeatureProvider();
mController = new AutomaticStorageManagementSwitchPreferenceController( mController = new AutomaticStorageManagementSwitchPreferenceController(mContext, "testkey");
mContext, metricsFeature, mFragmentManager); mController.setFragmentManager(mFragmentManager);
when(mScreen.findPreference(mController.getPreferenceKey())).thenReturn(mPreference); when(mScreen.findPreference(mController.getPreferenceKey())).thenReturn(mPreference);
} }
@Test @Test
public void isAvailable_shouldReturnTrue_forHighRamDevice() { public void isAvailable_shouldReturnTrue_forHighRamDevice() {
assertThat(mController.isAvailable()).isTrue(); assertThat(mController.isAvailable()).isTrue();
assertThat(mController.getAvailabilityStatus()).isEqualTo(
BasePreferenceController.AVAILABLE);
} }
@Test @Test
public void isAvailable_shouldAlwaysReturnFalse_forLowRamDevice() { public void isAvailable_shouldAlwaysReturnFalse_forLowRamDevice() {
ReflectionHelpers.setStaticField(RoSystemProperties.class, "CONFIG_LOW_RAM", true); ReflectionHelpers.setStaticField(RoSystemProperties.class, "CONFIG_LOW_RAM", true);
assertThat(mController.isAvailable()).isFalse(); assertThat(mController.isAvailable()).isFalse();
assertThat(mController.getAvailabilityStatus()).isEqualTo(
BasePreferenceController.UNSUPPORTED_ON_DEVICE);
ReflectionHelpers.setStaticField(RoSystemProperties.class, "CONFIG_LOW_RAM", false); ReflectionHelpers.setStaticField(RoSystemProperties.class, "CONFIG_LOW_RAM", false);
} }
@@ -117,8 +120,10 @@ public class AutomaticStorageManagementSwitchPreferenceControllerTest {
// the instance variables. // the instance variables.
final FakeFeatureFactory factory = FakeFeatureFactory.setupForTest(); final FakeFeatureFactory factory = FakeFeatureFactory.setupForTest();
final AutomaticStorageManagementSwitchPreferenceController controller = final AutomaticStorageManagementSwitchPreferenceController controller =
new AutomaticStorageManagementSwitchPreferenceController( new AutomaticStorageManagementSwitchPreferenceController(mMockContext, "testkey");
mMockContext, factory.metricsFeatureProvider, mFragmentManager); ReflectionHelpers.setField(controller, "mMetricsFeatureProvider",
factory.metricsFeatureProvider);
controller.setFragmentManager(mFragmentManager);
controller.onSwitchToggled(true); controller.onSwitchToggled(true);
@@ -158,7 +163,6 @@ public class AutomaticStorageManagementSwitchPreferenceControllerTest {
verify(transaction, never()).add(any(), eq(ActivationWarningFragment.TAG)); verify(transaction, never()).add(any(), eq(ActivationWarningFragment.TAG));
} }
@Test @Test
public void togglingOnShouldNotTriggerWarningFragmentIfEnabledByDefault() { public void togglingOnShouldNotTriggerWarningFragmentIfEnabledByDefault() {
final FragmentTransaction transaction = mock(FragmentTransaction.class); final FragmentTransaction transaction = mock(FragmentTransaction.class);