Add [ssid] is blocked for wep network

Test: Visual Test
Fix: 320829123
Change-Id: Ia742e8b3e622c4c44a69daca20ca64edc6f9f826
This commit is contained in:
Charlotte Lu
2024-01-18 12:59:13 +08:00
parent 59d67c3dc2
commit a38b151118
3 changed files with 131 additions and 2 deletions

View File

@@ -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>

View File

@@ -89,6 +89,7 @@ import com.android.settingslib.widget.FooterPreference;
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 @@ public class NetworkProviderSettings extends RestrictedSettingsFragment
// 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 {

View File

@@ -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"
}
}