Prevent bad apps from getting Setting Slices
SettingsSliceProvider no longer allows apps to request permission from the user for Settings Slices. Instead, the PrimaryAction on the permission slice will be an intent into Settings. This is because the dialog for granting apps Settings Slices would act as a replacement for regular permission dialogs, which we want to avoid. Fixes: 130795282 Test: robolectrico Change-Id: I6848215bab2bf10ee5e53814b765d04f04f53f4e
This commit is contained in:
@@ -18,9 +18,11 @@ package com.android.settings.slices;
|
|||||||
|
|
||||||
import static android.Manifest.permission.READ_SEARCH_INDEXABLES;
|
import static android.Manifest.permission.READ_SEARCH_INDEXABLES;
|
||||||
|
|
||||||
|
import android.app.PendingIntent;
|
||||||
import android.app.slice.SliceManager;
|
import android.app.slice.SliceManager;
|
||||||
import android.content.ContentResolver;
|
import android.content.ContentResolver;
|
||||||
import android.content.Context;
|
import android.content.Context;
|
||||||
|
import android.content.Intent;
|
||||||
import android.content.IntentFilter;
|
import android.content.IntentFilter;
|
||||||
import android.net.Uri;
|
import android.net.Uri;
|
||||||
import android.os.StrictMode;
|
import android.os.StrictMode;
|
||||||
@@ -32,6 +34,8 @@ import android.util.KeyValueListParser;
|
|||||||
import android.util.Log;
|
import android.util.Log;
|
||||||
import android.util.Pair;
|
import android.util.Pair;
|
||||||
|
|
||||||
|
import androidx.annotation.NonNull;
|
||||||
|
import androidx.annotation.Nullable;
|
||||||
import androidx.annotation.VisibleForTesting;
|
import androidx.annotation.VisibleForTesting;
|
||||||
import androidx.collection.ArraySet;
|
import androidx.collection.ArraySet;
|
||||||
import androidx.slice.Slice;
|
import androidx.slice.Slice;
|
||||||
@@ -295,6 +299,16 @@ public class SettingsSliceProvider extends SliceProvider {
|
|||||||
return descendants;
|
return descendants;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Nullable
|
||||||
|
@Override
|
||||||
|
public PendingIntent onCreatePermissionRequest(@NonNull Uri sliceUri,
|
||||||
|
@NonNull String callingPackage) {
|
||||||
|
final Intent settingsIntent = new Intent(Settings.ACTION_SETTINGS);
|
||||||
|
final PendingIntent noOpIntent = PendingIntent.getActivity(getContext(),
|
||||||
|
0 /* requestCode */, settingsIntent, 0 /* flags */);
|
||||||
|
return noOpIntent;
|
||||||
|
}
|
||||||
|
|
||||||
@VisibleForTesting
|
@VisibleForTesting
|
||||||
static void grantWhitelistedPackagePermissions(Context context, List<Uri> descendants) {
|
static void grantWhitelistedPackagePermissions(Context context, List<Uri> descendants) {
|
||||||
if (descendants == null) {
|
if (descendants == null) {
|
||||||
|
@@ -31,10 +31,12 @@ import static org.mockito.Mockito.spy;
|
|||||||
import static org.mockito.Mockito.verify;
|
import static org.mockito.Mockito.verify;
|
||||||
import static org.mockito.Mockito.when;
|
import static org.mockito.Mockito.when;
|
||||||
|
|
||||||
|
import android.app.PendingIntent;
|
||||||
import android.app.slice.SliceManager;
|
import android.app.slice.SliceManager;
|
||||||
import android.content.ContentResolver;
|
import android.content.ContentResolver;
|
||||||
import android.content.ContentValues;
|
import android.content.ContentValues;
|
||||||
import android.content.Context;
|
import android.content.Context;
|
||||||
|
import android.content.Intent;
|
||||||
import android.database.sqlite.SQLiteDatabase;
|
import android.database.sqlite.SQLiteDatabase;
|
||||||
import android.net.Uri;
|
import android.net.Uri;
|
||||||
import android.os.StrictMode;
|
import android.os.StrictMode;
|
||||||
@@ -444,6 +446,16 @@ public class SettingsSliceProviderTest {
|
|||||||
assertThat(descendants).containsExactlyElementsIn(expectedUris);
|
assertThat(descendants).containsExactlyElementsIn(expectedUris);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void onCreatePermissionRequest_returnsSettingIntent() {
|
||||||
|
final PendingIntent pendingIntent = mProvider.onCreatePermissionRequest(
|
||||||
|
CustomSliceRegistry.FLASHLIGHT_SLICE_URI, "com.android.whaaaat");
|
||||||
|
PendingIntent settingsPendingIntent =
|
||||||
|
PendingIntent.getActivity(mContext, 0, new Intent(Settings.ACTION_SETTINGS), 0);
|
||||||
|
|
||||||
|
assertThat(pendingIntent).isEqualTo(settingsPendingIntent);
|
||||||
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void bindSlice_wifiSlice_returnsWifiSlice() {
|
public void bindSlice_wifiSlice_returnsWifiSlice() {
|
||||||
final Slice wifiSlice = mProvider.onBindSlice(CustomSliceRegistry.WIFI_SLICE_URI);
|
final Slice wifiSlice = mProvider.onBindSlice(CustomSliceRegistry.WIFI_SLICE_URI);
|
||||||
|
Reference in New Issue
Block a user