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

Original change: https://googleplex-android-review.googlesource.com/c/platform/frameworks/base/+/17198003

Change-Id: I5bfeada6f0f251dc085ed073300057ada9a275fc
This commit is contained in:
Weng Su
2022-03-18 20:35:15 +00:00
committed by Automerger Merge Worker
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.graphics.drawable.Drawable;
import android.text.Html; import android.text.Html;
import android.text.TextUtils; import android.text.TextUtils;
import android.util.Log;
import android.view.LayoutInflater; import android.view.LayoutInflater;
import android.view.View; import android.view.View;
import android.view.ViewGroup; import android.view.ViewGroup;
@@ -158,22 +159,47 @@ public class InternetAdapter extends RecyclerView.Adapter<InternetAdapter.Intern
final int security = wifiEntry.getSecurity(); final int security = wifiEntry.getSecurity();
updateEndIcon(connectedState, security); updateEndIcon(connectedState, security);
mWifiListLayout.setEnabled(shouldEnabled(wifiEntry));
if (connectedState != WifiEntry.CONNECTED_STATE_DISCONNECTED) { if (connectedState != WifiEntry.CONNECTED_STATE_DISCONNECTED) {
mWifiListLayout.setOnClickListener( mWifiListLayout.setOnClickListener(
v -> mInternetDialogController.launchWifiNetworkDetailsSetting( v -> mInternetDialogController.launchWifiDetailsSetting(
wifiEntry.getKey(), v)); wifiEntry.getKey(), v));
return; return;
} }
mWifiListLayout.setOnClickListener(v -> { mWifiListLayout.setOnClickListener(v -> onWifiClick(wifiEntry, v));
if (wifiEntry.shouldEditBeforeConnect()) { }
final Intent intent = WifiUtils.getWifiDialogIntent(wifiEntry.getKey(),
true /* connectForCaller */); boolean shouldEnabled(@NonNull WifiEntry wifiEntry) {
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); if (wifiEntry.canConnect()) {
intent.addFlags(Intent.FLAG_ACTIVITY_REORDER_TO_FRONT); return true;
mContext.startActivity(intent); }
} // 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); 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) { void setWifiNetworkLayout(CharSequence title, CharSequence summary) {

View File

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

View File

@@ -635,7 +635,7 @@ public class InternetDialogController implements AccessPointController.AccessPoi
startActivity(getSettingsIntent(), view); startActivity(getSettingsIntent(), view);
} }
void launchWifiNetworkDetailsSetting(String key, View view) { void launchWifiDetailsSetting(String key, View view) {
Intent intent = getWifiDetailsSettingsIntent(key); Intent intent = getWifiDetailsSettingsIntent(key);
if (intent != null) { if (intent != null) {
startActivity(intent, view); 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 com.google.common.truth.Truth.assertThat;
import static org.mockito.ArgumentMatchers.any;
import static org.mockito.ArgumentMatchers.anyBoolean; import static org.mockito.ArgumentMatchers.anyBoolean;
import static org.mockito.ArgumentMatchers.anyInt; import static org.mockito.ArgumentMatchers.anyInt;
import static org.mockito.ArgumentMatchers.eq; 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.never;
import static org.mockito.Mockito.reset; import static org.mockito.Mockito.reset;
import static org.mockito.Mockito.verify; import static org.mockito.Mockito.verify;
import static org.mockito.Mockito.when; import static org.mockito.Mockito.when;
import android.content.Context;
import android.graphics.drawable.Drawable; import android.graphics.drawable.Drawable;
import android.testing.AndroidTestingRunner; import android.testing.AndroidTestingRunner;
import android.testing.TestableResources; import android.testing.TestableResources;
@@ -30,6 +35,7 @@ import org.junit.Rule;
import org.junit.Test; import org.junit.Test;
import org.junit.runner.RunWith; import org.junit.runner.RunWith;
import org.mockito.Mock; import org.mockito.Mock;
import org.mockito.Spy;
import org.mockito.junit.MockitoJUnit; import org.mockito.junit.MockitoJUnit;
import org.mockito.junit.MockitoRule; import org.mockito.junit.MockitoRule;
@@ -40,6 +46,7 @@ import java.util.List;
@RunWith(AndroidTestingRunner.class) @RunWith(AndroidTestingRunner.class)
public class InternetAdapterTest extends SysuiTestCase { 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_TITLE = "Wi-Fi Title";
private static final String WIFI_SUMMARY = "Wi-Fi Summary"; private static final String WIFI_SUMMARY = "Wi-Fi Summary";
private static final int GEAR_ICON_RES_ID = R.drawable.ic_settings_24dp; private static final int GEAR_ICON_RES_ID = R.drawable.ic_settings_24dp;
@@ -47,6 +54,8 @@ public class InternetAdapterTest extends SysuiTestCase {
@Rule @Rule
public MockitoRule mRule = MockitoJUnit.rule(); public MockitoRule mRule = MockitoJUnit.rule();
@Spy
private Context mSpyContext = mContext;
@Mock @Mock
private WifiEntry mInternetWifiEntry; private WifiEntry mInternetWifiEntry;
@@ -74,6 +83,7 @@ public class InternetAdapterTest extends SysuiTestCase {
when(mInternetWifiEntry.getSummary(false)).thenReturn(WIFI_SUMMARY); when(mInternetWifiEntry.getSummary(false)).thenReturn(WIFI_SUMMARY);
when(mInternetWifiEntry.isDefaultNetwork()).thenReturn(true); when(mInternetWifiEntry.isDefaultNetwork()).thenReturn(true);
when(mInternetWifiEntry.hasInternetAccess()).thenReturn(true); when(mInternetWifiEntry.hasInternetAccess()).thenReturn(true);
when(mWifiEntry.getKey()).thenReturn(WIFI_KEY);
when(mWifiEntry.getTitle()).thenReturn(WIFI_TITLE); when(mWifiEntry.getTitle()).thenReturn(WIFI_TITLE);
when(mWifiEntry.getSummary(false)).thenReturn(WIFI_SUMMARY); when(mWifiEntry.getSummary(false)).thenReturn(WIFI_SUMMARY);
@@ -196,6 +206,66 @@ public class InternetAdapterTest extends SysuiTestCase {
assertThat(mInternetAdapter.mMaxEntriesCount).isEqualTo(maxCount); 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 @Test
public void viewHolderUpdateEndIcon_wifiConnected_updateGearIcon() { public void viewHolderUpdateEndIcon_wifiConnected_updateGearIcon() {
mTestableResources.addOverride(GEAR_ICON_RES_ID, mGearIcon); mTestableResources.addOverride(GEAR_ICON_RES_ID, mGearIcon);

View File

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