diff --git a/res/values/attrs.xml b/res/values/attrs.xml index 83269cc4e04..968c64dafac 100644 --- a/res/values/attrs.xml +++ b/res/values/attrs.xml @@ -70,8 +70,6 @@ - - diff --git a/res/xml/battery_saver_settings.xml b/res/xml/battery_saver_settings.xml index fa02bff8d5d..a6e2d9f3b71 100644 --- a/res/xml/battery_saver_settings.xml +++ b/res/xml/battery_saver_settings.xml @@ -41,7 +41,6 @@ android:summary="@string/battery_saver_turn_on_summary" settings:textOn="@string/battery_saver_button_turn_on" settings:textOff="@string/battery_saver_button_turn_off" - settings:platform_slice="true" settings:controller="com.android.settings.fuelgauge.batterysaver.BatterySaverButtonPreferenceController" /> PUBLICLY_SUPPORTED_CUSTOM_SLICE_URIS = + Arrays.asList( + CustomSliceRegistry.BLUETOOTH_URI, + CustomSliceRegistry.FLASHLIGHT_SLICE_URI, + CustomSliceRegistry.LOCATION_SLICE_URI, + CustomSliceRegistry.MOBILE_DATA_SLICE_URI, + CustomSliceRegistry.WIFI_SLICE_URI, + CustomSliceRegistry.ZEN_MODE_SLICE_URI + ); private static final KeyValueListParser KEY_VALUE_LIST_PARSER = new KeyValueListParser(','); @@ -264,37 +273,30 @@ public class SettingsSliceProvider extends SliceProvider { } final String authority = uri.getAuthority(); - final String pathPrefix = uri.getPath(); - final boolean isPathEmpty = pathPrefix.isEmpty(); - - // No path nor authority. Return all possible Uris. - if (isPathEmpty && TextUtils.isEmpty(authority)) { - final List platformKeys = mSlicesDatabaseAccessor.getSliceKeys( - true /* isPlatformSlice */); - final List oemKeys = mSlicesDatabaseAccessor.getSliceKeys( - false /* isPlatformSlice */); - descendants.addAll(buildUrisFromKeys(platformKeys, SettingsSlicesContract.AUTHORITY)); - descendants.addAll(buildUrisFromKeys(oemKeys, SettingsSliceProvider.SLICE_AUTHORITY)); - descendants.addAll(getSpecialCaseUris(true /* isPlatformSlice */)); - descendants.addAll(getSpecialCaseUris(false /* isPlatformSlice */)); - - return descendants; - } + final String path = uri.getPath(); + final boolean isPathEmpty = path.isEmpty(); // Path is anything but empty, "action", or "intent". Return empty list. if (!isPathEmpty - && !TextUtils.equals(pathPrefix, "/" + SettingsSlicesContract.PATH_SETTING_ACTION) - && !TextUtils.equals(pathPrefix, - "/" + SettingsSlicesContract.PATH_SETTING_INTENT)) { + && !TextUtils.equals(path, "/" + SettingsSlicesContract.PATH_SETTING_ACTION) + && !TextUtils.equals(path, "/" + SettingsSlicesContract.PATH_SETTING_INTENT)) { // Invalid path prefix, there are no valid Uri descendants. return descendants; } - // Can assume authority belongs to the provider. Return all Uris for the authority. - final boolean isPlatformUri = TextUtils.equals(authority, SettingsSlicesContract.AUTHORITY); - final List keys = mSlicesDatabaseAccessor.getSliceKeys(isPlatformUri); - descendants.addAll(buildUrisFromKeys(keys, authority)); - descendants.addAll(getSpecialCaseUris(isPlatformUri)); + // Add all descendants from db with matching authority. + descendants.addAll(mSlicesDatabaseAccessor.getSliceUris(authority)); + + if (isPathEmpty && TextUtils.isEmpty(authority)) { + // No path nor authority. Return all possible Uris by adding all special slice uri + descendants.addAll(PUBLICLY_SUPPORTED_CUSTOM_SLICE_URIS); + } else { + // Can assume authority belongs to the provider. Return all Uris for the authority. + final List customSlices = PUBLICLY_SUPPORTED_CUSTOM_SLICE_URIS.stream() + .filter(sliceUri -> TextUtils.equals(authority, sliceUri.getAuthority())) + .collect(Collectors.toList()); + descendants.addAll(customSlices); + } grantWhitelistedPackagePermissions(getContext(), descendants); return descendants; } @@ -332,32 +334,6 @@ public class SettingsSliceProvider extends SliceProvider { } } - private void startBackgroundWorker(Sliceable sliceable, Uri uri) { - final Class workerClass = sliceable.getBackgroundWorkerClass(); - if (workerClass == null) { - return; - } - - if (mPinnedWorkers.containsKey(uri)) { - return; - } - - Log.d(TAG, "Starting background worker for: " + uri); - final SliceBackgroundWorker worker = SliceBackgroundWorker.getInstance( - getContext(), sliceable, uri); - mPinnedWorkers.put(uri, worker); - worker.onSlicePinned(); - } - - private void stopBackgroundWorker(Uri uri) { - final SliceBackgroundWorker worker = mPinnedWorkers.get(uri); - if (worker != null) { - Log.d(TAG, "Stopping background worker for: " + uri); - worker.onSliceUnpinned(); - mPinnedWorkers.remove(uri); - } - } - @Override public void shutdown() { ThreadUtils.postOnMainThread(() -> { @@ -365,23 +341,6 @@ public class SettingsSliceProvider extends SliceProvider { }); } - private List buildUrisFromKeys(List keys, String authority) { - final List descendants = new ArrayList<>(); - - final Uri.Builder builder = new Uri.Builder() - .scheme(ContentResolver.SCHEME_CONTENT) - .authority(authority) - .appendPath(SettingsSlicesContract.PATH_SETTING_ACTION); - - final String newUriPathPrefix = SettingsSlicesContract.PATH_SETTING_ACTION + "/"; - for (String key : keys) { - builder.path(newUriPathPrefix + key); - descendants.add(builder.build()); - } - - return descendants; - } - @VisibleForTesting void loadSlice(Uri uri) { long startBuildTime = System.currentTimeMillis(); @@ -416,38 +375,6 @@ public class SettingsSliceProvider extends SliceProvider { ThreadUtils.postOnBackgroundThread(() -> loadSlice(uri)); } - /** - * @return an empty {@link Slice} with {@param uri} to be used as a stub while the real - * {@link SliceData} is loaded from {@link SlicesDatabaseHelper.Tables#TABLE_SLICES_INDEX}. - */ - private Slice getSliceStub(Uri uri) { - // TODO: Switch back to ListBuilder when slice loading states are fixed. - return new Slice.Builder(uri).build(); - } - - private List getSpecialCaseUris(boolean isPlatformUri) { - if (isPlatformUri) { - return getSpecialCasePlatformUris(); - } - return getSpecialCaseOemUris(); - } - - private List getSpecialCasePlatformUris() { - return Arrays.asList( - CustomSliceRegistry.WIFI_SLICE_URI, - CustomSliceRegistry.BLUETOOTH_URI, - CustomSliceRegistry.LOCATION_SLICE_URI - ); - } - - private List getSpecialCaseOemUris() { - return Arrays.asList( - CustomSliceRegistry.FLASHLIGHT_SLICE_URI, - CustomSliceRegistry.MOBILE_DATA_SLICE_URI, - CustomSliceRegistry.ZEN_MODE_SLICE_URI - ); - } - @VisibleForTesting /** * Registers an IntentFilter in SysUI to notify changes to {@param sliceUri} when broadcasts to @@ -476,7 +403,42 @@ public class SettingsSliceProvider extends SliceProvider { return set; } - private String[] parseStringArray(String value) { + private void startBackgroundWorker(Sliceable sliceable, Uri uri) { + final Class workerClass = sliceable.getBackgroundWorkerClass(); + if (workerClass == null) { + return; + } + + if (mPinnedWorkers.containsKey(uri)) { + return; + } + + Log.d(TAG, "Starting background worker for: " + uri); + final SliceBackgroundWorker worker = SliceBackgroundWorker.getInstance( + getContext(), sliceable, uri); + mPinnedWorkers.put(uri, worker); + worker.onSlicePinned(); + } + + private void stopBackgroundWorker(Uri uri) { + final SliceBackgroundWorker worker = mPinnedWorkers.get(uri); + if (worker != null) { + Log.d(TAG, "Stopping background worker for: " + uri); + worker.onSliceUnpinned(); + mPinnedWorkers.remove(uri); + } + } + + /** + * @return an empty {@link Slice} with {@param uri} to be used as a stub while the real + * {@link SliceData} is loaded from {@link SlicesDatabaseHelper.Tables#TABLE_SLICES_INDEX}. + */ + private static Slice getSliceStub(Uri uri) { + // TODO: Switch back to ListBuilder when slice loading states are fixed. + return new Slice.Builder(uri).build(); + } + + private static String[] parseStringArray(String value) { if (value != null) { String[] parts = value.split(":"); if (parts.length > 0) { diff --git a/src/com/android/settings/slices/SliceBroadcastReceiver.java b/src/com/android/settings/slices/SliceBroadcastReceiver.java index fc3d0cc6965..b44bc228d47 100644 --- a/src/com/android/settings/slices/SliceBroadcastReceiver.java +++ b/src/com/android/settings/slices/SliceBroadcastReceiver.java @@ -23,7 +23,6 @@ import static com.android.settings.slices.SettingsSliceProvider.ACTION_COPY; import static com.android.settings.slices.SettingsSliceProvider.ACTION_SLIDER_CHANGED; import static com.android.settings.slices.SettingsSliceProvider.ACTION_TOGGLE_CHANGED; import static com.android.settings.slices.SettingsSliceProvider.EXTRA_SLICE_KEY; -import static com.android.settings.slices.SettingsSliceProvider.EXTRA_SLICE_PLATFORM_DEFINED; import static com.android.settings.wifi.calling.WifiCallingSliceHelper.ACTION_WIFI_CALLING_CHANGED; import static com.android.settings.wifi.calling.WifiCallingSliceHelper.ACTION_WIFI_CALLING_PREFERENCE_CELLULAR_PREFERRED; import static com.android.settings.wifi.calling.WifiCallingSliceHelper.ACTION_WIFI_CALLING_PREFERENCE_WIFI_ONLY; @@ -32,11 +31,9 @@ import static com.android.settings.wifi.calling.WifiCallingSliceHelper.ACTION_WI import android.app.settings.SettingsEnums; import android.app.slice.Slice; import android.content.BroadcastReceiver; -import android.content.ContentResolver; import android.content.Context; import android.content.Intent; import android.net.Uri; -import android.provider.SettingsSlicesContract; import android.text.TextUtils; import android.util.Log; @@ -58,8 +55,6 @@ public class SliceBroadcastReceiver extends BroadcastReceiver { public void onReceive(Context context, Intent intent) { final String action = intent.getAction(); final String key = intent.getStringExtra(EXTRA_SLICE_KEY); - final boolean isPlatformSlice = intent.getBooleanExtra(EXTRA_SLICE_PLATFORM_DEFINED, - false /* default */); if (CustomSliceRegistry.isValidAction(action)) { final CustomSliceable sliceable = @@ -68,15 +63,16 @@ public class SliceBroadcastReceiver extends BroadcastReceiver { sliceable.onNotifyChange(intent); return; } + final Uri sliceUri = intent.getData(); switch (action) { case ACTION_TOGGLE_CHANGED: final boolean isChecked = intent.getBooleanExtra(Slice.EXTRA_TOGGLE_STATE, false); - handleToggleAction(context, key, isChecked, isPlatformSlice); + handleToggleAction(context, sliceUri, key, isChecked); break; case ACTION_SLIDER_CHANGED: final int newPosition = intent.getIntExtra(Slice.EXTRA_RANGE_VALUE, -1); - handleSliderAction(context, key, newPosition, isPlatformSlice); + handleSliderAction(context, sliceUri, key, newPosition); break; case ACTION_BLUETOOTH_SLICE_CHANGED: BluetoothSliceBuilder.handleUriChange(context, intent); @@ -105,13 +101,12 @@ public class SliceBroadcastReceiver extends BroadcastReceiver { .handleWifiCallingPreferenceChanged(intent); break; case ACTION_COPY: - handleCopyAction(context, key, isPlatformSlice); + handleCopyAction(context, sliceUri, key); break; } } - private void handleToggleAction(Context context, String key, boolean isChecked, - boolean isPlatformSlice) { + private void handleToggleAction(Context context, Uri sliceUri, String key, boolean isChecked) { if (TextUtils.isEmpty(key)) { throw new IllegalStateException("No key passed to Intent for toggle controller"); } @@ -125,7 +120,7 @@ public class SliceBroadcastReceiver extends BroadcastReceiver { if (!controller.isAvailable()) { Log.w(TAG, "Can't update " + key + " since the setting is unavailable"); if (!controller.hasAsyncUpdate()) { - updateUri(context, key, isPlatformSlice); + context.getContentResolver().notifyChange(sliceUri, null /* observer */); } return; } @@ -136,12 +131,11 @@ public class SliceBroadcastReceiver extends BroadcastReceiver { toggleController.setChecked(isChecked); logSliceValueChange(context, key, isChecked ? 1 : 0); if (!controller.hasAsyncUpdate()) { - updateUri(context, key, isPlatformSlice); + context.getContentResolver().notifyChange(sliceUri, null /* observer */); } } - private void handleSliderAction(Context context, String key, int newPosition, - boolean isPlatformSlice) { + private void handleSliderAction(Context context, Uri sliceUri, String key, int newPosition) { if (TextUtils.isEmpty(key)) { throw new IllegalArgumentException( "No key passed to Intent for slider controller. Use extra: " + EXTRA_SLICE_KEY); @@ -159,7 +153,7 @@ public class SliceBroadcastReceiver extends BroadcastReceiver { if (!controller.isAvailable()) { Log.w(TAG, "Can't update " + key + " since the setting is unavailable"); - updateUri(context, key, isPlatformSlice); + context.getContentResolver().notifyChange(sliceUri, null /* observer */); return; } @@ -174,10 +168,10 @@ public class SliceBroadcastReceiver extends BroadcastReceiver { sliderController.setSliderPosition(newPosition); logSliceValueChange(context, key, newPosition); - updateUri(context, key, isPlatformSlice); + context.getContentResolver().notifyChange(sliceUri, null /* observer */); } - private void handleCopyAction(Context context, String key, boolean isPlatformSlice) { + private void handleCopyAction(Context context, Uri sliceUri, String key) { if (TextUtils.isEmpty(key)) { throw new IllegalArgumentException("No key passed to Intent for controller"); } @@ -192,7 +186,7 @@ public class SliceBroadcastReceiver extends BroadcastReceiver { if (!controller.isAvailable()) { Log.w(TAG, "Can't update " + key + " since the setting is unavailable"); if (!controller.hasAsyncUpdate()) { - updateUri(context, key, isPlatformSlice); + context.getContentResolver().notifyChange(sliceUri, null /* observer */); } return; } @@ -217,17 +211,4 @@ public class SliceBroadcastReceiver extends BroadcastReceiver { final SliceData sliceData = accessor.getSliceDataFromKey(key); return SliceBuilderUtils.getPreferenceController(context, sliceData); } - - private void updateUri(Context context, String key, boolean isPlatformDefined) { - final String authority = isPlatformDefined - ? SettingsSlicesContract.AUTHORITY - : SettingsSliceProvider.SLICE_AUTHORITY; - final Uri uri = new Uri.Builder() - .scheme(ContentResolver.SCHEME_CONTENT) - .authority(authority) - .appendPath(SettingsSlicesContract.PATH_SETTING_ACTION) - .appendPath(key) - .build(); - context.getContentResolver().notifyChange(uri, null /* observer */); - } } diff --git a/src/com/android/settings/slices/SliceBuilderUtils.java b/src/com/android/settings/slices/SliceBuilderUtils.java index 06780afae35..e82d13eb759 100644 --- a/src/com/android/settings/slices/SliceBuilderUtils.java +++ b/src/com/android/settings/slices/SliceBuilderUtils.java @@ -18,7 +18,6 @@ package com.android.settings.slices; import static com.android.settings.core.BasePreferenceController.DISABLED_DEPENDENT_SETTING; import static com.android.settings.slices.SettingsSliceProvider.EXTRA_SLICE_KEY; -import static com.android.settings.slices.SettingsSliceProvider.EXTRA_SLICE_PLATFORM_DEFINED; import android.annotation.ColorInt; import android.app.PendingIntent; @@ -158,8 +157,7 @@ public class SliceBuilderUtils { final Intent intent = new Intent(action) .setData(data.getUri()) .setClass(context, SliceBroadcastReceiver.class) - .putExtra(EXTRA_SLICE_KEY, data.getKey()) - .putExtra(EXTRA_SLICE_PLATFORM_DEFINED, data.isPlatformDefined()); + .putExtra(EXTRA_SLICE_KEY, data.getKey()); return PendingIntent.getBroadcast(context, 0 /* requestCode */, intent, PendingIntent.FLAG_CANCEL_CURRENT); } diff --git a/src/com/android/settings/slices/SliceData.java b/src/com/android/settings/slices/SliceData.java index f8185390af0..0f3a678256c 100644 --- a/src/com/android/settings/slices/SliceData.java +++ b/src/com/android/settings/slices/SliceData.java @@ -71,8 +71,6 @@ public class SliceData { @SliceType private final int mSliceType; - private final boolean mIsPlatformDefined; - private final String mUnavailableSliceSubtitle; public String getKey() { @@ -115,10 +113,6 @@ public class SliceData { return mSliceType; } - public boolean isPlatformDefined() { - return mIsPlatformDefined; - } - public String getUnavailableSliceSubtitle() { return mUnavailableSliceSubtitle; } @@ -134,7 +128,6 @@ public class SliceData { mUri = builder.mUri; mPreferenceController = builder.mPrefControllerClassName; mSliceType = builder.mSliceType; - mIsPlatformDefined = builder.mIsPlatformDefined; mUnavailableSliceSubtitle = builder.mUnavailableSliceSubtitle; } @@ -173,8 +166,6 @@ public class SliceData { private int mSliceType; - private boolean mIsPlatformDefined; - private String mUnavailableSliceSubtitle; public Builder setKey(String key) { @@ -227,11 +218,6 @@ public class SliceData { return this; } - public Builder setPlatformDefined(boolean isPlatformDefined) { - mIsPlatformDefined = isPlatformDefined; - return this; - } - public Builder setUnavailableSliceSubtitle( String unavailableSliceSubtitle) { mUnavailableSliceSubtitle = unavailableSliceSubtitle; diff --git a/src/com/android/settings/slices/SliceDataConverter.java b/src/com/android/settings/slices/SliceDataConverter.java index 89c0267e4ac..85fa8b0be7c 100644 --- a/src/com/android/settings/slices/SliceDataConverter.java +++ b/src/com/android/settings/slices/SliceDataConverter.java @@ -19,7 +19,6 @@ package com.android.settings.slices; import static com.android.settings.core.PreferenceXmlParserUtils.METADATA_CONTROLLER; import static com.android.settings.core.PreferenceXmlParserUtils.METADATA_ICON; import static com.android.settings.core.PreferenceXmlParserUtils.METADATA_KEY; -import static com.android.settings.core.PreferenceXmlParserUtils.METADATA_PLATFORM_SLICE_FLAG; import static com.android.settings.core.PreferenceXmlParserUtils.METADATA_SUMMARY; import static com.android.settings.core.PreferenceXmlParserUtils.METADATA_TITLE; import static com.android.settings.core.PreferenceXmlParserUtils.METADATA_UNAVAILABLE_SLICE_SUBTITLE; @@ -190,7 +189,6 @@ class SliceDataConverter { | MetadataFlag.FLAG_NEED_PREF_TITLE | MetadataFlag.FLAG_NEED_PREF_ICON | MetadataFlag.FLAG_NEED_PREF_SUMMARY - | MetadataFlag.FLAG_NEED_PLATFORM_SLICE_FLAG | MetadataFlag.FLAG_UNAVAILABLE_SLICE_SUBTITLE); for (Bundle bundle : metadata) { @@ -213,7 +211,6 @@ class SliceDataConverter { final int iconResId = bundle.getInt(METADATA_ICON); final int sliceType = controller.getSliceType(); - final boolean isPlatformSlice = bundle.getBoolean(METADATA_PLATFORM_SLICE_FLAG); final String unavailableSliceSubtitle = bundle.getString( METADATA_UNAVAILABLE_SLICE_SUBTITLE); @@ -227,7 +224,6 @@ class SliceDataConverter { .setPreferenceControllerClassName(controllerClassName) .setFragmentName(fragmentName) .setSliceType(sliceType) - .setPlatformDefined(isPlatformSlice) .setUnavailableSliceSubtitle(unavailableSliceSubtitle) .build(); diff --git a/src/com/android/settings/slices/SlicesDatabaseAccessor.java b/src/com/android/settings/slices/SlicesDatabaseAccessor.java index 8b63773eafc..4ae9a4c5e33 100644 --- a/src/com/android/settings/slices/SlicesDatabaseAccessor.java +++ b/src/com/android/settings/slices/SlicesDatabaseAccessor.java @@ -23,6 +23,7 @@ import android.database.Cursor; import android.database.sqlite.SQLiteDatabase; import android.net.Uri; import android.os.Binder; +import android.text.TextUtils; import android.util.Pair; import androidx.slice.Slice; @@ -47,14 +48,10 @@ public class SlicesDatabaseAccessor { IndexColumns.ICON_RESOURCE, IndexColumns.FRAGMENT, IndexColumns.CONTROLLER, - IndexColumns.PLATFORM_SLICE, IndexColumns.SLICE_TYPE, IndexColumns.UNAVAILABLE_SLICE_SUBTITLE, }; - // Cursor value for boolean true - private static final int TRUE = 1; - private final Context mContext; private final SlicesDatabaseHelper mHelper; @@ -91,34 +88,29 @@ public class SlicesDatabaseAccessor { } /** - * @return a list of keys in the Slices database matching on {@param isPlatformSlice}. + * @return a list of Slice {@link Uri}s matching {@param authority}. */ - public List getSliceKeys(boolean isPlatformSlice) { + public List getSliceUris(String authority) { verifyIndexing(); - final String whereClause; - - if (isPlatformSlice) { - whereClause = IndexColumns.PLATFORM_SLICE + " = 1"; - } else { - whereClause = IndexColumns.PLATFORM_SLICE + " = 0"; - } - + final List uris = new ArrayList<>(); final SQLiteDatabase database = mHelper.getReadableDatabase(); - final String[] columns = new String[]{IndexColumns.KEY}; - final List keys = new ArrayList<>(); - - try (final Cursor resultCursor = database.query(TABLE_SLICES_INDEX, columns, whereClause, - null /* selection */, null /* groupBy */, null /* having */, null /* orderBy */)) { + final String[] columns = new String[]{IndexColumns.SLICE_URI}; + try (final Cursor resultCursor = database.query(TABLE_SLICES_INDEX, columns, + null /* where */, null /* selection */, null /* groupBy */, null /* having */, + null /* orderBy */)) { if (!resultCursor.moveToFirst()) { - return keys; + return uris; } do { - keys.add(resultCursor.getString(0 /* key index */)); + final Uri uri = Uri.parse(resultCursor.getString(0 /* SLICE_URI */)); + if (TextUtils.isEmpty(authority) + || TextUtils.equals(authority, uri.getAuthority())) { + uris.add(uri); + } } while (resultCursor.moveToNext()); } - - return keys; + return uris; } private Cursor getIndexedSliceData(String path) { @@ -163,8 +155,6 @@ public class SlicesDatabaseAccessor { cursor.getColumnIndex(IndexColumns.FRAGMENT)); final String controllerClassName = cursor.getString( cursor.getColumnIndex(IndexColumns.CONTROLLER)); - final boolean isPlatformDefined = cursor.getInt( - cursor.getColumnIndex(IndexColumns.PLATFORM_SLICE)) == TRUE; int sliceType = cursor.getInt( cursor.getColumnIndex(IndexColumns.SLICE_TYPE)); final String unavailableSliceSubtitle = cursor.getString( @@ -184,7 +174,6 @@ public class SlicesDatabaseAccessor { .setFragmentName(fragmentClassName) .setPreferenceControllerClassName(controllerClassName) .setUri(uri) - .setPlatformDefined(isPlatformDefined) .setSliceType(sliceType) .setUnavailableSliceSubtitle(unavailableSliceSubtitle) .build(); diff --git a/src/com/android/settings/slices/SlicesDatabaseHelper.java b/src/com/android/settings/slices/SlicesDatabaseHelper.java index a536d348ae7..6c13ef9ec76 100644 --- a/src/com/android/settings/slices/SlicesDatabaseHelper.java +++ b/src/com/android/settings/slices/SlicesDatabaseHelper.java @@ -36,7 +36,7 @@ public class SlicesDatabaseHelper extends SQLiteOpenHelper { private static final String DATABASE_NAME = "slices_index.db"; private static final String SHARED_PREFS_TAG = "slices_shared_prefs"; - private static final int DATABASE_VERSION = 6; + private static final int DATABASE_VERSION = 7; public interface Tables { String TABLE_SLICES_INDEX = "slices_index"; @@ -84,11 +84,6 @@ public class SlicesDatabaseHelper extends SQLiteOpenHelper { */ String CONTROLLER = "controller"; - /** - * Boolean flag, {@code true} when the Slice is officially platform-supported. - */ - String PLATFORM_SLICE = "platform_slice"; - /** * {@link SliceData.SliceType} representing the inline type of the result. */ @@ -126,8 +121,6 @@ public class SlicesDatabaseHelper extends SQLiteOpenHelper { ", " + IndexColumns.CONTROLLER + ", " + - IndexColumns.PLATFORM_SLICE + - ", " + IndexColumns.SLICE_TYPE + ", " + IndexColumns.UNAVAILABLE_SLICE_SUBTITLE + diff --git a/src/com/android/settings/slices/SlicesIndexer.java b/src/com/android/settings/slices/SlicesIndexer.java index bc9ca1a1612..7b49b4bde9a 100644 --- a/src/com/android/settings/slices/SlicesIndexer.java +++ b/src/com/android/settings/slices/SlicesIndexer.java @@ -109,7 +109,6 @@ class SlicesIndexer implements Runnable { values.put(IndexColumns.ICON_RESOURCE, dataRow.getIconResource()); values.put(IndexColumns.FRAGMENT, dataRow.getFragmentClassName()); values.put(IndexColumns.CONTROLLER, dataRow.getPreferenceController()); - values.put(IndexColumns.PLATFORM_SLICE, dataRow.isPlatformDefined()); values.put(IndexColumns.SLICE_TYPE, dataRow.getSliceType()); values.put(IndexColumns.UNAVAILABLE_SLICE_SUBTITLE, dataRow.getUnavailableSliceSubtitle()); diff --git a/tests/robotests/res/xml-mcc999/location_settings.xml b/tests/robotests/res/xml-mcc999/location_settings.xml index 4e5733fd38f..d2dc132be43 100644 --- a/tests/robotests/res/xml-mcc999/location_settings.xml +++ b/tests/robotests/res/xml-mcc999/location_settings.xml @@ -26,7 +26,6 @@ android:summary="summary" settings:controller="com.android.settings.slices.FakePreferenceController" settings:keywords="a, b, c" - settings:platform_slice="true" settings:unavailableSliceSubtitle="subtitleOfUnavailableSlice"/> \ No newline at end of file diff --git a/tests/robotests/res/xml-mcc999/night_display_settings.xml b/tests/robotests/res/xml-mcc999/night_display_settings.xml index c23a2cfd7f2..6196372b9da 100644 --- a/tests/robotests/res/xml-mcc999/night_display_settings.xml +++ b/tests/robotests/res/xml-mcc999/night_display_settings.xml @@ -27,8 +27,7 @@ android:icon="@drawable/ic_android" android:summary="summary" settings:controller="com.android.settings.slices.FakePreferenceController" - settings:keywords="keyword" - settings:platform_slice="true"/> + settings:keywords="keyword"/> \ No newline at end of file diff --git a/tests/robotests/src/com/android/settings/slices/SettingsSliceProviderTest.java b/tests/robotests/src/com/android/settings/slices/SettingsSliceProviderTest.java index 8431dc3cc5d..0a7de40b365 100644 --- a/tests/robotests/src/com/android/settings/slices/SettingsSliceProviderTest.java +++ b/tests/robotests/src/com/android/settings/slices/SettingsSliceProviderTest.java @@ -34,10 +34,8 @@ import static org.mockito.Mockito.when; import android.app.PendingIntent; import android.app.slice.SliceManager; import android.content.ContentResolver; -import android.content.ContentValues; import android.content.Context; import android.content.Intent; -import android.database.sqlite.SQLiteDatabase; import android.net.Uri; import android.os.StrictMode; import android.provider.Settings; @@ -49,7 +47,6 @@ import androidx.slice.Slice; import androidx.slice.SliceProvider; import androidx.slice.widget.SliceLiveData; -import com.android.settings.R; import com.android.settings.testutils.DatabaseTestUtils; import com.android.settings.testutils.FakeToggleController; import com.android.settings.testutils.shadow.ShadowBluetoothAdapter; @@ -108,13 +105,8 @@ public class SettingsSliceProviderTest { .appendPath(SettingsSlicesContract.PATH_SETTING_ACTION) .appendPath(KEY) .build(); - private static final String TITLE = "title"; - private static final String SUMMARY = "summary"; - private static final String SCREEN_TITLE = "screen title"; - private static final String FRAGMENT_NAME = "fragment name"; - private static final int ICON = R.drawable.ic_settings_accent; + private static final Uri URI = Uri.parse("content://com.android.settings.slices/test"); - private static final String PREF_CONTROLLER = FakeToggleController.class.getName(); private Context mContext; private SettingsSliceProvider mProvider; @@ -164,7 +156,7 @@ public class SettingsSliceProviderTest { @Test public void testInitialSliceReturned_emptySlice() { - insertSpecialCase(KEY); + SliceTestUtils.insertSliceToDb(mContext, KEY); Slice slice = mProvider.onBindSlice(INTENT_SLICE_URI); assertThat(slice.getUri()).isEqualTo(INTENT_SLICE_URI); @@ -173,18 +165,18 @@ public class SettingsSliceProviderTest { @Test public void testLoadSlice_returnsSliceFromAccessor() { - insertSpecialCase(KEY); + SliceTestUtils.insertSliceToDb(mContext, KEY); mProvider.loadSlice(INTENT_SLICE_URI); SliceData data = mProvider.mSliceWeakDataCache.get(INTENT_SLICE_URI); assertThat(data.getKey()).isEqualTo(KEY); - assertThat(data.getTitle()).isEqualTo(TITLE); + assertThat(data.getTitle()).isEqualTo(SliceTestUtils.FAKE_TITLE); } @Test public void loadSlice_registersIntentFilter() { - insertSpecialCase(KEY); + SliceTestUtils.insertSliceToDb(mContext, KEY); mProvider.loadSlice(INTENT_SLICE_URI); @@ -194,7 +186,7 @@ public class SettingsSliceProviderTest { @Test public void loadSlice_registersBackgroundListener() { - insertSpecialCase(KEY); + SliceTestUtils.insertSliceToDb(mContext, KEY); mProvider.loadSlice(INTENT_SLICE_URI); @@ -210,7 +202,7 @@ public class SettingsSliceProviderTest { SliceData data = getDummyData(); mProvider.mSliceWeakDataCache.put(data.getUri(), data); mProvider.onBindSlice(data.getUri()); - insertSpecialCase(data.getKey()); + SliceTestUtils.insertSliceToDb(mContext, data.getKey()); SliceData cachedData = mProvider.mSliceWeakDataCache.get(data.getUri()); @@ -291,7 +283,7 @@ public class SettingsSliceProviderTest { @Test public void getDescendantUris_invalidPath_returnsEmpty() { final String key = "platform_key"; - insertSpecialCase(key, true /* isPlatformSlice */); + SliceTestUtils.insertSliceToDb(mContext, key, true /* isPlatformSlice */); final Uri uri = new Uri.Builder() .scheme(SCHEME_CONTENT) .authority(SettingsSlicesContract.AUTHORITY) @@ -306,7 +298,7 @@ public class SettingsSliceProviderTest { @Test public void getDescendantUris_platformSlice_doesNotReturnOEMSlice() { - insertSpecialCase("oem_key", false /* isPlatformSlice */); + SliceTestUtils.insertSliceToDb(mContext, "oem_key", false /* isPlatformSlice */); final Uri uri = new Uri.Builder() .scheme(SCHEME_CONTENT) .authority(SettingsSlicesContract.AUTHORITY) @@ -320,7 +312,7 @@ public class SettingsSliceProviderTest { @Test public void getDescendantUris_oemSlice_doesNotReturnPlatformSlice() { - insertSpecialCase("platform_key", true /* isPlatformSlice */); + SliceTestUtils.insertSliceToDb(mContext, "platform_key", true /* isPlatformSlice */); final Uri uri = new Uri.Builder() .scheme(SCHEME_CONTENT) .authority(SettingsSliceProvider.SLICE_AUTHORITY) @@ -335,7 +327,7 @@ public class SettingsSliceProviderTest { @Test public void getDescendantUris_oemSlice_returnsOEMUriDescendant() { final String key = "oem_key"; - insertSpecialCase(key, false /* isPlatformSlice */); + SliceTestUtils.insertSliceToDb(mContext, key, false /* isPlatformSlice */); final Uri uri = new Uri.Builder() .scheme(SCHEME_CONTENT) .authority(SettingsSliceProvider.SLICE_AUTHORITY) @@ -358,7 +350,7 @@ public class SettingsSliceProviderTest { @Test public void getDescendantUris_oemSliceNoPath_returnsOEMUriDescendant() { final String key = "oem_key"; - insertSpecialCase(key, false /* isPlatformSlice */); + SliceTestUtils.insertSliceToDb(mContext, key, false /* isPlatformSlice */); final Uri uri = new Uri.Builder() .scheme(SCHEME_CONTENT) .authority(SettingsSliceProvider.SLICE_AUTHORITY) @@ -380,7 +372,7 @@ public class SettingsSliceProviderTest { @Test public void getDescendantUris_platformSlice_returnsPlatformUriDescendant() { final String key = "platform_key"; - insertSpecialCase(key, true /* isPlatformSlice */); + SliceTestUtils.insertSliceToDb(mContext, key, true /* isPlatformSlice */); final Uri uri = new Uri.Builder() .scheme(SCHEME_CONTENT) .authority(SettingsSlicesContract.AUTHORITY) @@ -403,7 +395,7 @@ public class SettingsSliceProviderTest { @Test public void getDescendantUris_platformSliceNoPath_returnsPlatformUriDescendant() { final String key = "platform_key"; - insertSpecialCase(key, true /* isPlatformSlice */); + SliceTestUtils.insertSliceToDb(mContext, key, true /* isPlatformSlice */); final Uri uri = new Uri.Builder() .scheme(SCHEME_CONTENT) .authority(SettingsSlicesContract.AUTHORITY) @@ -426,8 +418,8 @@ public class SettingsSliceProviderTest { public void getDescendantUris_noAuthorityNorPath_returnsAllUris() { final String platformKey = "platform_key"; final String oemKey = "oemKey"; - insertSpecialCase(platformKey, true /* isPlatformSlice */); - insertSpecialCase(oemKey, false /* isPlatformSlice */); + SliceTestUtils.insertSliceToDb(mContext, platformKey, true /* isPlatformSlice */); + SliceTestUtils.insertSliceToDb(mContext, oemKey, false /* isPlatformSlice */); final Uri uri = new Uri.Builder() .scheme(SCHEME_CONTENT) .build(); @@ -492,31 +484,6 @@ public class SettingsSliceProviderTest { mProvider.onSlicePinned(uri); } - @Implements(WifiScanWorker.class) - public static class ShadowWifiScanWorker { - private static WifiTracker mWifiTracker; - - @Implementation - protected void onSlicePinned() { - mWifiTracker = mock(WifiTracker.class); - mWifiTracker.onStart(); - } - - @Implementation - protected void onSliceUnpinned() { - mWifiTracker.onStop(); - } - - @Implementation - protected void close() { - mWifiTracker.onDestroy(); - } - - static WifiTracker getWifiTracker() { - return mWifiTracker; - } - } - @Test public void onSlicePinned_backgroundWorker_started() { mProvider.onSlicePinned(CustomSliceRegistry.WIFI_SLICE_URI); @@ -563,45 +530,44 @@ public class SettingsSliceProviderTest { .grantSlicePermission("com.android.settings.slice_whitelist_package", uris.get(0)); } - private void insertSpecialCase(String key) { - insertSpecialCase(key, true); - } - - private void insertSpecialCase(String key, boolean isPlatformSlice) { - final ContentValues values = new ContentValues(); - values.put(SlicesDatabaseHelper.IndexColumns.KEY, key); - values.put(SlicesDatabaseHelper.IndexColumns.TITLE, TITLE); - values.put(SlicesDatabaseHelper.IndexColumns.SUMMARY, "s"); - values.put(SlicesDatabaseHelper.IndexColumns.SCREENTITLE, "s"); - values.put(SlicesDatabaseHelper.IndexColumns.ICON_RESOURCE, R.drawable.ic_settings_accent); - values.put(SlicesDatabaseHelper.IndexColumns.FRAGMENT, "test"); - values.put(SlicesDatabaseHelper.IndexColumns.CONTROLLER, PREF_CONTROLLER); - values.put(SlicesDatabaseHelper.IndexColumns.PLATFORM_SLICE, isPlatformSlice); - values.put(SlicesDatabaseHelper.IndexColumns.SLICE_TYPE, SliceData.SliceType.INTENT); - final SQLiteDatabase db = SlicesDatabaseHelper.getInstance(mContext).getWritableDatabase(); - db.beginTransaction(); - try { - db.replaceOrThrow(SlicesDatabaseHelper.Tables.TABLE_SLICES_INDEX, null, values); - db.setTransactionSuccessful(); - } finally { - db.endTransaction(); - } - db.close(); - } - private static SliceData getDummyData() { return new SliceData.Builder() .setKey(KEY) - .setTitle(TITLE) - .setSummary(SUMMARY) - .setScreenTitle(SCREEN_TITLE) - .setIcon(ICON) - .setFragmentName(FRAGMENT_NAME) .setUri(URI) - .setPreferenceControllerClassName(PREF_CONTROLLER) + .setTitle(SliceTestUtils.FAKE_TITLE) + .setSummary(SliceTestUtils.FAKE_SUMMARY) + .setScreenTitle(SliceTestUtils.FAKE_SCREEN_TITLE) + .setIcon(SliceTestUtils.FAKE_ICON) + .setFragmentName(SliceTestUtils.FAKE_FRAGMENT_NAME) + .setPreferenceControllerClassName(SliceTestUtils.FAKE_CONTROLLER_NAME) .build(); } + @Implements(WifiScanWorker.class) + public static class ShadowWifiScanWorker { + private static WifiTracker mWifiTracker; + + @Implementation + protected void onSlicePinned() { + mWifiTracker = mock(WifiTracker.class); + mWifiTracker.onStart(); + } + + @Implementation + protected void onSliceUnpinned() { + mWifiTracker.onStop(); + } + + @Implementation + protected void close() { + mWifiTracker.onDestroy(); + } + + static WifiTracker getWifiTracker() { + return mWifiTracker; + } + } + @Implements(value = StrictMode.class) public static class ShadowStrictMode { diff --git a/tests/robotests/src/com/android/settings/slices/SliceBroadcastReceiverTest.java b/tests/robotests/src/com/android/settings/slices/SliceBroadcastReceiverTest.java index 4e62b03b3b5..df3d84f3cae 100644 --- a/tests/robotests/src/com/android/settings/slices/SliceBroadcastReceiverTest.java +++ b/tests/robotests/src/com/android/settings/slices/SliceBroadcastReceiverTest.java @@ -43,7 +43,6 @@ import com.android.settings.search.SearchFeatureProvider; import com.android.settings.search.SearchFeatureProviderImpl; import com.android.settings.testutils.DatabaseTestUtils; import com.android.settings.testutils.FakeFeatureFactory; -import com.android.settings.testutils.FakeIndexProvider; import com.android.settings.testutils.FakeSliderController; import com.android.settings.testutils.FakeToggleController; @@ -57,13 +56,6 @@ import org.robolectric.RuntimeEnvironment; @RunWith(RobolectricTestRunner.class) public class SliceBroadcastReceiverTest { - private final String fakeTitle = "title"; - private final String fakeSummary = "summary"; - private final String fakeScreenTitle = "screen_title"; - private final int fakeIcon = 1234; - private final String fakeFragmentClassName = FakeIndexProvider.class.getName(); - private final Class fakeControllerName = FakeToggleController.class; - private Context mContext; private SQLiteDatabase mDb; private SliceBroadcastReceiver mReceiver; @@ -90,21 +82,18 @@ public class SliceBroadcastReceiverTest { @Test public void onReceive_toggleChanged() { final String key = "key"; - final Uri uri = new Uri.Builder() - .scheme(ContentResolver.SCHEME_CONTENT) - .authority(SettingsSliceProvider.SLICE_AUTHORITY) - .appendPath(SettingsSlicesContract.PATH_SETTING_ACTION) - .appendPath(key) - .build(); + final Uri uri = buildUri(key); mSearchFeatureProvider.getSearchIndexableResources().getProviderValues().clear(); insertSpecialCase(key); final ContentResolver resolver = mock(ContentResolver.class); doReturn(resolver).when(mContext).getContentResolver(); // Turn on toggle setting - FakeToggleController fakeToggleController = new FakeToggleController(mContext, key); + final FakeToggleController fakeToggleController = new FakeToggleController(mContext, key); fakeToggleController.setChecked(true); - Intent intent = new Intent(SettingsSliceProvider.ACTION_TOGGLE_CHANGED); - intent.putExtra(SettingsSliceProvider.EXTRA_SLICE_KEY, key); + + final Intent intent = new Intent(SettingsSliceProvider.ACTION_TOGGLE_CHANGED) + .putExtra(SettingsSliceProvider.EXTRA_SLICE_KEY, key) + .setData(uri); assertThat(fakeToggleController.isChecked()).isTrue(); @@ -128,6 +117,8 @@ public class SliceBroadcastReceiverTest { doReturn(resolver).when(mContext).getContentResolver(); final String key = "key"; + final Uri expectedUri = buildUri(key); + mSearchFeatureProvider.getSearchIndexableResources().getProviderValues().clear(); insertSpecialCase(key); @@ -135,8 +126,9 @@ public class SliceBroadcastReceiverTest { fakeToggleController.setChecked(true); // Set the toggle setting update synchronously. fakeToggleController.setAsyncUpdate(false); - Intent intent = new Intent(SettingsSliceProvider.ACTION_TOGGLE_CHANGED); - intent.putExtra(SettingsSliceProvider.EXTRA_SLICE_KEY, key); + final Intent intent = new Intent(SettingsSliceProvider.ACTION_TOGGLE_CHANGED) + .putExtra(SettingsSliceProvider.EXTRA_SLICE_KEY, key) + .setData(expectedUri); assertThat(fakeToggleController.isChecked()).isTrue(); @@ -145,12 +137,6 @@ public class SliceBroadcastReceiverTest { assertThat(fakeToggleController.isChecked()).isFalse(); - final Uri expectedUri = new Uri.Builder() - .scheme(ContentResolver.SCHEME_CONTENT) - .authority(SettingsSliceProvider.SLICE_AUTHORITY) - .appendPath(SettingsSlicesContract.PATH_SETTING_ACTION) - .appendPath(key) - .build(); verify(resolver).notifyChange(expectedUri, null); } @@ -163,16 +149,11 @@ public class SliceBroadcastReceiverTest { final String key = "key"; mSearchFeatureProvider.getSearchIndexableResources().getProviderValues().clear(); - insertSpecialCase(key); + insertSpecialCase(AsyncToggleController.class.getName(), key); - FakeToggleController fakeToggleController = new FakeToggleController(mContext, key); - fakeToggleController.setChecked(true); - // Set the toggle setting update asynchronously. - fakeToggleController.setAsyncUpdate(true); - Intent intent = new Intent(SettingsSliceProvider.ACTION_TOGGLE_CHANGED); - intent.putExtra(SettingsSliceProvider.EXTRA_SLICE_KEY, key); - - assertThat(fakeToggleController.isChecked()).isTrue(); + final Intent intent = new Intent(SettingsSliceProvider.ACTION_TOGGLE_CHANGED) + .putExtra(SettingsSliceProvider.EXTRA_SLICE_KEY, key) + .setData(buildUri(key)); // Toggle setting mReceiver.onReceive(mContext, intent); @@ -183,26 +164,22 @@ public class SliceBroadcastReceiverTest { @Test public void onReceive_sliderChanged() { final String key = "key"; - final Uri uri = new Uri.Builder() - .scheme(ContentResolver.SCHEME_CONTENT) - .authority(SettingsSliceProvider.SLICE_AUTHORITY) - .appendPath(SettingsSlicesContract.PATH_SETTING_ACTION) - .appendPath(key) - .build(); + final Uri uri = buildUri(key); final ContentResolver resolver = mock(ContentResolver.class); doReturn(resolver).when(mContext).getContentResolver(); final int position = FakeSliderController.MAX_VALUE - 1; final int oldPosition = FakeSliderController.MAX_VALUE; mSearchFeatureProvider.getSearchIndexableResources().getProviderValues().clear(); - insertSpecialCase(FakeSliderController.class, key); + insertSpecialCase(FakeSliderController.class.getName(), key); // Set slider setting FakeSliderController fakeSliderController = new FakeSliderController(mContext, key); fakeSliderController.setSliderPosition(oldPosition); // Build action - Intent intent = new Intent(SettingsSliceProvider.ACTION_SLIDER_CHANGED); - intent.putExtra(Slice.EXTRA_RANGE_VALUE, position); - intent.putExtra(SettingsSliceProvider.EXTRA_SLICE_KEY, key); + final Intent intent = new Intent(SettingsSliceProvider.ACTION_SLIDER_CHANGED) + .putExtra(Slice.EXTRA_RANGE_VALUE, position) + .putExtra(SettingsSliceProvider.EXTRA_SLICE_KEY, key) + .setData(uri); assertThat(fakeSliderController.getSliderPosition()).isEqualTo(oldPosition); @@ -225,12 +202,12 @@ public class SliceBroadcastReceiverTest { final String key = "key"; final int position = 0; mSearchFeatureProvider.getSearchIndexableResources().getProviderValues().clear(); - insertSpecialCase(FakeToggleController.class, key); + insertSpecialCase(key); // Build action - Intent intent = new Intent(SettingsSliceProvider.ACTION_SLIDER_CHANGED); - intent.putExtra(Slice.EXTRA_RANGE_VALUE, position); - intent.putExtra(SettingsSliceProvider.EXTRA_SLICE_KEY, key); + final Intent intent = new Intent(SettingsSliceProvider.ACTION_SLIDER_CHANGED) + .putExtra(Slice.EXTRA_RANGE_VALUE, position) + .putExtra(SettingsSliceProvider.EXTRA_SLICE_KEY, key); // Trigger the exception. mReceiver.onReceive(mContext, intent); @@ -272,29 +249,25 @@ public class SliceBroadcastReceiverTest { // Insert Fake Toggle into Database final String key = "key"; + final Uri expectedUri = buildUri(key); mSearchFeatureProvider.getSearchIndexableResources().getProviderValues().clear(); - insertSpecialCase(FakeToggleController.class, key); + insertSpecialCase(key); // Turn on toggle setting final FakeToggleController fakeToggleController = new FakeToggleController(mContext, key); fakeToggleController.setChecked(true); // Build Action - final Intent intent = new Intent(SettingsSliceProvider.ACTION_TOGGLE_CHANGED); - intent.putExtra(SettingsSliceProvider.EXTRA_SLICE_KEY, key); + final Intent intent = new Intent(SettingsSliceProvider.ACTION_TOGGLE_CHANGED) + .putExtra(SettingsSliceProvider.EXTRA_SLICE_KEY, key) + .setData(expectedUri); // Trigger Slice change mReceiver.onReceive(mContext, intent); // Check the value is the same and the Uri has been notified. assertThat(fakeToggleController.isChecked()).isTrue(); - final Uri expectedUri = new Uri.Builder() - .scheme(ContentResolver.SCHEME_CONTENT) - .authority(SettingsSliceProvider.SLICE_AUTHORITY) - .appendPath(SettingsSlicesContract.PATH_SETTING_ACTION) - .appendPath(key) - .build(); - verify(resolver).notifyChange(eq(expectedUri), eq(null)); + verify(resolver).notifyChange(expectedUri, null); } @Test @@ -310,47 +283,65 @@ public class SliceBroadcastReceiverTest { // Insert Fake Slider into Database final String key = "key"; + final Uri expectedUri = buildUri(key); + final int position = FakeSliderController.MAX_VALUE - 1; final int oldPosition = FakeSliderController.MAX_VALUE; mSearchFeatureProvider.getSearchIndexableResources().getProviderValues().clear(); - insertSpecialCase(FakeSliderController.class, key); + insertSpecialCase(FakeSliderController.class.getName(), key); // Set slider setting final FakeSliderController fakeSliderController = new FakeSliderController(mContext, key); fakeSliderController.setSliderPosition(oldPosition); // Build action - final Intent intent = new Intent(SettingsSliceProvider.ACTION_SLIDER_CHANGED); - intent.putExtra(Slice.EXTRA_RANGE_VALUE, position); - intent.putExtra(SettingsSliceProvider.EXTRA_SLICE_KEY, key); + final Intent intent = new Intent(SettingsSliceProvider.ACTION_SLIDER_CHANGED) + .putExtra(Slice.EXTRA_RANGE_VALUE, position) + .putExtra(SettingsSliceProvider.EXTRA_SLICE_KEY, key) + .setData(expectedUri); // Trigger Slice change mReceiver.onReceive(mContext, intent); // Check position is the same and the Uri has been notified. assertThat(fakeSliderController.getSliderPosition()).isEqualTo(oldPosition); - final Uri expectedUri = new Uri.Builder() + verify(resolver).notifyChange(eq(expectedUri), eq(null)); + } + + private void insertSpecialCase(String key) { + insertSpecialCase(SliceTestUtils.FAKE_CONTROLLER_NAME, key); + } + + private void insertSpecialCase(String controllerClass, String key) { + ContentValues values = new ContentValues(); + values.put(SlicesDatabaseHelper.IndexColumns.KEY, key); + values.put(SlicesDatabaseHelper.IndexColumns.TITLE, SliceTestUtils.FAKE_TITLE); + values.put(SlicesDatabaseHelper.IndexColumns.SUMMARY, SliceTestUtils.FAKE_SUMMARY); + values.put(SlicesDatabaseHelper.IndexColumns.SCREENTITLE, SliceTestUtils.FAKE_SCREEN_TITLE); + values.put(SlicesDatabaseHelper.IndexColumns.ICON_RESOURCE, SliceTestUtils.FAKE_ICON); + values.put(SlicesDatabaseHelper.IndexColumns.FRAGMENT, SliceTestUtils.FAKE_FRAGMENT_NAME); + values.put(SlicesDatabaseHelper.IndexColumns.CONTROLLER, controllerClass); + values.put(SlicesDatabaseHelper.IndexColumns.SLICE_URI, buildUri(key).toSafeString()); + mDb.replaceOrThrow(SlicesDatabaseHelper.Tables.TABLE_SLICES_INDEX, null, values); + } + + private static Uri buildUri(String key) { + return new Uri.Builder() .scheme(ContentResolver.SCHEME_CONTENT) .authority(SettingsSliceProvider.SLICE_AUTHORITY) .appendPath(SettingsSlicesContract.PATH_SETTING_ACTION) .appendPath(key) .build(); - verify(resolver).notifyChange(eq(expectedUri), eq(null)); } - private void insertSpecialCase(String key) { - insertSpecialCase(fakeControllerName, key); - } + public static class AsyncToggleController extends FakeToggleController { + public AsyncToggleController(Context context, String preferenceKey) { + super(context, preferenceKey); + } - private void insertSpecialCase(Class controllerClass, String key) { - ContentValues values = new ContentValues(); - values.put(SlicesDatabaseHelper.IndexColumns.KEY, key); - values.put(SlicesDatabaseHelper.IndexColumns.TITLE, fakeTitle); - values.put(SlicesDatabaseHelper.IndexColumns.SUMMARY, fakeSummary); - values.put(SlicesDatabaseHelper.IndexColumns.SCREENTITLE, fakeScreenTitle); - values.put(SlicesDatabaseHelper.IndexColumns.ICON_RESOURCE, fakeIcon); - values.put(SlicesDatabaseHelper.IndexColumns.FRAGMENT, fakeFragmentClassName); - values.put(SlicesDatabaseHelper.IndexColumns.CONTROLLER, controllerClass.getName()); - mDb.replaceOrThrow(SlicesDatabaseHelper.Tables.TABLE_SLICES_INDEX, null, values); + @Override + public boolean hasAsyncUpdate() { + return true; + } } } \ No newline at end of file diff --git a/tests/robotests/src/com/android/settings/slices/SliceDataConverterTest.java b/tests/robotests/src/com/android/settings/slices/SliceDataConverterTest.java index 76d8def5e79..63da4d03a2e 100644 --- a/tests/robotests/src/com/android/settings/slices/SliceDataConverterTest.java +++ b/tests/robotests/src/com/android/settings/slices/SliceDataConverterTest.java @@ -124,7 +124,6 @@ public class SliceDataConverterTest { assertThat(fakeSlice.getFragmentClassName()).isEqualTo(FAKE_FRAGMENT_CLASSNAME); assertThat(fakeSlice.getPreferenceController()).isEqualTo(FAKE_CONTROLLER_NAME); assertThat(fakeSlice.getSliceType()).isEqualTo(SliceData.SliceType.SLIDER); - assertThat(fakeSlice.isPlatformDefined()).isTrue(); // from XML assertThat(fakeSlice.getUnavailableSliceSubtitle()).isEqualTo( "subtitleOfUnavailableSlice"); // from XML } diff --git a/tests/robotests/src/com/android/settings/slices/SliceDataTest.java b/tests/robotests/src/com/android/settings/slices/SliceDataTest.java index 6775e059d74..6074fe384a1 100644 --- a/tests/robotests/src/com/android/settings/slices/SliceDataTest.java +++ b/tests/robotests/src/com/android/settings/slices/SliceDataTest.java @@ -37,7 +37,6 @@ 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; private final String UNAVAILABLE_SLICE_SUBTITLE = "subtitleOfUnavailableSlice"; @Test @@ -53,7 +52,6 @@ public class SliceDataTest { .setUri(URI) .setPreferenceControllerClassName(PREF_CONTROLLER) .setSliceType(SLICE_TYPE) - .setPlatformDefined(IS_PLATFORM_DEFINED) .setUnavailableSliceSubtitle(UNAVAILABLE_SLICE_SUBTITLE); SliceData data = builder.build(); @@ -68,7 +66,6 @@ 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); assertThat(data.getUnavailableSliceSubtitle()).isEqualTo(UNAVAILABLE_SLICE_SUBTITLE); } diff --git a/tests/robotests/src/com/android/settings/slices/SliceTestUtils.java b/tests/robotests/src/com/android/settings/slices/SliceTestUtils.java new file mode 100644 index 00000000000..4f5b3a1c8f3 --- /dev/null +++ b/tests/robotests/src/com/android/settings/slices/SliceTestUtils.java @@ -0,0 +1,76 @@ +/* + * Copyright (C) 2019 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.android.settings.slices; + +import android.content.ContentResolver; +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.FakeIndexProvider; +import com.android.settings.testutils.FakeToggleController; + +class SliceTestUtils { + + public static final String FAKE_TITLE = "title"; + public static final String FAKE_SUMMARY = "summary"; + public static final String FAKE_SCREEN_TITLE = "screen_title"; + public static final String FAKE_KEYWORDS = "a, b, c"; + public static final int FAKE_ICON = 1234; + public static final String FAKE_FRAGMENT_NAME = FakeIndexProvider.class.getName(); + public static final String FAKE_CONTROLLER_NAME = FakeToggleController.class.getName(); + + + public static void insertSliceToDb(Context context, String key) { + insertSliceToDb(context, key, true /* isPlatformSlice */); + } + + public static void insertSliceToDb(Context context, String key, boolean isPlatformSlice) { + insertSliceToDb(context, key, isPlatformSlice, null /*customizedUnavailableSliceSubtitle*/); + } + + public static void insertSliceToDb(Context context, String key, boolean isPlatformSlice, + String customizedUnavailableSliceSubtitle) { + final SQLiteDatabase db = SlicesDatabaseHelper.getInstance(context).getWritableDatabase(); + ContentValues values = new ContentValues(); + values.put(SlicesDatabaseHelper.IndexColumns.KEY, key); + values.put(SlicesDatabaseHelper.IndexColumns.SLICE_URI, + new Uri.Builder() + .scheme(ContentResolver.SCHEME_CONTENT) + .authority(isPlatformSlice + ? SettingsSlicesContract.AUTHORITY + : SettingsSliceProvider.SLICE_AUTHORITY) + .appendPath(SettingsSlicesContract.PATH_SETTING_ACTION) + .appendPath(key) + .build().toSafeString()); + values.put(SlicesDatabaseHelper.IndexColumns.TITLE, FAKE_TITLE); + values.put(SlicesDatabaseHelper.IndexColumns.SUMMARY, FAKE_SUMMARY); + values.put(SlicesDatabaseHelper.IndexColumns.SCREENTITLE, FAKE_SCREEN_TITLE); + values.put(SlicesDatabaseHelper.IndexColumns.KEYWORDS, FAKE_KEYWORDS); + values.put(SlicesDatabaseHelper.IndexColumns.ICON_RESOURCE, FAKE_ICON); + values.put(SlicesDatabaseHelper.IndexColumns.FRAGMENT, FAKE_FRAGMENT_NAME); + values.put(SlicesDatabaseHelper.IndexColumns.CONTROLLER, FAKE_CONTROLLER_NAME); + values.put(SlicesDatabaseHelper.IndexColumns.SLICE_TYPE, SliceData.SliceType.INTENT); + values.put(SlicesDatabaseHelper.IndexColumns.UNAVAILABLE_SLICE_SUBTITLE, + customizedUnavailableSliceSubtitle); + + db.replaceOrThrow(SlicesDatabaseHelper.Tables.TABLE_SLICES_INDEX, null, values); + db.close(); + } +} diff --git a/tests/robotests/src/com/android/settings/slices/SlicesDatabaseAccessorTest.java b/tests/robotests/src/com/android/settings/slices/SlicesDatabaseAccessorTest.java index 15221bd47c5..bed5a27b1c1 100644 --- a/tests/robotests/src/com/android/settings/slices/SlicesDatabaseAccessorTest.java +++ b/tests/robotests/src/com/android/settings/slices/SlicesDatabaseAccessorTest.java @@ -28,6 +28,7 @@ import android.content.ContentValues; import android.content.Context; import android.database.sqlite.SQLiteDatabase; import android.net.Uri; +import android.provider.SettingsSlicesContract; import android.view.accessibility.AccessibilityManager; import com.android.settings.search.SearchFeatureProvider; @@ -62,16 +63,8 @@ import java.util.Locale; ShadowBluetoothAdapter.class, ShadowLockPatternUtils.class}) public class SlicesDatabaseAccessorTest { - private final String FAKE_TITLE = "title"; - private final String FAKE_SUMMARY = "summary"; - private final String FAKE_SCREEN_TITLE = "screen_title"; - private final String FAKE_KEYWORDS = "a, b, c"; - private final int FAKE_ICON = 1234; - private final String FAKE_FRAGMENT_NAME = FakeIndexProvider.class.getName(); - private final String FAKE_CONTROLLER_NAME = FakePreferenceController.class.getName(); private Context mContext; - private SQLiteDatabase mDb; private SlicesDatabaseAccessor mAccessor; @Before @@ -79,7 +72,6 @@ public class SlicesDatabaseAccessorTest { mContext = RuntimeEnvironment.application; ShadowUserManager.getShadow().setIsAdminUser(true); mAccessor = spy(new SlicesDatabaseAccessor(mContext)); - mDb = SlicesDatabaseHelper.getInstance(mContext).getWritableDatabase(); SlicesDatabaseHelper.getInstance(mContext).setIndexedState(); // Register the fake a11y Service @@ -96,39 +88,39 @@ public class SlicesDatabaseAccessorTest { @Test public void testGetSliceDataFromKey_validKey_validSliceReturned() { String key = "key"; - insertSpecialCase(key); + SliceTestUtils.insertSliceToDb(mContext, key); SliceData data = mAccessor.getSliceDataFromKey(key); assertThat(data.getKey()).isEqualTo(key); - assertThat(data.getTitle()).isEqualTo(FAKE_TITLE); - assertThat(data.getSummary()).isEqualTo(FAKE_SUMMARY); - assertThat(data.getScreenTitle()).isEqualTo(FAKE_SCREEN_TITLE); - assertThat(data.getKeywords()).isEqualTo(FAKE_KEYWORDS); - assertThat(data.getIconResource()).isEqualTo(FAKE_ICON); - assertThat(data.getFragmentClassName()).isEqualTo(FAKE_FRAGMENT_NAME); + assertThat(data.getTitle()).isEqualTo(SliceTestUtils.FAKE_TITLE); + assertThat(data.getSummary()).isEqualTo(SliceTestUtils.FAKE_SUMMARY); + assertThat(data.getScreenTitle()).isEqualTo(SliceTestUtils.FAKE_SCREEN_TITLE); + assertThat(data.getKeywords()).isEqualTo(SliceTestUtils.FAKE_KEYWORDS); + assertThat(data.getIconResource()).isEqualTo(SliceTestUtils.FAKE_ICON); + assertThat(data.getFragmentClassName()).isEqualTo(SliceTestUtils.FAKE_FRAGMENT_NAME); assertThat(data.getUri()).isNull(); - assertThat(data.getPreferenceController()).isEqualTo(FAKE_CONTROLLER_NAME); + assertThat(data.getPreferenceController()).isEqualTo(SliceTestUtils.FAKE_CONTROLLER_NAME); assertThat(data.getUnavailableSliceSubtitle()).isNull(); } @Test public void testGetSliceDataFromKey_allowDynamicSummary_validSliceReturned() { String key = "key"; - insertSpecialCase(key, true /* isPlatformSlice */, + SliceTestUtils.insertSliceToDb(mContext, key, true /* isPlatformSlice */, null /* customizedUnavailableSliceSubtitle */); SliceData data = mAccessor.getSliceDataFromKey(key); assertThat(data.getKey()).isEqualTo(key); - assertThat(data.getTitle()).isEqualTo(FAKE_TITLE); - assertThat(data.getSummary()).isEqualTo(FAKE_SUMMARY); - assertThat(data.getScreenTitle()).isEqualTo(FAKE_SCREEN_TITLE); - assertThat(data.getKeywords()).isEqualTo(FAKE_KEYWORDS); - assertThat(data.getIconResource()).isEqualTo(FAKE_ICON); - assertThat(data.getFragmentClassName()).isEqualTo(FAKE_FRAGMENT_NAME); + assertThat(data.getTitle()).isEqualTo(SliceTestUtils.FAKE_TITLE); + assertThat(data.getSummary()).isEqualTo(SliceTestUtils.FAKE_SUMMARY); + assertThat(data.getScreenTitle()).isEqualTo(SliceTestUtils.FAKE_SCREEN_TITLE); + assertThat(data.getKeywords()).isEqualTo(SliceTestUtils.FAKE_KEYWORDS); + assertThat(data.getIconResource()).isEqualTo(SliceTestUtils.FAKE_ICON); + assertThat(data.getFragmentClassName()).isEqualTo(SliceTestUtils.FAKE_FRAGMENT_NAME); assertThat(data.getUri()).isNull(); - assertThat(data.getPreferenceController()).isEqualTo(FAKE_CONTROLLER_NAME); + assertThat(data.getPreferenceController()).isEqualTo(SliceTestUtils.FAKE_CONTROLLER_NAME); } @Test(expected = IllegalStateException.class) @@ -141,7 +133,7 @@ public class SlicesDatabaseAccessorTest { @Test public void testGetSliceFromUri_validUri_validSliceReturned() { final String key = "key"; - insertSpecialCase(key); + SliceTestUtils.insertSliceToDb(mContext, key); final Uri uri = new Uri.Builder() .scheme(ContentResolver.SCHEME_CONTENT) @@ -153,14 +145,14 @@ public class SlicesDatabaseAccessorTest { SliceData data = mAccessor.getSliceDataFromUri(uri); assertThat(data.getKey()).isEqualTo(key); - assertThat(data.getTitle()).isEqualTo(FAKE_TITLE); - assertThat(data.getSummary()).isEqualTo(FAKE_SUMMARY); - assertThat(data.getScreenTitle()).isEqualTo(FAKE_SCREEN_TITLE); - assertThat(data.getKeywords()).isEqualTo(FAKE_KEYWORDS); - assertThat(data.getIconResource()).isEqualTo(FAKE_ICON); - assertThat(data.getFragmentClassName()).isEqualTo(FAKE_FRAGMENT_NAME); + assertThat(data.getTitle()).isEqualTo(SliceTestUtils.FAKE_TITLE); + assertThat(data.getSummary()).isEqualTo(SliceTestUtils.FAKE_SUMMARY); + assertThat(data.getScreenTitle()).isEqualTo(SliceTestUtils.FAKE_SCREEN_TITLE); + assertThat(data.getKeywords()).isEqualTo(SliceTestUtils.FAKE_KEYWORDS); + assertThat(data.getIconResource()).isEqualTo(SliceTestUtils.FAKE_ICON); + assertThat(data.getFragmentClassName()).isEqualTo(SliceTestUtils.FAKE_FRAGMENT_NAME); assertThat(data.getUri()).isEqualTo(uri); - assertThat(data.getPreferenceController()).isEqualTo(FAKE_CONTROLLER_NAME); + assertThat(data.getPreferenceController()).isEqualTo(SliceTestUtils.FAKE_CONTROLLER_NAME); } @Test(expected = IllegalStateException.class) @@ -177,9 +169,8 @@ public class SlicesDatabaseAccessorTest { @Test public void getDescendantUris_platformSlice_doesNotReturnOEMSlice() { final String key = "oem_key"; - final boolean isPlatformSlice = false; - insertSpecialCase(key, isPlatformSlice); - final List keys = mAccessor.getSliceKeys(!isPlatformSlice); + SliceTestUtils.insertSliceToDb(mContext, key, false /* isPlatformSlice */); + final List keys = mAccessor.getSliceUris(SettingsSlicesContract.AUTHORITY); assertThat(keys).isEmpty(); } @@ -187,9 +178,8 @@ public class SlicesDatabaseAccessorTest { @Test public void getDescendantUris_oemSlice_doesNotReturnPlatformSlice() { final String key = "platform_key"; - final boolean isPlatformSlice = true; - insertSpecialCase(key, isPlatformSlice); - final List keys = mAccessor.getSliceKeys(!isPlatformSlice); + SliceTestUtils.insertSliceToDb(mContext, key, true /* isPlatformSlice */); + final List keys = mAccessor.getSliceUris(SettingsSliceProvider.SLICE_AUTHORITY); assertThat(keys).isEmpty(); } @@ -197,21 +187,21 @@ public class SlicesDatabaseAccessorTest { @Test public void getDescendantUris_oemSlice_returnsOEMUriDescendant() { final String key = "oem_key"; - final boolean isPlatformSlice = false; - insertSpecialCase(key, isPlatformSlice); - final List keys = mAccessor.getSliceKeys(isPlatformSlice); + SliceTestUtils.insertSliceToDb(mContext, key, false /* isPlatformSlice */); + final List keys = mAccessor.getSliceUris(SettingsSliceProvider.SLICE_AUTHORITY); - assertThat(keys).containsExactly(key); + assertThat(keys).containsExactly( + Uri.parse("content://com.android.settings.slices/action/oem_key")); } @Test public void getDescendantUris_platformSlice_returnsPlatformUriDescendant() { final String key = "platform_key"; - final boolean isPlatformSlice = true; - insertSpecialCase(key, isPlatformSlice); - final List keys = mAccessor.getSliceKeys(isPlatformSlice); + SliceTestUtils.insertSliceToDb(mContext, key, true /* isPlatformSlice */); + final List keys = mAccessor.getSliceUris(SettingsSlicesContract.AUTHORITY); - assertThat(keys).containsExactly(key); + assertThat(keys).containsExactly( + Uri.parse("content://android.settings.slices/action/platform_key")); } @Test @@ -220,7 +210,7 @@ public class SlicesDatabaseAccessorTest { // Force new indexing Locale.setDefault(new Locale("ca")); final SearchFeatureProvider provider = new SearchFeatureProviderImpl(); - final SlicesFeatureProvider sliceProvider = spy(new SlicesFeatureProviderImpl()); + final SlicesFeatureProvider sliceProvider = new SlicesFeatureProviderImpl(); final FakeFeatureFactory factory = FakeFeatureFactory.setupForTest(); factory.searchFeatureProvider = provider; factory.slicesFeatureProvider = sliceProvider; @@ -230,7 +220,7 @@ public class SlicesDatabaseAccessorTest { FakeIndexProvider.class); final SlicesDatabaseAccessor accessor = new SlicesDatabaseAccessor(mContext); - final List keys = accessor.getSliceKeys(true); + final List keys = accessor.getSliceUris(SettingsSliceProvider.SLICE_AUTHORITY); assertThat(keys).isNotEmpty(); } @@ -238,20 +228,20 @@ public class SlicesDatabaseAccessorTest { @Test public void testGetSliceDataFromKey_defaultUnavailableSlice_validSliceReturned() { String key = "key"; - insertSpecialCase(key, true /* isPlatformSlice */, + SliceTestUtils.insertSliceToDb(mContext, key, true /* isPlatformSlice */, null /* customizedUnavailableSliceSubtitle */); SliceData data = mAccessor.getSliceDataFromKey(key); assertThat(data.getKey()).isEqualTo(key); - assertThat(data.getTitle()).isEqualTo(FAKE_TITLE); - assertThat(data.getSummary()).isEqualTo(FAKE_SUMMARY); - assertThat(data.getScreenTitle()).isEqualTo(FAKE_SCREEN_TITLE); - assertThat(data.getKeywords()).isEqualTo(FAKE_KEYWORDS); - assertThat(data.getIconResource()).isEqualTo(FAKE_ICON); - assertThat(data.getFragmentClassName()).isEqualTo(FAKE_FRAGMENT_NAME); + assertThat(data.getTitle()).isEqualTo(SliceTestUtils.FAKE_TITLE); + assertThat(data.getSummary()).isEqualTo(SliceTestUtils.FAKE_SUMMARY); + assertThat(data.getScreenTitle()).isEqualTo(SliceTestUtils.FAKE_SCREEN_TITLE); + assertThat(data.getKeywords()).isEqualTo(SliceTestUtils.FAKE_KEYWORDS); + assertThat(data.getIconResource()).isEqualTo(SliceTestUtils.FAKE_ICON); + assertThat(data.getFragmentClassName()).isEqualTo(SliceTestUtils.FAKE_FRAGMENT_NAME); assertThat(data.getUri()).isNull(); - assertThat(data.getPreferenceController()).isEqualTo(FAKE_CONTROLLER_NAME); + assertThat(data.getPreferenceController()).isEqualTo(SliceTestUtils.FAKE_CONTROLLER_NAME); assertThat(data.getUnavailableSliceSubtitle()).isNull(); } @@ -259,49 +249,22 @@ public class SlicesDatabaseAccessorTest { public void testGetSliceDataFromKey_customizeSubtitleOfUnavailableSlice_validSliceReturned() { String key = "key"; String subtitle = "subtitle"; - insertSpecialCase(key, true /* isPlatformSlice */, subtitle); + SliceTestUtils.insertSliceToDb(mContext, key, true /* isPlatformSlice */, subtitle); SliceData data = mAccessor.getSliceDataFromKey(key); assertThat(data.getKey()).isEqualTo(key); - assertThat(data.getTitle()).isEqualTo(FAKE_TITLE); - assertThat(data.getSummary()).isEqualTo(FAKE_SUMMARY); - assertThat(data.getScreenTitle()).isEqualTo(FAKE_SCREEN_TITLE); - assertThat(data.getKeywords()).isEqualTo(FAKE_KEYWORDS); - assertThat(data.getIconResource()).isEqualTo(FAKE_ICON); - assertThat(data.getFragmentClassName()).isEqualTo(FAKE_FRAGMENT_NAME); + assertThat(data.getTitle()).isEqualTo(SliceTestUtils.FAKE_TITLE); + assertThat(data.getSummary()).isEqualTo(SliceTestUtils.FAKE_SUMMARY); + assertThat(data.getScreenTitle()).isEqualTo(SliceTestUtils.FAKE_SCREEN_TITLE); + assertThat(data.getKeywords()).isEqualTo(SliceTestUtils.FAKE_KEYWORDS); + assertThat(data.getIconResource()).isEqualTo(SliceTestUtils.FAKE_ICON); + assertThat(data.getFragmentClassName()).isEqualTo(SliceTestUtils.FAKE_FRAGMENT_NAME); assertThat(data.getUri()).isNull(); - assertThat(data.getPreferenceController()).isEqualTo(FAKE_CONTROLLER_NAME); + assertThat(data.getPreferenceController()).isEqualTo(SliceTestUtils.FAKE_CONTROLLER_NAME); assertThat(data.getUnavailableSliceSubtitle()).isEqualTo(subtitle); } - private void insertSpecialCase(String key) { - insertSpecialCase(key, true); - } - - private void insertSpecialCase(String key, boolean isPlatformSlice) { - insertSpecialCase(key, isPlatformSlice, null /*customizedUnavailableSliceSubtitle*/); - } - - private void insertSpecialCase(String key, boolean isPlatformSlice, - String customizedUnavailableSliceSubtitle) { - ContentValues values = new ContentValues(); - values.put(SlicesDatabaseHelper.IndexColumns.KEY, key); - values.put(SlicesDatabaseHelper.IndexColumns.TITLE, FAKE_TITLE); - values.put(SlicesDatabaseHelper.IndexColumns.SUMMARY, FAKE_SUMMARY); - values.put(SlicesDatabaseHelper.IndexColumns.SCREENTITLE, FAKE_SCREEN_TITLE); - values.put(SlicesDatabaseHelper.IndexColumns.KEYWORDS, FAKE_KEYWORDS); - values.put(SlicesDatabaseHelper.IndexColumns.ICON_RESOURCE, FAKE_ICON); - values.put(SlicesDatabaseHelper.IndexColumns.FRAGMENT, FAKE_FRAGMENT_NAME); - values.put(SlicesDatabaseHelper.IndexColumns.CONTROLLER, FAKE_CONTROLLER_NAME); - values.put(SlicesDatabaseHelper.IndexColumns.PLATFORM_SLICE, isPlatformSlice); - values.put(SlicesDatabaseHelper.IndexColumns.SLICE_TYPE, SliceData.SliceType.INTENT); - values.put(SlicesDatabaseHelper.IndexColumns.UNAVAILABLE_SLICE_SUBTITLE, - customizedUnavailableSliceSubtitle); - - mDb.replaceOrThrow(SlicesDatabaseHelper.Tables.TABLE_SLICES_INDEX, null, values); - } - @Implements(ApplicationPackageManager.class) public static class ShadowApplicationPackageManager extends org.robolectric.shadows.ShadowApplicationPackageManager { diff --git a/tests/robotests/src/com/android/settings/slices/SlicesDatabaseHelperTest.java b/tests/robotests/src/com/android/settings/slices/SlicesDatabaseHelperTest.java index 3b642209f42..fad9c25ee92 100644 --- a/tests/robotests/src/com/android/settings/slices/SlicesDatabaseHelperTest.java +++ b/tests/robotests/src/com/android/settings/slices/SlicesDatabaseHelperTest.java @@ -73,7 +73,6 @@ public class SlicesDatabaseHelperTest { IndexColumns.ICON_RESOURCE, IndexColumns.FRAGMENT, IndexColumns.CONTROLLER, - IndexColumns.PLATFORM_SLICE, IndexColumns.SLICE_TYPE, IndexColumns.UNAVAILABLE_SLICE_SUBTITLE, }; diff --git a/tests/robotests/src/com/android/settings/slices/SlicesIndexerTest.java b/tests/robotests/src/com/android/settings/slices/SlicesIndexerTest.java index 8fd58c45b82..1501e45a697 100644 --- a/tests/robotests/src/com/android/settings/slices/SlicesIndexerTest.java +++ b/tests/robotests/src/com/android/settings/slices/SlicesIndexerTest.java @@ -52,7 +52,6 @@ public class SlicesIndexerTest { private final int ICON = 1234; // I declare a thumb war private final Uri URI = Uri.parse("content://com.android.settings.slices/test"); private final String PREF_CONTROLLER = "com.android.settings.slices.tester"; - private final boolean PLATFORM_DEFINED = true; private final int SLICE_TYPE = SliceData.SliceType.SLIDER; private final String UNAVAILABLE_SLICE_SUBTITLE = "subtitleOfUnavailableSlice"; @@ -136,9 +135,6 @@ public class SlicesIndexerTest { assertThat( cursor.getString(cursor.getColumnIndex(IndexColumns.CONTROLLER))) .isEqualTo(PREF_CONTROLLER); - assertThat(cursor.getInt( - cursor.getColumnIndex(IndexColumns.PLATFORM_SLICE))) - .isEqualTo(1 /* true */); assertThat(cursor.getInt(cursor.getColumnIndex(IndexColumns.SLICE_TYPE))) .isEqualTo(SLICE_TYPE); assertThat(cursor.getString( @@ -176,7 +172,6 @@ public class SlicesIndexerTest { .setIcon(ICON) .setUri(URI) .setPreferenceControllerClassName(PREF_CONTROLLER) - .setPlatformDefined(PLATFORM_DEFINED) .setSliceType(SLICE_TYPE) .setUnavailableSliceSubtitle(UNAVAILABLE_SLICE_SUBTITLE); diff --git a/tests/robotests/src/com/android/settings/testutils/FakeToggleController.java b/tests/robotests/src/com/android/settings/testutils/FakeToggleController.java index e7854874c54..8bceb13669b 100644 --- a/tests/robotests/src/com/android/settings/testutils/FakeToggleController.java +++ b/tests/robotests/src/com/android/settings/testutils/FakeToggleController.java @@ -49,7 +49,7 @@ public class FakeToggleController extends TogglePreferenceController { @Override public boolean isChecked() { return Settings.System.getInt(mContext.getContentResolver(), - SETTING_KEY, OFF) == ON; + SETTING_KEY, OFF) == ON; } @Override @@ -103,7 +103,7 @@ public class FakeToggleController extends TogglePreferenceController { } @Override - public void close() throws IOException { + public void close() { } } }