Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit a38b1511 authored by Charlotte Lu's avatar Charlotte Lu
Browse files

Add [ssid] is blocked for wep network

Test: Visual Test
Fix: 320829123
Change-Id: Ia742e8b3e622c4c44a69daca20ca64edc6f9f826
parent 59d67c3d
Loading
Loading
Loading
Loading
+6 −0
Original line number Original line Diff line number Diff line
@@ -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>
+14 −2
Original line number Original line Diff line number Diff line
@@ -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;
@@ -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 {
+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