From 375d018f701bec20fd53cc492748c4655c7449ec Mon Sep 17 00:00:00 2001 From: Oleg Kibirev Date: Tue, 28 Nov 2023 01:12:22 +0000 Subject: Use WifiEntry info to decide whether to ask for password BUG=305092860,153627947 Change-Id: I141d9b47720fe8adfff6a404de3c3e5d9967117d --- .../connectivity/WifiConnectionActivity.java | 19 ++++--- .../settings/connectivity/setup/AddStartState.java | 20 ++------ .../connectivity/setup/UserChoiceInfo.java | 11 ++++ .../connectivity/setup/AddStartStateTest.java | 60 ++++++++++++---------- 4 files changed, 57 insertions(+), 53 deletions(-) diff --git a/Settings/src/com/android/tv/settings/connectivity/WifiConnectionActivity.java b/Settings/src/com/android/tv/settings/connectivity/WifiConnectionActivity.java index 56e66af45..3f4705f8e 100644 --- a/Settings/src/com/android/tv/settings/connectivity/WifiConnectionActivity.java +++ b/Settings/src/com/android/tv/settings/connectivity/WifiConnectionActivity.java @@ -47,6 +47,7 @@ import com.android.tv.settings.connectivity.util.State; import com.android.tv.settings.connectivity.util.StateMachine; import com.android.tv.settings.connectivity.util.WifiSecurityUtil; import com.android.tv.settings.core.instrumentation.InstrumentedActivity; +import com.android.tv.settings.library.util.DataBinder; /** * Add a wifi network where we already know the ssid/security; normal post-install settings. @@ -57,11 +58,15 @@ public class WifiConnectionActivity extends InstrumentedActivity implements private static final String EXTRA_WIFI_SSID = "wifi_ssid"; private static final String EXTRA_WIFI_SECURITY_NAME = "wifi_security_name"; + private static final String EXTRA_WIFI_ENTRY = "wifi_entry"; public static Intent createIntent(Context context, AccessPoint result, int security) { + Bundle bundle = new Bundle(); + bundle.putString(EXTRA_WIFI_SSID, result.getSsidStr()); + bundle.putInt(EXTRA_WIFI_SECURITY_NAME, security); + bundle.putBinder(EXTRA_WIFI_ENTRY, DataBinder.with(result.getWifiEntry())); return new Intent(context, WifiConnectionActivity.class) - .putExtra(EXTRA_WIFI_SSID, result.getSsidStr()) - .putExtra(EXTRA_WIFI_SECURITY_NAME, security); + .putExtras(bundle); } public static Intent createIntent(Context context, AccessPoint result) { @@ -69,14 +74,6 @@ public class WifiConnectionActivity extends InstrumentedActivity implements return createIntent(context, result, security); } - public static Intent createIntent(Context context, WifiConfiguration configuration) { - final int security = WifiSecurityUtil.getSecurity(configuration); - final String ssid = configuration.getPrintableSsid(); - return new Intent(context, WifiConnectionActivity.class) - .putExtra(EXTRA_WIFI_SSID, ssid) - .putExtra(EXTRA_WIFI_SECURITY_NAME, security); - } - private WifiConfiguration mConfiguration; private int mWifiSecurity; private StateMachine mStateMachine; @@ -199,6 +196,8 @@ public class WifiConnectionActivity extends InstrumentedActivity implements ViewModelProviders.of(this).get(UserChoiceInfo.class); userChoiceInfo.setWifiConfiguration(mConfiguration); userChoiceInfo.setWifiSecurity(mWifiSecurity); + userChoiceInfo.setWifiEntry(DataBinder.getData( + getIntent().getExtras().getBinder(EXTRA_WIFI_ENTRY))); WifiConfiguration.NetworkSelectionStatus networkStatus = mConfiguration.getNetworkSelectionStatus(); diff --git a/Settings/src/com/android/tv/settings/connectivity/setup/AddStartState.java b/Settings/src/com/android/tv/settings/connectivity/setup/AddStartState.java index 1e92f30d8..6c57e2fb1 100644 --- a/Settings/src/com/android/tv/settings/connectivity/setup/AddStartState.java +++ b/Settings/src/com/android/tv/settings/connectivity/setup/AddStartState.java @@ -16,17 +16,12 @@ package com.android.tv.settings.connectivity.setup; -import android.net.wifi.WifiConfiguration; -import android.text.TextUtils; - import androidx.fragment.app.Fragment; import androidx.fragment.app.FragmentActivity; import androidx.lifecycle.ViewModelProviders; -import com.android.tv.settings.library.network.AccessPoint; import com.android.tv.settings.connectivity.util.State; import com.android.tv.settings.connectivity.util.StateMachine; -import com.android.tv.settings.connectivity.util.WifiSecurityUtil; /** * State responsible for starting the network configuration. @@ -46,17 +41,10 @@ public class AddStartState implements State { @Override public void processForward() { mFragment = null; - int wifiSecurity = mUserChoiceInfo.getWifiSecurity(); - WifiConfiguration configuration = mUserChoiceInfo.getWifiConfiguration(); - if ((wifiSecurity == AccessPoint.SECURITY_WEP - && TextUtils.isEmpty(configuration.wepKeys[0])) - || ((!WifiSecurityUtil.isOpen(wifiSecurity) && !WifiSecurityUtil.isEnhancedOpen(wifiSecurity)) - && wifiSecurity != AccessPoint.SECURITY_WEP - && TextUtils.isEmpty(configuration.preSharedKey))) { - mStateMachine.getListener().onComplete(StateMachine.PASSWORD); - } else { - mStateMachine.getListener().onComplete(StateMachine.CONNECT); - } + mStateMachine.getListener().onComplete( + mUserChoiceInfo.getWifiEntry().shouldEditBeforeConnect() + || mUserChoiceInfo.getWifiEntry().needsWifiConfiguration() + ? StateMachine.PASSWORD : StateMachine.CONNECT); } @Override diff --git a/Settings/src/com/android/tv/settings/connectivity/setup/UserChoiceInfo.java b/Settings/src/com/android/tv/settings/connectivity/setup/UserChoiceInfo.java index c7deeadf6..5cac0cacf 100644 --- a/Settings/src/com/android/tv/settings/connectivity/setup/UserChoiceInfo.java +++ b/Settings/src/com/android/tv/settings/connectivity/setup/UserChoiceInfo.java @@ -24,6 +24,8 @@ import android.util.ArrayMap; import androidx.annotation.IntDef; import androidx.lifecycle.ViewModel; +import com.android.wifitrackerlib.WifiEntry; + import java.lang.annotation.Retention; import java.lang.annotation.RetentionPolicy; import java.util.HashMap; @@ -54,6 +56,7 @@ public class UserChoiceInfo extends ViewModel { private boolean mIsPasswordHidden = true; private ConnectionFailedStatus mConnectionFailedStatus; private int mEasyConnectNetworkId = -1; + private WifiEntry wifiEntry; /** * Store the page summary into a HashMap. @@ -202,6 +205,14 @@ public class UserChoiceInfo extends ViewModel { mConnectionFailedStatus = status; } + public WifiEntry getWifiEntry() { + return wifiEntry; + } + + public void setWifiEntry(WifiEntry wifiEntry) { + this.wifiEntry = wifiEntry; + } + /** * Initialize all the information. */ diff --git a/Settings/tests/robotests/src/com/android/tv/settings/connectivity/setup/AddStartStateTest.java b/Settings/tests/robotests/src/com/android/tv/settings/connectivity/setup/AddStartStateTest.java index a6240d4da..59aca204a 100644 --- a/Settings/tests/robotests/src/com/android/tv/settings/connectivity/setup/AddStartStateTest.java +++ b/Settings/tests/robotests/src/com/android/tv/settings/connectivity/setup/AddStartStateTest.java @@ -19,7 +19,9 @@ package com.android.tv.settings.connectivity.setup; import static org.mockito.Mockito.verify; import static org.robolectric.shadow.api.Shadow.extract; +import android.content.Context; import android.net.wifi.WifiConfiguration; +import android.net.wifi.WifiManager; import androidx.fragment.app.FragmentActivity; import androidx.lifecycle.ViewModelProviders; @@ -27,7 +29,10 @@ import androidx.lifecycle.ViewModelProviders; import com.android.tv.settings.library.network.AccessPoint; import com.android.tv.settings.connectivity.util.State; import com.android.tv.settings.connectivity.util.StateMachine; +import com.android.tv.settings.library.util.ThreadUtils; import com.android.tv.settings.testutils.ShadowStateMachine; +import com.android.wifitrackerlib.WifiEntry; +import com.android.wifitrackerlib.WifiTrackerInjector; import org.junit.Before; import org.junit.Test; @@ -46,6 +51,8 @@ public class AddStartStateTest { private UserChoiceInfo mUserChoiceInfo; @Mock private State.StateCompleteListener mStateCompleteListener; + @Mock private WifiManager mMockWifiManager; + @Mock private WifiTrackerInjector mWifiTrackerInjector; @Before public void setUp() { @@ -59,48 +66,47 @@ public class AddStartStateTest { } @Test - public void testForward_WEP_NeedPassword() { + public void testForward_needsWifiConfiguration_NeedPassword() { mUserChoiceInfo.init(); - mUserChoiceInfo.setWifiSecurity(AccessPoint.SECURITY_WEP); - mUserChoiceInfo.setWifiConfiguration(new WifiConfiguration()); + mUserChoiceInfo.setWifiEntry(makeWifiEntry( + /* needsWifiConfiguration= */ true, + /* shouldEditBeforeConnect= */ false)); mAddStartState.processForward(); verify(mStateCompleteListener).onComplete(StateMachine.PASSWORD); } @Test - public void testForward_WPA_NeedPassword() { + public void testForward_shouldEditBeforeConnect_NeedPassword() { mUserChoiceInfo.init(); - mUserChoiceInfo.setWifiSecurity(AccessPoint.SECURITY_PSK); - mUserChoiceInfo.setWifiConfiguration(new WifiConfiguration()); + mUserChoiceInfo.setWifiEntry(makeWifiEntry( + /* needsWifiConfiguration= */ false, + /* shouldEditBeforeConnect= */ true)); mAddStartState.processForward(); verify(mStateCompleteListener).onComplete(StateMachine.PASSWORD); } @Test - public void testForward_EAP_NeedPassword() { - mUserChoiceInfo.init(); - mUserChoiceInfo.setWifiSecurity(AccessPoint.SECURITY_EAP); - mUserChoiceInfo.setWifiConfiguration(new WifiConfiguration()); - mAddStartState.processForward(); - verify(mStateCompleteListener).onComplete(StateMachine.PASSWORD); - } - - @Test - public void testForward_AlreadyHasPassword() { - mUserChoiceInfo.init(); - mUserChoiceInfo.setWifiSecurity(AccessPoint.SECURITY_PSK); - WifiConfiguration config = new WifiConfiguration(); - config.preSharedKey = "PasswordTest"; - mUserChoiceInfo.setWifiConfiguration(config); + public void testForward_DoNotNeedPassword_Connect() { + mUserChoiceInfo.setWifiEntry(makeWifiEntry( + /* needsWifiConfiguration= */ false, + /* shouldEditBeforeConnect= */ false)); mAddStartState.processForward(); verify(mStateCompleteListener).onComplete(StateMachine.CONNECT); } - @Test - public void testForward_DoNotNeedPassword() { - mUserChoiceInfo.init(); - mUserChoiceInfo.setWifiSecurity(AccessPoint.SECURITY_NONE); - mAddStartState.processForward(); - verify(mStateCompleteListener).onComplete(StateMachine.CONNECT); + private WifiEntry makeWifiEntry(boolean needsWifiConfiguration, + boolean shouldEditBeforeConnect) { + return new WifiEntry(mWifiTrackerInjector, + ThreadUtils.getUiThreadHandler(), mMockWifiManager, false) { + @Override + public boolean needsWifiConfiguration() { + return needsWifiConfiguration; + } + + @Override + public boolean shouldEditBeforeConnect() { + return shouldEditBeforeConnect; + } + }; } } -- cgit v1.2.3