Merge "Restrict WiFi network connection (Internet Panel)" into tm-dev

This commit is contained in:
Weng Su
2022-03-18 18:35:16 +00:00
committed by Android (Google) Code Review
5 changed files with 112 additions and 19 deletions

View File

@@ -21,6 +21,7 @@ import android.content.Intent;
import android.graphics.drawable.Drawable;
import android.text.Html;
import android.text.TextUtils;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
@@ -158,22 +159,47 @@ public class InternetAdapter extends RecyclerView.Adapter<InternetAdapter.Intern
final int security = wifiEntry.getSecurity();
updateEndIcon(connectedState, security);
mWifiListLayout.setEnabled(shouldEnabled(wifiEntry));
if (connectedState != WifiEntry.CONNECTED_STATE_DISCONNECTED) {
mWifiListLayout.setOnClickListener(
v -> mInternetDialogController.launchWifiNetworkDetailsSetting(
v -> mInternetDialogController.launchWifiDetailsSetting(
wifiEntry.getKey(), v));
return;
}
mWifiListLayout.setOnClickListener(v -> {
if (wifiEntry.shouldEditBeforeConnect()) {
final Intent intent = WifiUtils.getWifiDialogIntent(wifiEntry.getKey(),
true /* connectForCaller */);
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
intent.addFlags(Intent.FLAG_ACTIVITY_REORDER_TO_FRONT);
mContext.startActivity(intent);
}
mWifiListLayout.setOnClickListener(v -> onWifiClick(wifiEntry, v));
}
boolean shouldEnabled(@NonNull WifiEntry wifiEntry) {
if (wifiEntry.canConnect()) {
return true;
}
// If Wi-Fi is connected or saved network, leave it enabled to disconnect or configure.
if (wifiEntry.canDisconnect() || wifiEntry.isSaved()) {
return true;
}
return false;
}
void onWifiClick(@NonNull WifiEntry wifiEntry, @NonNull View view) {
if (wifiEntry.shouldEditBeforeConnect()) {
final Intent intent = WifiUtils.getWifiDialogIntent(wifiEntry.getKey(),
true /* connectForCaller */);
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
intent.addFlags(Intent.FLAG_ACTIVITY_REORDER_TO_FRONT);
mContext.startActivity(intent);
return;
}
if (wifiEntry.canConnect()) {
mInternetDialogController.connect(wifiEntry);
});
return;
}
if (wifiEntry.isSaved()) {
Log.w(TAG, "The saved Wi-Fi network does not allow to connect. SSID:"
+ wifiEntry.getSsid());
mInternetDialogController.launchWifiDetailsSetting(wifiEntry.getKey(), view);
}
}
void setWifiNetworkLayout(CharSequence title, CharSequence summary) {

View File

@@ -531,8 +531,7 @@ public class InternetDialog extends SystemUIDialog implements
if (mConnectedWifiEntry == null) {
return;
}
mInternetDialogController.launchWifiNetworkDetailsSetting(mConnectedWifiEntry.getKey(),
view);
mInternetDialogController.launchWifiDetailsSetting(mConnectedWifiEntry.getKey(), view);
}
void onClickSeeMoreButton(View view) {

View File

@@ -635,7 +635,7 @@ public class InternetDialogController implements AccessPointController.AccessPoi
startActivity(getSettingsIntent(), view);
}
void launchWifiNetworkDetailsSetting(String key, View view) {
void launchWifiDetailsSetting(String key, View view) {
Intent intent = getWifiDetailsSettingsIntent(key);
if (intent != null) {
startActivity(intent, view);

View File

@@ -4,14 +4,19 @@ import static com.android.systemui.qs.tiles.dialog.InternetDialogController.MAX_
import static com.google.common.truth.Truth.assertThat;
import static org.mockito.ArgumentMatchers.any;
import static org.mockito.ArgumentMatchers.anyBoolean;
import static org.mockito.ArgumentMatchers.anyInt;
import static org.mockito.ArgumentMatchers.eq;
import static org.mockito.Mockito.anyString;
import static org.mockito.Mockito.doNothing;
import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.never;
import static org.mockito.Mockito.reset;
import static org.mockito.Mockito.verify;
import static org.mockito.Mockito.when;
import android.content.Context;
import android.graphics.drawable.Drawable;
import android.testing.AndroidTestingRunner;
import android.testing.TestableResources;
@@ -30,6 +35,7 @@ import org.junit.Rule;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.mockito.Mock;
import org.mockito.Spy;
import org.mockito.junit.MockitoJUnit;
import org.mockito.junit.MockitoRule;
@@ -40,6 +46,7 @@ import java.util.List;
@RunWith(AndroidTestingRunner.class)
public class InternetAdapterTest extends SysuiTestCase {
private static final String WIFI_KEY = "Wi-Fi_Key";
private static final String WIFI_TITLE = "Wi-Fi Title";
private static final String WIFI_SUMMARY = "Wi-Fi Summary";
private static final int GEAR_ICON_RES_ID = R.drawable.ic_settings_24dp;
@@ -47,6 +54,8 @@ public class InternetAdapterTest extends SysuiTestCase {
@Rule
public MockitoRule mRule = MockitoJUnit.rule();
@Spy
private Context mSpyContext = mContext;
@Mock
private WifiEntry mInternetWifiEntry;
@@ -74,6 +83,7 @@ public class InternetAdapterTest extends SysuiTestCase {
when(mInternetWifiEntry.getSummary(false)).thenReturn(WIFI_SUMMARY);
when(mInternetWifiEntry.isDefaultNetwork()).thenReturn(true);
when(mInternetWifiEntry.hasInternetAccess()).thenReturn(true);
when(mWifiEntry.getKey()).thenReturn(WIFI_KEY);
when(mWifiEntry.getTitle()).thenReturn(WIFI_TITLE);
when(mWifiEntry.getSummary(false)).thenReturn(WIFI_SUMMARY);
@@ -196,6 +206,66 @@ public class InternetAdapterTest extends SysuiTestCase {
assertThat(mInternetAdapter.mMaxEntriesCount).isEqualTo(maxCount);
}
@Test
public void viewHolderShouldEnabled_wifiCanConnect_returnTrue() {
when(mWifiEntry.canConnect()).thenReturn(true);
assertThat(mViewHolder.shouldEnabled(mWifiEntry)).isTrue();
}
@Test
public void viewHolderShouldEnabled_wifiCanNotConnect_returnFalse() {
when(mWifiEntry.canConnect()).thenReturn(false);
assertThat(mViewHolder.shouldEnabled(mWifiEntry)).isFalse();
}
@Test
public void viewHolderShouldEnabled_wifiCanNotConnectButCanDisconnect_returnTrue() {
when(mWifiEntry.canConnect()).thenReturn(false);
when(mWifiEntry.canConnect()).thenReturn(true);
assertThat(mViewHolder.shouldEnabled(mWifiEntry)).isTrue();
}
@Test
public void viewHolderShouldEnabled_wifiCanNotConnectButIsSaved_returnTrue() {
when(mWifiEntry.canConnect()).thenReturn(false);
when(mWifiEntry.isSaved()).thenReturn(true);
assertThat(mViewHolder.shouldEnabled(mWifiEntry)).isTrue();
}
@Test
public void viewHolderOnWifiClick_wifiShouldEditBeforeConnect_startActivity() {
when(mWifiEntry.shouldEditBeforeConnect()).thenReturn(true);
mViewHolder = mInternetAdapter.onCreateViewHolder(new LinearLayout(mSpyContext), 0);
doNothing().when(mSpyContext).startActivity(any());
mViewHolder.onWifiClick(mWifiEntry, mock(View.class));
verify(mSpyContext).startActivity(any());
}
@Test
public void viewHolderOnWifiClick_wifiCanConnect_connectWifi() {
when(mWifiEntry.canConnect()).thenReturn(true);
mViewHolder.onWifiClick(mWifiEntry, mock(View.class));
verify(mInternetDialogController).connect(mWifiEntry);
}
@Test
public void viewHolderOnWifiClick_wifiCanNotConnectButIsSaved_launchWifiDetailsSetting() {
when(mWifiEntry.canConnect()).thenReturn(false);
when(mWifiEntry.isSaved()).thenReturn(true);
mViewHolder.onWifiClick(mWifiEntry, mock(View.class));
verify(mInternetDialogController).launchWifiDetailsSetting(anyString(), any());
}
@Test
public void viewHolderUpdateEndIcon_wifiConnected_updateGearIcon() {
mTestableResources.addOverride(GEAR_ICON_RES_ID, mGearIcon);

View File

@@ -385,18 +385,16 @@ public class InternetDialogControllerTest extends SysuiTestCase {
}
@Test
public void launchWifiNetworkDetailsSetting_withNoWifiEntryKey_doNothing() {
mInternetDialogController.launchWifiNetworkDetailsSetting(null /* key */,
mDialogLaunchView);
public void launchWifiDetailsSetting_withNoWifiEntryKey_doNothing() {
mInternetDialogController.launchWifiDetailsSetting(null /* key */, mDialogLaunchView);
verify(mActivityStarter, never())
.postStartActivityDismissingKeyguard(any(Intent.class), anyInt());
}
@Test
public void launchWifiNetworkDetailsSetting_withWifiEntryKey_startActivity() {
mInternetDialogController.launchWifiNetworkDetailsSetting("wifi_entry_key",
mDialogLaunchView);
public void launchWifiDetailsSetting_withWifiEntryKey_startActivity() {
mInternetDialogController.launchWifiDetailsSetting("wifi_entry_key", mDialogLaunchView);
verify(mActivityStarter).postStartActivityDismissingKeyguard(any(Intent.class), anyInt(),
any());