Return back-up slices for unavailable settings

When an inline slice is requested, and the setting is unavailable,
we should present more useful information to the user. This CL handles:
- Unsupported: return intent slice to Settings home page
- Disabled for user: intent to the setting page
- Unknown reason: intent to setting page
- Disabled dependency: Create intent-based Slice rather
than the requested inline slice.

Bug: 71640747
Test: robotests
Change-Id: I9c1a0ee36119d4f9f3b205e0824c251f4356db55
This commit is contained in:
Matthew Fritze
2018-02-28 10:31:06 -08:00
parent 80bf63a2dd
commit fcdfc2d83f
6 changed files with 187 additions and 18 deletions

View File

@@ -17,12 +17,14 @@
package com.android.settings.slices;
import static com.google.common.truth.Truth.assertThat;
import static org.mockito.Mockito.doReturn;
import static org.mockito.Mockito.spy;
import android.content.ContentResolver;
import android.content.Context;
import android.net.Uri;
import android.provider.Settings;
import android.provider.SettingsSlicesContract;
import android.util.Pair;
@@ -132,7 +134,7 @@ public class SliceBuilderUtilsTest {
@Test
public void testGetPreferenceController_buildsMatchingController() {
BasePreferenceController controller =
SliceBuilderUtils.getPreferenceController(mContext, getDummyData());
SliceBuilderUtils.getPreferenceController(mContext, getDummyData());
assertThat(controller).isInstanceOf(FakeToggleController.class);
}
@@ -140,7 +142,7 @@ public class SliceBuilderUtilsTest {
@Test
public void testGetPreferenceController_contextOnly_buildsMatchingController() {
BasePreferenceController controller =
SliceBuilderUtils.getPreferenceController(mContext, getDummyData(PREF_CONTROLLER2));
SliceBuilderUtils.getPreferenceController(mContext, getDummyData(PREF_CONTROLLER2));
assertThat(controller).isInstanceOf(FakeContextOnlyPreferenceController.class);
}
@@ -251,6 +253,54 @@ public class SliceBuilderUtilsTest {
assertThat(pathPair.second).isEqualTo(KEY + "/" + KEY);
}
@Test
public void testUnsupportedSlice_validTitleSummary() {
SliceData data = getDummyData(FakeUnavailablePreferenceController.class.getName());
Settings.System.putInt(mContext.getContentResolver(),
FakeUnavailablePreferenceController.AVAILABILITY_KEY,
BasePreferenceController.DISABLED_UNSUPPORTED);
Slice slice = SliceBuilderUtils.buildSlice(mContext, data);
assertThat(slice).isNotNull();
}
@Test
public void testDisabledForUserSlice_validTitleSummary() {
SliceData data = getDummyData(FakeUnavailablePreferenceController.class.getName());
Settings.System.putInt(mContext.getContentResolver(),
FakeUnavailablePreferenceController.AVAILABILITY_KEY,
BasePreferenceController.DISABLED_FOR_USER);
Slice slice = SliceBuilderUtils.buildSlice(mContext, data);
assertThat(slice).isNotNull();
}
@Test
public void testDisabledDependententSettingSlice_validTitleSummary() {
SliceData data = getDummyData(FakeUnavailablePreferenceController.class.getName());
Settings.System.putInt(mContext.getContentResolver(),
FakeUnavailablePreferenceController.AVAILABILITY_KEY,
BasePreferenceController.DISABLED_DEPENDENT_SETTING);
Slice slice = SliceBuilderUtils.buildSlice(mContext, data);
assertThat(slice).isNotNull();
}
@Test
public void testUnavailableUnknownSlice_validTitleSummary() {
SliceData data = getDummyData(FakeUnavailablePreferenceController.class.getName());
Settings.System.putInt(mContext.getContentResolver(),
FakeUnavailablePreferenceController.AVAILABILITY_KEY,
BasePreferenceController.UNAVAILABLE_UNKNOWN);
Slice slice = SliceBuilderUtils.buildSlice(mContext, data);
assertThat(slice).isNotNull();
}
private SliceData getDummyData() {
return getDummyData(PREF_CONTROLLER, SUMMARY);
}