Loading src/com/android/settings/wifi/slice/WifiSlice.java +29 −6 Original line number Diff line number Diff line Loading @@ -37,6 +37,7 @@ import android.os.Bundle; import android.text.TextUtils; import android.util.Log; import androidx.annotation.Nullable; import androidx.annotation.VisibleForTesting; import androidx.core.graphics.drawable.IconCompat; import androidx.slice.Slice; Loading @@ -56,6 +57,7 @@ import com.android.settings.wifi.AppStateChangeWifiStateBridge; import com.android.settings.wifi.WifiDialogActivity; import com.android.settings.wifi.WifiUtils; import com.android.settings.wifi.details.WifiNetworkDetailsFragment; import com.android.settingslib.wifi.WifiEnterpriseRestrictionUtils; import com.android.wifitrackerlib.WifiEntry; import java.util.Arrays; Loading @@ -74,10 +76,17 @@ public class WifiSlice implements CustomSliceable { protected final Context mContext; protected final WifiManager mWifiManager; protected final WifiRestriction mWifiRestriction; public WifiSlice(Context context) { this(context, new WifiRestriction()); } @VisibleForTesting WifiSlice(Context context, WifiRestriction wifiRestriction) { mContext = context; mWifiManager = mContext.getSystemService(WifiManager.class); mWifiRestriction = wifiRestriction; } @Override Loading Loading @@ -167,20 +176,26 @@ public class WifiSlice implements CustomSliceable { final SliceAction primarySliceAction = SliceAction.createDeeplink(primaryAction, icon, ListBuilder.ICON_IMAGE, title); return new ListBuilder.RowBuilder() final ListBuilder.RowBuilder builder = new ListBuilder.RowBuilder() .setTitle(title) .setPrimaryAction(primarySliceAction); if (!mWifiRestriction.isChangeWifiStateAllowed(mContext)) { builder.setSubtitle(mContext.getString(R.string.not_allowed_by_ent)); } return builder; } private ListBuilder getListBuilder(boolean isWifiEnabled, WifiSliceItem wifiSliceItem) { final PendingIntent toggleAction = getBroadcastIntent(mContext); final SliceAction toggleSliceAction = SliceAction.createToggle(toggleAction, null /* actionTitle */, isWifiEnabled); final ListBuilder builder = new ListBuilder(mContext, getUri(), ListBuilder.INFINITY) .setAccentColor(COLOR_NOT_TINTED) .setKeywords(getKeywords()) .addRow(getHeaderRow(isWifiEnabled, wifiSliceItem)) .addAction(toggleSliceAction); .addRow(getHeaderRow(isWifiEnabled, wifiSliceItem)); if (mWifiRestriction.isChangeWifiStateAllowed(mContext)) { builder.addAction(SliceAction.createToggle( getBroadcastIntent(mContext), null /* actionTitle */, isWifiEnabled)); } return builder; } Loading Loading @@ -349,4 +364,12 @@ public class WifiSlice implements CustomSliceable { public Class getBackgroundWorkerClass() { return WifiScanWorker.class; } @VisibleForTesting static class WifiRestriction { public boolean isChangeWifiStateAllowed(@Nullable Context context) { if (context == null) return true; return WifiEnterpriseRestrictionUtils.isChangeWifiStateAllowed(context); } } } tests/robotests/src/com/android/settings/wifi/slice/WifiSliceTest.java +41 −10 Original line number Diff line number Diff line Loading @@ -25,7 +25,6 @@ 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; import android.content.ContentResolver; Loading @@ -37,9 +36,12 @@ import android.net.wifi.WifiManager; import androidx.slice.Slice; import androidx.slice.SliceItem; import androidx.slice.SliceMetadata; import androidx.slice.SliceProvider; import androidx.slice.core.SliceQuery; import androidx.slice.widget.ListContent; import androidx.slice.widget.SliceLiveData; import androidx.test.core.app.ApplicationProvider; import com.android.settings.R; import com.android.settings.slices.SliceBackgroundWorker; Loading @@ -49,12 +51,14 @@ import com.android.wifitrackerlib.WifiEntry; import com.android.wifitrackerlib.WifiEntry.ConnectedState; import org.junit.Before; import org.junit.Rule; import org.junit.Test; import org.junit.runner.RunWith; import org.mockito.Mock; import org.mockito.MockitoAnnotations; import org.mockito.Spy; import org.mockito.junit.MockitoJUnit; import org.mockito.junit.MockitoRule; import org.robolectric.RobolectricTestRunner; import org.robolectric.RuntimeEnvironment; import org.robolectric.annotation.Config; import org.robolectric.annotation.Implementation; import org.robolectric.annotation.Implements; Loading @@ -74,26 +78,29 @@ public class WifiSliceTest { private static final String AP3_NAME = "ap3"; private static final int USER_ID = 1; @Rule public final MockitoRule mMockitoRule = MockitoJUnit.rule(); @Spy Context mContext = ApplicationProvider.getApplicationContext(); @Mock private WifiManager mWifiManager; @Mock private PackageManager mPackageManager; private Context mContext; @Mock private ContentResolver mResolver; @Mock private WifiSlice.WifiRestriction mWifiRestriction; private WifiSlice mWifiSlice; private String mSIPackageName; @Before public void setUp() { MockitoAnnotations.initMocks(this); mContext = spy(RuntimeEnvironment.application); mResolver = mock(ContentResolver.class); doReturn(mResolver).when(mContext).getContentResolver(); doReturn(mWifiManager).when(mContext).getSystemService(WifiManager.class); doReturn(WifiManager.WIFI_STATE_ENABLED).when(mWifiManager).getWifiState(); when(mContext.getPackageManager()).thenReturn(mPackageManager); when(mWifiRestriction.isChangeWifiStateAllowed(mContext)).thenReturn(true); // Set-up specs for SliceMetadata. SliceProvider.setSpecs(SliceLiveData.SUPPORTED_SPECS); Loading @@ -102,7 +109,7 @@ public class WifiSliceTest { ShadowBinder.setCallingUid(USER_ID); when(mPackageManager.getPackagesForUid(USER_ID)).thenReturn(new String[]{mSIPackageName}); ShadowWifiSlice.setWifiPermissible(true); mWifiSlice = new WifiSlice(mContext); mWifiSlice = new WifiSlice(mContext, mWifiRestriction); } @Test Loading Loading @@ -241,6 +248,30 @@ public class WifiSliceTest { mContext.getString(R.string.wifi_empty_list_wifi_on)); } @Test public void getWifiSlice_disallowedChangeWifiState_addSubtitleAndNoToggle() { when(mWifiRestriction.isChangeWifiStateAllowed(mContext)).thenReturn(false); final Slice slice = mWifiSlice.getSlice(); final ListContent listContent = SliceMetadata.from(mContext, slice).getListContent(); assertThat(slice).isNotNull(); assertThat(listContent.getHeader().getSubtitleItem()).isNotNull(); assertThat(listContent.getSliceActions()).isNull(); } @Test public void getWifiSlice_allowedChangeWifiState_noSubtitleAndAddToggle() { when(mWifiRestriction.isChangeWifiStateAllowed(mContext)).thenReturn(true); final Slice slice = mWifiSlice.getSlice(); final ListContent listContent = SliceMetadata.from(mContext, slice).getListContent(); assertThat(slice).isNotNull(); assertThat(listContent.getHeader().getSubtitleItem()).isNull(); assertThat(listContent.getSliceActions()).isNotNull(); } @Test public void handleUriChange_updatesWifi() { final Intent intent = mWifiSlice.getIntent(); Loading Loading
src/com/android/settings/wifi/slice/WifiSlice.java +29 −6 Original line number Diff line number Diff line Loading @@ -37,6 +37,7 @@ import android.os.Bundle; import android.text.TextUtils; import android.util.Log; import androidx.annotation.Nullable; import androidx.annotation.VisibleForTesting; import androidx.core.graphics.drawable.IconCompat; import androidx.slice.Slice; Loading @@ -56,6 +57,7 @@ import com.android.settings.wifi.AppStateChangeWifiStateBridge; import com.android.settings.wifi.WifiDialogActivity; import com.android.settings.wifi.WifiUtils; import com.android.settings.wifi.details.WifiNetworkDetailsFragment; import com.android.settingslib.wifi.WifiEnterpriseRestrictionUtils; import com.android.wifitrackerlib.WifiEntry; import java.util.Arrays; Loading @@ -74,10 +76,17 @@ public class WifiSlice implements CustomSliceable { protected final Context mContext; protected final WifiManager mWifiManager; protected final WifiRestriction mWifiRestriction; public WifiSlice(Context context) { this(context, new WifiRestriction()); } @VisibleForTesting WifiSlice(Context context, WifiRestriction wifiRestriction) { mContext = context; mWifiManager = mContext.getSystemService(WifiManager.class); mWifiRestriction = wifiRestriction; } @Override Loading Loading @@ -167,20 +176,26 @@ public class WifiSlice implements CustomSliceable { final SliceAction primarySliceAction = SliceAction.createDeeplink(primaryAction, icon, ListBuilder.ICON_IMAGE, title); return new ListBuilder.RowBuilder() final ListBuilder.RowBuilder builder = new ListBuilder.RowBuilder() .setTitle(title) .setPrimaryAction(primarySliceAction); if (!mWifiRestriction.isChangeWifiStateAllowed(mContext)) { builder.setSubtitle(mContext.getString(R.string.not_allowed_by_ent)); } return builder; } private ListBuilder getListBuilder(boolean isWifiEnabled, WifiSliceItem wifiSliceItem) { final PendingIntent toggleAction = getBroadcastIntent(mContext); final SliceAction toggleSliceAction = SliceAction.createToggle(toggleAction, null /* actionTitle */, isWifiEnabled); final ListBuilder builder = new ListBuilder(mContext, getUri(), ListBuilder.INFINITY) .setAccentColor(COLOR_NOT_TINTED) .setKeywords(getKeywords()) .addRow(getHeaderRow(isWifiEnabled, wifiSliceItem)) .addAction(toggleSliceAction); .addRow(getHeaderRow(isWifiEnabled, wifiSliceItem)); if (mWifiRestriction.isChangeWifiStateAllowed(mContext)) { builder.addAction(SliceAction.createToggle( getBroadcastIntent(mContext), null /* actionTitle */, isWifiEnabled)); } return builder; } Loading Loading @@ -349,4 +364,12 @@ public class WifiSlice implements CustomSliceable { public Class getBackgroundWorkerClass() { return WifiScanWorker.class; } @VisibleForTesting static class WifiRestriction { public boolean isChangeWifiStateAllowed(@Nullable Context context) { if (context == null) return true; return WifiEnterpriseRestrictionUtils.isChangeWifiStateAllowed(context); } } }
tests/robotests/src/com/android/settings/wifi/slice/WifiSliceTest.java +41 −10 Original line number Diff line number Diff line Loading @@ -25,7 +25,6 @@ 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; import android.content.ContentResolver; Loading @@ -37,9 +36,12 @@ import android.net.wifi.WifiManager; import androidx.slice.Slice; import androidx.slice.SliceItem; import androidx.slice.SliceMetadata; import androidx.slice.SliceProvider; import androidx.slice.core.SliceQuery; import androidx.slice.widget.ListContent; import androidx.slice.widget.SliceLiveData; import androidx.test.core.app.ApplicationProvider; import com.android.settings.R; import com.android.settings.slices.SliceBackgroundWorker; Loading @@ -49,12 +51,14 @@ import com.android.wifitrackerlib.WifiEntry; import com.android.wifitrackerlib.WifiEntry.ConnectedState; import org.junit.Before; import org.junit.Rule; import org.junit.Test; import org.junit.runner.RunWith; import org.mockito.Mock; import org.mockito.MockitoAnnotations; import org.mockito.Spy; import org.mockito.junit.MockitoJUnit; import org.mockito.junit.MockitoRule; import org.robolectric.RobolectricTestRunner; import org.robolectric.RuntimeEnvironment; import org.robolectric.annotation.Config; import org.robolectric.annotation.Implementation; import org.robolectric.annotation.Implements; Loading @@ -74,26 +78,29 @@ public class WifiSliceTest { private static final String AP3_NAME = "ap3"; private static final int USER_ID = 1; @Rule public final MockitoRule mMockitoRule = MockitoJUnit.rule(); @Spy Context mContext = ApplicationProvider.getApplicationContext(); @Mock private WifiManager mWifiManager; @Mock private PackageManager mPackageManager; private Context mContext; @Mock private ContentResolver mResolver; @Mock private WifiSlice.WifiRestriction mWifiRestriction; private WifiSlice mWifiSlice; private String mSIPackageName; @Before public void setUp() { MockitoAnnotations.initMocks(this); mContext = spy(RuntimeEnvironment.application); mResolver = mock(ContentResolver.class); doReturn(mResolver).when(mContext).getContentResolver(); doReturn(mWifiManager).when(mContext).getSystemService(WifiManager.class); doReturn(WifiManager.WIFI_STATE_ENABLED).when(mWifiManager).getWifiState(); when(mContext.getPackageManager()).thenReturn(mPackageManager); when(mWifiRestriction.isChangeWifiStateAllowed(mContext)).thenReturn(true); // Set-up specs for SliceMetadata. SliceProvider.setSpecs(SliceLiveData.SUPPORTED_SPECS); Loading @@ -102,7 +109,7 @@ public class WifiSliceTest { ShadowBinder.setCallingUid(USER_ID); when(mPackageManager.getPackagesForUid(USER_ID)).thenReturn(new String[]{mSIPackageName}); ShadowWifiSlice.setWifiPermissible(true); mWifiSlice = new WifiSlice(mContext); mWifiSlice = new WifiSlice(mContext, mWifiRestriction); } @Test Loading Loading @@ -241,6 +248,30 @@ public class WifiSliceTest { mContext.getString(R.string.wifi_empty_list_wifi_on)); } @Test public void getWifiSlice_disallowedChangeWifiState_addSubtitleAndNoToggle() { when(mWifiRestriction.isChangeWifiStateAllowed(mContext)).thenReturn(false); final Slice slice = mWifiSlice.getSlice(); final ListContent listContent = SliceMetadata.from(mContext, slice).getListContent(); assertThat(slice).isNotNull(); assertThat(listContent.getHeader().getSubtitleItem()).isNotNull(); assertThat(listContent.getSliceActions()).isNull(); } @Test public void getWifiSlice_allowedChangeWifiState_noSubtitleAndAddToggle() { when(mWifiRestriction.isChangeWifiStateAllowed(mContext)).thenReturn(true); final Slice slice = mWifiSlice.getSlice(); final ListContent listContent = SliceMetadata.from(mContext, slice).getListContent(); assertThat(slice).isNotNull(); assertThat(listContent.getHeader().getSubtitleItem()).isNull(); assertThat(listContent.getSliceActions()).isNotNull(); } @Test public void handleUriChange_updatesWifi() { final Intent intent = mWifiSlice.getIntent(); Loading