summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
author Quang Luong <qal@google.com> 2022-03-31 16:40:09 +0000
committer Android (Google) Code Review <android-gerrit@google.com> 2022-03-31 16:40:09 +0000
commitdd77da2e52be44f5cb865623f0152f9f95bd1adb (patch)
tree75aa0e2ecba39ab90c815ac9486ee2e1a234fef7
parentfd87442386e6437fd4a880bb254e249bb190db42 (diff)
parent3bed400c416f3c59d3973d26b642930145e8eb70 (diff)
Merge "Remove double quotes from Wrong Password Notification" into tm-dev
-rw-r--r--service/java/com/android/server/wifi/ClientModeImpl.java2
-rw-r--r--service/java/com/android/server/wifi/WrongPasswordNotifier.java29
-rw-r--r--service/tests/wifitests/src/com/android/server/wifi/ClientModeImplTest.java8
-rw-r--r--service/tests/wifitests/src/com/android/server/wifi/WrongPasswordNotifierTest.java11
4 files changed, 34 insertions, 16 deletions
diff --git a/service/java/com/android/server/wifi/ClientModeImpl.java b/service/java/com/android/server/wifi/ClientModeImpl.java
index fef3641d7b..8749ebda31 100644
--- a/service/java/com/android/server/wifi/ClientModeImpl.java
+++ b/service/java/com/android/server/wifi/ClientModeImpl.java
@@ -5142,7 +5142,7 @@ public class ClientModeImpl extends StateMachine implements ClientMode {
final boolean needNotifyError = isPrimary() ? !isForLocalOnly
: isSecondaryInternet();
if (targetedNetwork != null && needNotifyError) {
- mWrongPasswordNotifier.onWrongPasswordError(targetedNetwork.SSID);
+ mWrongPasswordNotifier.onWrongPasswordError(targetedNetwork);
}
} else if (reasonCode == WifiManager.ERROR_AUTH_FAILURE_EAP_FAILURE) {
logEventIfManagedNetwork(targetedNetwork,
diff --git a/service/java/com/android/server/wifi/WrongPasswordNotifier.java b/service/java/com/android/server/wifi/WrongPasswordNotifier.java
index 3ecff59a0b..21311c851d 100644
--- a/service/java/com/android/server/wifi/WrongPasswordNotifier.java
+++ b/service/java/com/android/server/wifi/WrongPasswordNotifier.java
@@ -20,12 +20,15 @@ import android.app.Notification;
import android.app.PendingIntent;
import android.content.Intent;
import android.graphics.drawable.Icon;
+import android.net.wifi.WifiConfiguration;
import android.net.wifi.WifiContext;
+import android.net.wifi.WifiSsid;
import android.provider.Settings;
+import androidx.annotation.NonNull;
+
import com.android.internal.annotations.VisibleForTesting;
import com.android.internal.messages.nano.SystemMessageProto.SystemMessage;
-import com.android.server.wifi.util.NativeUtil;
/**
* Responsible for notifying user for wrong password errors.
@@ -56,10 +59,10 @@ public class WrongPasswordNotifier {
/**
* Invoked when a wrong password error for a Wi-Fi network is detected.
*
- * @param ssid The SSID of the Wi-Fi network
+ * @param wifiConfiguration the network
*/
- public void onWrongPasswordError(String ssid) {
- showNotification(ssid);
+ public void onWrongPasswordError(@NonNull WifiConfiguration wifiConfiguration) {
+ showNotification(wifiConfiguration);
mWrongPasswordDetected = true;
}
@@ -76,14 +79,24 @@ public class WrongPasswordNotifier {
/**
* Display wrong password notification for a given Wi-Fi network (specified by its SSID).
*
- * @param ssid SSID of the Wi-FI network
+ * @param wifiConfiguration the network
*/
- private void showNotification(String ssid) {
+ private void showNotification(@NonNull WifiConfiguration wifiConfiguration) {
+ CharSequence utf8Ssid = WifiSsid.fromString(wifiConfiguration.SSID).getUtf8Text();
+ if (utf8Ssid == null) {
+ // TODO(qal): Non-utf-8 SSIDs are currently not supported in Settings, and the intent
+ // action will fail to open the password dialog for the correct network. In
+ // addition, it is unclear which charset is appropriate for the non-utf-8
+ // SSID. We may need to re-evaluate if we should support displaying non-utf-8
+ // SSIDs from the framework or not. For now, fallback to the raw
+ // WifiConfiguration.SSID so the user still gets a notification.
+ utf8Ssid = wifiConfiguration.SSID;
+ }
String settingsPackage = mFrameworkFacade.getSettingsPackageName(mContext);
if (settingsPackage == null) return;
Intent intent = new Intent(Settings.ACTION_WIFI_SETTINGS)
.setPackage(settingsPackage)
- .putExtra("wifi_start_connect_ssid", NativeUtil.removeEnclosingQuotes(ssid));
+ .putExtra("wifi_start_connect_ssid", utf8Ssid.toString());
CharSequence title = mContext.getString(
com.android.wifi.resources.R.string.wifi_available_title_failed_to_connect);
Notification.Builder builder = mFrameworkFacade.makeNotificationBuilder(mContext,
@@ -94,7 +107,7 @@ public class WrongPasswordNotifier {
.setSmallIcon(Icon.createWithResource(mContext.getWifiOverlayApkPkgName(),
com.android.wifi.resources.R.drawable.stat_notify_wifi_in_range))
.setContentTitle(title)
- .setContentText(ssid)
+ .setContentText(utf8Ssid)
.setContentIntent(mFrameworkFacade.getActivity(
mContext, 0, intent,
PendingIntent.FLAG_UPDATE_CURRENT | PendingIntent.FLAG_IMMUTABLE))
diff --git a/service/tests/wifitests/src/com/android/server/wifi/ClientModeImplTest.java b/service/tests/wifitests/src/com/android/server/wifi/ClientModeImplTest.java
index ba9243d340..ec8e7fc688 100644
--- a/service/tests/wifitests/src/com/android/server/wifi/ClientModeImplTest.java
+++ b/service/tests/wifitests/src/com/android/server/wifi/ClientModeImplTest.java
@@ -2209,7 +2209,7 @@ public class ClientModeImplTest extends WifiBaseTest {
mCmi.sendMessage(WifiMonitor.NETWORK_DISCONNECTION_EVENT, disconnectEventInfo);
mLooper.dispatchAll();
- verify(mWrongPasswordNotifier, never()).onWrongPasswordError(anyString());
+ verify(mWrongPasswordNotifier, never()).onWrongPasswordError(any());
verify(mWifiConfigManager).updateNetworkSelectionStatus(anyInt(),
eq(WifiConfiguration.NetworkSelectionStatus.DISABLED_AUTHENTICATION_FAILURE));
@@ -2240,7 +2240,7 @@ public class ClientModeImplTest extends WifiBaseTest {
mCmi.sendMessage(WifiMonitor.NETWORK_DISCONNECTION_EVENT, disconnectEventInfo);
mLooper.dispatchAll();
- verify(mWrongPasswordNotifier, never()).onWrongPasswordError(anyString());
+ verify(mWrongPasswordNotifier, never()).onWrongPasswordError(any());
assertEquals("DisconnectedState", getCurrentState().getName());
}
@@ -2268,7 +2268,7 @@ public class ClientModeImplTest extends WifiBaseTest {
mCmi.sendMessage(WifiMonitor.NETWORK_DISCONNECTION_EVENT, disconnectEventInfo);
mLooper.dispatchAll();
- verify(mWrongPasswordNotifier).onWrongPasswordError(anyString());
+ verify(mWrongPasswordNotifier).onWrongPasswordError(any());
assertEquals("DisconnectedState", getCurrentState().getName());
}
@@ -2335,7 +2335,7 @@ public class ClientModeImplTest extends WifiBaseTest {
mCmi.sendMessage(WifiMonitor.NETWORK_DISCONNECTION_EVENT, disconnectEventInfo);
mLooper.dispatchAll();
- verify(mWrongPasswordNotifier).onWrongPasswordError(eq(TEST_SSID));
+ verify(mWrongPasswordNotifier).onWrongPasswordError(config);
verify(mWifiConfigManager).updateNetworkSelectionStatus(anyInt(),
eq(WifiConfiguration.NetworkSelectionStatus.DISABLED_BY_WRONG_PASSWORD));
verify(mWifiMetrics).incrementNumOfCarrierWifiConnectionAuthFailure();
diff --git a/service/tests/wifitests/src/com/android/server/wifi/WrongPasswordNotifierTest.java b/service/tests/wifitests/src/com/android/server/wifi/WrongPasswordNotifierTest.java
index 9d19c59f91..76b4f4cb84 100644
--- a/service/tests/wifitests/src/com/android/server/wifi/WrongPasswordNotifierTest.java
+++ b/service/tests/wifitests/src/com/android/server/wifi/WrongPasswordNotifierTest.java
@@ -26,7 +26,9 @@ import android.content.Intent;
import android.content.pm.ActivityInfo;
import android.content.pm.ResolveInfo;
import android.content.res.Resources;
+import android.net.wifi.WifiConfiguration;
import android.net.wifi.WifiContext;
+import android.net.wifi.WifiSsid;
import android.os.UserHandle;
import android.provider.Settings;
@@ -48,7 +50,7 @@ import org.mockito.MockitoSession;
*/
@SmallTest
public class WrongPasswordNotifierTest extends WifiBaseTest {
- private static final String TEST_SSID = "Test SSID";
+ private static final WifiSsid TEST_SSID = WifiSsid.fromUtf8Text("Test SSID");
private static final String TEST_SETTINGS_PACKAGE = "android";
@Mock WifiContext mContext;
@@ -102,14 +104,17 @@ public class WrongPasswordNotifierTest extends WifiBaseTest {
public void onWrongPasswordError() throws Exception {
when(mFrameworkFacade.makeNotificationBuilder(any(),
eq(WifiService.NOTIFICATION_NETWORK_ALERTS))).thenReturn(mNotificationBuilder);
- mWrongPassNotifier.onWrongPasswordError(TEST_SSID);
+ WifiConfiguration config = new WifiConfiguration();
+ config.SSID = TEST_SSID.toString();
+ mWrongPassNotifier.onWrongPasswordError(config);
verify(mWifiNotificationManager).notify(eq(WrongPasswordNotifier.NOTIFICATION_ID), any());
ArgumentCaptor<Intent> intent = ArgumentCaptor.forClass(Intent.class);
verify(mFrameworkFacade).getActivity(
any(Context.class), anyInt(), intent.capture(), anyInt());
assertEquals(Settings.ACTION_WIFI_SETTINGS, intent.getValue().getAction());
assertEquals(TEST_SETTINGS_PACKAGE, intent.getValue().getPackage());
- assertEquals(TEST_SSID, intent.getValue().getStringExtra("wifi_start_connect_ssid"));
+ assertEquals(TEST_SSID.getUtf8Text(),
+ intent.getValue().getStringExtra("wifi_start_connect_ssid"));
}
/**