diff options
author | 2022-03-31 16:40:09 +0000 | |
---|---|---|
committer | 2022-03-31 16:40:09 +0000 | |
commit | dd77da2e52be44f5cb865623f0152f9f95bd1adb (patch) | |
tree | 75aa0e2ecba39ab90c815ac9486ee2e1a234fef7 | |
parent | fd87442386e6437fd4a880bb254e249bb190db42 (diff) | |
parent | 3bed400c416f3c59d3973d26b642930145e8eb70 (diff) |
Merge "Remove double quotes from Wrong Password Notification" into tm-dev
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")); } /** |