Declare official platform slice

Create the notion of an official platform slice.
This includes:
- Adding a second authority to the provider
- tagging slices in xml with a platform slice flag
- Including authority in the getUri method

Bug:73359139
Test: robotests
Change-Id: I5382be138a262dbc5a8324c34aab131c5d0d5516
Merged-In: I581ee6dfcdf935f452a15e89e5d055e375ff1877
This commit is contained in:
Matthew Fritze
2018-02-28 08:15:55 -08:00
parent e8acc0c4bd
commit a4a3dfffa2
15 changed files with 201 additions and 53 deletions

View File

@@ -18,8 +18,7 @@
package com.android.settings.slices;
import static com.google.common.truth.Truth.assertThat;
import static org.mockito.Mockito.doReturn;
import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.spy;
import static org.mockito.Mockito.when;
@@ -28,6 +27,7 @@ import android.content.ContentValues;
import android.content.Context;
import android.database.sqlite.SQLiteDatabase;
import android.net.Uri;
import android.provider.SettingsSlicesContract;
import com.android.settings.testutils.DatabaseTestUtils;
import com.android.settings.testutils.FakeToggleController;
@@ -50,6 +50,8 @@ import java.util.HashMap;
public class SettingsSliceProviderTest {
private final String KEY = "KEY";
private final String INTENT_PATH = SettingsSlicesContract.PATH_SETTING_INTENT + "/" + KEY;
private final String ACTION_PATH = SettingsSlicesContract.PATH_SETTING_ACTION + "/" + KEY;
private final String TITLE = "title";
private final String SUMMARY = "summary";
private final String SCREEN_TITLE = "screen title";
@@ -67,6 +69,8 @@ public class SettingsSliceProviderTest {
mProvider = spy(new SettingsSliceProvider());
mProvider.mSliceDataCache = new HashMap<>();
mProvider.mSlicesDatabaseAccessor = new SlicesDatabaseAccessor(mContext);
when(mProvider.getContext()).thenReturn(mContext);
mDb = SlicesDatabaseHelper.getInstance(mContext).getWritableDatabase();
SlicesDatabaseHelper.getInstance(mContext).setIndexedState();
}
@@ -78,34 +82,18 @@ public class SettingsSliceProviderTest {
@Test
public void testInitialSliceReturned_emptySlice() {
insertSpecialCase(KEY);
ContentResolver mockResolver = mock(ContentResolver.class);
doReturn(mockResolver).when(mContext).getContentResolver();
when(mProvider.getContext()).thenReturn(mContext);
Uri uri = SettingsSliceProvider.getUri(KEY);
insertSpecialCase(INTENT_PATH);
Uri uri = SliceBuilderUtils.getUri(INTENT_PATH, false);
Slice slice = mProvider.onBindSlice(uri);
assertThat(slice.getUri()).isEqualTo(uri);
assertThat(slice.getItems()).isEmpty();
}
@Test
public void testUriBuilder_returnsValidSliceUri() {
Uri uri = SettingsSliceProvider.getUri(KEY);
assertThat(uri.getScheme()).isEqualTo(ContentResolver.SCHEME_CONTENT);
assertThat(uri.getAuthority()).isEqualTo(SettingsSliceProvider.SLICE_AUTHORITY);
assertThat(uri.getLastPathSegment()).isEqualTo(KEY);
}
@Test
public void testLoadSlice_returnsSliceFromAccessor() {
ContentResolver mockResolver = mock(ContentResolver.class);
doReturn(mockResolver).when(mContext).getContentResolver();
when(mProvider.getContext()).thenReturn(mContext);
insertSpecialCase(KEY);
Uri uri = SettingsSliceProvider.getUri(KEY);
Uri uri = SliceBuilderUtils.getUri(KEY, false);
mProvider.loadSlice(uri);
SliceData data = mProvider.mSliceDataCache.get(uri);
@@ -116,7 +104,6 @@ public class SettingsSliceProviderTest {
@Test
public void testLoadSlice_cachedEntryRemovedOnBuild() {
when(mProvider.getContext()).thenReturn(mContext);
SliceData data = getDummyData();
mProvider.mSliceDataCache.put(data.getUri(), data);
mProvider.onBindSlice(data.getUri());

View File

@@ -20,8 +20,10 @@ 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.SettingsSlicesContract;
import com.android.settings.R;
import com.android.settings.core.BasePreferenceController;
@@ -48,6 +50,9 @@ public class SliceBuilderUtilsTest {
private final Class PREF_CONTROLLER = FakeToggleController.class;
private final Class PREF_CONTROLLER2 = FakeContextOnlyPreferenceController.class;
private final String INTENT_PATH = SettingsSlicesContract.PATH_SETTING_INTENT + "/" + KEY;
private final String ACTION_PATH = SettingsSlicesContract.PATH_SETTING_ACTION + "/" + KEY;
private Context mContext;
@Before
@@ -62,6 +67,58 @@ public class SliceBuilderUtilsTest {
assertThat(slice).isNotNull(); // TODO improve test for Slice content
}
@Test
public void testUriBuilder_oemAuthority_intentPath_returnsValidSliceUri() {
Uri expectedUri = new Uri.Builder()
.scheme(ContentResolver.SCHEME_CONTENT)
.authority(SettingsSliceProvider.SLICE_AUTHORITY)
.appendPath(INTENT_PATH)
.build();
Uri actualUri = SliceBuilderUtils.getUri(INTENT_PATH, false);
assertThat(actualUri).isEqualTo(expectedUri);
}
@Test
public void testUriBuilder_oemAuthority_actionPath_returnsValidSliceUri() {
Uri expectedUri = new Uri.Builder()
.scheme(ContentResolver.SCHEME_CONTENT)
.authority(SettingsSliceProvider.SLICE_AUTHORITY)
.appendPath(ACTION_PATH)
.build();
Uri actualUri = SliceBuilderUtils.getUri(ACTION_PATH, false);
assertThat(actualUri).isEqualTo(expectedUri);
}
@Test
public void testUriBuilder_platformAuthority_intentPath_returnsValidSliceUri() {
Uri expectedUri = new Uri.Builder()
.scheme(ContentResolver.SCHEME_CONTENT)
.authority(SettingsSlicesContract.AUTHORITY)
.appendPath(ACTION_PATH)
.build();
Uri actualUri = SliceBuilderUtils.getUri(ACTION_PATH, true);
assertThat(actualUri).isEqualTo(expectedUri);
}
@Test
public void testUriBuilder_platformAuthority_actionPath_returnsValidSliceUri() {
Uri expectedUri = new Uri.Builder()
.scheme(ContentResolver.SCHEME_CONTENT)
.authority(SettingsSlicesContract.AUTHORITY)
.appendPath(ACTION_PATH)
.build();
Uri actualUri = SliceBuilderUtils.getUri(ACTION_PATH, true);
assertThat(actualUri).isEqualTo(expectedUri);
}
@Test
public void testGetPreferenceController_buildsMatchingController() {
BasePreferenceController controller =

View File

@@ -81,6 +81,7 @@ public class SliceDataConverterTest {
assertThat(fakeSlice.getUri()).isNull();
assertThat(fakeSlice.getFragmentClassName()).isEqualTo(fakeFragmentClassName);
assertThat(fakeSlice.getPreferenceController()).isEqualTo(fakeControllerName);
assertThat(fakeSlice.getSliceType()).isEqualTo(SliceData.SliceType.SLIDER);
assertThat(fakeSlice.getSliceType()).isEqualTo(SliceData.SliceType.SLIDER); // from XML
assertThat(fakeSlice.isPlatformDefined()).isTrue(); // from XML
}
}

View File

@@ -37,6 +37,7 @@ public class SliceDataTest {
private final Uri URI = Uri.parse("content://com.android.settings.slices/test");
private final String PREF_CONTROLLER = "com.android.settings.slices.tester";
private final int SLICE_TYPE = SliceData.SliceType.SWITCH;
private final boolean IS_PLATFORM_DEFINED = true;
@Test
public void testBuilder_buildsMatchingObject() {
@@ -49,7 +50,8 @@ public class SliceDataTest {
.setFragmentName(FRAGMENT_NAME)
.setUri(URI)
.setPreferenceControllerClassName(PREF_CONTROLLER)
.setSliceType(SLICE_TYPE);
.setSliceType(SLICE_TYPE)
.setPlatformDefined(IS_PLATFORM_DEFINED);
SliceData data = builder.build();
@@ -62,6 +64,7 @@ public class SliceDataTest {
assertThat(data.getUri()).isEqualTo(URI);
assertThat(data.getPreferenceController()).isEqualTo(PREF_CONTROLLER);
assertThat(data.getSliceType()).isEqualTo(SLICE_TYPE);
assertThat(data.isPlatformDefined()).isEqualTo(IS_PLATFORM_DEFINED);
}
@Test(expected = IllegalStateException.class)

View File

@@ -90,7 +90,7 @@ public class SlicesDatabaseAccessorTest {
public void testGetSliceFromUri_validUri_validSliceReturned() {
String key = "key";
insertSpecialCase(key);
Uri uri = SettingsSliceProvider.getUri(key);
Uri uri = SliceBuilderUtils.getUri(key, false);
SliceData data = mAccessor.getSliceDataFromUri(uri);
@@ -106,7 +106,7 @@ public class SlicesDatabaseAccessorTest {
@Test(expected = IllegalStateException.class)
public void testGetSliceFromUri_invalidUri_errorThrown() {
Uri uri = SettingsSliceProvider.getUri("durr");
Uri uri = SliceBuilderUtils.getUri("durr", false);
mAccessor.getSliceDataFromUri(uri);
}