[Settings] enhancing data saver config control

Enhancing the control of R.bool.config_show_data_saver when false, which including:
1. Initial presentation is invisible
2. Leaving UI when triggered
3. Avoid from getting searched
4. Robolectric test case support

Bug: 243877672
Test: test cases and local testing
Change-Id: I909522c0244ebb012a27d6aff34120a4f90128c6
This commit is contained in:
Bonian Chen
2022-10-21 13:42:38 +00:00
parent 61d661feb9
commit af614b823a
4 changed files with 34 additions and 1 deletions

View File

@@ -99,6 +99,7 @@
android:title="@string/data_saver_title" android:title="@string/data_saver_title"
android:icon="@drawable/ic_settings_data_usage" android:icon="@drawable/ic_settings_data_usage"
android:order="10" android:order="10"
settings:isPreferenceVisible="@bool/config_show_data_saver"
android:fragment="com.android.settings.datausage.DataSaverSummary"/> android:fragment="com.android.settings.datausage.DataSaverSummary"/>
<com.android.settings.vpn2.VpnInfoPreference <com.android.settings.vpn2.VpnInfoPreference

View File

@@ -103,6 +103,7 @@
android:key="data_saver" android:key="data_saver"
android:title="@string/unrestricted_data_saver" android:title="@string/unrestricted_data_saver"
android:fragment="com.android.settings.datausage.UnrestrictedDataAccess" android:fragment="com.android.settings.datausage.UnrestrictedDataAccess"
settings:isPreferenceVisible="@bool/config_show_data_saver"
settings:controller="com.android.settings.applications.specialaccess.DataSaverController" /> settings:controller="com.android.settings.applications.specialaccess.DataSaverController" />
<Preference <Preference

View File

@@ -67,9 +67,18 @@ public class DataSaverSummary extends SettingsPreferenceFragment
public void onCreate(Bundle icicle) { public void onCreate(Bundle icicle) {
super.onCreate(icicle); super.onCreate(icicle);
if (!isDataSaverVisible(getContext())) {
finishFragment();
return;
}
addPreferencesFromResource(R.xml.data_saver); addPreferencesFromResource(R.xml.data_saver);
mUnrestrictedAccess = findPreference(KEY_UNRESTRICTED_ACCESS); mUnrestrictedAccess = findPreference(KEY_UNRESTRICTED_ACCESS);
mApplicationsState = ApplicationsState.getInstance(
(Application) getContext().getApplicationContext());
mDataSaverBackend = new DataSaverBackend(getContext()); mDataSaverBackend = new DataSaverBackend(getContext());
mDataUsageBridge = new AppStateDataUsageBridge(mApplicationsState, this, mDataSaverBackend);
mSession = mApplicationsState.newSession(this, getSettingsLifecycle());
} }
@Override @Override
@@ -202,12 +211,18 @@ public class DataSaverSummary extends SettingsPreferenceFragment
R.plurals.data_saver_unrestricted_summary, count, count)); R.plurals.data_saver_unrestricted_summary, count, count));
} }
public static boolean isDataSaverVisible(Context context) {
return context.getResources()
.getBoolean(R.bool.config_show_data_saver);
}
public static final BaseSearchIndexProvider SEARCH_INDEX_DATA_PROVIDER = public static final BaseSearchIndexProvider SEARCH_INDEX_DATA_PROVIDER =
new BaseSearchIndexProvider(R.xml.data_saver) { new BaseSearchIndexProvider(R.xml.data_saver) {
@Override @Override
protected boolean isPageSearchEnabled(Context context) { protected boolean isPageSearchEnabled(Context context) {
return DataUsageUtils.hasMobileData(context) return isDataSaverVisible(context)
&& DataUsageUtils.hasMobileData(context)
&& DataUsageUtils.getDefaultSubscriptionId(context) && DataUsageUtils.getDefaultSubscriptionId(context)
!= SubscriptionManager.INVALID_SUBSCRIPTION_ID; != SubscriptionManager.INVALID_SUBSCRIPTION_ID;
} }

View File

@@ -18,9 +18,13 @@ package com.android.settings.applications.specialaccess;
import static com.google.common.truth.Truth.assertThat; import static com.google.common.truth.Truth.assertThat;
import static org.mockito.Mockito.when;
import static org.mockito.Mockito.spy; import static org.mockito.Mockito.spy;
import android.content.Context; import android.content.Context;
import android.content.res.Resources;
import com.android.settings.R;
import org.junit.Before; import org.junit.Before;
import org.junit.Test; import org.junit.Test;
@@ -34,23 +38,35 @@ import org.robolectric.annotation.Config;
public class DataSaverControllerTest { public class DataSaverControllerTest {
private Context mContext; private Context mContext;
private Resources mResources;
private DataSaverController mController; private DataSaverController mController;
@Before @Before
public void setUp() { public void setUp() {
MockitoAnnotations.initMocks(this); MockitoAnnotations.initMocks(this);
mContext = spy(RuntimeEnvironment.application.getApplicationContext()); mContext = spy(RuntimeEnvironment.application.getApplicationContext());
mResources = spy(mContext.getResources());
when(mContext.getResources()).thenReturn(mResources);
mController = new DataSaverController(mContext, "key"); mController = new DataSaverController(mContext, "key");
} }
@Test @Test
public void testDataSaver_byDefault_shouldBeShown() { public void testDataSaver_byDefault_shouldBeShown() {
when(mResources.getBoolean(R.bool.config_show_data_saver)).thenReturn(true);
assertThat(mController.isAvailable()).isTrue(); assertThat(mController.isAvailable()).isTrue();
} }
@Test @Test
@Config(qualifiers = "mcc999") @Config(qualifiers = "mcc999")
public void testDataSaver_ifDisabledByCarrier_shouldNotBeShown() {
assertThat(mController.isAvailable()).isFalse();
}
@Test
public void testDataSaver_ifDisabled_shouldNotBeShown() { public void testDataSaver_ifDisabled_shouldNotBeShown() {
when(mResources.getBoolean(R.bool.config_show_data_saver)).thenReturn(false);
assertThat(mController.isAvailable()).isFalse(); assertThat(mController.isAvailable()).isFalse();
} }
} }