From cb641fa6eb69502fee04a3bb9db12be80689e1b0 Mon Sep 17 00:00:00 2001 From: Tsung-Mao Fang Date: Thu, 28 Apr 2022 22:52:00 +0800 Subject: [PATCH] Show slice without toggle when there's no wifi permission When the presenter app doesn't have certain permissions, it's safer to go with a generic fallback slice which just redirects user to the actual settings page. Test: test on the presenter app. robo test Fix: 178014725 Change-Id: I6f5358af2e00cb2fedba0b3f1474a026135986c6 --- .../settings/wifi/slice/WifiSlice.java | 31 +++++++++++-------- .../settings/wifi/slice/WifiSliceTest.java | 24 +++++++++++--- 2 files changed, 38 insertions(+), 17 deletions(-) diff --git a/src/com/android/settings/wifi/slice/WifiSlice.java b/src/com/android/settings/wifi/slice/WifiSlice.java index 7b2eae9a2ca..76dfab8491b 100644 --- a/src/com/android/settings/wifi/slice/WifiSlice.java +++ b/src/com/android/settings/wifi/slice/WifiSlice.java @@ -97,14 +97,13 @@ public class WifiSlice implements CustomSliceable { @Override public Slice getSlice() { // If external calling package doesn't have Wi-Fi permission. - if (!Utils.isSettingsIntelligence(mContext) && !isPermissionGranted(mContext)) { - Log.i(TAG, "No wifi permissions to control wifi slice."); - return null; - } - + final boolean isPermissionGranted = + Utils.isSettingsIntelligence(mContext) || isPermissionGranted(mContext); final boolean isWifiEnabled = isWifiEnabled(); - ListBuilder listBuilder = getListBuilder(isWifiEnabled, null /* wifiSliceItem */); - if (!isWifiEnabled) { + ListBuilder listBuilder = getListBuilder(isWifiEnabled, null /* wifiSliceItem */, + isPermissionGranted); + // If the caller doesn't have the permission granted, just return a slice without a toggle. + if (!isWifiEnabled || !isPermissionGranted) { return listBuilder.build(); } @@ -116,7 +115,8 @@ public class WifiSlice implements CustomSliceable { if (isFirstApActive) { // refresh header subtext - listBuilder = getListBuilder(true /* isWifiEnabled */, apList.get(0)); + listBuilder = getListBuilder( + true /* isWifiEnabled */, apList.get(0), true /* isWiFiPermissionGranted */); } if (isApRowCollapsed()) { @@ -186,16 +186,21 @@ public class WifiSlice implements CustomSliceable { return builder; } - private ListBuilder getListBuilder(boolean isWifiEnabled, WifiSliceItem wifiSliceItem) { + private ListBuilder getListBuilder(boolean isWifiEnabled, WifiSliceItem wifiSliceItem, + boolean isWiFiPermissionGranted) { final ListBuilder builder = new ListBuilder(mContext, getUri(), ListBuilder.INFINITY) .setAccentColor(COLOR_NOT_TINTED) .setKeywords(getKeywords()) .addRow(getHeaderRow(isWifiEnabled, wifiSliceItem)); - - if (mWifiRestriction.isChangeWifiStateAllowed(mContext)) { - builder.addAction(SliceAction.createToggle( - getBroadcastIntent(mContext), null /* actionTitle */, isWifiEnabled)); + if (!isWiFiPermissionGranted || !mWifiRestriction.isChangeWifiStateAllowed(mContext)) { + return builder; } + + final PendingIntent toggleAction = getBroadcastIntent(mContext); + final SliceAction toggleSliceAction = SliceAction.createToggle(toggleAction, + null /* actionTitle */, isWifiEnabled); + builder.addAction(toggleSliceAction); + return builder; } diff --git a/tests/robotests/src/com/android/settings/wifi/slice/WifiSliceTest.java b/tests/robotests/src/com/android/settings/wifi/slice/WifiSliceTest.java index d8151d09294..8e42fcd225a 100644 --- a/tests/robotests/src/com/android/settings/wifi/slice/WifiSliceTest.java +++ b/tests/robotests/src/com/android/settings/wifi/slice/WifiSliceTest.java @@ -38,6 +38,7 @@ import androidx.slice.Slice; import androidx.slice.SliceItem; import androidx.slice.SliceMetadata; import androidx.slice.SliceProvider; +import androidx.slice.core.SliceAction; import androidx.slice.core.SliceQuery; import androidx.slice.widget.ListContent; import androidx.slice.widget.SliceLiveData; @@ -120,6 +121,11 @@ public class WifiSliceTest { final Slice wifiSlice = mWifiSlice.getSlice(); assertThat(wifiSlice).isNotNull(); + + final SliceMetadata metadata = SliceMetadata.from(mContext, wifiSlice); + final List toggles = metadata.getToggles(); + + assertThat(toggles).hasSize(1); } @Test @@ -128,18 +134,29 @@ public class WifiSliceTest { ShadowWifiSlice.setWifiPermissible(true); final Slice wifiSlice = mWifiSlice.getSlice(); - assertThat(wifiSlice).isNotNull(); + + final SliceMetadata metadata = SliceMetadata.from(mContext, wifiSlice); + final List toggles = metadata.getToggles(); + + assertThat(toggles).hasSize(1); } @Test - public void getWifiSlice_notFromSIPackageAndWithoutWifiPermission_shouldNoSlice() { + public void getWifiSlice_notFromSIPackageAndWithoutWifiPermission_shouldReturnNoToggle() { when(mPackageManager.getPackagesForUid(USER_ID)).thenReturn(new String[]{"com.test"}); ShadowWifiSlice.setWifiPermissible(false); final Slice wifiSlice = mWifiSlice.getSlice(); + final SliceMetadata metadata = SliceMetadata.from(mContext, wifiSlice); + final List toggles = metadata.getToggles(); - assertThat(wifiSlice).isNull(); + assertThat(toggles).hasSize(0); + + final int rows = SliceQuery.findAll(wifiSlice, FORMAT_SLICE, HINT_LIST_ITEM, + null /* nonHints */).size(); + // Title row + assertThat(rows).isEqualTo(1); } @Test @@ -150,7 +167,6 @@ public class WifiSliceTest { final int rows = SliceQuery.findAll(wifiSlice, FORMAT_SLICE, HINT_LIST_ITEM, null /* nonHints */).size(); - // Title row assertThat(rows).isEqualTo(1); }