Loading AndroidManifest.xml +6 −0 Original line number Original line Diff line number Diff line Loading @@ -5056,6 +5056,12 @@ android:authorities="${applicationId}.androidx-startup" android:authorities="${applicationId}.androidx-startup" tools:node="remove" /> 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. --> <!-- This is the longest AndroidManifest.xml ever. --> </application> </application> </manifest> </manifest> src/com/android/settings/network/NetworkProviderSettings.java +14 −2 Original line number Original line Diff line number Diff line Loading @@ -89,6 +89,7 @@ import com.android.settingslib.widget.FooterPreference; import com.android.settingslib.widget.LayoutPreference; import com.android.settingslib.widget.LayoutPreference; import com.android.settingslib.wifi.WifiEnterpriseRestrictionUtils; import com.android.settingslib.wifi.WifiEnterpriseRestrictionUtils; import com.android.settingslib.wifi.WifiSavedConfigUtils; import com.android.settingslib.wifi.WifiSavedConfigUtils; import com.android.wifi.flags.Flags; import com.android.wifitrackerlib.WifiEntry; import com.android.wifitrackerlib.WifiEntry; import com.android.wifitrackerlib.WifiEntry.ConnectCallback; import com.android.wifitrackerlib.WifiEntry.ConnectCallback; import com.android.wifitrackerlib.WifiPickerTracker; import com.android.wifitrackerlib.WifiPickerTracker; Loading Loading @@ -1257,8 +1258,19 @@ public class NetworkProviderSettings extends RestrictedSettingsFragment // If it's an unsaved secure WifiEntry, it will callback // If it's an unsaved secure WifiEntry, it will callback // ConnectCallback#onConnectResult with ConnectCallback#CONNECT_STATUS_FAILURE_NO_CONFIG // ConnectCallback#onConnectResult with ConnectCallback#CONNECT_STATUS_FAILURE_NO_CONFIG wifiEntry.connect(new WifiEntryConnectCallback(wifiEntry, editIfNoConfig, WifiEntryConnectCallback callback = fullScreenEdit)); 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 { private class WifiConnectActionListener implements WifiManager.ActionListener { Loading src/com/android/settings/network/WepNetworkDialogActivity.kt 0 → 100644 +111 −0 Original line number Original line Diff line number Diff line /* * 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 Loading
AndroidManifest.xml +6 −0 Original line number Original line Diff line number Diff line Loading @@ -5056,6 +5056,12 @@ android:authorities="${applicationId}.androidx-startup" android:authorities="${applicationId}.androidx-startup" tools:node="remove" /> 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. --> <!-- This is the longest AndroidManifest.xml ever. --> </application> </application> </manifest> </manifest>
src/com/android/settings/network/NetworkProviderSettings.java +14 −2 Original line number Original line Diff line number Diff line Loading @@ -89,6 +89,7 @@ import com.android.settingslib.widget.FooterPreference; import com.android.settingslib.widget.LayoutPreference; import com.android.settingslib.widget.LayoutPreference; import com.android.settingslib.wifi.WifiEnterpriseRestrictionUtils; import com.android.settingslib.wifi.WifiEnterpriseRestrictionUtils; import com.android.settingslib.wifi.WifiSavedConfigUtils; import com.android.settingslib.wifi.WifiSavedConfigUtils; import com.android.wifi.flags.Flags; import com.android.wifitrackerlib.WifiEntry; import com.android.wifitrackerlib.WifiEntry; import com.android.wifitrackerlib.WifiEntry.ConnectCallback; import com.android.wifitrackerlib.WifiEntry.ConnectCallback; import com.android.wifitrackerlib.WifiPickerTracker; import com.android.wifitrackerlib.WifiPickerTracker; Loading Loading @@ -1257,8 +1258,19 @@ public class NetworkProviderSettings extends RestrictedSettingsFragment // If it's an unsaved secure WifiEntry, it will callback // If it's an unsaved secure WifiEntry, it will callback // ConnectCallback#onConnectResult with ConnectCallback#CONNECT_STATUS_FAILURE_NO_CONFIG // ConnectCallback#onConnectResult with ConnectCallback#CONNECT_STATUS_FAILURE_NO_CONFIG wifiEntry.connect(new WifiEntryConnectCallback(wifiEntry, editIfNoConfig, WifiEntryConnectCallback callback = fullScreenEdit)); 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 { private class WifiConnectActionListener implements WifiManager.ActionListener { Loading
src/com/android/settings/network/WepNetworkDialogActivity.kt 0 → 100644 +111 −0 Original line number Original line Diff line number Diff line /* * 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