diff --git a/src/com/android/settings/slices/SettingsSliceProvider.java b/src/com/android/settings/slices/SettingsSliceProvider.java index 557ecad5428..47736dfac2e 100644 --- a/src/com/android/settings/slices/SettingsSliceProvider.java +++ b/src/com/android/settings/slices/SettingsSliceProvider.java @@ -176,6 +176,13 @@ public class SettingsSliceProvider extends SliceProvider { @Override public Slice onBindSlice(Uri sliceUri) { + final Set blockedKeys = getBlockedKeys(); + final String key = sliceUri.getLastPathSegment(); + if (blockedKeys.contains(key)) { + Log.e(TAG, "Requested blocked slice with Uri: " + sliceUri); + return null; + } + // If adding a new Slice, do not directly match Slice URIs. // Use {@link SlicesDatabaseAccessor}. if (WifiCallingSliceHelper.WIFI_CALLING_URI.equals(sliceUri)) { diff --git a/tests/robotests/src/com/android/settings/slices/SettingsSliceProviderTest.java b/tests/robotests/src/com/android/settings/slices/SettingsSliceProviderTest.java index bb064d1f915..df960d8a912 100644 --- a/tests/robotests/src/com/android/settings/slices/SettingsSliceProviderTest.java +++ b/tests/robotests/src/com/android/settings/slices/SettingsSliceProviderTest.java @@ -22,6 +22,7 @@ import static android.content.ContentResolver.SCHEME_CONTENT; import static com.google.common.truth.Truth.assertThat; import static org.mockito.ArgumentMatchers.eq; +import static org.mockito.Mockito.doReturn; import static org.mockito.Mockito.mock; import static org.mockito.Mockito.spy; import static org.mockito.Mockito.verify; @@ -35,6 +36,7 @@ import android.database.sqlite.SQLiteDatabase; import android.net.Uri; import android.os.StrictMode; import android.provider.SettingsSlicesContract; +import android.util.ArraySet; import com.android.settings.location.LocationSliceBuilder; import com.android.settings.wifi.WifiSliceBuilder; @@ -56,6 +58,7 @@ import java.util.Collections; import java.util.HashMap; import java.util.HashSet; import java.util.List; +import java.util.Set; import androidx.slice.Slice; @@ -192,6 +195,24 @@ public class SettingsSliceProviderTest { assertThat(newThreadPolicy.toString()).isEqualTo(oldThreadPolicy.toString()); } + @Test + public void onBindSlice_requestsBlockedSlice_retunsNull() { + final String blockedKey = "blocked_key"; + final Set blockedSet = new ArraySet<>(); + blockedSet.add(blockedKey); + doReturn(blockedSet).when(mProvider).getBlockedKeys(); + final Uri blockedUri = new Uri.Builder() + .scheme(ContentResolver.SCHEME_CONTENT) + .authority(SettingsSliceProvider.SLICE_AUTHORITY) + .appendPath(SettingsSlicesContract.PATH_SETTING_ACTION) + .appendPath(blockedKey) + .build(); + + final Slice slice = mProvider.onBindSlice(blockedUri); + + assertThat(slice).isNull(); + } + @Test public void testLoadSlice_cachedEntryRemovedOnUnpin() { SliceData data = getDummyData();