Add [ssid] is blocked for wep network
Test: Visual Test
Fix: 320829123
Change-Id: Ia742e8b3e622c4c44a69daca20ca64edc6f9f826
diff --git a/AndroidManifest.xml b/AndroidManifest.xml
index 854d409..0241a29 100644
--- a/AndroidManifest.xml
+++ b/AndroidManifest.xml
@@ -5056,6 +5056,12 @@
android:authorities="${applicationId}.androidx-startup"
tools:node="remove" />
+ <activity
+ android:name="com.android.settings.network.WepNetworkDialogActivity"
+ android:exported="false"
+ android:theme="@style/Theme.SpaLib.Dialog">
+ </activity>
+
<!-- This is the longest AndroidManifest.xml ever. -->
</application>
</manifest>
diff --git a/src/com/android/settings/network/NetworkProviderSettings.java b/src/com/android/settings/network/NetworkProviderSettings.java
index f14c32c..0da1034 100644
--- a/src/com/android/settings/network/NetworkProviderSettings.java
+++ b/src/com/android/settings/network/NetworkProviderSettings.java
@@ -89,6 +89,7 @@
import com.android.settingslib.widget.LayoutPreference;
import com.android.settingslib.wifi.WifiEnterpriseRestrictionUtils;
import com.android.settingslib.wifi.WifiSavedConfigUtils;
+import com.android.wifi.flags.Flags;
import com.android.wifitrackerlib.WifiEntry;
import com.android.wifitrackerlib.WifiEntry.ConnectCallback;
import com.android.wifitrackerlib.WifiPickerTracker;
@@ -1257,8 +1258,19 @@
// If it's an unsaved secure WifiEntry, it will callback
// ConnectCallback#onConnectResult with ConnectCallback#CONNECT_STATUS_FAILURE_NO_CONFIG
- wifiEntry.connect(new WifiEntryConnectCallback(wifiEntry, editIfNoConfig,
- fullScreenEdit));
+ WifiEntryConnectCallback callback =
+ new WifiEntryConnectCallback(wifiEntry, editIfNoConfig, fullScreenEdit);
+
+ if (Flags.wepUsage() && wifiEntry.getSecurityTypes().contains(WifiEntry.SECURITY_WEP)) {
+ WepNetworkDialogActivity.checkWepAllowed(
+ getContext(), getViewLifecycleOwner(), wifiEntry.getSsid(), () -> {
+ wifiEntry.connect(callback);
+ return null;
+ });
+ return;
+ }
+
+ wifiEntry.connect(callback);
}
private class WifiConnectActionListener implements WifiManager.ActionListener {
diff --git a/src/com/android/settings/network/WepNetworkDialogActivity.kt b/src/com/android/settings/network/WepNetworkDialogActivity.kt
new file mode 100644
index 0000000..2fa8784
--- /dev/null
+++ b/src/com/android/settings/network/WepNetworkDialogActivity.kt
@@ -0,0 +1,111 @@
+/*
+ * Copyright (C) 2024 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.android.settings.network
+
+import android.app.settings.SettingsEnums
+import android.content.Context
+import android.content.Intent
+import android.net.wifi.WifiManager
+import androidx.compose.foundation.layout.fillMaxWidth
+import androidx.compose.material3.Text
+import androidx.compose.runtime.Composable
+import androidx.compose.ui.Modifier
+import androidx.compose.ui.platform.LocalContext
+import androidx.compose.ui.text.style.TextAlign
+import androidx.lifecycle.LifecycleOwner
+import androidx.lifecycle.lifecycleScope
+import com.android.settings.R
+import com.android.settings.core.SubSettingLauncher
+import com.android.settings.wifi.ConfigureWifiSettings
+import com.android.settingslib.spa.SpaBaseDialogActivity
+import com.android.settingslib.spa.widget.dialog.AlertDialogButton
+import com.android.settingslib.spa.widget.dialog.SettingsAlertDialogWithIcon
+import kotlin.coroutines.resume
+import kotlinx.coroutines.Dispatchers
+import kotlinx.coroutines.asExecutor
+import kotlinx.coroutines.launch
+import kotlinx.coroutines.suspendCancellableCoroutine
+import kotlinx.coroutines.withContext
+
+class WepNetworkDialogActivity : SpaBaseDialogActivity() {
+ @Composable
+ override fun Content() {
+ val context = LocalContext.current
+ val wifiManager = context.getSystemService(WifiManager::class.java)
+ SettingsAlertDialogWithIcon(
+ onDismissRequest = { finish() },
+ confirmButton = AlertDialogButton(
+ getString(R.string.wifi_settings_ssid_block_button_close)
+ ) { finish() },
+ dismissButton = AlertDialogButton(
+ getString(R.string.wifi_settings_wep_networks_button_allow)
+ ) {
+ SubSettingLauncher(context)
+ .setTitleText(context.getText(R.string.network_and_internet_preferences_title))
+ .setSourceMetricsCategory(SettingsEnums.CONFIGURE_WIFI)
+ .setDestination(ConfigureWifiSettings::class.java.getName())
+ .launch()
+ finish()
+ },
+ title = String.format(
+ getString(R.string.wifi_settings_wep_networks_blocked_title),
+ intent.getStringExtra(SSID) ?: SSID
+ ),
+ text = {
+ Text(
+ if (wifiManager?.isWepSupported == false)
+ getString(R.string.wifi_settings_wep_networks_summary_toggle_off)
+ else getString(R.string.wifi_settings_wep_networks_summary_blocked_by_carrier),
+ modifier = Modifier.fillMaxWidth(),
+ textAlign = TextAlign.Center
+ )
+ })
+ }
+
+ companion object {
+ @JvmStatic
+ fun checkWepAllowed(
+ context: Context,
+ lifecycleOwner: LifecycleOwner,
+ ssid: String,
+ onAllowed: () -> Unit,
+ ) {
+ lifecycleOwner.lifecycleScope.launch {
+ val wifiManager = context.getSystemService(WifiManager::class.java) ?: return@launch
+ if (wifiManager.queryWepAllowed()) {
+ onAllowed()
+ } else {
+ val intent = Intent(context, WepNetworkDialogActivity::class.java).apply {
+ putExtra(SSID, ssid)
+ }
+ context.startActivity(intent)
+ }
+ }
+ }
+
+ private suspend fun WifiManager.queryWepAllowed(): Boolean =
+ withContext(Dispatchers.Default) {
+ suspendCancellableCoroutine { continuation ->
+ queryWepAllowed(Dispatchers.Default.asExecutor()) {
+ continuation.resume(it)
+ }
+ }
+ }
+
+ const val SSID = "ssid"
+ }
+}
\ No newline at end of file