Restrict Wi-Fi toggle in Internet Panel

- Disable Wi-Fi toggle when user is not allowed to change Wi-Fi state.

- Show restriction message in Wi-Fi toggle summary.

Bug: 203168097
Test: manual test
atest -c InternetDialogTest

Change-Id: I9e637a1f782997de1486921f5eb0093f59ecb02f
This commit is contained in:
Weng Su
2022-04-12 04:48:00 +08:00
parent 5f17b13a5d
commit 6b9407780e
3 changed files with 74 additions and 7 deletions

View File

@@ -198,20 +198,29 @@
android:clickable="false"
android:focusable="false">
<FrameLayout
android:layout_weight="1"
android:orientation="vertical"
android:clickable="false"
<LinearLayout
android:layout_width="wrap_content"
android:layout_height="match_parent">
android:layout_height="match_parent"
android:layout_weight="1"
android:gravity="start|center_vertical"
android:orientation="vertical"
android:clickable="false">
<TextView
android:id="@+id/wifi_toggle_title"
android:text="@string/turn_on_wifi"
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:layout_height="wrap_content"
android:gravity="start|center_vertical"
android:textAppearance="@style/TextAppearance.InternetDialog"/>
</FrameLayout>
<TextView
android:id="@+id/wifi_toggle_summary"
android:text="@string/wifitrackerlib_admin_restricted_network"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:gravity="start|center_vertical"
android:textAppearance="@style/TextAppearance.InternetDialog.Secondary"
android:visibility="gone"/>
</LinearLayout>
<FrameLayout
android:layout_width="@dimen/settingslib_switch_track_width"

View File

@@ -58,6 +58,7 @@ import androidx.recyclerview.widget.RecyclerView;
import com.android.internal.logging.UiEvent;
import com.android.internal.logging.UiEventLogger;
import com.android.settingslib.Utils;
import com.android.settingslib.wifi.WifiEnterpriseRestrictionUtils;
import com.android.systemui.Prefs;
import com.android.systemui.R;
import com.android.systemui.accessibility.floatingmenu.AnnotationLinkSpan;
@@ -136,6 +137,7 @@ public class InternetDialog extends SystemUIDialog implements
private Drawable mBackgroundOff = null;
private int mDefaultDataSubId = SubscriptionManager.INVALID_SUBSCRIPTION_ID;
private boolean mCanConfigMobileData;
private boolean mCanChangeWifiState;
// Wi-Fi entries
private int mWifiNetworkHeight;
@@ -180,6 +182,7 @@ public class InternetDialog extends SystemUIDialog implements
mWifiManager = mInternetDialogController.getWifiManager();
mCanConfigMobileData = canConfigMobileData;
mCanConfigWifi = canConfigWifi;
mCanChangeWifiState = WifiEnterpriseRestrictionUtils.isChangeWifiStateAllowed(context);
mKeyguard = keyguardStateController;
mUiEventLogger = uiEventLogger;
@@ -449,6 +452,14 @@ public class InternetDialog extends SystemUIDialog implements
}
mTurnWifiOnLayout.setBackground(
(isDeviceLocked && mConnectedWifiEntry != null) ? mBackgroundOn : null);
if (!mCanChangeWifiState && mWiFiToggle.isEnabled()) {
mWiFiToggle.setEnabled(false);
mWifiToggleTitleText.setEnabled(false);
final TextView summaryText = mDialogView.requireViewById(R.id.wifi_toggle_summary);
summaryText.setEnabled(false);
summaryText.setVisibility(View.VISIBLE);
}
}
@MainThread

View File

@@ -21,12 +21,15 @@ import android.testing.AndroidTestingRunner;
import android.testing.TestableLooper;
import android.view.View;
import android.widget.LinearLayout;
import android.widget.Switch;
import android.widget.TextView;
import androidx.recyclerview.widget.RecyclerView;
import androidx.test.filters.SmallTest;
import com.android.dx.mockito.inline.extended.ExtendedMockito;
import com.android.internal.logging.UiEventLogger;
import com.android.settingslib.wifi.WifiEnterpriseRestrictionUtils;
import com.android.systemui.R;
import com.android.systemui.SysuiTestCase;
import com.android.systemui.statusbar.policy.KeyguardStateController;
@@ -42,6 +45,7 @@ import org.mockito.ArgumentCaptor;
import org.mockito.Mock;
import org.mockito.Mockito;
import org.mockito.MockitoAnnotations;
import org.mockito.MockitoSession;
import java.util.List;
@@ -79,12 +83,16 @@ public class InternetDialogTest extends SysuiTestCase {
private LinearLayout mEthernet;
private LinearLayout mMobileDataToggle;
private LinearLayout mWifiToggle;
private Switch mWifiToggleSwitch;
private TextView mWifiToggleSummary;
private LinearLayout mConnectedWifi;
private RecyclerView mWifiList;
private LinearLayout mSeeAll;
private LinearLayout mWifiScanNotify;
private TextView mAirplaneModeSummaryText;
private MockitoSession mMockitoSession;
@Before
public void setUp() {
MockitoAnnotations.initMocks(this);
@@ -101,6 +109,15 @@ public class InternetDialogTest extends SysuiTestCase {
.thenReturn(MOBILE_NETWORK_SUMMARY);
when(mInternetDialogController.getWifiManager()).thenReturn(mWifiManager);
mMockitoSession = ExtendedMockito.mockitoSession()
.spyStatic(WifiEnterpriseRestrictionUtils.class)
.startMocking();
when(WifiEnterpriseRestrictionUtils.isChangeWifiStateAllowed(mContext)).thenReturn(true);
createInternetDialog();
}
private void createInternetDialog() {
mInternetDialog = new InternetDialog(mContext, mock(InternetDialogFactory.class),
mInternetDialogController, true, true, true, mock(UiEventLogger.class), mHandler,
mBgExecutor, mKeyguard);
@@ -114,6 +131,8 @@ public class InternetDialogTest extends SysuiTestCase {
mEthernet = mDialogView.requireViewById(R.id.ethernet_layout);
mMobileDataToggle = mDialogView.requireViewById(R.id.mobile_network_layout);
mWifiToggle = mDialogView.requireViewById(R.id.turn_on_wifi_layout);
mWifiToggleSwitch = mDialogView.requireViewById(R.id.wifi_toggle);
mWifiToggleSummary = mDialogView.requireViewById(R.id.wifi_toggle_summary);
mConnectedWifi = mDialogView.requireViewById(R.id.wifi_connected_layout);
mWifiList = mDialogView.requireViewById(R.id.wifi_list_layout);
mSeeAll = mDialogView.requireViewById(R.id.see_all_layout);
@@ -124,6 +143,7 @@ public class InternetDialogTest extends SysuiTestCase {
@After
public void tearDown() {
mInternetDialog.dismissDialog();
mMockitoSession.finishMocking();
}
@Test
@@ -410,6 +430,33 @@ public class InternetDialogTest extends SysuiTestCase {
assertThat(mSeeAll.getVisibility()).isEqualTo(View.GONE);
}
@Test
public void updateDialog_disallowChangeWifiState_disableWifiSwitch() {
mInternetDialog.dismissDialog();
when(WifiEnterpriseRestrictionUtils.isChangeWifiStateAllowed(mContext)).thenReturn(false);
createInternetDialog();
mInternetDialog.updateDialog(false);
// Disable Wi-Fi switch and show restriction message in summary.
assertThat(mWifiToggleSwitch.isEnabled()).isFalse();
assertThat(mWifiToggleSummary.getVisibility()).isEqualTo(View.VISIBLE);
assertThat(mWifiToggleSummary.getText().length()).isNotEqualTo(0);
}
@Test
public void updateDialog_allowChangeWifiState_enableWifiSwitch() {
mInternetDialog.dismissDialog();
when(WifiEnterpriseRestrictionUtils.isChangeWifiStateAllowed(mContext)).thenReturn(true);
createInternetDialog();
mInternetDialog.updateDialog(false);
// Enable Wi-Fi switch and hide restriction message in summary.
assertThat(mWifiToggleSwitch.isEnabled()).isTrue();
assertThat(mWifiToggleSummary.getVisibility()).isEqualTo(View.GONE);
}
@Test
public void updateDialog_wifiOn_hideWifiScanNotify() {
// The preconditions WiFi ON and WiFi entries are already in setUp()