summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--OsuLogin/Android.bp1
-rw-r--r--WifiDialog/Android.bp1
-rw-r--r--WifiDialog/src/com/android/wifi/dialog/WifiDialogActivity.java78
-rw-r--r--service/ServiceWifiResources/Android.bp1
-rw-r--r--service/ServiceWifiResources/res/values-af/strings.xml6
-rw-r--r--service/ServiceWifiResources/res/values-ar/strings.xml6
-rw-r--r--service/ServiceWifiResources/res/values-as/strings.xml6
-rw-r--r--service/ServiceWifiResources/res/values-az/strings.xml6
-rw-r--r--service/ServiceWifiResources/res/values-b+sr+Latn/strings.xml6
-rw-r--r--service/ServiceWifiResources/res/values-be/strings.xml6
-rw-r--r--service/ServiceWifiResources/res/values-bg/strings.xml6
-rw-r--r--service/ServiceWifiResources/res/values-bn/strings.xml6
-rw-r--r--service/ServiceWifiResources/res/values-bs/strings.xml6
-rw-r--r--service/ServiceWifiResources/res/values-ca/strings.xml6
-rw-r--r--service/ServiceWifiResources/res/values-cs/strings.xml6
-rw-r--r--service/ServiceWifiResources/res/values-da/strings.xml6
-rw-r--r--service/ServiceWifiResources/res/values-de/strings.xml6
-rw-r--r--service/ServiceWifiResources/res/values-el/strings.xml6
-rw-r--r--service/ServiceWifiResources/res/values-en-rAU/strings.xml6
-rw-r--r--service/ServiceWifiResources/res/values-en-rCA/strings.xml6
-rw-r--r--service/ServiceWifiResources/res/values-en-rGB/strings.xml6
-rw-r--r--service/ServiceWifiResources/res/values-en-rIN/strings.xml6
-rw-r--r--service/ServiceWifiResources/res/values-en-rXC/strings.xml6
-rw-r--r--service/ServiceWifiResources/res/values-es-rUS/strings.xml6
-rw-r--r--service/ServiceWifiResources/res/values-es/strings.xml6
-rw-r--r--service/ServiceWifiResources/res/values-et/strings.xml6
-rw-r--r--service/ServiceWifiResources/res/values-eu/strings.xml6
-rw-r--r--service/ServiceWifiResources/res/values-fa/strings.xml6
-rw-r--r--service/ServiceWifiResources/res/values-fi/strings.xml6
-rw-r--r--service/ServiceWifiResources/res/values-fr-rCA/strings.xml6
-rw-r--r--service/ServiceWifiResources/res/values-fr/strings.xml6
-rw-r--r--service/ServiceWifiResources/res/values-gl/strings.xml6
-rw-r--r--service/ServiceWifiResources/res/values-gu/strings.xml6
-rw-r--r--service/ServiceWifiResources/res/values-hi/strings.xml6
-rw-r--r--service/ServiceWifiResources/res/values-hr/strings.xml6
-rw-r--r--service/ServiceWifiResources/res/values-hu/strings.xml6
-rw-r--r--service/ServiceWifiResources/res/values-hy/strings.xml6
-rw-r--r--service/ServiceWifiResources/res/values-in/strings.xml6
-rw-r--r--service/ServiceWifiResources/res/values-is/strings.xml6
-rw-r--r--service/ServiceWifiResources/res/values-it/strings.xml6
-rw-r--r--service/ServiceWifiResources/res/values-iw/strings.xml6
-rw-r--r--service/ServiceWifiResources/res/values-ja/strings.xml6
-rw-r--r--service/ServiceWifiResources/res/values-ka/strings.xml6
-rw-r--r--service/ServiceWifiResources/res/values-kk/strings.xml6
-rw-r--r--service/ServiceWifiResources/res/values-km/strings.xml6
-rw-r--r--service/ServiceWifiResources/res/values-kn/strings.xml6
-rw-r--r--service/ServiceWifiResources/res/values-ko/strings.xml6
-rw-r--r--service/ServiceWifiResources/res/values-ky/strings.xml6
-rw-r--r--service/ServiceWifiResources/res/values-lo/strings.xml6
-rw-r--r--service/ServiceWifiResources/res/values-lt/strings.xml6
-rw-r--r--service/ServiceWifiResources/res/values-lv/strings.xml6
-rw-r--r--service/ServiceWifiResources/res/values-mk/strings.xml6
-rw-r--r--service/ServiceWifiResources/res/values-ml/strings.xml6
-rw-r--r--service/ServiceWifiResources/res/values-mn/strings.xml6
-rw-r--r--service/ServiceWifiResources/res/values-mr/strings.xml6
-rw-r--r--service/ServiceWifiResources/res/values-ms/strings.xml6
-rw-r--r--service/ServiceWifiResources/res/values-my/strings.xml6
-rw-r--r--service/ServiceWifiResources/res/values-nb/strings.xml6
-rw-r--r--service/ServiceWifiResources/res/values-ne/strings.xml6
-rw-r--r--service/ServiceWifiResources/res/values-nl/strings.xml6
-rw-r--r--service/ServiceWifiResources/res/values-or/strings.xml6
-rw-r--r--service/ServiceWifiResources/res/values-pa/strings.xml6
-rw-r--r--service/ServiceWifiResources/res/values-pl/strings.xml6
-rw-r--r--service/ServiceWifiResources/res/values-pt-rBR/strings.xml6
-rw-r--r--service/ServiceWifiResources/res/values-pt-rPT/strings.xml6
-rw-r--r--service/ServiceWifiResources/res/values-pt/strings.xml6
-rw-r--r--service/ServiceWifiResources/res/values-ro/strings.xml6
-rw-r--r--service/ServiceWifiResources/res/values-ru/strings.xml6
-rw-r--r--service/ServiceWifiResources/res/values-si/strings.xml6
-rw-r--r--service/ServiceWifiResources/res/values-sk/strings.xml6
-rw-r--r--service/ServiceWifiResources/res/values-sl/strings.xml6
-rw-r--r--service/ServiceWifiResources/res/values-sq/strings.xml6
-rw-r--r--service/ServiceWifiResources/res/values-sr/strings.xml6
-rw-r--r--service/ServiceWifiResources/res/values-sv/strings.xml6
-rw-r--r--service/ServiceWifiResources/res/values-sw/strings.xml6
-rw-r--r--service/ServiceWifiResources/res/values-ta/strings.xml6
-rw-r--r--service/ServiceWifiResources/res/values-te/strings.xml6
-rw-r--r--service/ServiceWifiResources/res/values-th/strings.xml6
-rw-r--r--service/ServiceWifiResources/res/values-tl/strings.xml6
-rw-r--r--service/ServiceWifiResources/res/values-tr/strings.xml6
-rw-r--r--service/ServiceWifiResources/res/values-uk/strings.xml6
-rw-r--r--service/ServiceWifiResources/res/values-ur/strings.xml6
-rw-r--r--service/ServiceWifiResources/res/values-uz/strings.xml6
-rw-r--r--service/ServiceWifiResources/res/values-vi/strings.xml6
-rw-r--r--service/ServiceWifiResources/res/values-zh-rCN/strings.xml6
-rw-r--r--service/ServiceWifiResources/res/values-zh-rHK/strings.xml6
-rw-r--r--service/ServiceWifiResources/res/values-zh-rTW/strings.xml6
-rw-r--r--service/ServiceWifiResources/res/values-zu/strings.xml6
-rw-r--r--service/java/com/android/server/wifi/ActiveModeWarden.java26
-rw-r--r--service/java/com/android/server/wifi/ClientMode.java6
-rw-r--r--service/java/com/android/server/wifi/ClientModeDefaults.java2
-rw-r--r--service/java/com/android/server/wifi/ClientModeImpl.java43
-rw-r--r--service/java/com/android/server/wifi/ConcreteClientModeManager.java57
-rw-r--r--service/java/com/android/server/wifi/HalDeviceManager.java121
-rw-r--r--service/java/com/android/server/wifi/InterfaceConflictManager.java94
-rw-r--r--service/java/com/android/server/wifi/SupplicantStaIfaceHalHidlImpl.java36
-rw-r--r--service/java/com/android/server/wifi/WifiDataStall.java4
-rw-r--r--service/java/com/android/server/wifi/WifiDialogManager.java324
-rw-r--r--service/java/com/android/server/wifi/WifiInjector.java2
-rw-r--r--service/java/com/android/server/wifi/WifiNetworkFactory.java32
-rw-r--r--service/java/com/android/server/wifi/WifiServiceImpl.java2
-rw-r--r--service/java/com/android/server/wifi/WifiShellCommand.java2
-rw-r--r--service/java/com/android/server/wifi/util/WorkSourceHelper.java146
-rw-r--r--service/tests/wifitests/src/com/android/server/wifi/ActiveModeWardenTest.java15
-rw-r--r--service/tests/wifitests/src/com/android/server/wifi/ClientModeImplTest.java82
-rw-r--r--service/tests/wifitests/src/com/android/server/wifi/ConcreteClientModeManagerTest.java6
-rw-r--r--service/tests/wifitests/src/com/android/server/wifi/HalDeviceManagerTest.java378
-rw-r--r--service/tests/wifitests/src/com/android/server/wifi/InterfaceConflictManagerTest.java215
-rw-r--r--service/tests/wifitests/src/com/android/server/wifi/SupplicantStaIfaceHalHidlImplTest.java19
-rw-r--r--service/tests/wifitests/src/com/android/server/wifi/WifiDataStallTest.java10
-rw-r--r--service/tests/wifitests/src/com/android/server/wifi/WifiNetworkFactoryTest.java62
-rw-r--r--service/tests/wifitests/src/com/android/server/wifi/WifiServiceImplTest.java24
-rw-r--r--service/tests/wifitests/src/com/android/server/wifi/WifiShellCommandTest.java4
-rw-r--r--service/tests/wifitests/src/com/android/server/wifi/util/WorkSourceHelperTest.java114
114 files changed, 1193 insertions, 1218 deletions
diff --git a/OsuLogin/Android.bp b/OsuLogin/Android.bp
index 1044873b34..864883f443 100644
--- a/OsuLogin/Android.bp
+++ b/OsuLogin/Android.bp
@@ -4,6 +4,7 @@ package {
android_app {
name: "OsuLogin",
+ package_name: "com.android.hotspot2.osulogin",
defaults: ["wifi-module-sdk-version-defaults"],
static_libs: ["androidx.legacy_legacy-support-v4"],
resource_dirs: ["res"],
diff --git a/WifiDialog/Android.bp b/WifiDialog/Android.bp
index e9264ac61e..8a9de613cf 100644
--- a/WifiDialog/Android.bp
+++ b/WifiDialog/Android.bp
@@ -18,6 +18,7 @@ package {
android_app {
name: "WifiDialog",
+ package_name: "com.android.wifi.dialog",
defaults: ["wifi-module-sdk-version-defaults"],
certificate: ":com.android.wifi.dialog.certificate",
diff --git a/WifiDialog/src/com/android/wifi/dialog/WifiDialogActivity.java b/WifiDialog/src/com/android/wifi/dialog/WifiDialogActivity.java
index 7db2c83c81..48b92639e4 100644
--- a/WifiDialog/src/com/android/wifi/dialog/WifiDialogActivity.java
+++ b/WifiDialog/src/com/android/wifi/dialog/WifiDialogActivity.java
@@ -294,7 +294,7 @@ public class WifiDialogActivity extends Activity {
* Creates and shows a dialog for the given dialogId and Intent.
* Returns {@code true} if the dialog was successfully created, {@code false} otherwise.
*/
- private @Nullable boolean createAndShowDialogForIntent(int dialogId, @NonNull Intent intent) {
+ private boolean createAndShowDialogForIntent(int dialogId, @NonNull Intent intent) {
String action = intent.getAction();
if (!WifiManager.ACTION_LAUNCH_DIALOG.equals(action)) {
return false;
@@ -334,9 +334,6 @@ public class WifiDialogActivity extends Activity {
}
return false;
}
- if (dialog == null) {
- return false;
- }
dialog.setOnDismissListener((dialogDismiss) -> {
if (mIsVerboseLoggingEnabled) {
Log.v(TAG, "Dialog id=" + dialogId
@@ -425,9 +422,9 @@ public class WifiDialogActivity extends Activity {
}
/**
- * Returns a simple dialog for the given Intent, or {@code null} if no dialog could be created.
+ * Returns a simple dialog for the given Intent.
*/
- private @Nullable AlertDialog createSimpleDialog(
+ private @NonNull AlertDialog createSimpleDialog(
int dialogId,
@Nullable String title,
@Nullable String message,
@@ -440,10 +437,18 @@ public class WifiDialogActivity extends Activity {
SpannableString spannableMessage = null;
if (message != null) {
spannableMessage = new SpannableString(message);
- if (messageUrlStart >= 0 && messageUrlEnd <= message.length()
- && messageUrlStart < messageUrlEnd) {
- spannableMessage.setSpan(new URLSpan(messageUrl), messageUrlStart, messageUrlEnd,
- Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
+ if (messageUrl != null) {
+ if (messageUrlStart < 0) {
+ Log.w(TAG, "Span start cannot be less than 0!");
+ } else if (messageUrlEnd > message.length()) {
+ Log.w(TAG, "Span end index " + messageUrlEnd
+ + " cannot be greater than message length " + message.length() + "!");
+ } else if (messageUrlStart > messageUrlEnd) {
+ Log.w(TAG, "Span start index cannot be greater than end index!");
+ } else {
+ spannableMessage.setSpan(new URLSpan(messageUrl), messageUrlStart,
+ messageUrlEnd, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
+ }
}
}
AlertDialog dialog = new AlertDialog.Builder(
@@ -497,27 +502,21 @@ public class WifiDialogActivity extends Activity {
}
/**
- * Returns a P2P Invitation Sent Dialog for the given Intent, or {@code null} if no Dialog
- * could be created.
+ * Returns a P2P Invitation Sent Dialog for the given Intent.
*/
- private @Nullable AlertDialog createP2pInvitationSentDialog(
+ private @NonNull AlertDialog createP2pInvitationSentDialog(
final int dialogId,
- final @NonNull String deviceName,
- @Nullable String displayPin) {
- if (TextUtils.isEmpty(deviceName)) {
- if (mIsVerboseLoggingEnabled) {
- Log.v(TAG, "Could not create P2P Invitation Sent dialog with null or empty"
- + " device name."
- + " id=" + dialogId
- + " deviceName=" + deviceName
- + " displayPin=" + displayPin);
- }
- return null;
- }
-
+ @Nullable final String deviceName,
+ @Nullable final String displayPin) {
final View textEntryView = LayoutInflater.from(this)
.inflate(getLayoutId("wifi_p2p_dialog"), null);
ViewGroup group = textEntryView.findViewById(getViewId("info"));
+ if (TextUtils.isEmpty(deviceName)) {
+ Log.w(TAG, "P2P Invitation Sent dialog device name is null or empty."
+ + " id=" + dialogId
+ + " deviceName=" + deviceName
+ + " displayPin=" + displayPin);
+ }
addRowToP2pDialog(group, getStringId("wifi_p2p_to_message"), deviceName);
if (displayPin != null) {
@@ -546,29 +545,22 @@ public class WifiDialogActivity extends Activity {
}
/**
- * Returns a P2P Invitation Received Dialog for the given Intent, or {@code null} if no Dialog
- * could be created.
+ * Returns a P2P Invitation Received Dialog for the given Intent.
*/
- private @Nullable AlertDialog createP2pInvitationReceivedDialog(
+ private @NonNull AlertDialog createP2pInvitationReceivedDialog(
final int dialogId,
- final @NonNull String deviceName,
+ @Nullable final String deviceName,
final boolean isPinRequested,
- @Nullable String displayPin) {
- if (TextUtils.isEmpty(deviceName)) {
- if (mIsVerboseLoggingEnabled) {
- Log.v(TAG, "Could not create P2P Invitation Received dialog with null or empty"
- + " device name."
- + " id=" + dialogId
- + " deviceName=" + deviceName
- + " isPinRequested=" + isPinRequested
- + " displayPin=" + displayPin);
- }
- return null;
- }
-
+ @Nullable final String displayPin) {
final View textEntryView = LayoutInflater.from(this)
.inflate(getLayoutId("wifi_p2p_dialog"), null);
ViewGroup group = textEntryView.findViewById(getViewId("info"));
+ if (TextUtils.isEmpty(deviceName)) {
+ Log.w(TAG, "P2P Invitation Received dialog device name is null or empty."
+ + " id=" + dialogId
+ + " deviceName=" + deviceName
+ + " displayPin=" + displayPin);
+ }
addRowToP2pDialog(group, getStringId("wifi_p2p_from_message"), deviceName);
final EditText pinEditText;
diff --git a/service/ServiceWifiResources/Android.bp b/service/ServiceWifiResources/Android.bp
index d17a17082f..3bd98198c4 100644
--- a/service/ServiceWifiResources/Android.bp
+++ b/service/ServiceWifiResources/Android.bp
@@ -21,6 +21,7 @@ package {
android_app {
name: "ServiceWifiResources",
+ package_name: "com.android.wifi.resources",
defaults: ["wifi-service-common"],
resource_dirs: [
"res",
diff --git a/service/ServiceWifiResources/res/values-af/strings.xml b/service/ServiceWifiResources/res/values-af/strings.xml
index 5d1f8d355d..a58881e0f9 100644
--- a/service/ServiceWifiResources/res/values-af/strings.xml
+++ b/service/ServiceWifiResources/res/values-af/strings.xml
@@ -164,9 +164,7 @@
<string name="wifi_network_disabled_by_admin_message" msgid="7830360441333155462">"<xliff:g id="SSID">%1$s</xliff:g> is deur jou administrateur gedeaktiveer."</string>
<string name="wifi_network_disabled_by_admin_button" msgid="3350310756265122689">"Maak toe"</string>
<string name="wifi_enabled_apm_first_time_title" msgid="4814302384637588804">"Wi‑fi is aan in vliegtuigmodus"</string>
- <!-- no translation found for wifi_enabled_apm_first_time_message (5443101896157496353) -->
- <skip />
+ <string name="wifi_enabled_apm_first_time_message" msgid="5443101896157496353">"As jy wi-fi aangeskakel hou, sal jou foon onthou om dit aan te hou wanneer jy weer in vliegtuigmodus is"</string>
<string name="apm_enabled_first_time_title" msgid="2534167413190488009">"Wi‑fi bly aan"</string>
- <!-- no translation found for apm_enabled_first_time_message (4753441005253327841) -->
- <skip />
+ <string name="apm_enabled_first_time_message" msgid="4753441005253327841">"Jou foon onthou om wi‑fi aan te hou in vliegtuigmodus. Skakel wi-fi af as jy nie wil hê dit moet aan bly nie."</string>
</resources>
diff --git a/service/ServiceWifiResources/res/values-ar/strings.xml b/service/ServiceWifiResources/res/values-ar/strings.xml
index 213e287182..93e26c2ecc 100644
--- a/service/ServiceWifiResources/res/values-ar/strings.xml
+++ b/service/ServiceWifiResources/res/values-ar/strings.xml
@@ -164,9 +164,7 @@
<string name="wifi_network_disabled_by_admin_message" msgid="7830360441333155462">"تم إيقاف معرّف <xliff:g id="SSID">%1$s</xliff:g> من قِبل المشرف."</string>
<string name="wifi_network_disabled_by_admin_button" msgid="3350310756265122689">"إغلاق"</string>
<string name="wifi_enabled_apm_first_time_title" msgid="4814302384637588804">"‏شبكة Wi‑Fi مفعَّلة في \"وضع الطيران\""</string>
- <!-- no translation found for wifi_enabled_apm_first_time_message (5443101896157496353) -->
- <skip />
+ <string name="wifi_enabled_apm_first_time_message" msgid="5443101896157496353">"‏إذا واصلت تفعيل شبكة Wi‑Fi، سيتذكر هاتفك إبقاءها مفعَّلة في المرة القادمة التي تفعِّل فيها \"وضع الطيران\"."</string>
<string name="apm_enabled_first_time_title" msgid="2534167413190488009">"‏تظل شبكة Wi-Fi مفعّلة"</string>
- <!-- no translation found for apm_enabled_first_time_message (4753441005253327841) -->
- <skip />
+ <string name="apm_enabled_first_time_message" msgid="4753441005253327841">"‏يتذكر هاتفك إبقاء شبكة Wi‑Fi مفعَّلة في \"وضع الطيران\". يمكنك إيقاف شبكة Wi‑Fi إذا لم تكن تريد مواصلة تفعيلها."</string>
</resources>
diff --git a/service/ServiceWifiResources/res/values-as/strings.xml b/service/ServiceWifiResources/res/values-as/strings.xml
index 6cca27a589..f71156dd47 100644
--- a/service/ServiceWifiResources/res/values-as/strings.xml
+++ b/service/ServiceWifiResources/res/values-as/strings.xml
@@ -164,9 +164,7 @@
<string name="wifi_network_disabled_by_admin_message" msgid="7830360441333155462">"আপোনাৰ প্ৰশাসকে <xliff:g id="SSID">%1$s</xliff:g> অক্ষম কৰিছে।"</string>
<string name="wifi_network_disabled_by_admin_button" msgid="3350310756265122689">"বন্ধ কৰক"</string>
<string name="wifi_enabled_apm_first_time_title" msgid="4814302384637588804">"এয়াৰপ্লেন ম’ডত ৱাই‐ফাই অন হৈ থাকিব"</string>
- <!-- no translation found for wifi_enabled_apm_first_time_message (5443101896157496353) -->
- <skip />
+ <string name="wifi_enabled_apm_first_time_message" msgid="5443101896157496353">"আপুনি যদি ৱাই-ফাই অন কৰি ৰাখে, পৰৱৰ্তী সময়ত আপুনি এয়াৰপ্লেন ম’ড ব্যৱহাৰ কৰিলে আপোনাৰ ফ’নটোৱে এয়া অন কৰি ৰাখিবলৈ মনত ৰাখিব"</string>
<string name="apm_enabled_first_time_title" msgid="2534167413190488009">"Wi‑Fi অন হৈ থাকিব"</string>
- <!-- no translation found for apm_enabled_first_time_message (4753441005253327841) -->
- <skip />
+ <string name="apm_enabled_first_time_message" msgid="4753441005253327841">"আপোনাৰ ফ’নটোৱে এয়াৰপ্লেন ম’ডত ৱাই-ফাই অন ৰাখিবলৈ মনত ৰাখে। আপুনি যদি ৱাই-ফাই অন হৈ থকাটো নিবিচাৰে, তেন্তে ইয়াক অফ কৰক।"</string>
</resources>
diff --git a/service/ServiceWifiResources/res/values-az/strings.xml b/service/ServiceWifiResources/res/values-az/strings.xml
index 3938db2f13..8459318e09 100644
--- a/service/ServiceWifiResources/res/values-az/strings.xml
+++ b/service/ServiceWifiResources/res/values-az/strings.xml
@@ -164,9 +164,7 @@
<string name="wifi_network_disabled_by_admin_message" msgid="7830360441333155462">"<xliff:g id="SSID">%1$s</xliff:g> administratorunuz tərəfindən deaktiv edilib."</string>
<string name="wifi_network_disabled_by_admin_button" msgid="3350310756265122689">"Bağlayın"</string>
<string name="wifi_enabled_apm_first_time_title" msgid="4814302384637588804">"Təyyarə rejimində Wi‑Fi aktiv qalsın"</string>
- <!-- no translation found for wifi_enabled_apm_first_time_message (5443101896157496353) -->
- <skip />
+ <string name="wifi_enabled_apm_first_time_message" msgid="5443101896157496353">"Wi‑Fi\'ı aktiv saxlasanız, növbəti dəfə təyyarə rejimində olduqda telefonunuz onu aktiv saxlayacaq"</string>
<string name="apm_enabled_first_time_title" msgid="2534167413190488009">"Wi‑Fi aktiv qalacaq"</string>
- <!-- no translation found for apm_enabled_first_time_message (4753441005253327841) -->
- <skip />
+ <string name="apm_enabled_first_time_message" msgid="4753441005253327841">"Telefonunuz təyyarə rejimində Wi‑Fi\'ı aktiv saxlayacaq. Aktiv qalmasını istəmirsinizsə, Wi‑Fi\'ı deaktiv edin."</string>
</resources>
diff --git a/service/ServiceWifiResources/res/values-b+sr+Latn/strings.xml b/service/ServiceWifiResources/res/values-b+sr+Latn/strings.xml
index e77f0c579a..795e931116 100644
--- a/service/ServiceWifiResources/res/values-b+sr+Latn/strings.xml
+++ b/service/ServiceWifiResources/res/values-b+sr+Latn/strings.xml
@@ -164,9 +164,7 @@
<string name="wifi_network_disabled_by_admin_message" msgid="7830360441333155462">"Administrator je onemogućio <xliff:g id="SSID">%1$s</xliff:g>."</string>
<string name="wifi_network_disabled_by_admin_button" msgid="3350310756265122689">"Zatvori"</string>
<string name="wifi_enabled_apm_first_time_title" msgid="4814302384637588804">"WiFi je uključen u režimu rada u avionu"</string>
- <!-- no translation found for wifi_enabled_apm_first_time_message (5443101896157496353) -->
- <skip />
+ <string name="wifi_enabled_apm_first_time_message" msgid="5443101896157496353">"Ako odlučite da ne isključujete WiFi, telefon će zapamtiti da ga ne isključuje sledeći put kada budete u režimu rada u avionu"</string>
<string name="apm_enabled_first_time_title" msgid="2534167413190488009">"WiFi ostaje uključen"</string>
- <!-- no translation found for apm_enabled_first_time_message (4753441005253327841) -->
- <skip />
+ <string name="apm_enabled_first_time_message" msgid="4753441005253327841">"Telefon pamti da ne treba da isključuje WiFi u režimu rada u avionu. Isključite WiFi ako ne želite da ostane uključen."</string>
</resources>
diff --git a/service/ServiceWifiResources/res/values-be/strings.xml b/service/ServiceWifiResources/res/values-be/strings.xml
index 04758ca32f..1db0a71c22 100644
--- a/service/ServiceWifiResources/res/values-be/strings.xml
+++ b/service/ServiceWifiResources/res/values-be/strings.xml
@@ -164,9 +164,7 @@
<string name="wifi_network_disabled_by_admin_message" msgid="7830360441333155462">"Сетка \"<xliff:g id="SSID">%1$s</xliff:g>\" адключана вашым адміністратарам."</string>
<string name="wifi_network_disabled_by_admin_button" msgid="3350310756265122689">"Закрыць"</string>
<string name="wifi_enabled_apm_first_time_title" msgid="4814302384637588804">"У рэжыме палёту сетка Wi‑Fi застанецца ўключанай"</string>
- <!-- no translation found for wifi_enabled_apm_first_time_message (5443101896157496353) -->
- <skip />
+ <string name="wifi_enabled_apm_first_time_message" msgid="5443101896157496353">"Калі вы не выключыце сетку Wi‑Fi, падчас наступнага пераходу ў рэжым палёту тэлефон будзе захоўваць яе ўключанай"</string>
<string name="apm_enabled_first_time_title" msgid="2534167413190488009">"Сетка Wi‑Fi застаецца ўключанай"</string>
- <!-- no translation found for apm_enabled_first_time_message (4753441005253327841) -->
- <skip />
+ <string name="apm_enabled_first_time_message" msgid="4753441005253327841">"На тэлефоне ў рэжыме палёту сетка Wi‑Fi будзе заставацца ўключанай, але вы можаце выключыць яе."</string>
</resources>
diff --git a/service/ServiceWifiResources/res/values-bg/strings.xml b/service/ServiceWifiResources/res/values-bg/strings.xml
index 020583b05a..9f0c8d8057 100644
--- a/service/ServiceWifiResources/res/values-bg/strings.xml
+++ b/service/ServiceWifiResources/res/values-bg/strings.xml
@@ -164,9 +164,7 @@
<string name="wifi_network_disabled_by_admin_message" msgid="7830360441333155462">"Функцията <xliff:g id="SSID">%1$s</xliff:g> е деактивирана от администратора ви."</string>
<string name="wifi_network_disabled_by_admin_button" msgid="3350310756265122689">"Затваряне"</string>
<string name="wifi_enabled_apm_first_time_title" msgid="4814302384637588804">"Включване на Wi‑Fi в самолетния режим"</string>
- <!-- no translation found for wifi_enabled_apm_first_time_message (5443101896157496353) -->
- <skip />
+ <string name="wifi_enabled_apm_first_time_message" msgid="5443101896157496353">"Ако не изключите функцията за Wi‑Fi, телефонът ви ще я остави активна следващия път, когато използвате самолетния режим"</string>
<string name="apm_enabled_first_time_title" msgid="2534167413190488009">"Wi‑Fi няма да се изключи"</string>
- <!-- no translation found for apm_enabled_first_time_message (4753441005253327841) -->
- <skip />
+ <string name="apm_enabled_first_time_message" msgid="4753441005253327841">"Функцията за Wi‑Fi ще бъде включена, докато телефонът ви е в самолетен режим. Ако не искате това, изключете я."</string>
</resources>
diff --git a/service/ServiceWifiResources/res/values-bn/strings.xml b/service/ServiceWifiResources/res/values-bn/strings.xml
index 0d23bf34ba..40d404f57a 100644
--- a/service/ServiceWifiResources/res/values-bn/strings.xml
+++ b/service/ServiceWifiResources/res/values-bn/strings.xml
@@ -164,9 +164,7 @@
<string name="wifi_network_disabled_by_admin_message" msgid="7830360441333155462">"আপনার অ্যাডমিনিস্ট্রেটর <xliff:g id="SSID">%1$s</xliff:g> বন্ধ করে দিয়েছেন।"</string>
<string name="wifi_network_disabled_by_admin_button" msgid="3350310756265122689">"বন্ধ করুন"</string>
<string name="wifi_enabled_apm_first_time_title" msgid="4814302384637588804">"\'বিমান মোড\'-এ ওয়াই-ফাই চালু থাকে"</string>
- <!-- no translation found for wifi_enabled_apm_first_time_message (5443101896157496353) -->
- <skip />
+ <string name="wifi_enabled_apm_first_time_message" msgid="5443101896157496353">"আপনি ওয়াই-ফাই চালু রাখলে, আপনি \'বিমান\' মোডে থাকলে পরবর্তী সময় আপনার ফোন এটি চালু রাখার জন্য মনে রাখবে"</string>
<string name="apm_enabled_first_time_title" msgid="2534167413190488009">"ওয়াই-ফাই চালু থাকে"</string>
- <!-- no translation found for apm_enabled_first_time_message (4753441005253327841) -->
- <skip />
+ <string name="apm_enabled_first_time_message" msgid="4753441005253327841">"\'বিমান মোড\'-এ থাকাকালীন আপনার ফোন ওয়াই-ফাই চালু রাখে। আপনি এটি চালু না রাখতে চাইলে ওয়াই-ফাই বন্ধ করুন।"</string>
</resources>
diff --git a/service/ServiceWifiResources/res/values-bs/strings.xml b/service/ServiceWifiResources/res/values-bs/strings.xml
index ac272e8b1b..a214af1acb 100644
--- a/service/ServiceWifiResources/res/values-bs/strings.xml
+++ b/service/ServiceWifiResources/res/values-bs/strings.xml
@@ -164,9 +164,7 @@
<string name="wifi_network_disabled_by_admin_message" msgid="7830360441333155462">"Administrator je onemogućio <xliff:g id="SSID">%1$s</xliff:g>."</string>
<string name="wifi_network_disabled_by_admin_button" msgid="3350310756265122689">"Zatvori"</string>
<string name="wifi_enabled_apm_first_time_title" msgid="4814302384637588804">"WiFi je uključen u načinu rada u avionu"</string>
- <!-- no translation found for wifi_enabled_apm_first_time_message (5443101896157496353) -->
- <skip />
+ <string name="wifi_enabled_apm_first_time_message" msgid="5443101896157496353">"Ako ostavite WiFi uključen, telefon će zapamtiti da ga ostavi uključenog sljedeći put kada budete u načinu rada u avionu"</string>
<string name="apm_enabled_first_time_title" msgid="2534167413190488009">"WiFi ostaje uključen"</string>
- <!-- no translation found for apm_enabled_first_time_message (4753441005253327841) -->
- <skip />
+ <string name="apm_enabled_first_time_message" msgid="4753441005253327841">"Telefon pamti da zadrži WiFi u načinu rada u avionu. Isključite WiFi ako ne želite da ostane uključen."</string>
</resources>
diff --git a/service/ServiceWifiResources/res/values-ca/strings.xml b/service/ServiceWifiResources/res/values-ca/strings.xml
index 0e45b307d1..9a08fd3d1c 100644
--- a/service/ServiceWifiResources/res/values-ca/strings.xml
+++ b/service/ServiceWifiResources/res/values-ca/strings.xml
@@ -164,9 +164,7 @@
<string name="wifi_network_disabled_by_admin_message" msgid="7830360441333155462">"L\'administrador ha desactivat <xliff:g id="SSID">%1$s</xliff:g>."</string>
<string name="wifi_network_disabled_by_admin_button" msgid="3350310756265122689">"Tanca"</string>
<string name="wifi_enabled_apm_first_time_title" msgid="4814302384637588804">"Wi‑Fi activada en mode d\'avió"</string>
- <!-- no translation found for wifi_enabled_apm_first_time_message (5443101896157496353) -->
- <skip />
+ <string name="wifi_enabled_apm_first_time_message" msgid="5443101896157496353">"Si tens activada la Wi‑Fi, el telèfon recordarà mantenir-la així la pròxima vegada que utilitzis el mode d\'avió"</string>
<string name="apm_enabled_first_time_title" msgid="2534167413190488009">"La Wi‑Fi es manté activada"</string>
- <!-- no translation found for apm_enabled_first_time_message (4753441005253327841) -->
- <skip />
+ <string name="apm_enabled_first_time_message" msgid="4753441005253327841">"El telèfon recorda mantenir la Wi‑Fi activada en mode d\'avió. Desactiva la Wi‑Fi si no vols que es quedi activada."</string>
</resources>
diff --git a/service/ServiceWifiResources/res/values-cs/strings.xml b/service/ServiceWifiResources/res/values-cs/strings.xml
index 895cbfc7a9..29e9096759 100644
--- a/service/ServiceWifiResources/res/values-cs/strings.xml
+++ b/service/ServiceWifiResources/res/values-cs/strings.xml
@@ -164,9 +164,7 @@
<string name="wifi_network_disabled_by_admin_message" msgid="7830360441333155462">"Funkce <xliff:g id="SSID">%1$s</xliff:g> byla deaktivována administrátorem."</string>
<string name="wifi_network_disabled_by_admin_button" msgid="3350310756265122689">"Zavřít"</string>
<string name="wifi_enabled_apm_first_time_title" msgid="4814302384637588804">"Zapnutá Wi-Fi v režimu Letadlo"</string>
- <!-- no translation found for wifi_enabled_apm_first_time_message (5443101896157496353) -->
- <skip />
+ <string name="wifi_enabled_apm_first_time_message" msgid="5443101896157496353">"Pokud Wi-Fi necháte zapnutou, telefon si zapamatuje, že ji má příště v režimu Letadlo ponechat zapnutou"</string>
<string name="apm_enabled_first_time_title" msgid="2534167413190488009">"Wi‑Fi zůstane zapnutá"</string>
- <!-- no translation found for apm_enabled_first_time_message (4753441005253327841) -->
- <skip />
+ <string name="apm_enabled_first_time_message" msgid="4753441005253327841">"Telefon si pamatuje, že má v režimu Letadlo ponechat zapnutou Wi-Fi. Pokud nechcete, aby Wi-Fi zůstala zapnutá, vypněte ji."</string>
</resources>
diff --git a/service/ServiceWifiResources/res/values-da/strings.xml b/service/ServiceWifiResources/res/values-da/strings.xml
index 570662b0af..72f67ce3b8 100644
--- a/service/ServiceWifiResources/res/values-da/strings.xml
+++ b/service/ServiceWifiResources/res/values-da/strings.xml
@@ -164,9 +164,7 @@
<string name="wifi_network_disabled_by_admin_message" msgid="7830360441333155462">"<xliff:g id="SSID">%1$s</xliff:g> er blevet deaktiveret af din administrator."</string>
<string name="wifi_network_disabled_by_admin_button" msgid="3350310756265122689">"Luk"</string>
<string name="wifi_enabled_apm_first_time_title" msgid="4814302384637588804">"Wi-Fi aktiveret i flytilstand"</string>
- <!-- no translation found for wifi_enabled_apm_first_time_message (5443101896157496353) -->
- <skip />
+ <string name="wifi_enabled_apm_first_time_message" msgid="5443101896157496353">"Hvis du holder Wi-Fi aktiveret, sørger din telefon for, at Wi-Fi forbliver aktiveret, næste gang du sætter den til flytilstand"</string>
<string name="apm_enabled_first_time_title" msgid="2534167413190488009">"Wi‑Fi forbliver aktiv"</string>
- <!-- no translation found for apm_enabled_first_time_message (4753441005253327841) -->
- <skip />
+ <string name="apm_enabled_first_time_message" msgid="4753441005253327841">"Din telefon holder Wi-Fi aktiveret i flytilstand. Deaktiver Wi-Fi, hvis du ikke vil have, at det forbliver aktiveret."</string>
</resources>
diff --git a/service/ServiceWifiResources/res/values-de/strings.xml b/service/ServiceWifiResources/res/values-de/strings.xml
index f98966269f..392f48fa13 100644
--- a/service/ServiceWifiResources/res/values-de/strings.xml
+++ b/service/ServiceWifiResources/res/values-de/strings.xml
@@ -164,9 +164,7 @@
<string name="wifi_network_disabled_by_admin_message" msgid="7830360441333155462">"Die Funktion „<xliff:g id="SSID">%1$s</xliff:g>“ wurde von deinem Administrator deaktiviert."</string>
<string name="wifi_network_disabled_by_admin_button" msgid="3350310756265122689">"Schließen"</string>
<string name="wifi_enabled_apm_first_time_title" msgid="4814302384637588804">"WLAN im Flugzeugmodus"</string>
- <!-- no translation found for wifi_enabled_apm_first_time_message (5443101896157496353) -->
- <skip />
+ <string name="wifi_enabled_apm_first_time_message" msgid="5443101896157496353">"Wenn das WLAN aktiviert bleibt, lässt es dein Smartphone eingeschaltet, wenn du das nächste Mal in den Flugmodus wechselst"</string>
<string name="apm_enabled_first_time_title" msgid="2534167413190488009">"WLAN bleibt eingeschaltet"</string>
- <!-- no translation found for apm_enabled_first_time_message (4753441005253327841) -->
- <skip />
+ <string name="apm_enabled_first_time_message" msgid="4753441005253327841">"Dein Smartphone lässt das WLAN im Flugmodus eingeschaltet. Schalte das WLAN aus, wenn du das nicht möchtest."</string>
</resources>
diff --git a/service/ServiceWifiResources/res/values-el/strings.xml b/service/ServiceWifiResources/res/values-el/strings.xml
index 6ff37212db..d0f897f445 100644
--- a/service/ServiceWifiResources/res/values-el/strings.xml
+++ b/service/ServiceWifiResources/res/values-el/strings.xml
@@ -164,9 +164,7 @@
<string name="wifi_network_disabled_by_admin_message" msgid="7830360441333155462">"Το <xliff:g id="SSID">%1$s</xliff:g> έχει απενεργοποιηθεί από τον διαχειριστή σας."</string>
<string name="wifi_network_disabled_by_admin_button" msgid="3350310756265122689">"Κλείσιμο"</string>
<string name="wifi_enabled_apm_first_time_title" msgid="4814302384637588804">"Wi‑Fi ενεργό σε λειτουργία πτήσης"</string>
- <!-- no translation found for wifi_enabled_apm_first_time_message (5443101896157496353) -->
- <skip />
+ <string name="wifi_enabled_apm_first_time_message" msgid="5443101896157496353">"Αν διατηρήσετε το Wi‑Fi ενεργοποιημένο, το τηλέφωνό σας θα θυμάται να το διατηρήσει ενεργοποιημένο την επόμενη φορά που θα βρεθεί σε λειτουργία πτήσης"</string>
<string name="apm_enabled_first_time_title" msgid="2534167413190488009">"Το Wi‑Fi παραμένει ενεργό"</string>
- <!-- no translation found for apm_enabled_first_time_message (4753441005253327841) -->
- <skip />
+ <string name="apm_enabled_first_time_message" msgid="4753441005253327841">"Το τηλέφωνο θυμάται να διατηρεί ενεργοποιημένο το Wi‑Fi σε λειτουργία πτήσης. Απενεργοποιήστε το Wi‑Fi, αν δεν επιθυμείτε να είναι ενεργοποιημένο."</string>
</resources>
diff --git a/service/ServiceWifiResources/res/values-en-rAU/strings.xml b/service/ServiceWifiResources/res/values-en-rAU/strings.xml
index 61a990664d..c5745af51a 100644
--- a/service/ServiceWifiResources/res/values-en-rAU/strings.xml
+++ b/service/ServiceWifiResources/res/values-en-rAU/strings.xml
@@ -164,9 +164,7 @@
<string name="wifi_network_disabled_by_admin_message" msgid="7830360441333155462">"<xliff:g id="SSID">%1$s</xliff:g> is disabled by your administrator."</string>
<string name="wifi_network_disabled_by_admin_button" msgid="3350310756265122689">"Close"</string>
<string name="wifi_enabled_apm_first_time_title" msgid="4814302384637588804">"Wi‑Fi on in aeroplane mode"</string>
- <!-- no translation found for wifi_enabled_apm_first_time_message (5443101896157496353) -->
- <skip />
+ <string name="wifi_enabled_apm_first_time_message" msgid="5443101896157496353">"If you keep Wi‑Fi on, your phone will remember to keep it on the next time that you\'re in aeroplane mode"</string>
<string name="apm_enabled_first_time_title" msgid="2534167413190488009">"Wi‑Fi stays on"</string>
- <!-- no translation found for apm_enabled_first_time_message (4753441005253327841) -->
- <skip />
+ <string name="apm_enabled_first_time_message" msgid="4753441005253327841">"Your phone remembers to keep Wi‑Fi on in aeroplane mode. Turn off Wi‑Fi if you don\'t want it to stay on."</string>
</resources>
diff --git a/service/ServiceWifiResources/res/values-en-rCA/strings.xml b/service/ServiceWifiResources/res/values-en-rCA/strings.xml
index 057cdc7453..794be91659 100644
--- a/service/ServiceWifiResources/res/values-en-rCA/strings.xml
+++ b/service/ServiceWifiResources/res/values-en-rCA/strings.xml
@@ -164,9 +164,7 @@
<string name="wifi_network_disabled_by_admin_message" msgid="7830360441333155462">"<xliff:g id="SSID">%1$s</xliff:g> is disabled by your administrator."</string>
<string name="wifi_network_disabled_by_admin_button" msgid="3350310756265122689">"Close"</string>
<string name="wifi_enabled_apm_first_time_title" msgid="4814302384637588804">"Wi‑Fi on in airplane mode"</string>
- <!-- no translation found for wifi_enabled_apm_first_time_message (5443101896157496353) -->
- <skip />
+ <string name="wifi_enabled_apm_first_time_message" msgid="5443101896157496353">"If you keep Wi‑Fi on, your phone will remember to keep it on the next time you\'re in airplane mode"</string>
<string name="apm_enabled_first_time_title" msgid="2534167413190488009">"Wi‑Fi stays on"</string>
- <!-- no translation found for apm_enabled_first_time_message (4753441005253327841) -->
- <skip />
+ <string name="apm_enabled_first_time_message" msgid="4753441005253327841">"Your phone remembers to keep Wi‑Fi on in airplane mode. Turn off Wi‑Fi if you don\'t want it to stay on."</string>
</resources>
diff --git a/service/ServiceWifiResources/res/values-en-rGB/strings.xml b/service/ServiceWifiResources/res/values-en-rGB/strings.xml
index 61a990664d..c5745af51a 100644
--- a/service/ServiceWifiResources/res/values-en-rGB/strings.xml
+++ b/service/ServiceWifiResources/res/values-en-rGB/strings.xml
@@ -164,9 +164,7 @@
<string name="wifi_network_disabled_by_admin_message" msgid="7830360441333155462">"<xliff:g id="SSID">%1$s</xliff:g> is disabled by your administrator."</string>
<string name="wifi_network_disabled_by_admin_button" msgid="3350310756265122689">"Close"</string>
<string name="wifi_enabled_apm_first_time_title" msgid="4814302384637588804">"Wi‑Fi on in aeroplane mode"</string>
- <!-- no translation found for wifi_enabled_apm_first_time_message (5443101896157496353) -->
- <skip />
+ <string name="wifi_enabled_apm_first_time_message" msgid="5443101896157496353">"If you keep Wi‑Fi on, your phone will remember to keep it on the next time that you\'re in aeroplane mode"</string>
<string name="apm_enabled_first_time_title" msgid="2534167413190488009">"Wi‑Fi stays on"</string>
- <!-- no translation found for apm_enabled_first_time_message (4753441005253327841) -->
- <skip />
+ <string name="apm_enabled_first_time_message" msgid="4753441005253327841">"Your phone remembers to keep Wi‑Fi on in aeroplane mode. Turn off Wi‑Fi if you don\'t want it to stay on."</string>
</resources>
diff --git a/service/ServiceWifiResources/res/values-en-rIN/strings.xml b/service/ServiceWifiResources/res/values-en-rIN/strings.xml
index 61a990664d..c5745af51a 100644
--- a/service/ServiceWifiResources/res/values-en-rIN/strings.xml
+++ b/service/ServiceWifiResources/res/values-en-rIN/strings.xml
@@ -164,9 +164,7 @@
<string name="wifi_network_disabled_by_admin_message" msgid="7830360441333155462">"<xliff:g id="SSID">%1$s</xliff:g> is disabled by your administrator."</string>
<string name="wifi_network_disabled_by_admin_button" msgid="3350310756265122689">"Close"</string>
<string name="wifi_enabled_apm_first_time_title" msgid="4814302384637588804">"Wi‑Fi on in aeroplane mode"</string>
- <!-- no translation found for wifi_enabled_apm_first_time_message (5443101896157496353) -->
- <skip />
+ <string name="wifi_enabled_apm_first_time_message" msgid="5443101896157496353">"If you keep Wi‑Fi on, your phone will remember to keep it on the next time that you\'re in aeroplane mode"</string>
<string name="apm_enabled_first_time_title" msgid="2534167413190488009">"Wi‑Fi stays on"</string>
- <!-- no translation found for apm_enabled_first_time_message (4753441005253327841) -->
- <skip />
+ <string name="apm_enabled_first_time_message" msgid="4753441005253327841">"Your phone remembers to keep Wi‑Fi on in aeroplane mode. Turn off Wi‑Fi if you don\'t want it to stay on."</string>
</resources>
diff --git a/service/ServiceWifiResources/res/values-en-rXC/strings.xml b/service/ServiceWifiResources/res/values-en-rXC/strings.xml
index f1a9c7ef06..4aba4e823d 100644
--- a/service/ServiceWifiResources/res/values-en-rXC/strings.xml
+++ b/service/ServiceWifiResources/res/values-en-rXC/strings.xml
@@ -164,9 +164,7 @@
<string name="wifi_network_disabled_by_admin_message" msgid="7830360441333155462">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‏‎‏‏‎‎‏‎‏‎‏‎‏‏‎‎‎‎‎‏‏‏‎‏‎‏‎‏‎‏‏‎‎‏‏‎‎‎‏‏‏‎‏‏‏‏‎‎‎‎‎‏‏‎‏‎‎‎‎‏‏‎‎‎‏‎‎‏‏‎<xliff:g id="SSID">%1$s</xliff:g>‎‏‎‎‏‏‏‎ is disabled by your administrator.‎‏‎‎‏‎"</string>
<string name="wifi_network_disabled_by_admin_button" msgid="3350310756265122689">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‎‏‎‏‏‏‎‎‏‏‏‏‏‏‎‏‎‏‏‎‎‎‏‏‏‏‎‎‎‎‏‏‏‎‏‎‎‏‎‎‏‎‏‏‎‏‎‎‏‎‏‏‎‏‏‏‎‎‎‎‎‎‏‎Close‎‏‎‎‏‎"</string>
<string name="wifi_enabled_apm_first_time_title" msgid="4814302384637588804">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‎‎‎‎‏‎‏‏‎‎‏‏‏‏‏‏‎‏‎‏‏‎‏‎‎‎‎‎‏‎‏‏‏‏‎‏‎‏‏‎‏‎‎‎‏‏‏‎‏‏‎‏‎‏‎‏‎‎‎‏‎‎‎Wi‑Fi on in airplane mode‎‏‎‎‏‎"</string>
- <!-- no translation found for wifi_enabled_apm_first_time_message (5443101896157496353) -->
- <skip />
+ <string name="wifi_enabled_apm_first_time_message" msgid="5443101896157496353">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‎‎‏‎‏‏‏‎‎‎‏‎‎‏‏‏‎‎‏‎‎‎‎‏‎‏‎‏‎‏‏‏‏‏‎‏‎‎‏‎‏‏‏‎‎‏‎‎‎‎‎‏‎‎‎‎‏‎‎‎‎‏‎If you keep Wi‑Fi on, your phone will remember to keep it on the next time you\'re in airplane mode‎‏‎‎‏‎"</string>
<string name="apm_enabled_first_time_title" msgid="2534167413190488009">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‎‏‎‎‎‏‏‎‎‏‎‏‎‏‏‎‎‏‎‏‎‏‏‏‏‎‏‎‏‎‏‏‏‏‏‎‎‎‎‏‎‎‏‎‏‏‎‏‏‏‎‏‏‏‏‏‏‎‎‏‎‎‏‎Wi‑Fi stays on‎‏‎‎‏‎"</string>
- <!-- no translation found for apm_enabled_first_time_message (4753441005253327841) -->
- <skip />
+ <string name="apm_enabled_first_time_message" msgid="4753441005253327841">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‎‎‎‎‎‏‏‏‏‏‎‏‏‏‏‎‎‏‏‏‎‏‎‏‏‎‏‎‎‎‏‏‎‏‎‎‏‎‏‏‏‎‎‏‏‎‎‏‏‏‏‎‏‏‏‏‏‎‎‎‎‏‎Your phone remembers to keep Wi‑Fi on in airplane mode. Turn off Wi‑Fi if you don\'t want it to stay on.‎‏‎‎‏‎"</string>
</resources>
diff --git a/service/ServiceWifiResources/res/values-es-rUS/strings.xml b/service/ServiceWifiResources/res/values-es-rUS/strings.xml
index f8af29acaa..6d2dd5952e 100644
--- a/service/ServiceWifiResources/res/values-es-rUS/strings.xml
+++ b/service/ServiceWifiResources/res/values-es-rUS/strings.xml
@@ -164,9 +164,7 @@
<string name="wifi_network_disabled_by_admin_message" msgid="7830360441333155462">"Tu administrador inhabilitó <xliff:g id="SSID">%1$s</xliff:g>."</string>
<string name="wifi_network_disabled_by_admin_button" msgid="3350310756265122689">"Cerrar"</string>
<string name="wifi_enabled_apm_first_time_title" msgid="4814302384637588804">"Wi-Fi activado en modo de avión"</string>
- <!-- no translation found for wifi_enabled_apm_first_time_message (5443101896157496353) -->
- <skip />
+ <string name="wifi_enabled_apm_first_time_message" msgid="5443101896157496353">"Si mantienes el Wi-Fi activado, tu teléfono recordará mantenerlo activado la próxima vez que actives el modo de avión"</string>
<string name="apm_enabled_first_time_title" msgid="2534167413190488009">"El Wi-Fi permanece activado"</string>
- <!-- no translation found for apm_enabled_first_time_message (4753441005253327841) -->
- <skip />
+ <string name="apm_enabled_first_time_message" msgid="4753441005253327841">"El teléfono dejará activado el Wi-Fi en el modo de avión. Desactiva el Wi-Fi si no quieres permanecer conectado."</string>
</resources>
diff --git a/service/ServiceWifiResources/res/values-es/strings.xml b/service/ServiceWifiResources/res/values-es/strings.xml
index 29464d4922..08498836ac 100644
--- a/service/ServiceWifiResources/res/values-es/strings.xml
+++ b/service/ServiceWifiResources/res/values-es/strings.xml
@@ -164,9 +164,7 @@
<string name="wifi_network_disabled_by_admin_message" msgid="7830360441333155462">"Tu administrador ha inhabilitado <xliff:g id="SSID">%1$s</xliff:g>."</string>
<string name="wifi_network_disabled_by_admin_button" msgid="3350310756265122689">"Cerrar"</string>
<string name="wifi_enabled_apm_first_time_title" msgid="4814302384637588804">"Wi-Fi activado en modo Avión"</string>
- <!-- no translation found for wifi_enabled_apm_first_time_message (5443101896157496353) -->
- <skip />
+ <string name="wifi_enabled_apm_first_time_message" msgid="5443101896157496353">"Si dejas el Wi-Fi activado, tu teléfono se acordará de dejarlo así la próxima vez que uses el modo Avión"</string>
<string name="apm_enabled_first_time_title" msgid="2534167413190488009">"El Wi‑Fi se mantiene activado"</string>
- <!-- no translation found for apm_enabled_first_time_message (4753441005253327841) -->
- <skip />
+ <string name="apm_enabled_first_time_message" msgid="4753441005253327841">"Tu teléfono dejará el Wi-Fi activado en modo Avión. Desactiva el Wi-Fi si no quieres que se quede activado."</string>
</resources>
diff --git a/service/ServiceWifiResources/res/values-et/strings.xml b/service/ServiceWifiResources/res/values-et/strings.xml
index 2a28aa6cd6..ebcef37ffe 100644
--- a/service/ServiceWifiResources/res/values-et/strings.xml
+++ b/service/ServiceWifiResources/res/values-et/strings.xml
@@ -164,9 +164,7 @@
<string name="wifi_network_disabled_by_admin_message" msgid="7830360441333155462">"Administraator on funktsiooni <xliff:g id="SSID">%1$s</xliff:g> keelanud."</string>
<string name="wifi_network_disabled_by_admin_button" msgid="3350310756265122689">"Sule"</string>
<string name="wifi_enabled_apm_first_time_title" msgid="4814302384637588804">"WiFi on lennukirežiimis sisse lülitatud"</string>
- <!-- no translation found for wifi_enabled_apm_first_time_message (5443101896157496353) -->
- <skip />
+ <string name="wifi_enabled_apm_first_time_message" msgid="5443101896157496353">"Kui hoiate WiFi sisselülitatuna, jätab telefon teie valiku meelde ja kasutab seda järgmisel korral lennukirežiimi aktiveerimisel."</string>
<string name="apm_enabled_first_time_title" msgid="2534167413190488009">"WiFi jääb sisselülitatuks"</string>
- <!-- no translation found for apm_enabled_first_time_message (4753441005253327841) -->
- <skip />
+ <string name="apm_enabled_first_time_message" msgid="4753441005253327841">"Teie telefon hoiab WiFi lennukirežiimis sisselülitatuna. Lülitage WiFi välja, kui te ei soovi, et see oleks sisse lülitatud."</string>
</resources>
diff --git a/service/ServiceWifiResources/res/values-eu/strings.xml b/service/ServiceWifiResources/res/values-eu/strings.xml
index 08ca5d0cb4..d8b280ecd4 100644
--- a/service/ServiceWifiResources/res/values-eu/strings.xml
+++ b/service/ServiceWifiResources/res/values-eu/strings.xml
@@ -164,9 +164,7 @@
<string name="wifi_network_disabled_by_admin_message" msgid="7830360441333155462">"Administratzaileak desgaitu du <xliff:g id="SSID">%1$s</xliff:g>."</string>
<string name="wifi_network_disabled_by_admin_button" msgid="3350310756265122689">"Itxi"</string>
<string name="wifi_enabled_apm_first_time_title" msgid="4814302384637588804">"Wifia aktibatuta hegaldi moduan"</string>
- <!-- no translation found for wifi_enabled_apm_first_time_message (5443101896157496353) -->
- <skip />
+ <string name="wifi_enabled_apm_first_time_message" msgid="5443101896157496353">"Wifia aktibatuta utziz gero, hura aktibatuta mantentzeaz gogoratuko da telefonoa hegaldi modua erabiltzen duzun hurrengoan"</string>
<string name="apm_enabled_first_time_title" msgid="2534167413190488009">"Wifia aktibatuta mantentzen da"</string>
- <!-- no translation found for apm_enabled_first_time_message (4753441005253327841) -->
- <skip />
+ <string name="apm_enabled_first_time_message" msgid="4753441005253327841">"Hegaldi moduan, wifia aktibatuta mantentzeaz gogoratzen da telefonoa. Halakorik nahi ez baduzu, desaktiba ezazu zuk zeuk."</string>
</resources>
diff --git a/service/ServiceWifiResources/res/values-fa/strings.xml b/service/ServiceWifiResources/res/values-fa/strings.xml
index 1688041b0e..d59e7bcba5 100644
--- a/service/ServiceWifiResources/res/values-fa/strings.xml
+++ b/service/ServiceWifiResources/res/values-fa/strings.xml
@@ -164,9 +164,7 @@
<string name="wifi_network_disabled_by_admin_message" msgid="7830360441333155462">"سرپرست شما <xliff:g id="SSID">%1$s</xliff:g> را غیرفعال کرده است."</string>
<string name="wifi_network_disabled_by_admin_button" msgid="3350310756265122689">"بستن"</string>
<string name="wifi_enabled_apm_first_time_title" msgid="4814302384637588804">"‏‫Wi‑Fi در «حالت هواپیما» روشن باشد"</string>
- <!-- no translation found for wifi_enabled_apm_first_time_message (5443101896157496353) -->
- <skip />
+ <string name="wifi_enabled_apm_first_time_message" msgid="5443101896157496353">"‏اگر Wi-Fi را روشن نگه دارید، تلفنتان به‌یاد خواهد داشت تا دفعه بعدی که در «حالت هواپیما» هستید آن را روشن نگه دارد"</string>
<string name="apm_enabled_first_time_title" msgid="2534167413190488009">"‏‫Wi-Fi روشن بماند"</string>
- <!-- no translation found for apm_enabled_first_time_message (4753441005253327841) -->
- <skip />
+ <string name="apm_enabled_first_time_message" msgid="4753441005253327841">"‏تلفنتان به‌یاد می‌آورد که Wi-Fi را در حالت هواپیما روشن نگه دارد. اگر نمی‌خواهید Wi-Fi روشن بماند، آن را خاموش کنید."</string>
</resources>
diff --git a/service/ServiceWifiResources/res/values-fi/strings.xml b/service/ServiceWifiResources/res/values-fi/strings.xml
index 698d951763..2879a0ae56 100644
--- a/service/ServiceWifiResources/res/values-fi/strings.xml
+++ b/service/ServiceWifiResources/res/values-fi/strings.xml
@@ -164,9 +164,7 @@
<string name="wifi_network_disabled_by_admin_message" msgid="7830360441333155462">"<xliff:g id="SSID">%1$s</xliff:g> on järjestelmänvalvojan käytöstä poistama."</string>
<string name="wifi_network_disabled_by_admin_button" msgid="3350310756265122689">"Sulje"</string>
<string name="wifi_enabled_apm_first_time_title" msgid="4814302384637588804">"Wi‑Fi päällä lentokonetilassa"</string>
- <!-- no translation found for wifi_enabled_apm_first_time_message (5443101896157496353) -->
- <skip />
+ <string name="wifi_enabled_apm_first_time_message" msgid="5443101896157496353">"Jos pidät Wi-Fi-yhteyden päällä, puhelin pitää sen päällä, kun seuraavan kerran olet lentokonetilassa"</string>
<string name="apm_enabled_first_time_title" msgid="2534167413190488009">"Wi‑Fi pysyy päällä"</string>
- <!-- no translation found for apm_enabled_first_time_message (4753441005253327841) -->
- <skip />
+ <string name="apm_enabled_first_time_message" msgid="4753441005253327841">"Puhelimen Wi-Fi-yhteys pysyy päällä lentokonetilassa. Voit halutessasi laittaa Wi-Fi-yhteyden pois päältä."</string>
</resources>
diff --git a/service/ServiceWifiResources/res/values-fr-rCA/strings.xml b/service/ServiceWifiResources/res/values-fr-rCA/strings.xml
index cc081880f5..1e622b7300 100644
--- a/service/ServiceWifiResources/res/values-fr-rCA/strings.xml
+++ b/service/ServiceWifiResources/res/values-fr-rCA/strings.xml
@@ -164,9 +164,7 @@
<string name="wifi_network_disabled_by_admin_message" msgid="7830360441333155462">"Fonctionnalité <xliff:g id="SSID">%1$s</xliff:g> désactivée par votre administrateur."</string>
<string name="wifi_network_disabled_by_admin_button" msgid="3350310756265122689">"Fermer"</string>
<string name="wifi_enabled_apm_first_time_title" msgid="4814302384637588804">"Wi‑Fi activé en mode Avion"</string>
- <!-- no translation found for wifi_enabled_apm_first_time_message (5443101896157496353) -->
- <skip />
+ <string name="wifi_enabled_apm_first_time_message" msgid="5443101896157496353">"Si vous laissez le Wi-Fi activé, votre téléphone se rappellera qu\'il doit le laisser activé la prochaine fois que vous serez en mode Avion"</string>
<string name="apm_enabled_first_time_title" msgid="2534167413190488009">"Le Wi‑Fi reste activé"</string>
- <!-- no translation found for apm_enabled_first_time_message (4753441005253327841) -->
- <skip />
+ <string name="apm_enabled_first_time_message" msgid="4753441005253327841">"Votre téléphone se rappelle de garder le Wi-Fi activé en mode Avion. Désactivez le Wi-Fi si vous ne voulez pas qu\'il reste allumé."</string>
</resources>
diff --git a/service/ServiceWifiResources/res/values-fr/strings.xml b/service/ServiceWifiResources/res/values-fr/strings.xml
index 1701a10937..9aa3dbbc3f 100644
--- a/service/ServiceWifiResources/res/values-fr/strings.xml
+++ b/service/ServiceWifiResources/res/values-fr/strings.xml
@@ -164,9 +164,7 @@
<string name="wifi_network_disabled_by_admin_message" msgid="7830360441333155462">"<xliff:g id="SSID">%1$s</xliff:g> est désactivé par votre administrateur."</string>
<string name="wifi_network_disabled_by_admin_button" msgid="3350310756265122689">"Fermer"</string>
<string name="wifi_enabled_apm_first_time_title" msgid="4814302384637588804">"Wi-Fi activé en mode Avion"</string>
- <!-- no translation found for wifi_enabled_apm_first_time_message (5443101896157496353) -->
- <skip />
+ <string name="wifi_enabled_apm_first_time_message" msgid="5443101896157496353">"Si vous laissez le Wi-Fi activé, votre téléphone s\'en souviendra et le Wi-Fi restera activé la prochaine fois que vous serez en mode Avion"</string>
<string name="apm_enabled_first_time_title" msgid="2534167413190488009">"Le Wi‑Fi reste activé"</string>
- <!-- no translation found for apm_enabled_first_time_message (4753441005253327841) -->
- <skip />
+ <string name="apm_enabled_first_time_message" msgid="4753441005253327841">"Le Wi‑Fi de votre téléphone restera activé en mode Avion. Désactivez le Wi-Fi si ce paramètre ne vous convient pas."</string>
</resources>
diff --git a/service/ServiceWifiResources/res/values-gl/strings.xml b/service/ServiceWifiResources/res/values-gl/strings.xml
index 6f0f6055e8..545745d23f 100644
--- a/service/ServiceWifiResources/res/values-gl/strings.xml
+++ b/service/ServiceWifiResources/res/values-gl/strings.xml
@@ -164,9 +164,7 @@
<string name="wifi_network_disabled_by_admin_message" msgid="7830360441333155462">"O teu administrador desactivou a rede <xliff:g id="SSID">%1$s</xliff:g>."</string>
<string name="wifi_network_disabled_by_admin_button" msgid="3350310756265122689">"Pechar"</string>
<string name="wifi_enabled_apm_first_time_title" msgid="4814302384637588804">"A wifi está activada no modo avión"</string>
- <!-- no translation found for wifi_enabled_apm_first_time_message (5443101896157496353) -->
- <skip />
+ <string name="wifi_enabled_apm_first_time_message" msgid="5443101896157496353">"Se mantés a wifi activada, o teléfono lembrará que ten que deixala nese estado a próxima vez que esteas no modo avión"</string>
<string name="apm_enabled_first_time_title" msgid="2534167413190488009">"A wifi permanece activada"</string>
- <!-- no translation found for apm_enabled_first_time_message (4753441005253327841) -->
- <skip />
+ <string name="apm_enabled_first_time_message" msgid="4753441005253327841">"O teléfono lembrará manter a wifi activada no modo avión. Desactívaa se non queres que permaneza activada."</string>
</resources>
diff --git a/service/ServiceWifiResources/res/values-gu/strings.xml b/service/ServiceWifiResources/res/values-gu/strings.xml
index e662e3f22d..2700496640 100644
--- a/service/ServiceWifiResources/res/values-gu/strings.xml
+++ b/service/ServiceWifiResources/res/values-gu/strings.xml
@@ -164,9 +164,7 @@
<string name="wifi_network_disabled_by_admin_message" msgid="7830360441333155462">"<xliff:g id="SSID">%1$s</xliff:g>ને તમારા ઍડમિનિસ્ટ્રેટર દ્વારા બંધ કરવામાં આવ્યું છે."</string>
<string name="wifi_network_disabled_by_admin_button" msgid="3350310756265122689">"બંધ કરો"</string>
<string name="wifi_enabled_apm_first_time_title" msgid="4814302384637588804">"એરપ્લેન મોડમાં વાઇ-ફાઇ ચાલુ રહેશે"</string>
- <!-- no translation found for wifi_enabled_apm_first_time_message (5443101896157496353) -->
- <skip />
+ <string name="wifi_enabled_apm_first_time_message" msgid="5443101896157496353">"જો તમે વાઇ-ફાઇ ચાલુ રાખો, તો તમે જ્યારે આગલી વખતે એરપ્લેન મોડ પર જશો, ત્યારે તમારો ફોન તેને ચાલુ રાખવાનું યાદ રાખશે"</string>
<string name="apm_enabled_first_time_title" msgid="2534167413190488009">"વાઇ-ફાઇ ચાલુ રહેશે"</string>
- <!-- no translation found for apm_enabled_first_time_message (4753441005253327841) -->
- <skip />
+ <string name="apm_enabled_first_time_message" msgid="4753441005253327841">"તમારો ફોન વાઇ-ફાઇને એરપ્લેન મોડમાં ચાલુ રાખવાનું યાદ રાખે છે. જો તમે વાઇ-ફાઇ ચાલુ રાખવા માગતા ન હો, તો તેને બંધ કરો."</string>
</resources>
diff --git a/service/ServiceWifiResources/res/values-hi/strings.xml b/service/ServiceWifiResources/res/values-hi/strings.xml
index dc0411c165..8e89891f1b 100644
--- a/service/ServiceWifiResources/res/values-hi/strings.xml
+++ b/service/ServiceWifiResources/res/values-hi/strings.xml
@@ -164,9 +164,7 @@
<string name="wifi_network_disabled_by_admin_message" msgid="7830360441333155462">"आपके एडमिन ने <xliff:g id="SSID">%1$s</xliff:g> को बंद किया हुआ है."</string>
<string name="wifi_network_disabled_by_admin_button" msgid="3350310756265122689">"बंद करें"</string>
<string name="wifi_enabled_apm_first_time_title" msgid="4814302384637588804">"हवाई जहाज़ मोड में वाई-फ़ाई चालू रहेगा"</string>
- <!-- no translation found for wifi_enabled_apm_first_time_message (5443101896157496353) -->
- <skip />
+ <string name="wifi_enabled_apm_first_time_message" msgid="5443101896157496353">"वाई-फ़ाई चालू रखने पर आपका फ़ोन, अगली बार हवाई जहाज़ मोड चालू होने पर भी वाई-फ़ाई चालू रखेगा"</string>
<string name="apm_enabled_first_time_title" msgid="2534167413190488009">"वाई-फ़ाई चालू रहेगा"</string>
- <!-- no translation found for apm_enabled_first_time_message (4753441005253327841) -->
- <skip />
+ <string name="apm_enabled_first_time_message" msgid="4753441005253327841">"हवाई जहाज़ मोड में भी आपका फ़ोन वाई-फ़ाई चालू रखता है. अगर वाई-फ़ाई चालू नहीं रखना है, तो उसे बंद कर दें."</string>
</resources>
diff --git a/service/ServiceWifiResources/res/values-hr/strings.xml b/service/ServiceWifiResources/res/values-hr/strings.xml
index c41836c5d7..824bbc907a 100644
--- a/service/ServiceWifiResources/res/values-hr/strings.xml
+++ b/service/ServiceWifiResources/res/values-hr/strings.xml
@@ -164,9 +164,7 @@
<string name="wifi_network_disabled_by_admin_message" msgid="7830360441333155462">"Značajku <xliff:g id="SSID">%1$s</xliff:g> onemogućio je vaš administrator."</string>
<string name="wifi_network_disabled_by_admin_button" msgid="3350310756265122689">"Zatvori"</string>
<string name="wifi_enabled_apm_first_time_title" msgid="4814302384637588804">"Wi‑Fi je uključen u načinu rada u zrakoplovu"</string>
- <!-- no translation found for wifi_enabled_apm_first_time_message (5443101896157496353) -->
- <skip />
+ <string name="wifi_enabled_apm_first_time_message" msgid="5443101896157496353">"Ako Wi-Fi ostane uključen, telefon će zapamtiti da treba ostati uključen u načinu rada u zrakoplovu"</string>
<string name="apm_enabled_first_time_title" msgid="2534167413190488009">"Wi‑Fi ostaje uključen"</string>
- <!-- no translation found for apm_enabled_first_time_message (4753441005253327841) -->
- <skip />
+ <string name="apm_enabled_first_time_message" msgid="4753441005253327841">"Telefon će zapamtiti da Wi‑Fi treba ostati uključen u načinu rada u zrakoplovu. Isključite Wi-Fi ako ne želite da ostane uključen."</string>
</resources>
diff --git a/service/ServiceWifiResources/res/values-hu/strings.xml b/service/ServiceWifiResources/res/values-hu/strings.xml
index 438c32d3f1..6f0b5162b4 100644
--- a/service/ServiceWifiResources/res/values-hu/strings.xml
+++ b/service/ServiceWifiResources/res/values-hu/strings.xml
@@ -164,9 +164,7 @@
<string name="wifi_network_disabled_by_admin_message" msgid="7830360441333155462">"<xliff:g id="SSID">%1$s</xliff:g> letiltva a rendszergazda által."</string>
<string name="wifi_network_disabled_by_admin_button" msgid="3350310756265122689">"Bezárás"</string>
<string name="wifi_enabled_apm_first_time_title" msgid="4814302384637588804">"A Wi‑Fi bekapcsolva marad Repülős üzemmódban"</string>
- <!-- no translation found for wifi_enabled_apm_first_time_message (5443101896157496353) -->
- <skip />
+ <string name="wifi_enabled_apm_first_time_message" msgid="5443101896157496353">"Ha bekapcsolva tartja a Wi-Fi-t, a telefon emlékezni fog arra, hogy a következő alkalommal, amikor Repülős üzemmódban van, bekapcsolva tartsa a funkciót"</string>
<string name="apm_enabled_first_time_title" msgid="2534167413190488009">"A Wi‑Fi bekapcsolva marad"</string>
- <!-- no translation found for apm_enabled_first_time_message (4753441005253327841) -->
- <skip />
+ <string name="apm_enabled_first_time_message" msgid="4753441005253327841">"A telefon bekapcsolva tartja a Wi‑Fi-t Repülős üzemmódban. Kapcsolja ki a Wi-Fi-t, ha nem szeretné, hogy bekapcsolva maradjon."</string>
</resources>
diff --git a/service/ServiceWifiResources/res/values-hy/strings.xml b/service/ServiceWifiResources/res/values-hy/strings.xml
index 8c3d758bd5..e92aab7e63 100644
--- a/service/ServiceWifiResources/res/values-hy/strings.xml
+++ b/service/ServiceWifiResources/res/values-hy/strings.xml
@@ -164,9 +164,7 @@
<string name="wifi_network_disabled_by_admin_message" msgid="7830360441333155462">"Ադմինիստրատորն անջատել է <xliff:g id="SSID">%1$s</xliff:g> գործառույթը։"</string>
<string name="wifi_network_disabled_by_admin_button" msgid="3350310756265122689">"Փակել"</string>
<string name="wifi_enabled_apm_first_time_title" msgid="4814302384637588804">"Ավիառեժիմում Wi‑Fi-ը միացված կլինի"</string>
- <!-- no translation found for wifi_enabled_apm_first_time_message (5443101896157496353) -->
- <skip />
+ <string name="wifi_enabled_apm_first_time_message" msgid="5443101896157496353">"Եթե Wi-Fi-ը միացված թողնեք, հաջորդ անգամ այն ավտոմատ միացված կմնա ավիառեժիմում"</string>
<string name="apm_enabled_first_time_title" msgid="2534167413190488009">"Wi‑Fi-ը մնում է միացված"</string>
- <!-- no translation found for apm_enabled_first_time_message (4753441005253327841) -->
- <skip />
+ <string name="apm_enabled_first_time_message" msgid="4753441005253327841">"Ավիառեժիմում Wi‑Fi-ը միացված կմնա։ Ցանկության դեպքում կարող եք անջատել Wi-Fi-ը։"</string>
</resources>
diff --git a/service/ServiceWifiResources/res/values-in/strings.xml b/service/ServiceWifiResources/res/values-in/strings.xml
index 6ba3e6e5e9..9e37de347a 100644
--- a/service/ServiceWifiResources/res/values-in/strings.xml
+++ b/service/ServiceWifiResources/res/values-in/strings.xml
@@ -164,9 +164,7 @@
<string name="wifi_network_disabled_by_admin_message" msgid="7830360441333155462">"<xliff:g id="SSID">%1$s</xliff:g> dinonaktifkan oleh administrator Anda."</string>
<string name="wifi_network_disabled_by_admin_button" msgid="3350310756265122689">"Tutup"</string>
<string name="wifi_enabled_apm_first_time_title" msgid="4814302384637588804">"Wi‑Fi aktif dalam mode pesawat"</string>
- <!-- no translation found for wifi_enabled_apm_first_time_message (5443101896157496353) -->
- <skip />
+ <string name="wifi_enabled_apm_first_time_message" msgid="5443101896157496353">"Jika Wi-Fi tetap diaktifkan, ponsel akan ingat untuk tetap mengaktifkannya saat berikutnya ponsel Anda disetel ke mode pesawat"</string>
<string name="apm_enabled_first_time_title" msgid="2534167413190488009">"Wi‑Fi tetap aktif"</string>
- <!-- no translation found for apm_enabled_first_time_message (4753441005253327841) -->
- <skip />
+ <string name="apm_enabled_first_time_message" msgid="4753441005253327841">"Ponsel akan ingat untuk tetap mengaktifkan Wi-Fi dalam mode pesawat. Nonaktifkan jika Anda tidak ingin Wi-Fi terus aktif."</string>
</resources>
diff --git a/service/ServiceWifiResources/res/values-is/strings.xml b/service/ServiceWifiResources/res/values-is/strings.xml
index 575a11580f..b8d06cc798 100644
--- a/service/ServiceWifiResources/res/values-is/strings.xml
+++ b/service/ServiceWifiResources/res/values-is/strings.xml
@@ -164,9 +164,7 @@
<string name="wifi_network_disabled_by_admin_message" msgid="7830360441333155462">"Stjórnandinn hefur slökkt á <xliff:g id="SSID">%1$s</xliff:g>."</string>
<string name="wifi_network_disabled_by_admin_button" msgid="3350310756265122689">"Loka"</string>
<string name="wifi_enabled_apm_first_time_title" msgid="4814302384637588804">"Kveikt á Wi‑Fi í flugstillingu"</string>
- <!-- no translation found for wifi_enabled_apm_first_time_message (5443101896157496353) -->
- <skip />
+ <string name="wifi_enabled_apm_first_time_message" msgid="5443101896157496353">"Ef þú hefur kveikt á Wi-Fi mun síminn muna að hafa kveikt á því næst þegar þú stillir á flugstillingu"</string>
<string name="apm_enabled_first_time_title" msgid="2534167413190488009">"Áfram kveikt á Wi‑Fi"</string>
- <!-- no translation found for apm_enabled_first_time_message (4753441005253327841) -->
- <skip />
+ <string name="apm_enabled_first_time_message" msgid="4753441005253327841">"Síminn man að hafa kveikt á Wi-Fi í flugstillingu. Slökktu á Wi-Fi ef þú vilt ekki hafa kveikt á því."</string>
</resources>
diff --git a/service/ServiceWifiResources/res/values-it/strings.xml b/service/ServiceWifiResources/res/values-it/strings.xml
index 651d0e55f5..5ea81a8b47 100644
--- a/service/ServiceWifiResources/res/values-it/strings.xml
+++ b/service/ServiceWifiResources/res/values-it/strings.xml
@@ -164,9 +164,7 @@
<string name="wifi_network_disabled_by_admin_message" msgid="7830360441333155462">"L\'amministratore ha disattivato la funzionalità <xliff:g id="SSID">%1$s</xliff:g>."</string>
<string name="wifi_network_disabled_by_admin_button" msgid="3350310756265122689">"Chiudi"</string>
<string name="wifi_enabled_apm_first_time_title" msgid="4814302384637588804">"Wi‑Fi attivo in modalità aereo"</string>
- <!-- no translation found for wifi_enabled_apm_first_time_message (5443101896157496353) -->
- <skip />
+ <string name="wifi_enabled_apm_first_time_message" msgid="5443101896157496353">"Se tieni attivo il Wi-fi, il telefono ricorderà di mantenerlo attivo la prossima volta che sarai in modalità aereo"</string>
<string name="apm_enabled_first_time_title" msgid="2534167413190488009">"Il Wi-Fi rimane attivo"</string>
- <!-- no translation found for apm_enabled_first_time_message (4753441005253327841) -->
- <skip />
+ <string name="apm_enabled_first_time_message" msgid="4753441005253327841">"Il telefono ricorda di mantenere attivo il Wi‑Fi in modalità aereo. Disattiva il Wi-Fi se non vuoi che resti attivo."</string>
</resources>
diff --git a/service/ServiceWifiResources/res/values-iw/strings.xml b/service/ServiceWifiResources/res/values-iw/strings.xml
index 1b6dcc6cb4..3db16546aa 100644
--- a/service/ServiceWifiResources/res/values-iw/strings.xml
+++ b/service/ServiceWifiResources/res/values-iw/strings.xml
@@ -164,9 +164,7 @@
<string name="wifi_network_disabled_by_admin_message" msgid="7830360441333155462">"האדמין השבית את <xliff:g id="SSID">%1$s</xliff:g>."</string>
<string name="wifi_network_disabled_by_admin_button" msgid="3350310756265122689">"סגירה"</string>
<string name="wifi_enabled_apm_first_time_title" msgid="4814302384637588804">"‏Wi‑Fi מופעל במצב טיסה"</string>
- <!-- no translation found for wifi_enabled_apm_first_time_message (5443101896157496353) -->
- <skip />
+ <string name="wifi_enabled_apm_first_time_message" msgid="5443101896157496353">"‏אם חיבור ה-Wi‑Fi נשאר מופעל, הטלפון יזכור להשאיר אותו מופעל בפעם הבאה שהוא יועבר למצב טיסה"</string>
<string name="apm_enabled_first_time_title" msgid="2534167413190488009">"‏חיבור ה-Wi‑Fi יישאר מופעל"</string>
- <!-- no translation found for apm_enabled_first_time_message (4753441005253327841) -->
- <skip />
+ <string name="apm_enabled_first_time_message" msgid="4753441005253327841">"‏חיבור ה-Wi‑Fi בטלפון יישאר מופעל במצב טיסה. אפשר להשבית את ה-Wi-Fi אם לא רוצים שהוא יפעל."</string>
</resources>
diff --git a/service/ServiceWifiResources/res/values-ja/strings.xml b/service/ServiceWifiResources/res/values-ja/strings.xml
index c4054439e9..e6b2135d8b 100644
--- a/service/ServiceWifiResources/res/values-ja/strings.xml
+++ b/service/ServiceWifiResources/res/values-ja/strings.xml
@@ -164,9 +164,7 @@
<string name="wifi_network_disabled_by_admin_message" msgid="7830360441333155462">"<xliff:g id="SSID">%1$s</xliff:g> は管理者によって無効にされています。"</string>
<string name="wifi_network_disabled_by_admin_button" msgid="3350310756265122689">"閉じる"</string>
<string name="wifi_enabled_apm_first_time_title" msgid="4814302384637588804">"機内モードで Wi-Fi を ON"</string>
- <!-- no translation found for wifi_enabled_apm_first_time_message (5443101896157496353) -->
- <skip />
+ <string name="wifi_enabled_apm_first_time_message" msgid="5443101896157496353">"Wi-Fi を ON にしておくと、次に機内モードになったときも ON のままになります"</string>
<string name="apm_enabled_first_time_title" msgid="2534167413190488009">"Wi-Fi を ON のままにする"</string>
- <!-- no translation found for apm_enabled_first_time_message (4753441005253327841) -->
- <skip />
+ <string name="apm_enabled_first_time_message" msgid="4753441005253327841">"機内モードでも、スマートフォンの Wi-Fi は ON のままになります。Wi-Fi を ON にしたくない場合は OFF にしてください。"</string>
</resources>
diff --git a/service/ServiceWifiResources/res/values-ka/strings.xml b/service/ServiceWifiResources/res/values-ka/strings.xml
index e643cf6a14..d67d04482d 100644
--- a/service/ServiceWifiResources/res/values-ka/strings.xml
+++ b/service/ServiceWifiResources/res/values-ka/strings.xml
@@ -164,9 +164,7 @@
<string name="wifi_network_disabled_by_admin_message" msgid="7830360441333155462">"<xliff:g id="SSID">%1$s</xliff:g> გათიშულია თქვენი ადმინისტრატორის მიერ."</string>
<string name="wifi_network_disabled_by_admin_button" msgid="3350310756265122689">"დახურვა"</string>
<string name="wifi_enabled_apm_first_time_title" msgid="4814302384637588804">"Wi‑Fi ჩართულია თვითმფრინავის რეჟიმში"</string>
- <!-- no translation found for wifi_enabled_apm_first_time_message (5443101896157496353) -->
- <skip />
+ <string name="wifi_enabled_apm_first_time_message" msgid="5443101896157496353">"თუ Wi‑Fi-ს ჩართულს დატოვებთ, თქვენი ტელეფონი დაიმახსოვრებს და ჩართულს დატოვებს, როდესაც შემდგომში თვითმფრინავის რეჟიმში იქნებით"</string>
<string name="apm_enabled_first_time_title" msgid="2534167413190488009">"Wi‑Fi კვლავ ჩართულია"</string>
- <!-- no translation found for apm_enabled_first_time_message (4753441005253327841) -->
- <skip />
+ <string name="apm_enabled_first_time_message" msgid="4753441005253327841">"თქვენს ტელეფონს ემახსოვრება, რომ Wi‑Fi ჩართული უნდა იყოს თვითმფრინავის რეჟიმში. Wi‑Fi if-ის გამორთვა, თუ არ გსურთ ჩართული დატოვოთ."</string>
</resources>
diff --git a/service/ServiceWifiResources/res/values-kk/strings.xml b/service/ServiceWifiResources/res/values-kk/strings.xml
index af1817ef49..0dde1eccf8 100644
--- a/service/ServiceWifiResources/res/values-kk/strings.xml
+++ b/service/ServiceWifiResources/res/values-kk/strings.xml
@@ -164,9 +164,7 @@
<string name="wifi_network_disabled_by_admin_message" msgid="7830360441333155462">"<xliff:g id="SSID">%1$s</xliff:g> әкімші тарапынан өшірілді."</string>
<string name="wifi_network_disabled_by_admin_button" msgid="3350310756265122689">"Жабу"</string>
<string name="wifi_enabled_apm_first_time_title" msgid="4814302384637588804">"Wi‑Fi ұшақ режимінде қосулы болады"</string>
- <!-- no translation found for wifi_enabled_apm_first_time_message (5443101896157496353) -->
- <skip />
+ <string name="wifi_enabled_apm_first_time_message" msgid="5443101896157496353">"Wi‑Fi қосулы болса, ол келесіде телефондағы ұшақ режимінде қосулы болады."</string>
<string name="apm_enabled_first_time_title" msgid="2534167413190488009">"Wi‑Fi қосулы тұрады"</string>
- <!-- no translation found for apm_enabled_first_time_message (4753441005253327841) -->
- <skip />
+ <string name="apm_enabled_first_time_message" msgid="4753441005253327841">"Телефондағы Wi‑Fi ұшақ режимінде қосулы болады. Wi‑Fi желісінің қосулы тұрғанын қаламасаңыз, оны өшіріңіз."</string>
</resources>
diff --git a/service/ServiceWifiResources/res/values-km/strings.xml b/service/ServiceWifiResources/res/values-km/strings.xml
index 6e6ea9a651..a109192e6d 100644
--- a/service/ServiceWifiResources/res/values-km/strings.xml
+++ b/service/ServiceWifiResources/res/values-km/strings.xml
@@ -164,9 +164,7 @@
<string name="wifi_network_disabled_by_admin_message" msgid="7830360441333155462">"<xliff:g id="SSID">%1$s</xliff:g> ត្រូវបានបិទ​ដោយអ្នកគ្រប់គ្រង​របស់អ្នក។"</string>
<string name="wifi_network_disabled_by_admin_button" msgid="3350310756265122689">"បិទ"</string>
<string name="wifi_enabled_apm_first_time_title" msgid="4814302384637588804">"បើក ​​Wi-Fi នៅក្នុងមុខងារពេល​ជិះ​យន្តហោះ"</string>
- <!-- no translation found for wifi_enabled_apm_first_time_message (5443101896157496353) -->
- <skip />
+ <string name="wifi_enabled_apm_first_time_message" msgid="5443101896157496353">"ប្រសិនបើអ្នកបន្តបើក Wi‑Fi នោះទូរសព្ទរបស់អ្នកនឹងចាំថាត្រូវបន្តបើកវា នៅលើកក្រោយដែលអ្នកស្ថិតក្នុងមុខងារពេលជិះយន្តហោះ"</string>
<string name="apm_enabled_first_time_title" msgid="2534167413190488009">"Wi‑Fi នៅ​តែ​បើក"</string>
- <!-- no translation found for apm_enabled_first_time_message (4753441005253327841) -->
- <skip />
+ <string name="apm_enabled_first_time_message" msgid="4753441005253327841">"ទូរសព្ទរបស់អ្នកចាំថាត្រូវបន្តបើក Wi-Fi នៅក្នុងមុខងារពេលជិះយន្តហោះ។ បិទ Wi‑Fi ប្រសិនបើអ្នកមិនចង់ឱ្យវាបន្តបើក។"</string>
</resources>
diff --git a/service/ServiceWifiResources/res/values-kn/strings.xml b/service/ServiceWifiResources/res/values-kn/strings.xml
index 34e8d407c0..9379121343 100644
--- a/service/ServiceWifiResources/res/values-kn/strings.xml
+++ b/service/ServiceWifiResources/res/values-kn/strings.xml
@@ -164,9 +164,7 @@
<string name="wifi_network_disabled_by_admin_message" msgid="7830360441333155462">"<xliff:g id="SSID">%1$s</xliff:g> ಅನ್ನು ನಿಮ್ಮ ನಿರ್ವಾಹಕರು ನಿಷ್ಕ್ರಿಯಗೊಳಿಸಿದ್ದಾರೆ."</string>
<string name="wifi_network_disabled_by_admin_button" msgid="3350310756265122689">"ಮುಚ್ಚಿರಿ"</string>
<string name="wifi_enabled_apm_first_time_title" msgid="4814302384637588804">"ಏರ್‌ಪ್ಲೇನ್ ಮೋಡ್‌ನಲ್ಲಿ ವೈ-ಫೈ ಆನ್ ಆಗಿದೆ"</string>
- <!-- no translation found for wifi_enabled_apm_first_time_message (5443101896157496353) -->
- <skip />
+ <string name="wifi_enabled_apm_first_time_message" msgid="5443101896157496353">"ನೀವು ವೈ-ಫೈ ಆನ್ ಮಾಡಿದರೆ, ಮುಂದಿನ ಬಾರಿ ನೀವು ಏರ್‌ಪ್ಲೇನ್ ಮೋಡ್‌ನಲ್ಲಿರುವಾಗ ಅದನ್ನು ಆನ್ ಮಾಡಲು ನಿಮ್ಮ ಫೋನ್ ನೆನಪಿಸಿಕೊಳ್ಳುತ್ತದೆ"</string>
<string name="apm_enabled_first_time_title" msgid="2534167413190488009">"ವೈ-ಫೈ ಆನ್ ಇರುತ್ತದೆ"</string>
- <!-- no translation found for apm_enabled_first_time_message (4753441005253327841) -->
- <skip />
+ <string name="apm_enabled_first_time_message" msgid="4753441005253327841">"ವೈ-ಫೈ ಅನ್ನು ಏರ್‌ಪ್ಲೇನ್ ಮೋಡ್‌ನಲ್ಲಿ ಇರಿಸಿಕೊಳ್ಳಲು ನಿಮ್ಮ ಫೋನ್ ನೆನಪಿನಲ್ಲಿರಿಸಿಕೊಳ್ಳುತ್ತದೆ. ವೈ-ಫೈ ಆನ್ ಆಗಿರಲು ನೀವು ಬಯಸದಿದ್ದರೆ ಅದನ್ನು ಆಫ್ ಮಾಡಿ."</string>
</resources>
diff --git a/service/ServiceWifiResources/res/values-ko/strings.xml b/service/ServiceWifiResources/res/values-ko/strings.xml
index 98b5dc6728..aa4a7983fe 100644
--- a/service/ServiceWifiResources/res/values-ko/strings.xml
+++ b/service/ServiceWifiResources/res/values-ko/strings.xml
@@ -164,9 +164,7 @@
<string name="wifi_network_disabled_by_admin_message" msgid="7830360441333155462">"<xliff:g id="SSID">%1$s</xliff:g>이(가) 관리자에 의해 사용 중지되었습니다."</string>
<string name="wifi_network_disabled_by_admin_button" msgid="3350310756265122689">"닫기"</string>
<string name="wifi_enabled_apm_first_time_title" msgid="4814302384637588804">"비행기 모드에서 Wi-Fi 사용"</string>
- <!-- no translation found for wifi_enabled_apm_first_time_message (5443101896157496353) -->
- <skip />
+ <string name="wifi_enabled_apm_first_time_message" msgid="5443101896157496353">"Wi-Fi를 켜진 상태로 유지하면 다음에 비행기 모드를 사용할 때도 Wi-Fi 연결이 유지됩니다."</string>
<string name="apm_enabled_first_time_title" msgid="2534167413190488009">"Wi‑Fi가 켜진 상태로 유지됨"</string>
- <!-- no translation found for apm_enabled_first_time_message (4753441005253327841) -->
- <skip />
+ <string name="apm_enabled_first_time_message" msgid="4753441005253327841">"휴대전화가 비행기 모드에서 Wi-Fi를 켜진 상태로 유지합니다. 유지하지 않으려면 Wi-Fi를 사용 중지하세요."</string>
</resources>
diff --git a/service/ServiceWifiResources/res/values-ky/strings.xml b/service/ServiceWifiResources/res/values-ky/strings.xml
index ce19b53812..a1ea5b292b 100644
--- a/service/ServiceWifiResources/res/values-ky/strings.xml
+++ b/service/ServiceWifiResources/res/values-ky/strings.xml
@@ -164,9 +164,7 @@
<string name="wifi_network_disabled_by_admin_message" msgid="7830360441333155462">"<xliff:g id="SSID">%1$s</xliff:g> администраторуңуз тарабынан өчүрүлдү."</string>
<string name="wifi_network_disabled_by_admin_button" msgid="3350310756265122689">"Жабуу"</string>
<string name="wifi_enabled_apm_first_time_title" msgid="4814302384637588804">"Wi‑Fi учак режиминде күйгүзүлөт"</string>
- <!-- no translation found for wifi_enabled_apm_first_time_message (5443101896157496353) -->
- <skip />
+ <string name="wifi_enabled_apm_first_time_message" msgid="5443101896157496353">"Эгер Wi-Fi күйүк бойдон калса, кийинки жолу учак режимине өткөнүңүздө телефонуңуз аны эстеп калат"</string>
<string name="apm_enabled_first_time_title" msgid="2534167413190488009">"Wi‑Fi күйгөн бойдон калат"</string>
- <!-- no translation found for apm_enabled_first_time_message (4753441005253327841) -->
- <skip />
+ <string name="apm_enabled_first_time_message" msgid="4753441005253327841">"Телефонуңуз учак режиминде Wi‑Fi\'га туташкан бойдон калат. Кааласаңыз, Wi‑Fi\'ды өчүрүп койсоңуз болот."</string>
</resources>
diff --git a/service/ServiceWifiResources/res/values-lo/strings.xml b/service/ServiceWifiResources/res/values-lo/strings.xml
index d580e25f51..844aa86757 100644
--- a/service/ServiceWifiResources/res/values-lo/strings.xml
+++ b/service/ServiceWifiResources/res/values-lo/strings.xml
@@ -164,9 +164,7 @@
<string name="wifi_network_disabled_by_admin_message" msgid="7830360441333155462">"<xliff:g id="SSID">%1$s</xliff:g> ຖືກປິດການນຳໃຊ້ໂດຍຜູ້ເບິ່ງແຍງລະບົບຂອງທ່ານ."</string>
<string name="wifi_network_disabled_by_admin_button" msgid="3350310756265122689">"ປິດ"</string>
<string name="wifi_enabled_apm_first_time_title" msgid="4814302384637588804">"Wi‑Fi ເປີດຢູ່ໃນໂໝດຢູ່ໃນຍົນ"</string>
- <!-- no translation found for wifi_enabled_apm_first_time_message (5443101896157496353) -->
- <skip />
+ <string name="wifi_enabled_apm_first_time_message" msgid="5443101896157496353">"ຫາກທ່ານເປີດ Wi‑Fi ໄວ້, ໂທລະສັບຂອງທ່ານຈະຈື່ວ່າຕ້ອງເປີດ Wi‑Fi ໃນເທື່ອຕໍ່ໄປທີ່ທ່ານຢູ່ໃນໂໝດຢູ່ໃນຍົນ"</string>
<string name="apm_enabled_first_time_title" msgid="2534167413190488009">"Wi‑Fi ເປີດຢູ່"</string>
- <!-- no translation found for apm_enabled_first_time_message (4753441005253327841) -->
- <skip />
+ <string name="apm_enabled_first_time_message" msgid="4753441005253327841">"ໂທລະສັບຂອງທ່ານຈື່ວ່າຈະຕ້ອງເປີດ Wi-Fi ໄວ້ໃນໂໝດຢູ່ໃນຍົນ. ປິດ Wi‑Fi ຫາກທ່ານບໍ່ຕ້ອງການໃຫ້ເປີດມັນໄວ້."</string>
</resources>
diff --git a/service/ServiceWifiResources/res/values-lt/strings.xml b/service/ServiceWifiResources/res/values-lt/strings.xml
index 36db1ef849..ffbf73b117 100644
--- a/service/ServiceWifiResources/res/values-lt/strings.xml
+++ b/service/ServiceWifiResources/res/values-lt/strings.xml
@@ -164,9 +164,7 @@
<string name="wifi_network_disabled_by_admin_message" msgid="7830360441333155462">"„<xliff:g id="SSID">%1$s</xliff:g>“ išjungė administratorius."</string>
<string name="wifi_network_disabled_by_admin_button" msgid="3350310756265122689">"Uždaryti"</string>
<string name="wifi_enabled_apm_first_time_title" msgid="4814302384637588804">"„Wi‑Fi“ ryšys įjungtas lėktuvo režimu"</string>
- <!-- no translation found for wifi_enabled_apm_first_time_message (5443101896157496353) -->
- <skip />
+ <string name="wifi_enabled_apm_first_time_message" msgid="5443101896157496353">"Jei paliksite „Wi‑Fi“ ryšį įjungtą, telefonas, prisimins palikti jį įjungtą, kai kitą kartą įjungsite lėktuvo režimą"</string>
<string name="apm_enabled_first_time_title" msgid="2534167413190488009">"„Wi‑Fi“ lieka įjungtas"</string>
- <!-- no translation found for apm_enabled_first_time_message (4753441005253327841) -->
- <skip />
+ <string name="apm_enabled_first_time_message" msgid="4753441005253327841">"Telefonas prisimena, kad lėktuvo režimu reikia palikti įjungtą „Wi‑Fi“ ryšį. Išjunkite „Wi‑Fi“, jei nenorite, kad jis liktų įjungtas."</string>
</resources>
diff --git a/service/ServiceWifiResources/res/values-lv/strings.xml b/service/ServiceWifiResources/res/values-lv/strings.xml
index abd4905744..b400073217 100644
--- a/service/ServiceWifiResources/res/values-lv/strings.xml
+++ b/service/ServiceWifiResources/res/values-lv/strings.xml
@@ -164,9 +164,7 @@
<string name="wifi_network_disabled_by_admin_message" msgid="7830360441333155462">"Administrators atspējoja tīklu <xliff:g id="SSID">%1$s</xliff:g>."</string>
<string name="wifi_network_disabled_by_admin_button" msgid="3350310756265122689">"Aizvērt"</string>
<string name="wifi_enabled_apm_first_time_title" msgid="4814302384637588804">"Wi‑Fi ieslēgts lidojuma režīmā"</string>
- <!-- no translation found for wifi_enabled_apm_first_time_message (5443101896157496353) -->
- <skip />
+ <string name="wifi_enabled_apm_first_time_message" msgid="5443101896157496353">"Ja Wi‑Fi savienojums paliks ieslēgts, tālrunī tas paliks ieslēgts arī nākamreiz, kad ieslēgsiet lidojuma režīmu."</string>
<string name="apm_enabled_first_time_title" msgid="2534167413190488009">"Wi‑Fi joprojām ieslēgts"</string>
- <!-- no translation found for apm_enabled_first_time_message (4753441005253327841) -->
- <skip />
+ <string name="apm_enabled_first_time_message" msgid="4753441005253327841">"Tālrunī joprojām būs ieslēgts Wi-Fi savienojums lidojuma režīmā. Izslēdziet Wi‑Fi savienojumu, ja nevēlaties, lai tas paliktu ieslēgts."</string>
</resources>
diff --git a/service/ServiceWifiResources/res/values-mk/strings.xml b/service/ServiceWifiResources/res/values-mk/strings.xml
index 8abed0719d..61abc94f0b 100644
--- a/service/ServiceWifiResources/res/values-mk/strings.xml
+++ b/service/ServiceWifiResources/res/values-mk/strings.xml
@@ -164,9 +164,7 @@
<string name="wifi_network_disabled_by_admin_message" msgid="7830360441333155462">"<xliff:g id="SSID">%1$s</xliff:g> е оневозможенa од вашиот администратор."</string>
<string name="wifi_network_disabled_by_admin_button" msgid="3350310756265122689">"Затвори"</string>
<string name="wifi_enabled_apm_first_time_title" msgid="4814302384637588804">"Wi‑Fi е вклучено во авионски режим"</string>
- <!-- no translation found for wifi_enabled_apm_first_time_message (5443101896157496353) -->
- <skip />
+ <string name="wifi_enabled_apm_first_time_message" msgid="5443101896157496353">"Ако го оставите Wi‑Fi вклучено, телефонот ќе запомни да го остави вклучено до следниот пат кога ќе бидете во авионски режим"</string>
<string name="apm_enabled_first_time_title" msgid="2534167413190488009">"Wi‑Fi останува вклучено"</string>
- <!-- no translation found for apm_enabled_first_time_message (4753441005253327841) -->
- <skip />
+ <string name="apm_enabled_first_time_message" msgid="4753441005253327841">"Телефонот помни да го остави Wi‑Fi вклучено во авионски режим. Исклучете го Wi‑Fi ако не сакате да остане вклучено."</string>
</resources>
diff --git a/service/ServiceWifiResources/res/values-ml/strings.xml b/service/ServiceWifiResources/res/values-ml/strings.xml
index da1ed6d4aa..cc608aa0c1 100644
--- a/service/ServiceWifiResources/res/values-ml/strings.xml
+++ b/service/ServiceWifiResources/res/values-ml/strings.xml
@@ -164,9 +164,7 @@
<string name="wifi_network_disabled_by_admin_message" msgid="7830360441333155462">"<xliff:g id="SSID">%1$s</xliff:g> നിങ്ങളുടെ അഡ്മിൻ പ്രവർത്തനരഹിതമാക്കിയിരിക്കുന്നു."</string>
<string name="wifi_network_disabled_by_admin_button" msgid="3350310756265122689">"അടയ്ക്കുക"</string>
<string name="wifi_enabled_apm_first_time_title" msgid="4814302384637588804">"ഫ്ലൈറ്റ് മോഡിൽ വൈഫൈ ഓണാണ്"</string>
- <!-- no translation found for wifi_enabled_apm_first_time_message (5443101896157496353) -->
- <skip />
+ <string name="wifi_enabled_apm_first_time_message" msgid="5443101896157496353">"വൈഫൈ ഓണാക്കി വച്ചാൽ, അടുത്ത തവണ നിങ്ങൾ ഫ്ലൈറ്റ് മോഡിൽ ആയിരിക്കുമ്പോൾ നിങ്ങളുടെ ഫോൺ അത് ഓണാക്കി വയ്ക്കാൻ ഓർക്കും"</string>
<string name="apm_enabled_first_time_title" msgid="2534167413190488009">"വൈഫൈ ഓണായിരിക്കും"</string>
- <!-- no translation found for apm_enabled_first_time_message (4753441005253327841) -->
- <skip />
+ <string name="apm_enabled_first_time_message" msgid="4753441005253327841">"ഫ്ലൈറ്റ് മോഡിലായിരിക്കുമ്പോൾ വൈഫൈ ഓണാക്കി വയ്ക്കാൻ നിങ്ങളുടെ ഫോൺ ഓർമ്മിക്കും. വൈഫൈ ഓണാക്കി വയ്ക്കാൻ താൽപ്പര്യമില്ലെങ്കിൽ അത് ഓഫാക്കുക."</string>
</resources>
diff --git a/service/ServiceWifiResources/res/values-mn/strings.xml b/service/ServiceWifiResources/res/values-mn/strings.xml
index c940864362..76a2150fa8 100644
--- a/service/ServiceWifiResources/res/values-mn/strings.xml
+++ b/service/ServiceWifiResources/res/values-mn/strings.xml
@@ -164,9 +164,7 @@
<string name="wifi_network_disabled_by_admin_message" msgid="7830360441333155462">"<xliff:g id="SSID">%1$s</xliff:g>-г танай администратор идэвхгүй болгосон."</string>
<string name="wifi_network_disabled_by_admin_button" msgid="3350310756265122689">"Хаах"</string>
<string name="wifi_enabled_apm_first_time_title" msgid="4814302384637588804">"Wi‑Fi нислэгийн горимд асаалттай"</string>
- <!-- no translation found for wifi_enabled_apm_first_time_message (5443101896157496353) -->
- <skip />
+ <string name="wifi_enabled_apm_first_time_message" msgid="5443101896157496353">"Хэрэв та Wi-Fi-аа асаалттай байлгавал таныг дараагийн удаа нислэгийн горимд байх үед утас тань үүнийг асаалттай байлгахыг санана"</string>
<string name="apm_enabled_first_time_title" msgid="2534167413190488009">"Wi‑Fi асаалттай байна"</string>
- <!-- no translation found for apm_enabled_first_time_message (4753441005253327841) -->
- <skip />
+ <string name="apm_enabled_first_time_message" msgid="4753441005253327841">"Таны утас Wi-Fi-г нислэгийн горимд асаалттай байлгахыг санана. Хэрэв та үүнийг асаалттай байлгахыг хүсэхгүй байвал Wi-Fi-г унтраана уу."</string>
</resources>
diff --git a/service/ServiceWifiResources/res/values-mr/strings.xml b/service/ServiceWifiResources/res/values-mr/strings.xml
index c285271d66..bad462c163 100644
--- a/service/ServiceWifiResources/res/values-mr/strings.xml
+++ b/service/ServiceWifiResources/res/values-mr/strings.xml
@@ -164,9 +164,7 @@
<string name="wifi_network_disabled_by_admin_message" msgid="7830360441333155462">"तुमच्या अ‍ॅडमिनिस्ट्रेटर ने <xliff:g id="SSID">%1$s</xliff:g> बंद केले आहे."</string>
<string name="wifi_network_disabled_by_admin_button" msgid="3350310756265122689">"बंद करा"</string>
<string name="wifi_enabled_apm_first_time_title" msgid="4814302384637588804">"विमान मोडमध्ये वाय-फाय सुरू आहे"</string>
- <!-- no translation found for wifi_enabled_apm_first_time_message (5443101896157496353) -->
- <skip />
+ <string name="wifi_enabled_apm_first_time_message" msgid="5443101896157496353">"तुम्ही वाय-फाय सुरू ठेवल्यास, पुढील वेळी विमान मोडमध्ये असाल, तेव्हा तुमचा फोन ते सुरू ठेवण्याचे लक्षात ठेवेल"</string>
<string name="apm_enabled_first_time_title" msgid="2534167413190488009">"वाय-फाय सुरू राहते"</string>
- <!-- no translation found for apm_enabled_first_time_message (4753441005253327841) -->
- <skip />
+ <string name="apm_enabled_first_time_message" msgid="4753441005253327841">"तुमचा फोन विमान मोडमध्ये वाय-फाय सुरू ठेवण्याचे लक्षात ठेवतो. तुम्हाला सुरू ठेवायचे नसल्यास, वाय-फाय बंद करा."</string>
</resources>
diff --git a/service/ServiceWifiResources/res/values-ms/strings.xml b/service/ServiceWifiResources/res/values-ms/strings.xml
index 930c49d16b..c26fe01408 100644
--- a/service/ServiceWifiResources/res/values-ms/strings.xml
+++ b/service/ServiceWifiResources/res/values-ms/strings.xml
@@ -164,9 +164,7 @@
<string name="wifi_network_disabled_by_admin_message" msgid="7830360441333155462">"<xliff:g id="SSID">%1$s</xliff:g> dilumpuhkan oleh pentadbir anda."</string>
<string name="wifi_network_disabled_by_admin_button" msgid="3350310756265122689">"Tutup"</string>
<string name="wifi_enabled_apm_first_time_title" msgid="4814302384637588804">"Wi‑Fi dihidupkan dalam mod pesawat"</string>
- <!-- no translation found for wifi_enabled_apm_first_time_message (5443101896157496353) -->
- <skip />
+ <string name="wifi_enabled_apm_first_time_message" msgid="5443101896157496353">"Jika anda terus menghidupkan Wi-Fi, telefon anda akan ingat untuk membiarkan Wi-Fi hidup pada kali seterusnya telefon anda berada dalam mod pesawat"</string>
<string name="apm_enabled_first_time_title" msgid="2534167413190488009">"Wi‑Fi terus dihidupkan"</string>
- <!-- no translation found for apm_enabled_first_time_message (4753441005253327841) -->
- <skip />
+ <string name="apm_enabled_first_time_message" msgid="4753441005253327841">"Telefon anda diingatkan untuk terus menghidupkan Wi-Fi dalam mod pesawat. Matikan Wi‑Fi jika anda tidak mahu Wi‑Fi sentiasa hidup."</string>
</resources>
diff --git a/service/ServiceWifiResources/res/values-my/strings.xml b/service/ServiceWifiResources/res/values-my/strings.xml
index 9fc959273c..d2faa7a708 100644
--- a/service/ServiceWifiResources/res/values-my/strings.xml
+++ b/service/ServiceWifiResources/res/values-my/strings.xml
@@ -164,9 +164,7 @@
<string name="wifi_network_disabled_by_admin_message" msgid="7830360441333155462">"သင့်စီမံခန့်ခွဲသူက <xliff:g id="SSID">%1$s</xliff:g> ကို ပိတ်ထားသည်။"</string>
<string name="wifi_network_disabled_by_admin_button" msgid="3350310756265122689">"ပိတ်ရန်"</string>
<string name="wifi_enabled_apm_first_time_title" msgid="4814302384637588804">"လေယာဉ်ပျံမုဒ်တွင် Wi‑Fi ပွင့်နေသည်"</string>
- <!-- no translation found for wifi_enabled_apm_first_time_message (5443101896157496353) -->
- <skip />
+ <string name="wifi_enabled_apm_first_time_message" msgid="5443101896157496353">"Wi‑Fi ဆက်ဖွင့်ထားပါက နောက်တစ်ကြိမ်လေယာဉ်ပျံမုဒ် သုံးချိန်တွင် ၎င်းဆက်ဖွင့်ရန် သင့်ဖုန်းက မှတ်ထားမည်။"</string>
<string name="apm_enabled_first_time_title" msgid="2534167413190488009">"Wi‑Fi ဆက်ပွင့်နေသည်"</string>
- <!-- no translation found for apm_enabled_first_time_message (4753441005253327841) -->
- <skip />
+ <string name="apm_enabled_first_time_message" msgid="4753441005253327841">"လေယာဉ်ပျံမုဒ်သုံးစဉ် Wi-Fi ဆက်ဖွင့်ထားရန် သင့်ဖုန်းက မှတ်မိသည်။ Wi‑Fi ဆက်ဖွင့်မထားလိုပါက ပိတ်နိုင်သည်။"</string>
</resources>
diff --git a/service/ServiceWifiResources/res/values-nb/strings.xml b/service/ServiceWifiResources/res/values-nb/strings.xml
index b9188a6373..d5cc3eb13c 100644
--- a/service/ServiceWifiResources/res/values-nb/strings.xml
+++ b/service/ServiceWifiResources/res/values-nb/strings.xml
@@ -164,9 +164,7 @@
<string name="wifi_network_disabled_by_admin_message" msgid="7830360441333155462">"Administratoren din har deaktivert <xliff:g id="SSID">%1$s</xliff:g>."</string>
<string name="wifi_network_disabled_by_admin_button" msgid="3350310756265122689">"Lukk"</string>
<string name="wifi_enabled_apm_first_time_title" msgid="4814302384637588804">"Wifi på i flymodus"</string>
- <!-- no translation found for wifi_enabled_apm_first_time_message (5443101896157496353) -->
- <skip />
+ <string name="wifi_enabled_apm_first_time_message" msgid="5443101896157496353">"Hvis du lar wifi være på, husker telefonen dette til den neste gangen du bruker flymodus"</string>
<string name="apm_enabled_first_time_title" msgid="2534167413190488009">"Wifi holdes på"</string>
- <!-- no translation found for apm_enabled_first_time_message (4753441005253327841) -->
- <skip />
+ <string name="apm_enabled_first_time_message" msgid="4753441005253327841">"Telefonen husker å la wifi være påslått i flymodus. Du kan slå av wifi hvis du ikke vil la det være på."</string>
</resources>
diff --git a/service/ServiceWifiResources/res/values-ne/strings.xml b/service/ServiceWifiResources/res/values-ne/strings.xml
index b9e72840f5..684887a4c7 100644
--- a/service/ServiceWifiResources/res/values-ne/strings.xml
+++ b/service/ServiceWifiResources/res/values-ne/strings.xml
@@ -164,9 +164,7 @@
<string name="wifi_network_disabled_by_admin_message" msgid="7830360441333155462">"तपाईंका एड्मिनले <xliff:g id="SSID">%1$s</xliff:g> अफ गर्नुभएको छ।"</string>
<string name="wifi_network_disabled_by_admin_button" msgid="3350310756265122689">"बन्द गर्नुहोस्"</string>
<string name="wifi_enabled_apm_first_time_title" msgid="4814302384637588804">"हवाइजहाज मोडमा Wi-Fi अन रहन्छ"</string>
- <!-- no translation found for wifi_enabled_apm_first_time_message (5443101896157496353) -->
- <skip />
+ <string name="wifi_enabled_apm_first_time_message" msgid="5443101896157496353">"तपाईंले Wi‑Fi अन राख्नुभयो भने तपाईंले फेरि हवाइजहाज मोड सेट गर्दा फोनले Wi-Fi अन राख्नु पर्ने कुरा याद राख्छ"</string>
<string name="apm_enabled_first_time_title" msgid="2534167413190488009">"Wi‑Fi अन रहन्छ"</string>
- <!-- no translation found for apm_enabled_first_time_message (4753441005253327841) -->
- <skip />
+ <string name="apm_enabled_first_time_message" msgid="4753441005253327841">"हवाइजहाज मोडमा पनि तपाईंको फोनमा Wi-Fi अन नै रहने छ। तपाईं Wi‑Fi अन भइनरहोस् भन्ने चाहनुहुन्छ भने अफ गर्नुहोस्।"</string>
</resources>
diff --git a/service/ServiceWifiResources/res/values-nl/strings.xml b/service/ServiceWifiResources/res/values-nl/strings.xml
index 53fc90e0e6..a43ad53947 100644
--- a/service/ServiceWifiResources/res/values-nl/strings.xml
+++ b/service/ServiceWifiResources/res/values-nl/strings.xml
@@ -164,9 +164,7 @@
<string name="wifi_network_disabled_by_admin_message" msgid="7830360441333155462">"<xliff:g id="SSID">%1$s</xliff:g> is uitgezet door je beheerder."</string>
<string name="wifi_network_disabled_by_admin_button" msgid="3350310756265122689">"Sluiten"</string>
<string name="wifi_enabled_apm_first_time_title" msgid="4814302384637588804">"Wifi aan in vliegtuigmodus"</string>
- <!-- no translation found for wifi_enabled_apm_first_time_message (5443101896157496353) -->
- <skip />
+ <string name="wifi_enabled_apm_first_time_message" msgid="5443101896157496353">"Als je wifi laat aanstaan, onthoudt je telefoon dit en blijft de wifi aanstaan als je de vliegtuigmodus weer aanzet"</string>
<string name="apm_enabled_first_time_title" msgid="2534167413190488009">"Wifi blijft aan"</string>
- <!-- no translation found for apm_enabled_first_time_message (4753441005253327841) -->
- <skip />
+ <string name="apm_enabled_first_time_message" msgid="4753441005253327841">"De wifi op je telefoon blijft aan in de vliegtuigmodus. Zet wifi uit als je niet wilt dat dit aan blijft."</string>
</resources>
diff --git a/service/ServiceWifiResources/res/values-or/strings.xml b/service/ServiceWifiResources/res/values-or/strings.xml
index f210f4c2f6..a8ff3ea601 100644
--- a/service/ServiceWifiResources/res/values-or/strings.xml
+++ b/service/ServiceWifiResources/res/values-or/strings.xml
@@ -164,9 +164,7 @@
<string name="wifi_network_disabled_by_admin_message" msgid="7830360441333155462">"<xliff:g id="SSID">%1$s</xliff:g>କୁ ଆପଣଙ୍କ ଆଡମିନିଷ୍ଟ୍ରେଟରଙ୍କ ଦ୍ୱାରା ଅକ୍ଷମ କରାଯାଇଛି।"</string>
<string name="wifi_network_disabled_by_admin_button" msgid="3350310756265122689">"ବନ୍ଦ କରନ୍ତୁ"</string>
<string name="wifi_enabled_apm_first_time_title" msgid="4814302384637588804">"ଏୟାରପ୍ଲେନ ମୋଡରେ ୱାଇ-ଫାଇ ଚାଲୁ ଅଛି"</string>
- <!-- no translation found for wifi_enabled_apm_first_time_message (5443101896157496353) -->
- <skip />
+ <string name="wifi_enabled_apm_first_time_message" msgid="5443101896157496353">"ଯଦି ଆପଣ ୱାଇ-ଫାଇ ଚାଲୁ ରଖନ୍ତି, ତେବେ ଆପଣ ପରବର୍ତ୍ତୀ ଥର ଏୟାରପ୍ଲେନ ମୋଡରେ ଥିବା ସମୟରେ ଆପଣଙ୍କ ଫୋନ ଏହାକୁ ଚାଲୁ ରଖିବାକୁ ମନେ ରଖିବ"</string>
<string name="apm_enabled_first_time_title" msgid="2534167413190488009">"ୱାଇ-ଫାଇ ଚାଲୁ ରହିବ"</string>
- <!-- no translation found for apm_enabled_first_time_message (4753441005253327841) -->
- <skip />
+ <string name="apm_enabled_first_time_message" msgid="4753441005253327841">"ଆପଣଙ୍କ ଫୋନ ଏୟାରପ୍ଲେନ ମୋଡରେ ୱାଇ-ଫାଇ ଚାଲୁ ରଖିବାକୁ ମନେ ରଖେ। ଯଦି ଆପଣ ୱାଇ-ଫାଇ ଚାଲୁ ରଖିବାକୁ ଚାହାଁନ୍ତି ନାହିଁ ତେବେ ୱାଇ-ଫାଇ ବନ୍ଦ କରନ୍ତୁ।"</string>
</resources>
diff --git a/service/ServiceWifiResources/res/values-pa/strings.xml b/service/ServiceWifiResources/res/values-pa/strings.xml
index 46b352de09..1b42c2b532 100644
--- a/service/ServiceWifiResources/res/values-pa/strings.xml
+++ b/service/ServiceWifiResources/res/values-pa/strings.xml
@@ -164,9 +164,7 @@
<string name="wifi_network_disabled_by_admin_message" msgid="7830360441333155462">"ਤੁਹਾਡੇ ਪ੍ਰਸ਼ਾਸਕ ਵੱਲੋਂ <xliff:g id="SSID">%1$s</xliff:g> ਨੂੰ ਬੰਦ ਕੀਤਾ ਗਿਆ ਹੈ।"</string>
<string name="wifi_network_disabled_by_admin_button" msgid="3350310756265122689">"ਬੰਦ ਕਰੋ"</string>
<string name="wifi_enabled_apm_first_time_title" msgid="4814302384637588804">"ਹਵਾਈ-ਜਹਾਜ਼ ਮੋਡ ਵਿੱਚ ਵਾਈ-ਫਾਈ ਚਾਲੂ ਹੈ"</string>
- <!-- no translation found for wifi_enabled_apm_first_time_message (5443101896157496353) -->
- <skip />
+ <string name="wifi_enabled_apm_first_time_message" msgid="5443101896157496353">"ਜੇ ਤੁਸੀਂ ਵਾਈ-ਫਾਈ ਨੂੰ ਚਾਲੂ ਰੱਖਦੇ ਹੋ, ਤਾਂ ਅਗਲੀ ਵਾਰ ਤੁਹਾਡਾ ਫ਼ੋਨ ਹਵਾਈ-ਜਹਾਜ਼ ਮੋਡ ਵਿੱਚ ਹੋਣ \'ਤੇ ਤੁਹਾਡਾ ਫ਼ੋਨ ਇਸਨੂੰ ਚਾਲੂ ਰੱਖਣਾ ਯਾਦ ਰੱਖੇਗਾ"</string>
<string name="apm_enabled_first_time_title" msgid="2534167413190488009">"ਵਾਈ-ਫਾਈ ਚਾਲੂ ਰਹੇਗਾ"</string>
- <!-- no translation found for apm_enabled_first_time_message (4753441005253327841) -->
- <skip />
+ <string name="apm_enabled_first_time_message" msgid="4753441005253327841">"ਤੁਹਾਡਾ ਫ਼ੋਨ ਹਵਾਈ-ਜਹਾਜ਼ ਮੋਡ ਵਿੱਚ ਵਾਈ-ਫਾਈ ਨੂੰ ਚਾਲੂ ਰੱਖਣਾ ਯਾਦ ਰੱਖਦਾ ਹੈ। ਜੇ ਤੁਸੀਂ ਇਸਨੂੰ ਚਾਲੂ ਨਹੀਂ ਰੱਖਣਾ ਚਾਹੁੰਦੇ ਹੋ, ਤਾਂ ਵਾਈ-ਫਾਈ ਨੂੰ ਬੰਦ ਕਰੋ।"</string>
</resources>
diff --git a/service/ServiceWifiResources/res/values-pl/strings.xml b/service/ServiceWifiResources/res/values-pl/strings.xml
index 6a13a74fd2..f0b9ec59be 100644
--- a/service/ServiceWifiResources/res/values-pl/strings.xml
+++ b/service/ServiceWifiResources/res/values-pl/strings.xml
@@ -164,9 +164,7 @@
<string name="wifi_network_disabled_by_admin_message" msgid="7830360441333155462">"Administrator wyłączył sieć <xliff:g id="SSID">%1$s</xliff:g>."</string>
<string name="wifi_network_disabled_by_admin_button" msgid="3350310756265122689">"Zamknij"</string>
<string name="wifi_enabled_apm_first_time_title" msgid="4814302384637588804">"Wi‑Fi włączone w trybie samolotowym"</string>
- <!-- no translation found for wifi_enabled_apm_first_time_message (5443101896157496353) -->
- <skip />
+ <string name="wifi_enabled_apm_first_time_message" msgid="5443101896157496353">"Jeśli pozostawisz funkcję Wi‑Fi włączoną, telefon zachowa się podobnie przy kolejnym przejściu w tryb samolotowy"</string>
<string name="apm_enabled_first_time_title" msgid="2534167413190488009">"Wi-Fi pozostanie włączone"</string>
- <!-- no translation found for apm_enabled_first_time_message (4753441005253327841) -->
- <skip />
+ <string name="apm_enabled_first_time_message" msgid="4753441005253327841">"Wi-Fi na telefonie pozostaje włączone w trybie samolotowym. Wyłącz Wi‑Fi, jeśli nie chcesz, aby ta funkcja pozostała uruchomiona."</string>
</resources>
diff --git a/service/ServiceWifiResources/res/values-pt-rBR/strings.xml b/service/ServiceWifiResources/res/values-pt-rBR/strings.xml
index 6b044eac0e..e4e27d7a07 100644
--- a/service/ServiceWifiResources/res/values-pt-rBR/strings.xml
+++ b/service/ServiceWifiResources/res/values-pt-rBR/strings.xml
@@ -164,9 +164,7 @@
<string name="wifi_network_disabled_by_admin_message" msgid="7830360441333155462">"O recurso <xliff:g id="SSID">%1$s</xliff:g> foi desativado pelo administrador."</string>
<string name="wifi_network_disabled_by_admin_button" msgid="3350310756265122689">"Fechar"</string>
<string name="wifi_enabled_apm_first_time_title" msgid="4814302384637588804">"Wi-Fi ativado no modo avião"</string>
- <!-- no translation found for wifi_enabled_apm_first_time_message (5443101896157496353) -->
- <skip />
+ <string name="wifi_enabled_apm_first_time_message" msgid="5443101896157496353">"Se você escolher manter o Wi‑Fi ligado, na próxima vez que você estiver em modo avião, o Wi-Fi do smartphone vai continuar ativado"</string>
<string name="apm_enabled_first_time_title" msgid="2534167413190488009">"O Wi-Fi fica ativado"</string>
- <!-- no translation found for apm_enabled_first_time_message (4753441005253327841) -->
- <skip />
+ <string name="apm_enabled_first_time_message" msgid="4753441005253327841">"O smartphone vai manter o Wi-Fi ligado no modo avião. Desligue o Wi‑Fi se você não quer que ele fique ativado."</string>
</resources>
diff --git a/service/ServiceWifiResources/res/values-pt-rPT/strings.xml b/service/ServiceWifiResources/res/values-pt-rPT/strings.xml
index 4ee0be601f..fb0be094eb 100644
--- a/service/ServiceWifiResources/res/values-pt-rPT/strings.xml
+++ b/service/ServiceWifiResources/res/values-pt-rPT/strings.xml
@@ -164,9 +164,7 @@
<string name="wifi_network_disabled_by_admin_message" msgid="7830360441333155462">"O administrador desativou a funcionalidade <xliff:g id="SSID">%1$s</xliff:g>."</string>
<string name="wifi_network_disabled_by_admin_button" msgid="3350310756265122689">"Fechar"</string>
<string name="wifi_enabled_apm_first_time_title" msgid="4814302384637588804">"Wi‑Fi ativado no modo de avião"</string>
- <!-- no translation found for wifi_enabled_apm_first_time_message (5443101896157496353) -->
- <skip />
+ <string name="wifi_enabled_apm_first_time_message" msgid="5443101896157496353">"Se mantiver o Wi‑Fi ativado, o telemóvel vai lembrar-se de o manter ativado da próxima vez que estiver no modo de avião"</string>
<string name="apm_enabled_first_time_title" msgid="2534167413190488009">"O Wi‑Fi mantém-se ativado"</string>
- <!-- no translation found for apm_enabled_first_time_message (4753441005253327841) -->
- <skip />
+ <string name="apm_enabled_first_time_message" msgid="4753441005253327841">"O seu telemóvel mantém o Wi-Fi ativado no modo de avião. Desative o Wi-Fi se não quiser que fique ativado."</string>
</resources>
diff --git a/service/ServiceWifiResources/res/values-pt/strings.xml b/service/ServiceWifiResources/res/values-pt/strings.xml
index 6b044eac0e..e4e27d7a07 100644
--- a/service/ServiceWifiResources/res/values-pt/strings.xml
+++ b/service/ServiceWifiResources/res/values-pt/strings.xml
@@ -164,9 +164,7 @@
<string name="wifi_network_disabled_by_admin_message" msgid="7830360441333155462">"O recurso <xliff:g id="SSID">%1$s</xliff:g> foi desativado pelo administrador."</string>
<string name="wifi_network_disabled_by_admin_button" msgid="3350310756265122689">"Fechar"</string>
<string name="wifi_enabled_apm_first_time_title" msgid="4814302384637588804">"Wi-Fi ativado no modo avião"</string>
- <!-- no translation found for wifi_enabled_apm_first_time_message (5443101896157496353) -->
- <skip />
+ <string name="wifi_enabled_apm_first_time_message" msgid="5443101896157496353">"Se você escolher manter o Wi‑Fi ligado, na próxima vez que você estiver em modo avião, o Wi-Fi do smartphone vai continuar ativado"</string>
<string name="apm_enabled_first_time_title" msgid="2534167413190488009">"O Wi-Fi fica ativado"</string>
- <!-- no translation found for apm_enabled_first_time_message (4753441005253327841) -->
- <skip />
+ <string name="apm_enabled_first_time_message" msgid="4753441005253327841">"O smartphone vai manter o Wi-Fi ligado no modo avião. Desligue o Wi‑Fi se você não quer que ele fique ativado."</string>
</resources>
diff --git a/service/ServiceWifiResources/res/values-ro/strings.xml b/service/ServiceWifiResources/res/values-ro/strings.xml
index bed936e8b9..5fe9d8dc3d 100644
--- a/service/ServiceWifiResources/res/values-ro/strings.xml
+++ b/service/ServiceWifiResources/res/values-ro/strings.xml
@@ -164,9 +164,7 @@
<string name="wifi_network_disabled_by_admin_message" msgid="7830360441333155462">"Administratorul a dezactivat <xliff:g id="SSID">%1$s</xliff:g>."</string>
<string name="wifi_network_disabled_by_admin_button" msgid="3350310756265122689">"Închide"</string>
<string name="wifi_enabled_apm_first_time_title" msgid="4814302384637588804">"Wi‑Fi activat în modul Avion"</string>
- <!-- no translation found for wifi_enabled_apm_first_time_message (5443101896157496353) -->
- <skip />
+ <string name="wifi_enabled_apm_first_time_message" msgid="5443101896157496353">"Dacă păstrezi Wi‑Fi activat, telefonul tău va reține să-l păstreze activat data viitoare când ești în modul Avion"</string>
<string name="apm_enabled_first_time_title" msgid="2534167413190488009">"Funcția Wi‑Fi rămâne activată"</string>
- <!-- no translation found for apm_enabled_first_time_message (4753441005253327841) -->
- <skip />
+ <string name="apm_enabled_first_time_message" msgid="4753441005253327841">"Telefonul reține să păstreze funcția Wi-Fi activată în modul Avion. Dezactivează Wi‑Fi dacă nu vrei să rămână activat."</string>
</resources>
diff --git a/service/ServiceWifiResources/res/values-ru/strings.xml b/service/ServiceWifiResources/res/values-ru/strings.xml
index 7179dd51ae..041ef1f897 100644
--- a/service/ServiceWifiResources/res/values-ru/strings.xml
+++ b/service/ServiceWifiResources/res/values-ru/strings.xml
@@ -164,9 +164,7 @@
<string name="wifi_network_disabled_by_admin_message" msgid="7830360441333155462">"Администратор отключил функцию \"<xliff:g id="SSID">%1$s</xliff:g>\"."</string>
<string name="wifi_network_disabled_by_admin_button" msgid="3350310756265122689">"Закрыть"</string>
<string name="wifi_enabled_apm_first_time_title" msgid="4814302384637588804">"Wi‑Fi будет включен в режиме полета"</string>
- <!-- no translation found for wifi_enabled_apm_first_time_message (5443101896157496353) -->
- <skip />
+ <string name="wifi_enabled_apm_first_time_message" msgid="5443101896157496353">"Если не отключить функцию Wi-Fi, в следующий раз она останется включенной в режиме полета."</string>
<string name="apm_enabled_first_time_title" msgid="2534167413190488009">"Функция Wi‑Fi остается включенной"</string>
- <!-- no translation found for apm_enabled_first_time_message (4753441005253327841) -->
- <skip />
+ <string name="apm_enabled_first_time_message" msgid="4753441005253327841">"Функция Wi‑Fi останется включенной в режиме полета. Вы можете отключить ее, если хотите."</string>
</resources>
diff --git a/service/ServiceWifiResources/res/values-si/strings.xml b/service/ServiceWifiResources/res/values-si/strings.xml
index ea269f6d6b..892104648b 100644
--- a/service/ServiceWifiResources/res/values-si/strings.xml
+++ b/service/ServiceWifiResources/res/values-si/strings.xml
@@ -164,9 +164,7 @@
<string name="wifi_network_disabled_by_admin_message" msgid="7830360441333155462">"<xliff:g id="SSID">%1$s</xliff:g> ඔබේ පරිපාලක විසින් අබල කර ඇත."</string>
<string name="wifi_network_disabled_by_admin_button" msgid="3350310756265122689">"වසන්න"</string>
<string name="wifi_enabled_apm_first_time_title" msgid="4814302384637588804">"ගුවන්යානා ප්‍රකාරය තුළ Wi‑Fi සක්‍රීයයි"</string>
- <!-- no translation found for wifi_enabled_apm_first_time_message (5443101896157496353) -->
- <skip />
+ <string name="wifi_enabled_apm_first_time_message" msgid="5443101896157496353">"ඔබ Wi‑Fi ක්‍රියාත්මක කර තබා ගන්නේ නම්, ඔබ අහස්යානා ආකාරයේ සිටින මීළඟ වතාවේ එය ක්‍රියාත්මක කිරීමට ඔබේ දුරකථනයට මතක තිබෙනු ඇත."</string>
<string name="apm_enabled_first_time_title" msgid="2534167413190488009">"Wi-Fi ක්‍රියාත්මකව පවතී"</string>
- <!-- no translation found for apm_enabled_first_time_message (4753441005253327841) -->
- <skip />
+ <string name="apm_enabled_first_time_message" msgid="4753441005253327841">"ඔබේ දුරකථනය අහස්යානා ආකාරයේ දී Wi‑Fi ක්‍රියාත්මකව තබා ගැනීමට මතක තබා ගනියි. ඔබට Wi‑Fi ක්‍රියාත්මක වීමට අවශ්‍ය නොවේ නම් එය ක්‍රියාවිරහිත කරන්න."</string>
</resources>
diff --git a/service/ServiceWifiResources/res/values-sk/strings.xml b/service/ServiceWifiResources/res/values-sk/strings.xml
index 8d00f9019c..835cbc75a7 100644
--- a/service/ServiceWifiResources/res/values-sk/strings.xml
+++ b/service/ServiceWifiResources/res/values-sk/strings.xml
@@ -164,9 +164,7 @@
<string name="wifi_network_disabled_by_admin_message" msgid="7830360441333155462">"Funkcia <xliff:g id="SSID">%1$s</xliff:g> je deaktivovaná správcom."</string>
<string name="wifi_network_disabled_by_admin_button" msgid="3350310756265122689">"Zavrieť"</string>
<string name="wifi_enabled_apm_first_time_title" msgid="4814302384637588804">"Sieť Wi‑Fi bude v režime v lietadle zapnutá"</string>
- <!-- no translation found for wifi_enabled_apm_first_time_message (5443101896157496353) -->
- <skip />
+ <string name="wifi_enabled_apm_first_time_message" msgid="5443101896157496353">"Ak ponecháte sieť Wi‑Fi zapnutú, váš telefón si zapamätá, že ju má ponechať zapnutú pri ďalšom aktivovaní režimu v lietadle"</string>
<string name="apm_enabled_first_time_title" msgid="2534167413190488009">"Pripojenie Wi‑Fi zostane zapnuté"</string>
- <!-- no translation found for apm_enabled_first_time_message (4753441005253327841) -->
- <skip />
+ <string name="apm_enabled_first_time_message" msgid="4753441005253327841">"Telefón si zapamätá, aby v režime v lietadle nevypínal sieť Wi‑Fi. Vypnite ju, ak nechcete, aby zostala zapnutá."</string>
</resources>
diff --git a/service/ServiceWifiResources/res/values-sl/strings.xml b/service/ServiceWifiResources/res/values-sl/strings.xml
index ab763ba559..3f02e07d7a 100644
--- a/service/ServiceWifiResources/res/values-sl/strings.xml
+++ b/service/ServiceWifiResources/res/values-sl/strings.xml
@@ -164,9 +164,7 @@
<string name="wifi_network_disabled_by_admin_message" msgid="7830360441333155462">"Omrežje <xliff:g id="SSID">%1$s</xliff:g> je onemogočil skrbnik."</string>
<string name="wifi_network_disabled_by_admin_button" msgid="3350310756265122689">"Zapri"</string>
<string name="wifi_enabled_apm_first_time_title" msgid="4814302384637588804">"Wi‑Fi je vklopljen v načinu za letalo."</string>
- <!-- no translation found for wifi_enabled_apm_first_time_message (5443101896157496353) -->
- <skip />
+ <string name="wifi_enabled_apm_first_time_message" msgid="5443101896157496353">"Če pustite Wi-Fi vklopljen, bo telefon ob naslednjem preklopu na način za letalo pustil Wi-Fi vklopljen."</string>
<string name="apm_enabled_first_time_title" msgid="2534167413190488009">"Wi-Fi ostane vklopljen"</string>
- <!-- no translation found for apm_enabled_first_time_message (4753441005253327841) -->
- <skip />
+ <string name="apm_enabled_first_time_message" msgid="4753441005253327841">"Telefon v načinu za letalo pusti Wi-Fi vklopljen. Če ne želite, da ostane vklopljen, izklopite vmesnik Wi‑Fi."</string>
</resources>
diff --git a/service/ServiceWifiResources/res/values-sq/strings.xml b/service/ServiceWifiResources/res/values-sq/strings.xml
index bd22a68f83..418e67ab74 100644
--- a/service/ServiceWifiResources/res/values-sq/strings.xml
+++ b/service/ServiceWifiResources/res/values-sq/strings.xml
@@ -164,9 +164,7 @@
<string name="wifi_network_disabled_by_admin_message" msgid="7830360441333155462">"<xliff:g id="SSID">%1$s</xliff:g> është çaktivizuar nga administratori yt."</string>
<string name="wifi_network_disabled_by_admin_button" msgid="3350310756265122689">"Mbyll"</string>
<string name="wifi_enabled_apm_first_time_title" msgid="4814302384637588804">"Wi‑Fi është në modalitetin e aeroplanit"</string>
- <!-- no translation found for wifi_enabled_apm_first_time_message (5443101896157496353) -->
- <skip />
+ <string name="wifi_enabled_apm_first_time_message" msgid="5443101896157496353">"Nëse e mban Wi-Fi të aktivizuar, telefoni yt do të kujtohet ta mbajë atë të aktivizuar herën tjetër që të jesh në modalitetin e aeroplanit"</string>
<string name="apm_enabled_first_time_title" msgid="2534167413190488009">"Wi‑Fi qëndron aktiv"</string>
- <!-- no translation found for apm_enabled_first_time_message (4753441005253327841) -->
- <skip />
+ <string name="apm_enabled_first_time_message" msgid="4753441005253327841">"Telefoni yt kujtohet që ta mbajë Wi-Fi të aktivizuar në modalitetin e aeroplanit. Çaktivizo Wi‑Fi nëse nuk dëshiron që të qëndrojë e aktivizuar."</string>
</resources>
diff --git a/service/ServiceWifiResources/res/values-sr/strings.xml b/service/ServiceWifiResources/res/values-sr/strings.xml
index 4f514c9612..75cc48a167 100644
--- a/service/ServiceWifiResources/res/values-sr/strings.xml
+++ b/service/ServiceWifiResources/res/values-sr/strings.xml
@@ -164,9 +164,7 @@
<string name="wifi_network_disabled_by_admin_message" msgid="7830360441333155462">"Администратор је онемогућио <xliff:g id="SSID">%1$s</xliff:g>."</string>
<string name="wifi_network_disabled_by_admin_button" msgid="3350310756265122689">"Затвори"</string>
<string name="wifi_enabled_apm_first_time_title" msgid="4814302384637588804">"WiFi је укључен у режиму рада у авиону"</string>
- <!-- no translation found for wifi_enabled_apm_first_time_message (5443101896157496353) -->
- <skip />
+ <string name="wifi_enabled_apm_first_time_message" msgid="5443101896157496353">"Ако одлучите да не искључујете WiFi, телефон ће запамтити да га не искључује следећи пут када будете у режиму рада у авиону"</string>
<string name="apm_enabled_first_time_title" msgid="2534167413190488009">"WiFi остаје укључен"</string>
- <!-- no translation found for apm_enabled_first_time_message (4753441005253327841) -->
- <skip />
+ <string name="apm_enabled_first_time_message" msgid="4753441005253327841">"Телефон памти да не треба да искључује WiFi у режиму рада у авиону. Искључите WiFi ако не желите да остане укључен."</string>
</resources>
diff --git a/service/ServiceWifiResources/res/values-sv/strings.xml b/service/ServiceWifiResources/res/values-sv/strings.xml
index 337363185f..2daf149846 100644
--- a/service/ServiceWifiResources/res/values-sv/strings.xml
+++ b/service/ServiceWifiResources/res/values-sv/strings.xml
@@ -164,9 +164,7 @@
<string name="wifi_network_disabled_by_admin_message" msgid="7830360441333155462">"<xliff:g id="SSID">%1$s</xliff:g> har inaktiverats av administratören."</string>
<string name="wifi_network_disabled_by_admin_button" msgid="3350310756265122689">"Stäng"</string>
<string name="wifi_enabled_apm_first_time_title" msgid="4814302384637588804">"Wifi är aktiverat i flygplansläget"</string>
- <!-- no translation found for wifi_enabled_apm_first_time_message (5443101896157496353) -->
- <skip />
+ <string name="wifi_enabled_apm_first_time_message" msgid="5443101896157496353">"Om du håller wifi aktiverat kommer telefonen ihåg att hålla det aktiverat nästa gång du använder flygplansläge."</string>
<string name="apm_enabled_first_time_title" msgid="2534167413190488009">"Wifi inaktiveras inte"</string>
- <!-- no translation found for apm_enabled_first_time_message (4753441005253327841) -->
- <skip />
+ <string name="apm_enabled_first_time_message" msgid="4753441005253327841">"Telefonen håller wifi aktiverat i flygplansläge. Inaktivera wifi om du inte vill att wifi ska hållas aktiverat."</string>
</resources>
diff --git a/service/ServiceWifiResources/res/values-sw/strings.xml b/service/ServiceWifiResources/res/values-sw/strings.xml
index 5d4dee3f8c..63df9faf47 100644
--- a/service/ServiceWifiResources/res/values-sw/strings.xml
+++ b/service/ServiceWifiResources/res/values-sw/strings.xml
@@ -164,9 +164,7 @@
<string name="wifi_network_disabled_by_admin_message" msgid="7830360441333155462">"<xliff:g id="SSID">%1$s</xliff:g> umezimwa na msimamizi wako."</string>
<string name="wifi_network_disabled_by_admin_button" msgid="3350310756265122689">"Funga"</string>
<string name="wifi_enabled_apm_first_time_title" msgid="4814302384637588804">"Wi‑Fi itawashwa katika hali ya ndegeni"</string>
- <!-- no translation found for wifi_enabled_apm_first_time_message (5443101896157496353) -->
- <skip />
+ <string name="wifi_enabled_apm_first_time_message" msgid="5443101896157496353">"Usipozima Wi-Fi, simu yako itakumbuka kuiwasha wakati mwingine unapokuwa katika hali ya ndegeni"</string>
<string name="apm_enabled_first_time_title" msgid="2534167413190488009">"Wi-Fi itaendelea kuwaka"</string>
- <!-- no translation found for apm_enabled_first_time_message (4753441005253327841) -->
- <skip />
+ <string name="apm_enabled_first_time_message" msgid="4753441005253327841">"Simu yako itaendelea kuwasha Wi-Fi inapokuwa katika hali ya ndegeni. Zima Wi-Fi iwapo hutaki iendelee kuwaka."</string>
</resources>
diff --git a/service/ServiceWifiResources/res/values-ta/strings.xml b/service/ServiceWifiResources/res/values-ta/strings.xml
index d385417da4..47728160b9 100644
--- a/service/ServiceWifiResources/res/values-ta/strings.xml
+++ b/service/ServiceWifiResources/res/values-ta/strings.xml
@@ -164,9 +164,7 @@
<string name="wifi_network_disabled_by_admin_message" msgid="7830360441333155462">"<xliff:g id="SSID">%1$s</xliff:g> உங்கள் நிர்வாகியால் முடக்கப்பட்டுள்ளது."</string>
<string name="wifi_network_disabled_by_admin_button" msgid="3350310756265122689">"மூடுக"</string>
<string name="wifi_enabled_apm_first_time_title" msgid="4814302384637588804">"விமானப் பயன்முறையில் வைஃபை இயக்கத்திலேயே இருக்கும்"</string>
- <!-- no translation found for wifi_enabled_apm_first_time_message (5443101896157496353) -->
- <skip />
+ <string name="wifi_enabled_apm_first_time_message" msgid="5443101896157496353">"வைஃபையை இயக்கத்தில் வைத்திருந்தால், அடுத்த முறை நீங்கள் விமானப் பயன்முறையைப் பயன்படுத்தும்போது உங்கள் மொபைல் வைஃபையை இயக்கத்தில் வைக்கும்"</string>
<string name="apm_enabled_first_time_title" msgid="2534167413190488009">"வைஃபை இயக்கத்திலேயே இருக்கும்"</string>
- <!-- no translation found for apm_enabled_first_time_message (4753441005253327841) -->
- <skip />
+ <string name="apm_enabled_first_time_message" msgid="4753441005253327841">"உங்கள் மொபைல் விமானப் பயன்முறையில் இருக்கும்போது வைஃபையை இயக்கத்திலேயே வைத்திருக்கும். வைஃபையைப் பயன்படுத்த விரும்பவில்லை என்றால் அதை முடக்கவும்."</string>
</resources>
diff --git a/service/ServiceWifiResources/res/values-te/strings.xml b/service/ServiceWifiResources/res/values-te/strings.xml
index 47f53eda42..26fbd27d2a 100644
--- a/service/ServiceWifiResources/res/values-te/strings.xml
+++ b/service/ServiceWifiResources/res/values-te/strings.xml
@@ -164,9 +164,7 @@
<string name="wifi_network_disabled_by_admin_message" msgid="7830360441333155462">"<xliff:g id="SSID">%1$s</xliff:g>ను మీ అడ్మినిస్ట్రేటర్ డిజేబుల్ చేశారు."</string>
<string name="wifi_network_disabled_by_admin_button" msgid="3350310756265122689">"మూసివేయండి"</string>
<string name="wifi_enabled_apm_first_time_title" msgid="4814302384637588804">"విమానం మోడ్‌లో Wi‑Fi ఆన్ చేయబడింది"</string>
- <!-- no translation found for wifi_enabled_apm_first_time_message (5443101896157496353) -->
- <skip />
+ <string name="wifi_enabled_apm_first_time_message" msgid="5443101896157496353">"మీరు Wi‑Fiని ఆన్‌లో ఉంచినట్లయితే, మీరు తదుపరిసారి విమానం మోడ్‌లో ఉన్నప్పుడు దాన్ని ఆన్‌లో ఉంచాలని మీ ఫోన్ గుర్తుంచుకుంటుంది"</string>
<string name="apm_enabled_first_time_title" msgid="2534167413190488009">"Wi‑Fi ఆన్‌లోనే ఉంటుంది"</string>
- <!-- no translation found for apm_enabled_first_time_message (4753441005253327841) -->
- <skip />
+ <string name="apm_enabled_first_time_message" msgid="4753441005253327841">"మీ ఫోన్ విమానం మోడ్‌లో Wi‑Fiని ఆన్‌లో ఉంచాలని గుర్తుంచుకుంటుంది. Wi‑Fi ఆన్‌లో ఉండకూడదనుకుంటే దాన్ని ఆఫ్ చేయండి."</string>
</resources>
diff --git a/service/ServiceWifiResources/res/values-th/strings.xml b/service/ServiceWifiResources/res/values-th/strings.xml
index 38355e7c44..85cea77bdc 100644
--- a/service/ServiceWifiResources/res/values-th/strings.xml
+++ b/service/ServiceWifiResources/res/values-th/strings.xml
@@ -164,9 +164,7 @@
<string name="wifi_network_disabled_by_admin_message" msgid="7830360441333155462">"ผู้ดูแลระบบปิดใช้ <xliff:g id="SSID">%1$s</xliff:g>"</string>
<string name="wifi_network_disabled_by_admin_button" msgid="3350310756265122689">"ปิด"</string>
<string name="wifi_enabled_apm_first_time_title" msgid="4814302384637588804">"Wi‑Fi จะเปิดในโหมดบนเครื่องบิน"</string>
- <!-- no translation found for wifi_enabled_apm_first_time_message (5443101896157496353) -->
- <skip />
+ <string name="wifi_enabled_apm_first_time_message" msgid="5443101896157496353">"หากเปิด Wi-Fi ไว้ โทรศัพท์จะจำว่าต้องเปิด Wi-Fi ในครั้งถัดไปที่คุณอยู่ในโหมดบนเครื่องบิน"</string>
<string name="apm_enabled_first_time_title" msgid="2534167413190488009">"Wi-Fi เปิดอยู่"</string>
- <!-- no translation found for apm_enabled_first_time_message (4753441005253327841) -->
- <skip />
+ <string name="apm_enabled_first_time_message" msgid="4753441005253327841">"โทรศัพท์จำว่าจะต้องเปิด Wi-Fi ในโหมดบนเครื่องบิน ปิด Wi-Fi หากคุณไม่ต้องการให้เปิดไว้"</string>
</resources>
diff --git a/service/ServiceWifiResources/res/values-tl/strings.xml b/service/ServiceWifiResources/res/values-tl/strings.xml
index 8ab7d880ba..77306771ce 100644
--- a/service/ServiceWifiResources/res/values-tl/strings.xml
+++ b/service/ServiceWifiResources/res/values-tl/strings.xml
@@ -164,9 +164,7 @@
<string name="wifi_network_disabled_by_admin_message" msgid="7830360441333155462">"Na-disable ng iyong administrator ang <xliff:g id="SSID">%1$s</xliff:g>."</string>
<string name="wifi_network_disabled_by_admin_button" msgid="3350310756265122689">"Isara"</string>
<string name="wifi_enabled_apm_first_time_title" msgid="4814302384637588804">"I-on ang Wi‑Fi habang nasa airplane mode"</string>
- <!-- no translation found for wifi_enabled_apm_first_time_message (5443101896157496353) -->
- <skip />
+ <string name="wifi_enabled_apm_first_time_message" msgid="5443101896157496353">"Kung papanatilihin mong naka-on ang Wi‑Fi, tatandaan ng iyong telepono na panatilihin itong naka-on sa susunod na nasa airplane mode ka"</string>
<string name="apm_enabled_first_time_title" msgid="2534167413190488009">"Mananatiling naka-on ang Wi‑Fi"</string>
- <!-- no translation found for apm_enabled_first_time_message (4753441005253327841) -->
- <skip />
+ <string name="apm_enabled_first_time_message" msgid="4753441005253327841">"Tinatandaan ng iyong telepono na panatilihing naka-on ang Wi-Fi habang nasa airplane mode. I-off ang Wi‑Fi kung ayaw mo itong manatiling naka-on."</string>
</resources>
diff --git a/service/ServiceWifiResources/res/values-tr/strings.xml b/service/ServiceWifiResources/res/values-tr/strings.xml
index f8a1b6ae89..088f30f426 100644
--- a/service/ServiceWifiResources/res/values-tr/strings.xml
+++ b/service/ServiceWifiResources/res/values-tr/strings.xml
@@ -164,9 +164,7 @@
<string name="wifi_network_disabled_by_admin_message" msgid="7830360441333155462">"<xliff:g id="SSID">%1$s</xliff:g>, yöneticiniz tarafından devre dışı bırakıldı."</string>
<string name="wifi_network_disabled_by_admin_button" msgid="3350310756265122689">"Kapat"</string>
<string name="wifi_enabled_apm_first_time_title" msgid="4814302384637588804">"Uçak modundayken kablosuz bağlantı açık"</string>
- <!-- no translation found for wifi_enabled_apm_first_time_message (5443101896157496353) -->
- <skip />
+ <string name="wifi_enabled_apm_first_time_message" msgid="5443101896157496353">"Kablosuz bağlantıyı açık tutarsanız telefonunuz, daha sonra tekrar uçak modunda olduğunuzda kablosuz bağlantıyı açık tutar"</string>
<string name="apm_enabled_first_time_title" msgid="2534167413190488009">"Kablosuz bağlantı açık kalır"</string>
- <!-- no translation found for apm_enabled_first_time_message (4753441005253327841) -->
- <skip />
+ <string name="apm_enabled_first_time_message" msgid="4753441005253327841">"Telefonunuz, uçak modundayken kablosuz bağlantıyı açık tutmayı hatırlar. Açık kalmasını istemiyorsanız kablosuz bağlantıyı kapatın."</string>
</resources>
diff --git a/service/ServiceWifiResources/res/values-uk/strings.xml b/service/ServiceWifiResources/res/values-uk/strings.xml
index 2a34dc0621..797f361baf 100644
--- a/service/ServiceWifiResources/res/values-uk/strings.xml
+++ b/service/ServiceWifiResources/res/values-uk/strings.xml
@@ -164,9 +164,7 @@
<string name="wifi_network_disabled_by_admin_message" msgid="7830360441333155462">"Адміністратор вимкнув мережу <xliff:g id="SSID">%1$s</xliff:g>."</string>
<string name="wifi_network_disabled_by_admin_button" msgid="3350310756265122689">"Закрити"</string>
<string name="wifi_enabled_apm_first_time_title" msgid="4814302384637588804">"Ви ввімкнули Wi‑Fi у режимі польоту"</string>
- <!-- no translation found for wifi_enabled_apm_first_time_message (5443101896157496353) -->
- <skip />
+ <string name="wifi_enabled_apm_first_time_message" msgid="5443101896157496353">"Якщо ви не вимкнете Wi‑Fi на телефоні, ця функція залишатиметься ввімкненою під час наступного використання режиму польоту"</string>
<string name="apm_enabled_first_time_title" msgid="2534167413190488009">"Wi‑Fi не буде вимкнено"</string>
- <!-- no translation found for apm_enabled_first_time_message (4753441005253327841) -->
- <skip />
+ <string name="apm_enabled_first_time_message" msgid="4753441005253327841">"У режимі польоту функція Wi‑Fi на телефоні залишатиметься ввімкненою. Якщо захочете вимкнути її, вимкніть Wi‑Fi."</string>
</resources>
diff --git a/service/ServiceWifiResources/res/values-ur/strings.xml b/service/ServiceWifiResources/res/values-ur/strings.xml
index 8f8f6f0ac2..58789120f1 100644
--- a/service/ServiceWifiResources/res/values-ur/strings.xml
+++ b/service/ServiceWifiResources/res/values-ur/strings.xml
@@ -164,9 +164,7 @@
<string name="wifi_network_disabled_by_admin_message" msgid="7830360441333155462">"<xliff:g id="SSID">%1$s</xliff:g> کو آپ کے منتظم کے ذریعے مسدود کر دیا گیا ہے۔"</string>
<string name="wifi_network_disabled_by_admin_button" msgid="3350310756265122689">"بند کریں"</string>
<string name="wifi_enabled_apm_first_time_title" msgid="4814302384637588804">"‏ہوائی جہاز وضع میں Wi‑Fi آن ہے"</string>
- <!-- no translation found for wifi_enabled_apm_first_time_message (5443101896157496353) -->
- <skip />
+ <string name="wifi_enabled_apm_first_time_message" msgid="5443101896157496353">"‏اگر آپ Wi-Fi کو آن رکھتے ہیں تو آپ کا فون آپ کے اگلی مرتبہ ہوائی جہاز وضع میں ہونے پر اسے آن رکھنا یاد رکھے گا"</string>
<string name="apm_enabled_first_time_title" msgid="2534167413190488009">"‏Wi‑Fi آن رہتا ہے"</string>
- <!-- no translation found for apm_enabled_first_time_message (4753441005253327841) -->
- <skip />
+ <string name="apm_enabled_first_time_message" msgid="4753441005253327841">"‏آپ کا فون ہوائی جہاز وضع میں Wi‑Fi کو آن رکھنا یاد رکھتا ہے۔ اگر آپ نہیں چاہتے ہیں کہ Wi-Fi آن رہے تو اسے آف کریں۔"</string>
</resources>
diff --git a/service/ServiceWifiResources/res/values-uz/strings.xml b/service/ServiceWifiResources/res/values-uz/strings.xml
index e62ec1e76d..32996676a3 100644
--- a/service/ServiceWifiResources/res/values-uz/strings.xml
+++ b/service/ServiceWifiResources/res/values-uz/strings.xml
@@ -164,9 +164,7 @@
<string name="wifi_network_disabled_by_admin_message" msgid="7830360441333155462">"<xliff:g id="SSID">%1$s</xliff:g> administrator tomonidan faolsizlantirilgan."</string>
<string name="wifi_network_disabled_by_admin_button" msgid="3350310756265122689">"Yopish"</string>
<string name="wifi_enabled_apm_first_time_title" msgid="4814302384637588804">"Wi‑Fi parvoz rejimida yoniq"</string>
- <!-- no translation found for wifi_enabled_apm_first_time_message (5443101896157496353) -->
- <skip />
+ <string name="wifi_enabled_apm_first_time_message" msgid="5443101896157496353">"Wi-Fi yoniq qolsa, telefon keyingi safar parvoz rejimida ham uni yoniq qoldiradi."</string>
<string name="apm_enabled_first_time_title" msgid="2534167413190488009">"Wi‑Fi yoniq turadi"</string>
- <!-- no translation found for apm_enabled_first_time_message (4753441005253327841) -->
- <skip />
+ <string name="apm_enabled_first_time_message" msgid="4753441005253327841">"Telefoningiz parvoz rejimida Wi‑Fi yoqilganini eslab qoladi. Yoniq qolmasligi uchun Wi-Fi aloqasini oʻchiring."</string>
</resources>
diff --git a/service/ServiceWifiResources/res/values-vi/strings.xml b/service/ServiceWifiResources/res/values-vi/strings.xml
index 1470d42809..56ccaf2902 100644
--- a/service/ServiceWifiResources/res/values-vi/strings.xml
+++ b/service/ServiceWifiResources/res/values-vi/strings.xml
@@ -164,9 +164,7 @@
<string name="wifi_network_disabled_by_admin_message" msgid="7830360441333155462">"Quản trị viên của bạn đã tắt tính năng <xliff:g id="SSID">%1$s</xliff:g>."</string>
<string name="wifi_network_disabled_by_admin_button" msgid="3350310756265122689">"Đóng"</string>
<string name="wifi_enabled_apm_first_time_title" msgid="4814302384637588804">"Wi‑Fi bật ở chế độ trên máy bay"</string>
- <!-- no translation found for wifi_enabled_apm_first_time_message (5443101896157496353) -->
- <skip />
+ <string name="wifi_enabled_apm_first_time_message" msgid="5443101896157496353">"Nếu bạn không tắt Wi‑Fi, điện thoại sẽ luôn bật Wi‑Fi vào lần tiếp theo bạn dùng chế độ trên máy bay"</string>
<string name="apm_enabled_first_time_title" msgid="2534167413190488009">"Wi ‑ Fi luôn được bật"</string>
- <!-- no translation found for apm_enabled_first_time_message (4753441005253327841) -->
- <skip />
+ <string name="apm_enabled_first_time_message" msgid="4753441005253327841">"Điện thoại của bạn sẽ luôn bật Wi-Fi ở chế độ trên máy bay. Nếu không muốn như vậy thì bạn có thể tắt Wi-Fi."</string>
</resources>
diff --git a/service/ServiceWifiResources/res/values-zh-rCN/strings.xml b/service/ServiceWifiResources/res/values-zh-rCN/strings.xml
index 24f5cb288f..ff15bf9933 100644
--- a/service/ServiceWifiResources/res/values-zh-rCN/strings.xml
+++ b/service/ServiceWifiResources/res/values-zh-rCN/strings.xml
@@ -164,9 +164,7 @@
<string name="wifi_network_disabled_by_admin_message" msgid="7830360441333155462">"<xliff:g id="SSID">%1$s</xliff:g> 已被您的管理员停用。"</string>
<string name="wifi_network_disabled_by_admin_button" msgid="3350310756265122689">"关闭"</string>
<string name="wifi_enabled_apm_first_time_title" msgid="4814302384637588804">"飞行模式时开启 WLAN"</string>
- <!-- no translation found for wifi_enabled_apm_first_time_message (5443101896157496353) -->
- <skip />
+ <string name="wifi_enabled_apm_first_time_message" msgid="5443101896157496353">"如果您不关闭 WLAN,那么您下次进入飞行模式时手机将记住保持 WLAN 开启"</string>
<string name="apm_enabled_first_time_title" msgid="2534167413190488009">"WLAN 保持开启状态"</string>
- <!-- no translation found for apm_enabled_first_time_message (4753441005253327841) -->
- <skip />
+ <string name="apm_enabled_first_time_message" msgid="4753441005253327841">"在飞行模式下手机将记住保持 WLAN 开启。如果您不想让 WLAN 保持开启,请将其关闭。"</string>
</resources>
diff --git a/service/ServiceWifiResources/res/values-zh-rHK/strings.xml b/service/ServiceWifiResources/res/values-zh-rHK/strings.xml
index f4f56b7f8d..e287aa040e 100644
--- a/service/ServiceWifiResources/res/values-zh-rHK/strings.xml
+++ b/service/ServiceWifiResources/res/values-zh-rHK/strings.xml
@@ -164,9 +164,7 @@
<string name="wifi_network_disabled_by_admin_message" msgid="7830360441333155462">"您的管理員已停用「<xliff:g id="SSID">%1$s</xliff:g>」。"</string>
<string name="wifi_network_disabled_by_admin_button" msgid="3350310756265122689">"關閉"</string>
<string name="wifi_enabled_apm_first_time_title" msgid="4814302384637588804">"在飛行模式下開啟 Wi-Fi"</string>
- <!-- no translation found for wifi_enabled_apm_first_time_message (5443101896157496353) -->
- <skip />
+ <string name="wifi_enabled_apm_first_time_message" msgid="5443101896157496353">"如果您不關閉 Wi-Fi,下次手機進入飛行模式時,Wi-Fi 將保持開啟"</string>
<string name="apm_enabled_first_time_title" msgid="2534167413190488009">"保持 Wi-Fi 連線"</string>
- <!-- no translation found for apm_enabled_first_time_message (4753441005253327841) -->
- <skip />
+ <string name="apm_enabled_first_time_message" msgid="4753441005253327841">"手機會記得在飛行模式下保持 Wi-Fi 開啟。如果您不希望保持開啟,請關閉 Wi-Fi。"</string>
</resources>
diff --git a/service/ServiceWifiResources/res/values-zh-rTW/strings.xml b/service/ServiceWifiResources/res/values-zh-rTW/strings.xml
index c941f23239..d2e462c16c 100644
--- a/service/ServiceWifiResources/res/values-zh-rTW/strings.xml
+++ b/service/ServiceWifiResources/res/values-zh-rTW/strings.xml
@@ -164,9 +164,7 @@
<string name="wifi_network_disabled_by_admin_message" msgid="7830360441333155462">"你的系統管理員已停用 <xliff:g id="SSID">%1$s</xliff:g>。"</string>
<string name="wifi_network_disabled_by_admin_button" msgid="3350310756265122689">"關閉"</string>
<string name="wifi_enabled_apm_first_time_title" msgid="4814302384637588804">"在飛航模式下保持 Wi-Fi 開啟狀態"</string>
- <!-- no translation found for wifi_enabled_apm_first_time_message (5443101896157496353) -->
- <skip />
+ <string name="wifi_enabled_apm_first_time_message" msgid="5443101896157496353">"如果你不關閉 Wi-Fi,下次手機進入飛航模式時,Wi-Fi 將保持開啟"</string>
<string name="apm_enabled_first_time_title" msgid="2534167413190488009">"Wi‑Fi 會保持開啟狀態"</string>
- <!-- no translation found for apm_enabled_first_time_message (4753441005253327841) -->
- <skip />
+ <string name="apm_enabled_first_time_message" msgid="4753441005253327841">"手機會記得在飛航模式下保持 Wi-Fi 開啟。如果不要保持開啟,請關閉 Wi-Fi。"</string>
</resources>
diff --git a/service/ServiceWifiResources/res/values-zu/strings.xml b/service/ServiceWifiResources/res/values-zu/strings.xml
index 69f841ce72..7fc09bc7c8 100644
--- a/service/ServiceWifiResources/res/values-zu/strings.xml
+++ b/service/ServiceWifiResources/res/values-zu/strings.xml
@@ -164,9 +164,7 @@
<string name="wifi_network_disabled_by_admin_message" msgid="7830360441333155462">"I-<xliff:g id="SSID">%1$s</xliff:g> ikhutshazwe umlawuli wakho."</string>
<string name="wifi_network_disabled_by_admin_button" msgid="3350310756265122689">"Vala"</string>
<string name="wifi_enabled_apm_first_time_title" msgid="4814302384637588804">"I-Wi‑Fi ivuliwe kumodi yendiza"</string>
- <!-- no translation found for wifi_enabled_apm_first_time_message (5443101896157496353) -->
- <skip />
+ <string name="wifi_enabled_apm_first_time_message" msgid="5443101896157496353">"Uma ugcina i-Wi‑Fi ivuliwe, ifoni yakho izokhumbula ukuyigcina ivuliwe ngesikhathi esilandelayo uma ukumodi yendiza."</string>
<string name="apm_enabled_first_time_title" msgid="2534167413190488009">"I-Wi‑Fi ihlala ivuliwe"</string>
- <!-- no translation found for apm_enabled_first_time_message (4753441005253327841) -->
- <skip />
+ <string name="apm_enabled_first_time_message" msgid="4753441005253327841">"Ifoni yakho ikhumbula ukugcina i-Wi‑Fi ivuliwe kumodi yendiza. Vala i-Wi-Fi uma ungafuni ukuthi ihlale ivuliwe."</string>
</resources>
diff --git a/service/java/com/android/server/wifi/ActiveModeWarden.java b/service/java/com/android/server/wifi/ActiveModeWarden.java
index ff60ec7a8d..481cc8869a 100644
--- a/service/java/com/android/server/wifi/ActiveModeWarden.java
+++ b/service/java/com/android/server/wifi/ActiveModeWarden.java
@@ -39,6 +39,7 @@ import android.content.Intent;
import android.content.IntentFilter;
import android.content.pm.PackageManager;
import android.location.LocationManager;
+import android.net.Network;
import android.net.wifi.ISubsystemRestartCallback;
import android.net.wifi.IWifiConnectedNetworkScorer;
import android.net.wifi.SoftApCapability;
@@ -63,6 +64,7 @@ import android.util.ArraySet;
import android.util.Log;
import android.util.Pair;
+import com.android.internal.annotations.GuardedBy;
import com.android.internal.annotations.VisibleForTesting;
import com.android.internal.util.IState;
import com.android.internal.util.Preconditions;
@@ -149,6 +151,10 @@ public class ActiveModeWarden {
@Nullable
private WorkSource mLastScanOnlyClientModeManagerRequestorWs = null;
private AtomicLong mSupportedFeatureSet = new AtomicLong(0);
+ // Mutex lock between service Api binder thread and Wifi main thread
+ private final Object mServiceApiLock = new Object();
+ @GuardedBy("mServiceApiLock")
+ private Network mCurrentNetwork;
/**
* One of {@link WifiManager#WIFI_STATE_DISABLED},
@@ -2485,4 +2491,24 @@ public class ActiveModeWarden {
public long getSupportedFeatureSet() {
return mSupportedFeatureSet.get();
}
+
+ /**
+ * Get the current default Wifi network.
+ * @return the default Wifi network
+ */
+ public Network getCurrentNetwork() {
+ synchronized (mServiceApiLock) {
+ return mCurrentNetwork;
+ }
+ }
+
+ /**
+ * Set the current default Wifi network. Called from ClientModeImpl.
+ * @param network the default Wifi network
+ */
+ protected void setCurrentNetwork(Network network) {
+ synchronized (mServiceApiLock) {
+ mCurrentNetwork = network;
+ }
+ }
}
diff --git a/service/java/com/android/server/wifi/ClientMode.java b/service/java/com/android/server/wifi/ClientMode.java
index dfef172c61..e021a7f7ae 100644
--- a/service/java/com/android/server/wifi/ClientMode.java
+++ b/service/java/com/android/server/wifi/ClientMode.java
@@ -95,7 +95,11 @@ public interface ClientMode {
boolean syncQueryPasspointIcon(long bssid, String fileName);
- Network syncGetCurrentNetwork();
+ /**
+ * Get the current Wifi network information
+ * @return network
+ */
+ Network getCurrentNetwork();
DhcpResultsParcelable syncGetDhcpResultsParcelable();
diff --git a/service/java/com/android/server/wifi/ClientModeDefaults.java b/service/java/com/android/server/wifi/ClientModeDefaults.java
index 33c3b7a0b3..3e8583c162 100644
--- a/service/java/com/android/server/wifi/ClientModeDefaults.java
+++ b/service/java/com/android/server/wifi/ClientModeDefaults.java
@@ -86,7 +86,7 @@ public interface ClientModeDefaults extends ClientMode {
return false;
}
- default Network syncGetCurrentNetwork() {
+ default Network getCurrentNetwork() {
return null;
}
diff --git a/service/java/com/android/server/wifi/ClientModeImpl.java b/service/java/com/android/server/wifi/ClientModeImpl.java
index 05eb8230a1..55a2426e9f 100644
--- a/service/java/com/android/server/wifi/ClientModeImpl.java
+++ b/service/java/com/android/server/wifi/ClientModeImpl.java
@@ -288,7 +288,7 @@ public class ClientModeImpl extends StateMachine implements ClientMode {
private boolean mCurrentConnectionDetectedCaptivePortal;
private String getTag() {
- return TAG + "[" + (mInterfaceName == null ? "unknown" : mInterfaceName) + "]";
+ return TAG + "[" + mId + ":" + (mInterfaceName == null ? "unknown" : mInterfaceName) + "]";
}
private void processRssiThreshold(byte curRssi, int reason,
@@ -1862,30 +1862,13 @@ public class ClientModeImpl extends StateMachine implements ClientMode {
}
/**
- * Should only be used internally.
- * External callers should use {@link #syncGetCurrentNetwork()}.
- */
- private Network getCurrentNetwork() {
- if (mNetworkAgent != null) {
- return mNetworkAgent.getNetwork();
- } else {
- return null;
- }
- }
-
- /**
* Get Network object of currently connected wifi network, or null if not connected.
* @return Network object of current wifi network
*/
- public Network syncGetCurrentNetwork() {
- return mWifiThreadRunner.call(
- () -> {
- if (getCurrentState() == mL3ConnectedState
- || getCurrentState() == mRoamingState) {
- return getCurrentNetwork();
- }
- return null;
- }, null);
+ public Network getCurrentNetwork() {
+ if (getCurrentState() != mL3ConnectedState
+ && getCurrentState() != mRoamingState) return null;
+ return (mNetworkAgent != null) ? mNetworkAgent.getNetwork() : null;
}
/**
@@ -3830,6 +3813,9 @@ public class ClientModeImpl extends StateMachine implements ClientMode {
* Helper method called when a L3 connection is successfully established to a network.
*/
void registerConnected() {
+ if (isPrimary()) {
+ mWifiInjector.getActiveModeWarden().setCurrentNetwork(getCurrentNetwork());
+ }
if (mLastNetworkId != WifiConfiguration.INVALID_NETWORK_ID) {
WifiConfiguration config = getConnectedWifiConfigurationInternal();
boolean shouldSetUserConnectChoice = config != null
@@ -3849,6 +3835,9 @@ public class ClientModeImpl extends StateMachine implements ClientMode {
}
void registerDisconnected() {
+ if (isPrimary()) {
+ mWifiInjector.getActiveModeWarden().setCurrentNetwork(getCurrentNetwork());
+ }
if (mLastNetworkId != WifiConfiguration.INVALID_NETWORK_ID) {
mWifiConfigManager.updateNetworkAfterDisconnect(mLastNetworkId);
}
@@ -4555,7 +4544,9 @@ public class ClientModeImpl extends StateMachine implements ClientMode {
if (!uids.isEmpty()
&& !mWifiConnectivityManager.hasMultiInternetConnection()) {
// Remove internet capability.
- builder.removeCapability(NetworkCapabilities.NET_CAPABILITY_INTERNET);
+ if (!mNetworkFactory.shouldHaveInternetCapabilities()) {
+ builder.removeCapability(NetworkCapabilities.NET_CAPABILITY_INTERNET);
+ }
if (SdkLevel.isAtLeastS()) {
builder.setUids(getUidRangeSet(uids));
} else {
@@ -7217,11 +7208,11 @@ public class ClientModeImpl extends StateMachine implements ClientMode {
scanResultInfo = new ProvisioningConfiguration.ScanResultInfo(scanResult.SSID,
scanResult.BSSID, ies);
}
-
+ final Network network = (mNetworkAgent != null) ? mNetworkAgent.getNetwork() : null;
if (!isUsingStaticIp) {
prov = new ProvisioningConfiguration.Builder()
.withPreDhcpAction()
- .withNetwork(getCurrentNetwork())
+ .withNetwork(network)
.withDisplayName(config.SSID)
.withScanResultInfo(scanResultInfo)
.withLayer2Information(layer2Info);
@@ -7229,7 +7220,7 @@ public class ClientModeImpl extends StateMachine implements ClientMode {
StaticIpConfiguration staticIpConfig = config.getStaticIpConfiguration();
prov = new ProvisioningConfiguration.Builder()
.withStaticConfiguration(staticIpConfig)
- .withNetwork(getCurrentNetwork())
+ .withNetwork(network)
.withDisplayName(config.SSID)
.withLayer2Information(layer2Info);
}
diff --git a/service/java/com/android/server/wifi/ConcreteClientModeManager.java b/service/java/com/android/server/wifi/ConcreteClientModeManager.java
index 7f6bbc0b72..5cf3234368 100644
--- a/service/java/com/android/server/wifi/ConcreteClientModeManager.java
+++ b/service/java/com/android/server/wifi/ConcreteClientModeManager.java
@@ -178,7 +178,8 @@ public class ConcreteClientModeManager implements ClientModeManager {
}
private String getTag() {
- return TAG + "[" + (mClientInterfaceName == null ? "unknown" : mClientInterfaceName) + "]";
+ return TAG + "[" + mId + ":" + (mClientInterfaceName == null ? "unknown"
+ : mClientInterfaceName) + "]";
}
/**
@@ -743,6 +744,8 @@ public class ConcreteClientModeManager implements ClientModeManager {
mClientModeImpl.handleIfaceDestroyed();
}
+ // set it to null since the interface had been destroyed
+ mClientInterfaceName = null;
sendMessage(CMD_INTERFACE_DESTROYED);
}
}
@@ -865,11 +868,17 @@ public class ConcreteClientModeManager implements ClientModeManager {
private void setRoleInternalAndInvokeCallback(@NonNull RoleChangeInfo roleChangeInfo) {
if (roleChangeInfo.role == mRole) return;
if (mRole == null) {
- Log.v(getTag(), "ClientModeManager started in role: " + roleChangeInfo);
+ if (mVerboseLoggingEnabled) {
+ Log.v(getTag(), "CurState:" + getCurrentStateName()
+ + ", clientModeManager started in role: " + roleChangeInfo);
+ }
setRoleInternal(roleChangeInfo);
mModeListener.onStarted(ConcreteClientModeManager.this);
} else {
- Log.v(getTag(), "ClientModeManager role changed: " + roleChangeInfo);
+ if (mVerboseLoggingEnabled) {
+ Log.v(getTag(), "CurState:" + getCurrentStateName()
+ + ", clientModeManager role changed: " + roleChangeInfo);
+ }
setRoleInternal(roleChangeInfo);
reset();
mModeListener.onRoleChanged(ConcreteClientModeManager.this);
@@ -895,10 +904,16 @@ public class ConcreteClientModeManager implements ClientModeManager {
// started normally this will will not send a duplicate broadcast since mIsStopped
// will get set to false the first time the exit happens.
cleanupOnQuitIfApplicable();
+ Log.d(getTag(), "IdleState.exit()");
}
@Override
public boolean processMessage(Message message) {
+ if (mVerboseLoggingEnabled) {
+ Log.d(getTag(),
+ getName() + " cmd = " + getWhatToString(message.what) + " "
+ + message.toString());
+ }
switch (message.what) {
case CMD_START:
// Always start in scan mode first.
@@ -923,7 +938,7 @@ public class ConcreteClientModeManager implements ClientModeManager {
}
break;
default:
- Log.d(getTag(), "received an invalid message: " + message);
+ Log.d(getTag(), getName() + ", received an invalid message: " + message);
return NOT_HANDLED;
}
return HANDLED;
@@ -939,7 +954,7 @@ public class ConcreteClientModeManager implements ClientModeManager {
mIfaceIsUp = isUp;
if (!isUp) {
// if the interface goes down we should exit and go back to idle state.
- Log.d(getTag(), "interface down!");
+ Log.d(getTag(), getName() + ", interface down!");
mStateMachine.sendMessage(CMD_INTERFACE_DOWN);
}
if (mClientModeImpl != null) {
@@ -957,6 +972,11 @@ public class ConcreteClientModeManager implements ClientModeManager {
@Override
public boolean processMessage(Message message) {
+ if (mVerboseLoggingEnabled) {
+ Log.d(getTag(),
+ getName() + " cmd = " + getWhatToString(message.what) + " "
+ + message.toString());
+ }
switch (message.what) {
case CMD_START:
// Already started, ignore this command.
@@ -998,8 +1018,9 @@ public class ConcreteClientModeManager implements ClientModeManager {
break;
}
case CMD_INTERFACE_DOWN:
- Log.e(getTag(), "Detected an interface down, reporting failure to "
- + "SelfRecovery");
+ Log.e(getTag(),
+ getName() + ", detected an interface down, reporting failure to "
+ + "SelfRecovery");
mSelfRecovery.trigger(SelfRecovery.REASON_STA_IFACE_DOWN);
// once interface down, nothing else to do... stop the state machine
captureObituaryAndQuitNow();
@@ -1009,7 +1030,7 @@ public class ConcreteClientModeManager implements ClientModeManager {
onUpChanged(isUp);
break;
case CMD_INTERFACE_DESTROYED:
- Log.e(getTag(), "interface destroyed - client mode stopping");
+ Log.e(getTag(), getName() + ", interface destroyed - client mode stopping");
mClientInterfaceName = null;
// once interface destroyed, nothing else to do... stop the state machine
captureObituaryAndQuitNow();
@@ -1031,7 +1052,7 @@ public class ConcreteClientModeManager implements ClientModeManager {
mIfaceIsUp = false;
}
- Log.i(getTag(), "StartedState#exit(), setting mRole = null");
+ Log.i(getTag(), "StartedState.exit(), setting mRole = null");
mIsStopped = true;
cleanupOnQuitIfApplicable();
}
@@ -1067,6 +1088,11 @@ public class ConcreteClientModeManager implements ClientModeManager {
@Override
public boolean processMessage(Message message) {
+ if (mVerboseLoggingEnabled) {
+ Log.d(getTag(),
+ getName() + " cmd = " + getWhatToString(message.what) + " "
+ + message.toString());
+ }
switch (message.what) {
case CMD_SWITCH_TO_SCAN_ONLY_MODE:
// Already in scan only mode, ignore this command.
@@ -1123,6 +1149,11 @@ public class ConcreteClientModeManager implements ClientModeManager {
@Override
public boolean processMessage(Message message) {
+ if (mVerboseLoggingEnabled) {
+ Log.d(getTag(),
+ getName() + " cmd = " + getWhatToString(message.what) + " "
+ + message.toString());
+ }
switch (message.what) {
case CMD_SWITCH_TO_CONNECT_MODE:
RoleChangeInfo roleChangeInfo = (RoleChangeInfo) message.obj;
@@ -1136,7 +1167,7 @@ public class ConcreteClientModeManager implements ClientModeManager {
// If this call failed, the iface would be torn down.
// Thus, simply abort and let the iface down handling take care of the
// rest.
- Log.e(getTag(), "Failed to switch ClientModeManager="
+ Log.e(getTag(), getName() + ", Failed to switch ClientModeManager="
+ ConcreteClientModeManager.this + "'s requestorWs");
}
break;
@@ -1186,7 +1217,7 @@ public class ConcreteClientModeManager implements ClientModeManager {
if (mClientModeImpl == null) {
Log.w(getTag(), "ConnectModeState.exit(): mClientModeImpl is already null?!");
} else {
- Log.d(getTag(), "Stopping ClientModeImpl");
+ Log.d(getTag(), "ConnectModeState.exit(): Stopping ClientModeImpl");
mClientModeImpl.stop();
mGraveyard.inter(mClientModeImpl);
mClientModeImpl = null;
@@ -1311,8 +1342,8 @@ public class ConcreteClientModeManager implements ClientModeManager {
}
@Override
- public Network syncGetCurrentNetwork() {
- return getClientMode().syncGetCurrentNetwork();
+ public Network getCurrentNetwork() {
+ return getClientMode().getCurrentNetwork();
}
@Override
diff --git a/service/java/com/android/server/wifi/HalDeviceManager.java b/service/java/com/android/server/wifi/HalDeviceManager.java
index a59c63b685..84e87bf7b0 100644
--- a/service/java/com/android/server/wifi/HalDeviceManager.java
+++ b/service/java/com/android/server/wifi/HalDeviceManager.java
@@ -72,8 +72,6 @@ import org.json.JSONException;
import java.io.FileDescriptor;
import java.io.PrintWriter;
-import java.lang.annotation.Retention;
-import java.lang.annotation.RetentionPolicy;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;
@@ -2469,90 +2467,6 @@ public class HalDeviceManager {
return false;
}
- private static final int PRIORITY_INTERNAL = 0;
- private static final int PRIORITY_BG = 1;
- private static final int PRIORITY_FG_SERVICE = 2;
- private static final int PRIORITY_FG_APP = 3;
- private static final int PRIORITY_SYSTEM = 4;
- private static final int PRIORITY_PRIVILEGED = 5;
- // Keep these in sync with any additions/deletions to above buckets.
- private static final int PRIORITY_MIN = PRIORITY_INTERNAL;
- private static final int PRIORITY_MAX = PRIORITY_PRIVILEGED;
- @IntDef(prefix = { "PRIORITY_" }, value = {
- PRIORITY_INTERNAL,
- PRIORITY_BG,
- PRIORITY_FG_SERVICE,
- PRIORITY_FG_APP,
- PRIORITY_SYSTEM,
- PRIORITY_PRIVILEGED,
- })
- @Retention(RetentionPolicy.SOURCE)
- public @interface RequestorWsPriority {}
-
- /**
- * Returns integer priority level for the provided |ws| based on rules mentioned in
- * {@link #selectInterfacesToDelete(int, int, WorkSource, int, WifiIfaceInfo[])}.
- */
- private static @RequestorWsPriority int getRequestorWsPriority(WorkSourceHelper ws) {
- if (ws.hasAnyPrivilegedAppRequest()) return PRIORITY_PRIVILEGED;
- if (ws.hasAnySystemAppRequest()) return PRIORITY_SYSTEM;
- if (ws.hasAnyForegroundAppRequest(/* allowOverlayBypass */ true)) return PRIORITY_FG_APP;
- if (ws.hasAnyForegroundServiceRequest()) return PRIORITY_FG_SERVICE;
- if (ws.hasAnyInternalRequest()) return PRIORITY_INTERNAL;
- return PRIORITY_BG;
- }
-
- /**
- * Returns true if the requested iface can delete an existing iface only after user approval.
- */
- public boolean needsUserApprovalToDelete(
- int requestedCreateType, WorkSource newWorksource,
- int existingCreateType, WorkSource existingWorksource) {
- return needsUserApprovalToDelete(
- requestedCreateType,
- getRequestorWsPriority(mWifiInjector.makeWsHelper(newWorksource)),
- existingCreateType,
- getRequestorWsPriority(mWifiInjector.makeWsHelper(existingWorksource)));
- }
-
- private boolean needsUserApprovalToDelete(
- int requestedCreateType, int newRequestorWsPriority,
- int existingCreateType, int existingRequestorWsPriority) {
- if (!mWifiUserApprovalRequiredForD2dInterfacePriority
- || newRequestorWsPriority <= PRIORITY_BG
- || existingRequestorWsPriority == PRIORITY_INTERNAL) {
- return false;
- }
-
- // Allow LOHS to beat Settings STA if there's no STA+AP concurrency (legacy behavior)
- if (allowedToDeleteForNoStaApConcurrencyLohs(
- requestedCreateType, newRequestorWsPriority,
- existingCreateType, existingRequestorWsPriority)) {
- return false;
- }
-
- if (requestedCreateType == HDM_CREATE_IFACE_AP
- || requestedCreateType == HDM_CREATE_IFACE_AP_BRIDGE) {
- if (existingCreateType == HDM_CREATE_IFACE_P2P
- || existingCreateType == HDM_CREATE_IFACE_NAN) {
- return true;
- }
- } else if (requestedCreateType == HDM_CREATE_IFACE_P2P) {
- if (existingCreateType == HDM_CREATE_IFACE_AP
- || existingCreateType == HDM_CREATE_IFACE_AP_BRIDGE
- || existingCreateType == HDM_CREATE_IFACE_NAN) {
- return true;
- }
- } else if (requestedCreateType == HDM_CREATE_IFACE_NAN) {
- if (existingCreateType == HDM_CREATE_IFACE_AP
- || existingCreateType == HDM_CREATE_IFACE_AP_BRIDGE
- || existingCreateType == HDM_CREATE_IFACE_P2P) {
- return true;
- }
- }
- return false;
- }
-
/**
* Returns whether interface request from |newRequestorWsPriority| is allowed to delete an
* interface request from |existingRequestorWsPriority|.
@@ -2568,19 +2482,24 @@ public class HalDeviceManager {
*/
private boolean allowedToDelete(
@HdmIfaceTypeForCreation int requestedCreateType,
- @RequestorWsPriority int newRequestorWsPriority,
+ @NonNull WorkSourceHelper newRequestorWs,
@HdmIfaceTypeForCreation int existingCreateType,
- @RequestorWsPriority int existingRequestorWsPriority) {
+ @NonNull WorkSourceHelper existingRequestorWs) {
if (!SdkLevel.isAtLeastS()) {
return allowedToDeleteForR(requestedCreateType, existingCreateType);
}
// Defer deletion decision to the InterfaceConflictManager dialog.
- if (needsUserApprovalToDelete(requestedCreateType, newRequestorWsPriority,
- existingCreateType, existingRequestorWsPriority)) {
+ if (mWifiInjector.getInterfaceConflictManager().needsUserApprovalToDelete(
+ requestedCreateType, newRequestorWs,
+ existingCreateType, existingRequestorWs)) {
return true;
}
+ @HdmIfaceTypeForCreation int newRequestorWsPriority =
+ newRequestorWs.getRequestorWsPriority();
+ @HdmIfaceTypeForCreation int existingRequestorWsPriority =
+ existingRequestorWs.getRequestorWsPriority();
// If the new request is higher priority than existing priority, then the new requestor
// wins. This is because at all other priority levels (except privileged), existing caller
// wins if both the requests are at the same priority level.
@@ -2596,7 +2515,7 @@ public class HalDeviceManager {
// If both the requests are privileged, the new requestor wins. The exception is for
// backwards compatibility with P2P Settings, prefer SoftAP over P2P for when the user
// enables SoftAP with P2P Settings open.
- if (newRequestorWsPriority == PRIORITY_PRIVILEGED) {
+ if (newRequestorWsPriority == WorkSourceHelper.PRIORITY_PRIVILEGED) {
if (requestedCreateType == HDM_CREATE_IFACE_P2P
&& (existingCreateType == HDM_CREATE_IFACE_AP
|| existingCreateType == HDM_CREATE_IFACE_AP_BRIDGE)) {
@@ -2622,9 +2541,9 @@ public class HalDeviceManager {
*/
private boolean allowedToDeleteForNoStaApConcurrencyLohs(
@HdmIfaceTypeForCreation int requestedCreateType,
- @RequestorWsPriority int newRequestorWsPriority,
+ @WorkSourceHelper.RequestorWsPriority int newRequestorWsPriority,
@HdmIfaceTypeForCreation int existingCreateType,
- @RequestorWsPriority int existingRequestorWsPriority) {
+ @WorkSourceHelper.RequestorWsPriority int existingRequestorWsPriority) {
return !canDeviceSupportCreateTypeCombo(
new SparseArray<Integer>() {{
put(IfaceConcurrencyType.STA, 1);
@@ -2632,10 +2551,10 @@ public class HalDeviceManager {
}})
&& (requestedCreateType == HDM_CREATE_IFACE_AP
|| requestedCreateType == HDM_CREATE_IFACE_AP_BRIDGE)
- && newRequestorWsPriority != PRIORITY_INTERNAL
- && newRequestorWsPriority != PRIORITY_PRIVILEGED
+ && newRequestorWsPriority != WorkSourceHelper.PRIORITY_INTERNAL
+ && newRequestorWsPriority != WorkSourceHelper.PRIORITY_PRIVILEGED
&& existingCreateType == HDM_CREATE_IFACE_STA
- && existingRequestorWsPriority == PRIORITY_PRIVILEGED;
+ && existingRequestorWsPriority == WorkSourceHelper.PRIORITY_PRIVILEGED;
}
/**
@@ -2737,10 +2656,10 @@ public class HalDeviceManager {
lookupError = true;
break;
}
- int newRequestorWsPriority = getRequestorWsPriority(newRequestorWsHelper);
- int existingRequestorWsPriority = getRequestorWsPriority(cacheEntry.requestorWsHelper);
- boolean isAllowedToDelete = allowedToDelete(requestedCreateType, newRequestorWsPriority,
- existingCreateType, existingRequestorWsPriority);
+ int newRequestorWsPriority = newRequestorWsHelper.getRequestorWsPriority();
+ int existingRequestorWsPriority = cacheEntry.requestorWsHelper.getRequestorWsPriority();
+ boolean isAllowedToDelete = allowedToDelete(requestedCreateType, newRequestorWsHelper,
+ existingCreateType, cacheEntry.requestorWsHelper);
if (VDBG) {
Log.d(TAG, "info=" + info + ": allowedToDelete=" + isAllowedToDelete
+ " (requestedCreateType=" + requestedCreateType
@@ -2762,7 +2681,7 @@ public class HalDeviceManager {
int numIfacesToDelete = 0;
ifacesToDelete = new ArrayList<>(requestedQuantity);
// Iterate from lowest priority to highest priority ifaces.
- for (int i = PRIORITY_MIN; i <= PRIORITY_MAX; i++) {
+ for (int i = WorkSourceHelper.PRIORITY_MIN; i <= WorkSourceHelper.PRIORITY_MAX; i++) {
List<WifiIfaceInfo> ifacesToDeleteListWithinPriority =
ifacesToDeleteMap.getOrDefault(i, new ArrayList<>());
int numIfacesToDeleteWithinPriority =
diff --git a/service/java/com/android/server/wifi/InterfaceConflictManager.java b/service/java/com/android/server/wifi/InterfaceConflictManager.java
index c7ba72f450..bb2cf2114e 100644
--- a/service/java/com/android/server/wifi/InterfaceConflictManager.java
+++ b/service/java/com/android/server/wifi/InterfaceConflictManager.java
@@ -39,9 +39,12 @@ import android.util.LocalLog;
import android.util.Log;
import android.util.Pair;
+import androidx.annotation.NonNull;
+
import com.android.internal.util.State;
import com.android.internal.util.StateMachine;
import com.android.server.wifi.util.WaitingState;
+import com.android.server.wifi.util.WorkSourceHelper;
import com.android.wifi.resources.R;
import java.io.FileDescriptor;
@@ -61,6 +64,7 @@ public class InterfaceConflictManager {
private static final String TAG = "InterfaceConflictManager";
private boolean mVerboseLoggingEnabled = false;
+ private final WifiInjector mWifiInjector;
private final WifiContext mContext;
private final FrameworkFacade mFrameworkFacade;
private final HalDeviceManager mHdm;
@@ -86,9 +90,10 @@ public class InterfaceConflictManager {
private static final String MESSAGE_BUNDLE_KEY_PENDING_USER = "pending_user_decision";
- public InterfaceConflictManager(WifiContext wifiContext, FrameworkFacade frameworkFacade,
- HalDeviceManager hdm, WifiThreadRunner threadRunner,
+ public InterfaceConflictManager(@NonNull WifiInjector wifiInjector, WifiContext wifiContext,
+ FrameworkFacade frameworkFacade, HalDeviceManager hdm, WifiThreadRunner threadRunner,
WifiDialogManager wifiDialogManager, LocalLog localLog) {
+ mWifiInjector = wifiInjector;
mContext = wifiContext;
mFrameworkFacade = frameworkFacade;
mHdm = hdm;
@@ -125,30 +130,67 @@ public class InterfaceConflictManager {
}
/**
- * Returns an indication as to whether user approval is needed for this specific request. User
- * approval is controlled by:
+ * Returns whether user approval is needed to delete an existing interface for a new one.
+ * User approval is controlled by:
* - A global overlay `config_wifiUserApprovalRequiredForD2dInterfacePriority`
* - An exemption list overlay `config_wifiExcludedFromUserApprovalForD2dInterfacePriority`
* which is a list of packages which are *exempted* from user approval
* - A shell command which can be used to override
*
- * @param requestorWs The WorkSource of the requestor - used to determine whether it is exempted
- * from user approval. All requesting packages must be exempted for the
- * dialog to NOT be displayed.
+ * @param requestedCreateType Requested interface type
+ * @param newRequestorWsHelper WorkSourceHelper of the new interface
+ * @param existingCreateType Existing interface type
+ * @param existingRequestorWsHelper WorkSourceHelper of the existing interface
+ * @return true if the new interface needs user approval to delete the existing one.
*/
- private boolean isUserApprovalNeeded(WorkSource requestorWs) {
- if (mUserApprovalNeededOverride) return mUserApprovalNeededOverrideValue;
- if (!mUserApprovalNeeded || mUserApprovalExemptedPackages.isEmpty()) {
- return mUserApprovalNeeded;
+ public boolean needsUserApprovalToDelete(
+ int requestedCreateType, @NonNull WorkSourceHelper newRequestorWsHelper,
+ int existingCreateType, @NonNull WorkSourceHelper existingRequestorWsHelper) {
+ if (!isUserApprovalEnabled()) {
+ return false;
}
- for (int i = 0; i < requestorWs.size(); ++i) {
- if (!mUserApprovalExemptedPackages.contains(requestorWs.getPackageName(i))) {
+ // Check if every package in the WorkSource are exempt from user approval.
+ if (!mUserApprovalExemptedPackages.isEmpty()) {
+ boolean exemptFromUserApproval = true;
+ WorkSource requestorWs = newRequestorWsHelper.getWorkSource();
+ for (int i = 0; i < requestorWs.size(); i++) {
+ if (!mUserApprovalExemptedPackages.contains(requestorWs.getPackageName(i))) {
+ exemptFromUserApproval = false;
+ break;
+ }
+ }
+ if (exemptFromUserApproval) {
+ return false;
+ }
+ }
+ // Check if priority level can get user approval.
+ if (newRequestorWsHelper.getRequestorWsPriority() <= WorkSourceHelper.PRIORITY_BG
+ || existingRequestorWsHelper.getRequestorWsPriority()
+ == WorkSourceHelper.PRIORITY_INTERNAL) {
+ return false;
+ }
+ // Check if the conflicting interface types can get user approval.
+ if (requestedCreateType == HDM_CREATE_IFACE_AP
+ || requestedCreateType == HDM_CREATE_IFACE_AP_BRIDGE) {
+ if (existingCreateType == HDM_CREATE_IFACE_P2P
+ || existingCreateType == HDM_CREATE_IFACE_NAN) {
+ return true;
+ }
+ } else if (requestedCreateType == HDM_CREATE_IFACE_P2P) {
+ if (existingCreateType == HDM_CREATE_IFACE_AP
+ || existingCreateType == HDM_CREATE_IFACE_AP_BRIDGE
+ || existingCreateType == HDM_CREATE_IFACE_NAN) {
+ return true;
+ }
+ } else if (requestedCreateType == HDM_CREATE_IFACE_NAN) {
+ if (existingCreateType == HDM_CREATE_IFACE_AP
+ || existingCreateType == HDM_CREATE_IFACE_AP_BRIDGE
+ || existingCreateType == HDM_CREATE_IFACE_P2P) {
return true;
}
}
-
- return false; // all packages of the requestor are excluded
+ return false;
}
/**
@@ -165,6 +207,13 @@ public class InterfaceConflictManager {
mUserApprovalNeededOverrideValue = overrideValue;
}
+ private boolean isUserApprovalEnabled() {
+ if (mUserApprovalNeededOverride) {
+ return mUserApprovalNeededOverrideValue;
+ }
+ return mUserApprovalNeeded;
+ }
+
/**
* Return values for {@link #manageInterfaceConflictForStateMachine}
*/
@@ -236,6 +285,7 @@ public class InterfaceConflictManager {
@HalDeviceManager.HdmIfaceTypeForCreation int createIfaceType, WorkSource requestorWs,
boolean bypassDialog) {
synchronized (mLock) {
+ // Check if we're waiting for user approval for a different caller.
if (mUserApprovalPending && !TextUtils.equals(tag, mUserApprovalPendingTag)) {
Log.w(TAG, tag + ": rejected since there's a pending user approval for "
+ mUserApprovalPendingTag);
@@ -257,6 +307,7 @@ public class InterfaceConflictManager {
return mUserJustApproved ? ICM_EXECUTE_COMMAND : ICM_ABORT_COMMAND;
}
+ // Check if we're already waiting for user approval for this caller.
if (mUserApprovalPending) {
Log.w(TAG, tag
+ ": trying for another potentially waiting operation - but should be"
@@ -265,8 +316,13 @@ public class InterfaceConflictManager {
return ICM_SKIP_COMMAND_WAIT_FOR_USER; // same effect
}
- if (bypassDialog || !isUserApprovalNeeded(requestorWs)) return ICM_EXECUTE_COMMAND;
+ // Execute the command if the dialogs aren't enabled.
+ if (!isUserApprovalEnabled()) return ICM_EXECUTE_COMMAND;
+
+ // Auto-approve dialog if bypass is specified.
+ if (bypassDialog) return ICM_EXECUTE_COMMAND;
+ // Check if we need to show the dialog.
List<Pair<Integer, WorkSource>> impact = mHdm.reportImpactToCreateIface(createIfaceType,
false, requestorWs);
localLog(tag + ": Asking user about creating the interface, impact=" + impact);
@@ -276,6 +332,7 @@ public class InterfaceConflictManager {
return ICM_EXECUTE_COMMAND;
}
+ // Auto-approve dialog if we only need to delete a disconnected P2P.
if (mUserApprovalNotRequireForDisconnectedP2p && !mIsP2pConnected
&& impact.size() == 1 && impact.get(0).first == HDM_CREATE_IFACE_P2P) {
localLog(tag
@@ -285,8 +342,9 @@ public class InterfaceConflictManager {
boolean shouldShowDialogToDelete = false;
for (Pair<Integer, WorkSource> ifaceToDelete : impact) {
- if (mHdm.needsUserApprovalToDelete(createIfaceType, requestorWs,
- ifaceToDelete.first, ifaceToDelete.second)) {
+ if (needsUserApprovalToDelete(
+ createIfaceType, mWifiInjector.makeWsHelper(requestorWs),
+ ifaceToDelete.first, mWifiInjector.makeWsHelper(ifaceToDelete.second))) {
shouldShowDialogToDelete = true;
break;
}
diff --git a/service/java/com/android/server/wifi/SupplicantStaIfaceHalHidlImpl.java b/service/java/com/android/server/wifi/SupplicantStaIfaceHalHidlImpl.java
index 47b76b1795..d5a55a2e8e 100644
--- a/service/java/com/android/server/wifi/SupplicantStaIfaceHalHidlImpl.java
+++ b/service/java/com/android/server/wifi/SupplicantStaIfaceHalHidlImpl.java
@@ -79,7 +79,6 @@ import java.util.List;
import java.util.Map;
import java.util.NoSuchElementException;
import java.util.Objects;
-import java.util.Random;
import java.util.concurrent.CountDownLatch;
import java.util.concurrent.TimeUnit;
import java.util.regex.Matcher;
@@ -130,6 +129,7 @@ public class SupplicantStaIfaceHalHidlImpl implements ISupplicantStaIfaceHal {
private SupplicantDeathRecipient mSupplicantDeathRecipient;
// Death recipient cookie registered for current supplicant instance.
private long mDeathRecipientCookie = 0;
+ private CountDownLatch mWaitForDeathLatch;
private final Context mContext;
private final WifiMonitor mWifiMonitor;
private final FrameworkFacade mFrameworkFacade;
@@ -176,6 +176,12 @@ public class SupplicantStaIfaceHalHidlImpl implements ISupplicantStaIfaceHal {
private class SupplicantDeathRecipient implements DeathRecipient {
@Override
public void serviceDied(long cookie) {
+ synchronized (mLock) {
+ if (mWaitForDeathLatch != null) {
+ mWaitForDeathLatch.countDown();
+ }
+ }
+
mEventHandler.post(() -> {
synchronized (mLock) {
Log.w(TAG, "ISupplicant died: cookie=" + cookie);
@@ -640,6 +646,7 @@ public class SupplicantStaIfaceHalHidlImpl implements ISupplicantStaIfaceHal {
Log.i(TAG, "Ignoring stale death recipient notification");
return;
}
+ Log.i(TAG, "Handling service death");
clearState();
if (mDeathEventHandler != null) {
mDeathEventHandler.onDeath();
@@ -715,18 +722,7 @@ public class SupplicantStaIfaceHalHidlImpl implements ISupplicantStaIfaceHal {
*/
public void terminate() {
synchronized (mLock) {
- // Register for a new death listener to block until supplicant is dead.
- final long waitForDeathCookie = new Random().nextLong();
- final CountDownLatch waitForDeathLatch = new CountDownLatch(1);
- linkToSupplicantDeath((cookie) -> {
- mEventHandler.post(() -> {
- Log.d(TAG, "ISupplicant died: cookie=" + cookie);
- if (cookie != waitForDeathCookie) return;
- supplicantServiceDiedHandler(mDeathRecipientCookie);
- waitForDeathLatch.countDown();
- });
- }, waitForDeathCookie);
-
+ mWaitForDeathLatch = new CountDownLatch(1);
if (isV1_1()) {
Log.i(TAG, "Terminating supplicant using HIDL");
terminate_V1_1();
@@ -734,15 +730,15 @@ public class SupplicantStaIfaceHalHidlImpl implements ISupplicantStaIfaceHal {
Log.i(TAG, "Terminating supplicant using init");
mFrameworkFacade.stopSupplicant();
}
+ }
- // Now wait for death listener callback to confirm that it's dead.
- try {
- if (!waitForDeathLatch.await(WAIT_FOR_DEATH_TIMEOUT_MS, TimeUnit.MILLISECONDS)) {
- Log.w(TAG, "Timed out waiting for confirmation of supplicant death");
- }
- } catch (InterruptedException e) {
- Log.w(TAG, "Failed to wait for supplicant death");
+ // Now wait for death listener callback to confirm that it's dead.
+ try {
+ if (!mWaitForDeathLatch.await(WAIT_FOR_DEATH_TIMEOUT_MS, TimeUnit.MILLISECONDS)) {
+ Log.w(TAG, "Timed out waiting for confirmation of supplicant death");
}
+ } catch (InterruptedException e) {
+ Log.w(TAG, "Failed to wait for supplicant death");
}
}
diff --git a/service/java/com/android/server/wifi/WifiDataStall.java b/service/java/com/android/server/wifi/WifiDataStall.java
index 7a10fd8ae5..9d5e6ea96d 100644
--- a/service/java/com/android/server/wifi/WifiDataStall.java
+++ b/service/java/com/android/server/wifi/WifiDataStall.java
@@ -574,8 +574,8 @@ public class WifiDataStall {
tputSufficientLowThrKbps = mDeviceConfigFacade.getRxTputSufficientLowThrKbps();
tputSufficientHighThrKbps = mDeviceConfigFacade.getRxTputSufficientHighThrKbps();
}
- boolean isL3TputLow = (l3TputKbps * mDeviceConfigFacade.getTputSufficientRatioThrDen())
- < (tputSufficientLowThrKbps * mDeviceConfigFacade.getTputSufficientRatioThrNum());
+ boolean isL3TputLow = (l3TputKbps * mDeviceConfigFacade.getTputSufficientRatioThrNum())
+ < (tputSufficientLowThrKbps * mDeviceConfigFacade.getTputSufficientRatioThrDen());
boolean isL2TputAboveLowThr = l2TputKbps >= tputSufficientLowThrKbps;
if (isL3TputLow) return isL2TputAboveLowThr;
diff --git a/service/java/com/android/server/wifi/WifiDialogManager.java b/service/java/com/android/server/wifi/WifiDialogManager.java
index 0dc49f1d2e..73e5c5c39e 100644
--- a/service/java/com/android/server/wifi/WifiDialogManager.java
+++ b/service/java/com/android/server/wifi/WifiDialogManager.java
@@ -369,8 +369,8 @@ public class WifiDialogManager {
}
private class SimpleDialogHandle extends DialogHandleInternal {
- private @NonNull SimpleDialogCallback mCallback;
- private @NonNull WifiThreadRunner mCallbackThreadRunner;
+ @Nullable private final SimpleDialogCallback mCallback;
+ @Nullable private final WifiThreadRunner mCallbackThreadRunner;
SimpleDialogHandle(
final String title,
@@ -381,8 +381,8 @@ public class WifiDialogManager {
final String positiveButtonText,
final String negativeButtonText,
final String neutralButtonText,
- @NonNull SimpleDialogCallback callback,
- @NonNull WifiThreadRunner callbackThreadRunner) throws IllegalArgumentException {
+ @Nullable final SimpleDialogCallback callback,
+ @Nullable final WifiThreadRunner callbackThreadRunner) {
Intent intent = getBaseLaunchIntent(WifiManager.DIALOG_TYPE_SIMPLE);
if (intent != null) {
intent.putExtra(WifiManager.EXTRA_DIALOG_TITLE, title)
@@ -396,45 +396,35 @@ public class WifiDialogManager {
setIntent(intent);
}
setDisplayId(Display.DEFAULT_DISPLAY);
- if (messageUrl != null) {
- if (message == null) {
- throw new IllegalArgumentException("Cannot set span for null message!");
- }
- if (messageUrlStart < 0) {
- throw new IllegalArgumentException("Span start cannot be less than 0!");
- }
- if (messageUrlEnd > message.length()) {
- throw new IllegalArgumentException("Span end index " + messageUrlEnd
- + " cannot be greater than message length " + message.length() + "!");
- }
- }
- if (callback == null) {
- throw new IllegalArgumentException("Callback cannot be null!");
- }
- if (callbackThreadRunner == null) {
- throw new IllegalArgumentException("Callback thread runner cannot be null!");
- }
mCallback = callback;
mCallbackThreadRunner = callbackThreadRunner;
}
void notifyOnPositiveButtonClicked() {
- mCallbackThreadRunner.post(() -> mCallback.onPositiveButtonClicked());
+ if (mCallbackThreadRunner != null && mCallback != null) {
+ mCallbackThreadRunner.post(mCallback::onPositiveButtonClicked);
+ }
unregisterDialog();
}
void notifyOnNegativeButtonClicked() {
- mCallbackThreadRunner.post(() -> mCallback.onNegativeButtonClicked());
+ if (mCallbackThreadRunner != null && mCallback != null) {
+ mCallbackThreadRunner.post(mCallback::onNegativeButtonClicked);
+ }
unregisterDialog();
}
void notifyOnNeutralButtonClicked() {
- mCallbackThreadRunner.post(() -> mCallback.onNeutralButtonClicked());
+ if (mCallbackThreadRunner != null && mCallback != null) {
+ mCallbackThreadRunner.post(mCallback::onNeutralButtonClicked);
+ }
unregisterDialog();
}
void notifyOnCancelled() {
- mCallbackThreadRunner.post(() -> mCallback.onCancelled());
+ if (mCallbackThreadRunner != null && mCallback != null) {
+ mCallbackThreadRunner.post(mCallback::onCancelled);
+ }
unregisterDialog();
}
}
@@ -448,8 +438,8 @@ public class WifiDialogManager {
final String mPositiveButtonText;
final String mNegativeButtonText;
final String mNeutralButtonText;
- @NonNull SimpleDialogCallback mCallback;
- @NonNull WifiThreadRunner mCallbackThreadRunner;
+ @Nullable final SimpleDialogCallback mCallback;
+ @Nullable final WifiThreadRunner mCallbackThreadRunner;
private Runnable mTimeoutRunnable;
private AlertDialog mAlertDialog;
int mWindowType = WindowManager.LayoutParams.TYPE_KEYGUARD_DIALOG;
@@ -464,42 +454,32 @@ public class WifiDialogManager {
final String positiveButtonText,
final String negativeButtonText,
final String neutralButtonText,
- @NonNull SimpleDialogCallback callback,
- @NonNull WifiThreadRunner callbackThreadRunner) throws IllegalArgumentException {
- if (messageUrl != null) {
- if (message == null) {
- throw new IllegalArgumentException("Cannot set span for null message!");
- }
- if (messageUrlStart < 0) {
- throw new IllegalArgumentException("Span start cannot be less than 0!");
- }
- if (messageUrlEnd > message.length()) {
- throw new IllegalArgumentException("Span end index " + messageUrlEnd
- + " cannot be greater than message length " + message.length() + "!");
- }
- }
- if (callback == null) {
- throw new IllegalArgumentException("Callback cannot be null!");
- }
- if (callbackThreadRunner == null) {
- throw new IllegalArgumentException("Callback thread runner cannot be null!");
- }
+ @Nullable final SimpleDialogCallback callback,
+ @Nullable final WifiThreadRunner callbackThreadRunner) {
mTitle = title;
if (message != null) {
mMessage = new SpannableString(message);
- if (messageUrlStart >= 0 && messageUrlEnd <= message.length()
- && messageUrlStart < messageUrlEnd) {
- mMessage.setSpan(new URLSpan(messageUrl) {
- @Override
- public void onClick(@NonNull View widget) {
- Context c = widget.getContext();
- Intent openLinkIntent = new Intent(Intent.ACTION_VIEW)
- .setData(Uri.parse(messageUrl))
- .addFlags(Intent.FLAG_ACTIVITY_NEW_TASK)
- .putExtra(Browser.EXTRA_APPLICATION_ID, c.getPackageName());
- c.startActivity(openLinkIntent);
- LegacySimpleDialogHandle.this.dismissDialog();
- }}, messageUrlStart, messageUrlEnd, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
+ if (messageUrl != null) {
+ if (messageUrlStart < 0) {
+ Log.w(TAG, "Span start cannot be less than 0!");
+ } else if (messageUrlEnd > message.length()) {
+ Log.w(TAG, "Span end index " + messageUrlEnd + " cannot be greater than "
+ + "message length " + message.length() + "!");
+ } else if (messageUrlStart > messageUrlEnd) {
+ Log.w(TAG, "Span start index cannot be greater than end index!");
+ } else {
+ mMessage.setSpan(new URLSpan(messageUrl) {
+ @Override
+ public void onClick(@NonNull View widget) {
+ Context c = widget.getContext();
+ Intent openLinkIntent = new Intent(Intent.ACTION_VIEW)
+ .setData(Uri.parse(messageUrl))
+ .addFlags(Intent.FLAG_ACTIVITY_NEW_TASK)
+ .putExtra(Browser.EXTRA_APPLICATION_ID, c.getPackageName());
+ c.startActivity(openLinkIntent);
+ LegacySimpleDialogHandle.this.dismissDialog();
+ }}, messageUrlStart, messageUrlEnd, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
+ }
}
} else {
mMessage = null;
@@ -531,25 +511,33 @@ public class WifiDialogManager {
if (mVerboseLoggingEnabled) {
Log.v(TAG, "Positive button pressed for legacy simple dialog");
}
- mCallbackThreadRunner.post(mCallback::onPositiveButtonClicked);
+ if (mCallbackThreadRunner != null && mCallback != null) {
+ mCallbackThreadRunner.post(mCallback::onPositiveButtonClicked);
+ }
})
.setNegativeButton(mNegativeButtonText, (dialogNegative, which) -> {
if (mVerboseLoggingEnabled) {
Log.v(TAG, "Negative button pressed for legacy simple dialog");
}
- mCallbackThreadRunner.post(mCallback::onNegativeButtonClicked);
+ if (mCallbackThreadRunner != null && mCallback != null) {
+ mCallbackThreadRunner.post(mCallback::onNegativeButtonClicked);
+ }
})
.setNeutralButton(mNeutralButtonText, (dialogNeutral, which) -> {
if (mVerboseLoggingEnabled) {
Log.v(TAG, "Neutral button pressed for legacy simple dialog");
}
- mCallbackThreadRunner.post(mCallback::onNeutralButtonClicked);
+ if (mCallbackThreadRunner != null && mCallback != null) {
+ mCallbackThreadRunner.post(mCallback::onNeutralButtonClicked);
+ }
})
.setOnCancelListener((dialogCancel) -> {
if (mVerboseLoggingEnabled) {
Log.v(TAG, "Legacy simple dialog cancelled.");
}
- mCallbackThreadRunner.post(mCallback::onCancelled);
+ if (mCallbackThreadRunner != null && mCallback != null) {
+ mCallbackThreadRunner.post(mCallback::onCancelled);
+ }
})
.setOnDismissListener((dialogDismiss) -> {
mWifiThreadRunner.post(() -> {
@@ -649,7 +637,7 @@ public class WifiDialogManager {
* be created.
*/
@AnyThread
- @Nullable
+ @NonNull
public DialogHandle createSimpleDialog(
@Nullable String title,
@Nullable String message,
@@ -659,16 +647,16 @@ public class WifiDialogManager {
@NonNull SimpleDialogCallback callback,
@NonNull WifiThreadRunner callbackThreadRunner) {
return createSimpleDialogWithUrl(
- title,
- message,
- null /* messageUrl */,
- 0 /* messageUrlStart */,
- 0 /* messageUrlEnd */,
- positiveButtonText,
- negativeButtonText,
- neutralButtonText,
- callback,
- callbackThreadRunner);
+ title,
+ message,
+ null /* messageUrl */,
+ 0 /* messageUrlStart */,
+ 0 /* messageUrlEnd */,
+ positiveButtonText,
+ negativeButtonText,
+ neutralButtonText,
+ callback,
+ callbackThreadRunner);
}
/**
@@ -691,7 +679,7 @@ public class WifiDialogManager {
* be created.
*/
@AnyThread
- @Nullable
+ @NonNull
public DialogHandle createSimpleDialogWithUrl(
@Nullable String title,
@Nullable String message,
@@ -703,41 +691,36 @@ public class WifiDialogManager {
@Nullable String neutralButtonText,
@NonNull SimpleDialogCallback callback,
@NonNull WifiThreadRunner callbackThreadRunner) {
- try {
- if (SdkLevel.isAtLeastT()) {
- return new DialogHandle(
- new SimpleDialogHandle(
- title,
- message,
- messageUrl,
- messageUrlStart,
- messageUrlEnd,
- positiveButtonText,
- negativeButtonText,
- neutralButtonText,
- callback,
- callbackThreadRunner)
- );
- } else {
- // TODO(b/238353074): Remove this fallback to the legacy implementation once the
- // AlertDialog style on pre-T platform is fixed.
- return new DialogHandle(
- new LegacySimpleDialogHandle(
- title,
- message,
- messageUrl,
- messageUrlStart,
- messageUrlEnd,
- positiveButtonText,
- negativeButtonText,
- neutralButtonText,
- callback,
- callbackThreadRunner)
- );
- }
- } catch (IllegalArgumentException e) {
- Log.e(TAG, "Could not create DialogHandle for simple dialog: " + e);
- return null;
+ if (SdkLevel.isAtLeastT()) {
+ return new DialogHandle(
+ new SimpleDialogHandle(
+ title,
+ message,
+ messageUrl,
+ messageUrlStart,
+ messageUrlEnd,
+ positiveButtonText,
+ negativeButtonText,
+ neutralButtonText,
+ callback,
+ callbackThreadRunner)
+ );
+ } else {
+ // TODO(b/238353074): Remove this fallback to the legacy implementation once the
+ // AlertDialog style on pre-T platform is fixed.
+ return new DialogHandle(
+ new LegacySimpleDialogHandle(
+ title,
+ message,
+ messageUrl,
+ messageUrlStart,
+ messageUrlEnd,
+ positiveButtonText,
+ negativeButtonText,
+ neutralButtonText,
+ callback,
+ callbackThreadRunner)
+ );
}
}
@@ -756,7 +739,7 @@ public class WifiDialogManager {
* be created.
*/
@AnyThread
- @Nullable
+ @NonNull
public DialogHandle createLegacySimpleDialog(
@Nullable String title,
@Nullable String message,
@@ -798,7 +781,7 @@ public class WifiDialogManager {
* be created.
*/
@AnyThread
- @Nullable
+ @NonNull
public DialogHandle createLegacySimpleDialogWithUrl(
@Nullable String title,
@Nullable String message,
@@ -808,26 +791,21 @@ public class WifiDialogManager {
@Nullable String positiveButtonText,
@Nullable String negativeButtonText,
@Nullable String neutralButtonText,
- @NonNull SimpleDialogCallback callback,
- @NonNull WifiThreadRunner callbackThreadRunner) {
- try {
- return new DialogHandle(
- new LegacySimpleDialogHandle(
- title,
- message,
- messageUrl,
- messageUrlStart,
- messageUrlEnd,
- positiveButtonText,
- negativeButtonText,
- neutralButtonText,
- callback,
- callbackThreadRunner)
- );
- } catch (IllegalArgumentException e) {
- Log.e(TAG, "Could not create DialogHandle for simple dialog: " + e);
- return null;
- }
+ @Nullable SimpleDialogCallback callback,
+ @Nullable WifiThreadRunner callbackThreadRunner) {
+ return new DialogHandle(
+ new LegacySimpleDialogHandle(
+ title,
+ message,
+ messageUrl,
+ messageUrlStart,
+ messageUrlEnd,
+ positiveButtonText,
+ negativeButtonText,
+ neutralButtonText,
+ callback,
+ callbackThreadRunner)
+ );
}
/**
@@ -873,16 +851,16 @@ public class WifiDialogManager {
}
private class P2pInvitationReceivedDialogHandle extends DialogHandleInternal {
- private @NonNull P2pInvitationReceivedDialogCallback mCallback;
- private @NonNull WifiThreadRunner mCallbackThreadRunner;
+ @Nullable private final P2pInvitationReceivedDialogCallback mCallback;
+ @Nullable private final WifiThreadRunner mCallbackThreadRunner;
P2pInvitationReceivedDialogHandle(
- final @NonNull String deviceName,
+ final @Nullable String deviceName,
final boolean isPinRequested,
@Nullable String displayPin,
int displayId,
- @NonNull P2pInvitationReceivedDialogCallback callback,
- @NonNull WifiThreadRunner callbackThreadRunner) throws IllegalArgumentException {
+ @Nullable P2pInvitationReceivedDialogCallback callback,
+ @Nullable WifiThreadRunner callbackThreadRunner) {
Intent intent = getBaseLaunchIntent(WifiManager.DIALOG_TYPE_P2P_INVITATION_RECEIVED);
if (intent != null) {
intent.putExtra(WifiManager.EXTRA_P2P_DEVICE_NAME, deviceName)
@@ -891,26 +869,21 @@ public class WifiDialogManager {
setIntent(intent);
}
setDisplayId(displayId);
- if (deviceName == null) {
- throw new IllegalArgumentException("Device name cannot be null!");
- }
- if (callback == null) {
- throw new IllegalArgumentException("Callback cannot be null!");
- }
- if (callbackThreadRunner == null) {
- throw new IllegalArgumentException("Callback thread runner cannot be null!");
- }
mCallback = callback;
mCallbackThreadRunner = callbackThreadRunner;
}
void notifyOnAccepted(@Nullable String optionalPin) {
- mCallbackThreadRunner.post(() -> mCallback.onAccepted(optionalPin));
+ if (mCallbackThreadRunner != null && mCallback != null) {
+ mCallbackThreadRunner.post(() -> mCallback.onAccepted(optionalPin));
+ }
unregisterDialog();
}
void notifyOnDeclined() {
- mCallbackThreadRunner.post(() -> mCallback.onDeclined());
+ if (mCallbackThreadRunner != null && mCallback != null) {
+ mCallbackThreadRunner.post(mCallback::onDeclined);
+ }
unregisterDialog();
}
}
@@ -947,27 +920,23 @@ public class WifiDialogManager {
* be created.
*/
@AnyThread
+ @NonNull
public DialogHandle createP2pInvitationReceivedDialog(
- @NonNull String deviceName,
+ @Nullable String deviceName,
boolean isPinRequested,
@Nullable String displayPin,
int displayId,
- @NonNull P2pInvitationReceivedDialogCallback callback,
- @NonNull WifiThreadRunner callbackThreadRunner) {
- try {
- return new DialogHandle(
- new P2pInvitationReceivedDialogHandle(
- deviceName,
- isPinRequested,
- displayPin,
- displayId,
- callback,
- callbackThreadRunner)
- );
- } catch (IllegalArgumentException e) {
- Log.e(TAG, "Could not create DialogHandle for P2P Invitation Received dialog: " + e);
- return null;
- }
+ @Nullable P2pInvitationReceivedDialogCallback callback,
+ @Nullable WifiThreadRunner callbackThreadRunner) {
+ return new DialogHandle(
+ new P2pInvitationReceivedDialogHandle(
+ deviceName,
+ isPinRequested,
+ displayPin,
+ displayId,
+ callback,
+ callbackThreadRunner)
+ );
}
/**
@@ -1012,9 +981,9 @@ public class WifiDialogManager {
private class P2pInvitationSentDialogHandle extends DialogHandleInternal {
P2pInvitationSentDialogHandle(
- final @NonNull String deviceName,
- final @Nullable String displayPin,
- int displayId) throws IllegalArgumentException {
+ @Nullable final String deviceName,
+ @Nullable final String displayPin,
+ int displayId) {
Intent intent = getBaseLaunchIntent(WifiManager.DIALOG_TYPE_P2P_INVITATION_SENT);
if (intent != null) {
intent.putExtra(WifiManager.EXTRA_P2P_DEVICE_NAME, deviceName)
@@ -1022,9 +991,6 @@ public class WifiDialogManager {
setIntent(intent);
}
setDisplayId(displayId);
- if (deviceName == null) {
- throw new IllegalArgumentException("Device name cannot be null!");
- }
}
}
@@ -1038,16 +1004,12 @@ public class WifiDialogManager {
* be created.
*/
@AnyThread
+ @NonNull
public DialogHandle createP2pInvitationSentDialog(
- @NonNull String deviceName,
+ @Nullable String deviceName,
@Nullable String displayPin,
int displayId) {
- try {
- return new DialogHandle(new P2pInvitationSentDialogHandle(deviceName, displayPin,
- displayId));
- } catch (IllegalArgumentException e) {
- Log.e(TAG, "Could not create DialogHandle for P2P Invitation Sent dialog: " + e);
- return null;
- }
+ return new DialogHandle(new P2pInvitationSentDialogHandle(deviceName, displayPin,
+ displayId));
}
}
diff --git a/service/java/com/android/server/wifi/WifiInjector.java b/service/java/com/android/server/wifi/WifiInjector.java
index f84e6206fa..bf8f2ef061 100644
--- a/service/java/com/android/server/wifi/WifiInjector.java
+++ b/service/java/com/android/server/wifi/WifiInjector.java
@@ -308,7 +308,7 @@ public class WifiInjector {
mFrameworkFacade, mContext);
// Modules interacting with Native.
mHalDeviceManager = new HalDeviceManager(mContext, mClock, this, wifiHandler);
- mInterfaceConflictManager = new InterfaceConflictManager(mContext, mFrameworkFacade,
+ mInterfaceConflictManager = new InterfaceConflictManager(this, mContext, mFrameworkFacade,
mHalDeviceManager, mWifiThreadRunner, mWifiDialogManager, new LocalLog(
mContext.getSystemService(ActivityManager.class).isLowRamDevice() ? 128 : 256));
mWifiVendorHal = new WifiVendorHal(mContext, mHalDeviceManager, wifiHandler, mWifiGlobals,
diff --git a/service/java/com/android/server/wifi/WifiNetworkFactory.java b/service/java/com/android/server/wifi/WifiNetworkFactory.java
index 02ab14bd60..b187da9b57 100644
--- a/service/java/com/android/server/wifi/WifiNetworkFactory.java
+++ b/service/java/com/android/server/wifi/WifiNetworkFactory.java
@@ -165,6 +165,7 @@ public class WifiNetworkFactory extends NetworkFactory {
@Nullable private NetworkRequest mConnectedSpecificNetworkRequest;
@Nullable private WifiNetworkSpecifier mConnectedSpecificNetworkRequestSpecifier;
@Nullable private WifiConfiguration mUserSelectedNetwork;
+ private boolean mShouldHaveInternetCapabilities = false;
private Set<Integer> mConnectedUids = new ArraySet<>();
private int mUserSelectedNetworkConnectRetryCount;
// Map of bssid to latest scan results for all scan results matching a request. Will be
@@ -377,6 +378,10 @@ public class WifiNetworkFactory extends NetworkFactory {
mActiveModeWarden.removeClientModeManager(modeManager);
return;
}
+ if (modeManager != mClientModeManager) {
+ // If clientModeManager changes, teardown the current connection
+ removeClientModeManagerIfNecessary();
+ }
mClientModeManager = modeManager;
mClientModeManagerRole = modeManager.getRole();
if (mVerboseLoggingEnabled) {
@@ -994,6 +999,14 @@ public class WifiNetworkFactory extends NetworkFactory {
return Collections.emptySet();
}
+ /**
+ * Return whether if current network request should have the internet capabilities due to a
+ * same saved/suggestion network is present.
+ */
+ public boolean shouldHaveInternetCapabilities() {
+ return mShouldHaveInternetCapabilities;
+ }
+
// Helper method to add the provided network configuration to WifiConfigManager, if it does not
// already exist & return the allocated network ID. This ID will be used in the CONNECT_NETWORK
// request to ClientModeImpl.
@@ -1114,12 +1127,30 @@ public class WifiNetworkFactory extends NetworkFactory {
Log.v(TAG,
"Requesting new ClientModeManager instance - didUserSeeUi = " + didUserSeeUi);
}
+ mShouldHaveInternetCapabilities = false;
+ ClientModeManagerRequestListener listener = new ClientModeManagerRequestListener();
+ if (mWifiPermissionsUtil.checkEnterCarModePrioritized(mActiveSpecificNetworkRequest
+ .getRequestorUid())) {
+ mShouldHaveInternetCapabilities = hasNetworkForInternet(mUserSelectedNetwork);
+ if (mShouldHaveInternetCapabilities) {
+ listener.onAnswer(mActiveModeWarden.getPrimaryClientModeManager());
+ return;
+ }
+ }
WorkSource ws = new WorkSource(mActiveSpecificNetworkRequest.getRequestorUid(),
mActiveSpecificNetworkRequest.getRequestorPackageName());
mActiveModeWarden.requestLocalOnlyClientModeManager(new ClientModeManagerRequestListener(),
ws, networkToConnect.SSID, networkToConnect.BSSID, didUserSeeUi);
}
+ private boolean hasNetworkForInternet(WifiConfiguration network) {
+ List<WifiConfiguration> networks = mWifiConfigManager.getConfiguredNetworksWithPasswords();
+ return networks.stream().anyMatch(a -> Objects.equals(a.SSID, network.SSID)
+ && !WifiConfigurationUtil.hasCredentialChanged(a, network)
+ && !a.fromWifiNetworkSpecifier
+ && !a.noInternetAccessExpected);
+ }
+
private void handleConnectToNetworkUserSelection(WifiConfiguration network,
boolean didUserSeeUi) {
Log.d(TAG, "User initiated connect to network: " + network.SSID);
@@ -1278,7 +1309,6 @@ public class WifiNetworkFactory extends NetworkFactory {
mActiveSpecificNetworkRequest = null;
mActiveSpecificNetworkRequestSpecifier = null;
mSkipUserDialogue = false;
- mUserSelectedNetwork = null;
mUserSelectedNetworkConnectRetryCount = 0;
mIsPeriodicScanEnabled = false;
mIsPeriodicScanPaused = false;
diff --git a/service/java/com/android/server/wifi/WifiServiceImpl.java b/service/java/com/android/server/wifi/WifiServiceImpl.java
index 7fcca1d8bd..5849650c14 100644
--- a/service/java/com/android/server/wifi/WifiServiceImpl.java
+++ b/service/java/com/android/server/wifi/WifiServiceImpl.java
@@ -5209,7 +5209,7 @@ public class WifiServiceImpl extends BaseWifiService {
if (mVerboseLoggingEnabled) {
mLog.info("getCurrentNetwork uid=%").c(Binder.getCallingUid()).flush();
}
- return getPrimaryClientModeManagerBlockingThreadSafe().syncGetCurrentNetwork();
+ return mActiveModeWarden.getCurrentNetwork();
}
public static String toHexString(String s) {
diff --git a/service/java/com/android/server/wifi/WifiShellCommand.java b/service/java/com/android/server/wifi/WifiShellCommand.java
index 17dbcd5c84..02a5413c7f 100644
--- a/service/java/com/android/server/wifi/WifiShellCommand.java
+++ b/service/java/com/android/server/wifi/WifiShellCommand.java
@@ -2340,7 +2340,7 @@ public class WifiShellCommand extends BasicShellCommandHandler {
if (info.getSupplicantState() != SupplicantState.COMPLETED) {
continue;
}
- Network network = cm.syncGetCurrentNetwork();
+ Network network = cm.getCurrentNetwork();
NetworkCapabilities capabilities =
mConnectivityManager.getNetworkCapabilities(network);
pw.println("NetworkCapabilities: " + capabilities);
diff --git a/service/java/com/android/server/wifi/util/WorkSourceHelper.java b/service/java/com/android/server/wifi/util/WorkSourceHelper.java
index cbd65a8f5f..3651ddc6f7 100644
--- a/service/java/com/android/server/wifi/util/WorkSourceHelper.java
+++ b/service/java/com/android/server/wifi/util/WorkSourceHelper.java
@@ -19,6 +19,7 @@ package com.android.server.wifi.util;
import static android.app.ActivityManager.RunningAppProcessInfo.IMPORTANCE_FOREGROUND;
import static android.app.ActivityManager.RunningAppProcessInfo.IMPORTANCE_FOREGROUND_SERVICE;
+import android.annotation.IntDef;
import android.annotation.NonNull;
import android.app.ActivityManager;
import android.content.pm.ApplicationInfo;
@@ -32,6 +33,8 @@ import android.util.Log;
import com.android.wifi.resources.R;
+import java.lang.annotation.Retention;
+import java.lang.annotation.RetentionPolicy;
import java.util.Arrays;
/**
@@ -49,6 +52,67 @@ public class WorkSourceHelper {
private final PackageManager mPackageManager;
private final Resources mResources;
+ // Internal opportunistic request.
+ public static final int PRIORITY_INTERNAL = 0;
+
+ // Request from a background app.
+ public static final int PRIORITY_BG = 1;
+
+ // Request from a foreground service.
+ public static final int PRIORITY_FG_SERVICE = 2;
+
+ // Request from a foreground app.
+ public static final int PRIORITY_FG_APP = 3;
+
+ // Request from a system app.
+ public static final int PRIORITY_SYSTEM = 4;
+
+ // Request from an app with NETWORK_SETTINGS, NETWORK_SETUP_WIZARD or NETWORK_STACK permission.
+ public static final int PRIORITY_PRIVILEGED = 5;
+
+ // Keep these in sync with any additions/deletions to above buckets.
+ public static final int PRIORITY_MIN = PRIORITY_INTERNAL;
+ public static final int PRIORITY_MAX = PRIORITY_PRIVILEGED;
+ @IntDef(prefix = { "PRIORITY_" }, value = {
+ PRIORITY_INTERNAL,
+ PRIORITY_BG,
+ PRIORITY_FG_SERVICE,
+ PRIORITY_FG_APP,
+ PRIORITY_SYSTEM,
+ PRIORITY_PRIVILEGED,
+ })
+ @Retention(RetentionPolicy.SOURCE)
+ public @interface RequestorWsPriority {}
+
+ /**
+ * Returns integer priority level for the provided |ws|.
+ */
+ public @RequestorWsPriority int getRequestorWsPriority() {
+ @RequestorWsPriority int totalPriority = PRIORITY_INTERNAL;
+ for (int i = 0; i < mWorkSource.size(); i++) {
+ String packageName = mWorkSource.getPackageName(i);
+ int uid = mWorkSource.getUid(i);
+ final @RequestorWsPriority int priority;
+ if (uid == Process.WIFI_UID) {
+ priority = PRIORITY_INTERNAL;
+ } else if (isPrivileged(uid)) {
+ priority = PRIORITY_PRIVILEGED;
+ } else if (isSystem(packageName, uid)) {
+ priority = PRIORITY_SYSTEM;
+ } else if (isForegroundApp(packageName)) {
+ priority = PRIORITY_FG_APP;
+ } else if (isForegroundService(packageName)) {
+ priority = PRIORITY_FG_SERVICE;
+ } else {
+ priority = PRIORITY_BG;
+ }
+ if (priority > totalPriority) {
+ totalPriority = priority;
+ }
+ }
+ return totalPriority;
+ }
+
public WorkSourceHelper(
@NonNull WorkSource workSource,
@NonNull WifiPermissionsUtil wifiPermissionsUtil,
@@ -71,6 +135,9 @@ public class WorkSourceHelper {
return mWorkSource.toString();
}
+ /**
+ * Check if the request comes from an app with privileged permissions.
+ */
private boolean isPrivileged(int uid) {
return mWifiPermissionsUtil.checkNetworkSettingsPermission(uid)
|| mWifiPermissionsUtil.checkNetworkSetupWizardPermission(uid)
@@ -79,19 +146,8 @@ public class WorkSourceHelper {
}
/**
- * Returns whether any of the one or more worksource objects contains a privileged app
- * request.
- *
- * Privileged = Request from an app with NETWORK_SETTINGS, NETWORK_SETUP_WIZARD or
- * NETWORK_STACK permissions.
+ * Check if the request comes from a system app.
*/
- public boolean hasAnyPrivilegedAppRequest() {
- for (int i = 0; i < mWorkSource.size(); i++) {
- if (isPrivileged(mWorkSource.getUid(i))) return true;
- }
- return false;
- }
-
private boolean isSystem(String packageName, int uid) {
// when checking ActiveModeWarden#INTERNAL_REQUESTOR_WS
if (packageName == null) {
@@ -112,28 +168,14 @@ public class WorkSourceHelper {
}
/**
- * Returns whether any of the one or more worksource objects contains a system app
- * request.
- */
- public boolean hasAnySystemAppRequest() {
- for (int i = 0; i < mWorkSource.size(); i++) {
- if (isSystem(mWorkSource.getPackageName(i), mWorkSource.getUid(i))) return true;
- }
- return false;
- }
-
- /**
- * Check if the request comes from foreground app.
+ * Check if the request comes from a foreground app.
*/
- private boolean isForegroundApp(@NonNull String requestorPackageName,
- boolean allowOverlayBypass) {
- if (allowOverlayBypass) {
- String[] exceptionList = mResources.getStringArray(
- R.array.config_wifiInterfacePriorityTreatAsForegroundList);
- if (exceptionList != null && Arrays.stream(exceptionList).anyMatch(
- s -> TextUtils.equals(requestorPackageName, s))) {
- return true;
- }
+ private boolean isForegroundApp(@NonNull String requestorPackageName) {
+ String[] exceptionList = mResources.getStringArray(
+ R.array.config_wifiInterfacePriorityTreatAsForegroundList);
+ if (exceptionList != null && Arrays.stream(exceptionList).anyMatch(
+ s -> TextUtils.equals(requestorPackageName, s))) {
+ return true;
}
try {
return mActivityManager.getPackageImportance(requestorPackageName)
@@ -145,21 +187,7 @@ public class WorkSourceHelper {
}
/**
- * Returns whether any of the one or more worksource objects contains a foreground app
- * request.
- *
- * @param allowOverlayBypass Use the `config_wifiInterfacePriorityTreatAsForegroundList` overlay
- * to consider the specified packages are foreground.
- */
- public boolean hasAnyForegroundAppRequest(boolean allowOverlayBypass) {
- for (int i = 0; i < mWorkSource.size(); i++) {
- if (isForegroundApp(mWorkSource.getPackageName(i), allowOverlayBypass)) return true;
- }
- return false;
- }
-
- /**
- * Check if the request comes from foreground service.
+ * Check if the request comes from a foreground service.
*/
private boolean isForegroundService(@NonNull String requestorPackageName) {
try {
@@ -171,26 +199,4 @@ public class WorkSourceHelper {
return false;
}
}
-
- /**
- * Returns whether any of the one or more worksource objects contains a foreground service
- * request.
- */
- public boolean hasAnyForegroundServiceRequest() {
- for (int i = 0; i < mWorkSource.size(); i++) {
- if (isForegroundService(mWorkSource.getPackageName(i))) return true;
- }
- return false;
- }
-
- /**
- * Returns whether any of the one or more worksource objects contains an internal
- * (i.e uid = Process.WIFI_UID) request.
- */
- public boolean hasAnyInternalRequest() {
- for (int i = 0; i < mWorkSource.size(); i++) {
- if (mWorkSource.getUid(i) == Process.WIFI_UID) return true;
- }
- return false;
- }
}
diff --git a/service/tests/wifitests/src/com/android/server/wifi/ActiveModeWardenTest.java b/service/tests/wifitests/src/com/android/server/wifi/ActiveModeWardenTest.java
index 2cc22f638f..96448661fa 100644
--- a/service/tests/wifitests/src/com/android/server/wifi/ActiveModeWardenTest.java
+++ b/service/tests/wifitests/src/com/android/server/wifi/ActiveModeWardenTest.java
@@ -63,6 +63,7 @@ import android.content.Intent;
import android.content.pm.PackageManager;
import android.content.res.Resources;
import android.location.LocationManager;
+import android.net.Network;
import android.net.wifi.ISubsystemRestartCallback;
import android.net.wifi.IWifiConnectedNetworkScorer;
import android.net.wifi.SoftApCapability;
@@ -169,6 +170,7 @@ public class ActiveModeWardenTest extends WifiBaseTest {
@Mock HalDeviceManager mHalDeviceManager;
@Mock UserManager mUserManager;
@Mock PackageManager mPackageManager;
+ @Mock Network mNetwork;
Listener<ConcreteClientModeManager> mClientListener;
Listener<SoftApManager> mSoftApListener;
@@ -336,6 +338,7 @@ public class ActiveModeWardenTest extends WifiBaseTest {
mActiveModeWarden.wifiToggled(TEST_WORKSOURCE);
mLooper.dispatchAll();
when(mClientModeManager.getRole()).thenReturn(ROLE_CLIENT_PRIMARY);
+ when(mClientModeManager.getCurrentNetwork()).thenReturn(mNetwork);
when(mWifiNative.getSupportedFeatureSet(WIFI_IFACE_NAME)).thenReturn(TEST_FEATURE_SET);
// ClientModeManager starts in SCAN_ONLY role.
mClientListener.onRoleChanged(mClientModeManager);
@@ -380,6 +383,7 @@ public class ActiveModeWardenTest extends WifiBaseTest {
mLooper.dispatchAll();
when(mClientModeManager.getRole()).thenReturn(ROLE_CLIENT_SCAN_ONLY);
when(mClientModeManager.getInterfaceName()).thenReturn(WIFI_IFACE_NAME);
+ when(mClientModeManager.getCurrentNetwork()).thenReturn(null);
when(mWifiNative.getSupportedFeatureSet(null)).thenReturn(TEST_FEATURE_SET);
if (!isClientModeSwitch) {
mClientListener.onStarted(mClientModeManager);
@@ -4786,4 +4790,15 @@ public class ActiveModeWardenTest extends WifiBaseTest {
testGetSupportedFeaturesCaseForRtt(
featureLongBits | featureInfra | featureD2dRtt | featureD2apRtt, true));
}
+
+ @Test
+ public void testGetCurrentNetworkScanOnly() throws Exception {
+ enterScanOnlyModeActiveState();
+ assertNull(mActiveModeWarden.getCurrentNetwork());
+ }
+
+ @Test public void testGetCurrentNetworkClientMode() throws Exception {
+ mActiveModeWarden.setCurrentNetwork(mNetwork);
+ assertEquals(mNetwork, mActiveModeWarden.getCurrentNetwork());
+ }
}
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 efa7011aa3..34250fa0ca 100644
--- a/service/tests/wifitests/src/com/android/server/wifi/ClientModeImplTest.java
+++ b/service/tests/wifitests/src/com/android/server/wifi/ClientModeImplTest.java
@@ -2794,18 +2794,26 @@ public class ClientModeImplTest extends WifiBaseTest {
}
@Test
- public void testSyncGetCurrentNetwork() throws Exception {
- // syncGetCurrentNetwork() returns null when disconnected
- mLooper.startAutoDispatch();
- assertNull(mCmi.syncGetCurrentNetwork());
- mLooper.stopAutoDispatch();
-
+ public void testGetCurrentNetwork() throws Exception {
+ // getCurrentNetwork() returns null when disconnected
+ assertNull(mCmi.getCurrentNetwork());
connect();
- // syncGetCurrentNetwork() returns non-null Network when connected
- mLooper.startAutoDispatch();
- assertEquals(mNetwork, mCmi.syncGetCurrentNetwork());
- mLooper.stopAutoDispatch();
+ assertEquals("L3ConnectedState", getCurrentState().getName());
+ // getCurrentNetwork() returns non-null Network when connected
+ assertEquals(mNetwork, mCmi.getCurrentNetwork());
+ // Now trigger disconnect
+ mCmi.disconnect();
+ DisconnectEventInfo disconnectEventInfo =
+ new DisconnectEventInfo(mConnectedNetwork.SSID, TEST_BSSID_STR, 0, false);
+ mCmi.sendMessage(WifiMonitor.NETWORK_DISCONNECTION_EVENT, disconnectEventInfo);
+ mLooper.dispatchAll();
+ mCmi.sendMessage(WifiMonitor.SUPPLICANT_STATE_CHANGE_EVENT, 0, 0,
+ new StateChangeResult(0, WifiSsid.fromUtf8Text(mConnectedNetwork.SSID),
+ TEST_BSSID_STR, SupplicantState.DISCONNECTED));
+ mLooper.dispatchAll();
+ assertEquals("DisconnectedState", getCurrentState().getName());
+ assertNull(mCmi.getCurrentNetwork());
}
/**
@@ -5100,7 +5108,7 @@ public class ClientModeImplTest extends WifiBaseTest {
* when both Tx and Rx link speed are unavailable.
*/
@Test
- public void verifyNetworkCapabilitiesForSpecificRequest() throws Exception {
+ public void verifyNetworkCapabilitiesForSpecificRequestWithInternet() throws Exception {
mWifiInfo.setFrequency(2437);
when(mPerNetwork.getTxLinkBandwidthKbps()).thenReturn(30_000);
when(mPerNetwork.getRxLinkBandwidthKbps()).thenReturn(40_000);
@@ -5147,6 +5155,58 @@ public class ClientModeImplTest extends WifiBaseTest {
}
/**
+ * Verify that we set the INTERNET capability in the network agent when connected
+ * as a result of the new network which indicate the internet capabilites should be set.
+ */
+ @Test
+ public void verifyNetworkCapabilitiesForSpecificRequest() throws Exception {
+ mWifiInfo.setFrequency(2437);
+ when(mPerNetwork.getTxLinkBandwidthKbps()).thenReturn(30_000);
+ when(mPerNetwork.getRxLinkBandwidthKbps()).thenReturn(40_000);
+ when(mWifiNetworkFactory.getSpecificNetworkRequestUids(any(), any()))
+ .thenReturn(Set.of(TEST_UID));
+ when(mWifiNetworkFactory.getSpecificNetworkRequestUidAndPackageName(any(), any()))
+ .thenReturn(Pair.create(TEST_UID, OP_PACKAGE_NAME));
+ when(mWifiNetworkFactory.shouldHaveInternetCapabilities()).thenReturn(true);
+ // Simulate the first connection.
+ connectWithValidInitRssi(-42);
+ ArgumentCaptor<NetworkCapabilities> networkCapabilitiesCaptor =
+ ArgumentCaptor.forClass(NetworkCapabilities.class);
+
+ verify(mWifiInjector).makeWifiNetworkAgent(
+ networkCapabilitiesCaptor.capture(), any(), any(), any(), any());
+
+ NetworkCapabilities networkCapabilities = networkCapabilitiesCaptor.getValue();
+ assertNotNull(networkCapabilities);
+
+ // should not have internet capability.
+ assertTrue(networkCapabilities.hasCapability(NetworkCapabilities.NET_CAPABILITY_INTERNET));
+
+ NetworkSpecifier networkSpecifier = networkCapabilities.getNetworkSpecifier();
+ assertTrue(networkSpecifier instanceof WifiNetworkAgentSpecifier);
+ WifiNetworkAgentSpecifier wifiNetworkAgentSpecifier =
+ (WifiNetworkAgentSpecifier) networkSpecifier;
+
+ // createNetworkAgentSpecifier does not write the BSSID to the current wifi configuration.
+ WifiConfiguration expectedConfig = new WifiConfiguration(
+ mCmi.getConnectedWifiConfiguration());
+ expectedConfig.BSSID = TEST_BSSID_STR;
+ WifiNetworkAgentSpecifier expectedWifiNetworkAgentSpecifier =
+ new WifiNetworkAgentSpecifier(expectedConfig, ScanResult.WIFI_BAND_24_GHZ,
+ true /* matchLocalOnlySpecifiers */);
+ assertEquals(expectedWifiNetworkAgentSpecifier, wifiNetworkAgentSpecifier);
+ if (SdkLevel.isAtLeastS()) {
+ assertEquals(Set.of(new Range<Integer>(TEST_UID, TEST_UID)),
+ networkCapabilities.getUids());
+ } else {
+ assertEquals(TEST_UID, networkCapabilities.getRequestorUid());
+ assertEquals(OP_PACKAGE_NAME, networkCapabilities.getRequestorPackageName());
+ }
+ assertEquals(30_000, networkCapabilities.getLinkUpstreamBandwidthKbps());
+ assertEquals(40_000, networkCapabilities.getLinkDownstreamBandwidthKbps());
+ }
+
+ /**
* Verifies that no RSSI change broadcast should be sent
*/
private void failOnRssiChangeBroadcast() throws Exception {
diff --git a/service/tests/wifitests/src/com/android/server/wifi/ConcreteClientModeManagerTest.java b/service/tests/wifitests/src/com/android/server/wifi/ConcreteClientModeManagerTest.java
index 8ae6cb7131..9116ff5b4c 100644
--- a/service/tests/wifitests/src/com/android/server/wifi/ConcreteClientModeManagerTest.java
+++ b/service/tests/wifitests/src/com/android/server/wifi/ConcreteClientModeManagerTest.java
@@ -630,6 +630,10 @@ public class ConcreteClientModeManagerTest extends WifiBaseTest {
when(mClientModeImpl.hasQuit()).thenReturn(true);
mClientModeManager.onClientModeImplQuit();
verify(mListener).onStopped(mClientModeManager);
+
+ mClientModeManager.stop();
+ mLooper.dispatchAll();
+ verify(mWifiNative, never()).teardownInterface(TEST_INTERFACE_NAME);
}
/**
@@ -638,11 +642,11 @@ public class ConcreteClientModeManagerTest extends WifiBaseTest {
@Test
public void noCallbackOnInterfaceDestroyedWhenAlreadyStopped() throws Exception {
startClientInConnectModeAndVerifyEnabled();
-
reset(mListener);
mClientModeManager.stop();
mLooper.dispatchAll();
+ verify(mWifiNative).teardownInterface(TEST_INTERFACE_NAME);
// now trigger interface destroyed and make sure callback doesn't get called
mInterfaceCallbackCaptor.getValue().onDestroyed(TEST_INTERFACE_NAME);
diff --git a/service/tests/wifitests/src/com/android/server/wifi/HalDeviceManagerTest.java b/service/tests/wifitests/src/com/android/server/wifi/HalDeviceManagerTest.java
index 04e4f5384f..629d2257de 100644
--- a/service/tests/wifitests/src/com/android/server/wifi/HalDeviceManagerTest.java
+++ b/service/tests/wifitests/src/com/android/server/wifi/HalDeviceManagerTest.java
@@ -36,7 +36,6 @@ import static org.junit.Assert.assertThat;
import static org.junit.Assert.assertTrue;
import static org.junit.Assume.assumeFalse;
import static org.junit.Assume.assumeTrue;
-import static org.mockito.ArgumentMatchers.anyBoolean;
import static org.mockito.Matchers.any;
import static org.mockito.Matchers.anyInt;
import static org.mockito.Matchers.anyLong;
@@ -139,6 +138,7 @@ public class HalDeviceManagerTest extends WifiBaseTest {
@Mock private WifiInjector mWifiInjector;
@Mock private SoftApManager mSoftApManager;
@Mock private WifiSettingsConfigStore mWifiSettingsConfigStore;
+ @Mock private InterfaceConflictManager mInterfaceConflictManager;
@Mock private WorkSourceHelper mWorkSourceHelper0;
@Mock private WorkSourceHelper mWorkSourceHelper1;
@Mock private WorkSourceHelper mWorkSourceHelper2;
@@ -234,12 +234,18 @@ public class HalDeviceManagerTest extends WifiBaseTest {
setupWifiV15(mWifiMock);
+ when(mWifiInjector.getInterfaceConflictManager()).thenReturn(mInterfaceConflictManager);
+ when(mInterfaceConflictManager.needsUserApprovalToDelete(anyInt(), any(), anyInt(), any()))
+ .thenReturn(false);
when(mWifiInjector.makeWsHelper(TEST_WORKSOURCE_0)).thenReturn(mWorkSourceHelper0);
when(mWifiInjector.makeWsHelper(TEST_WORKSOURCE_1)).thenReturn(mWorkSourceHelper1);
when(mWifiInjector.makeWsHelper(TEST_WORKSOURCE_2)).thenReturn(mWorkSourceHelper2);
- when(mWorkSourceHelper0.hasAnyPrivilegedAppRequest()).thenReturn(true);
- when(mWorkSourceHelper1.hasAnyPrivilegedAppRequest()).thenReturn(true);
- when(mWorkSourceHelper2.hasAnyPrivilegedAppRequest()).thenReturn(true);
+ when(mWorkSourceHelper0.getRequestorWsPriority())
+ .thenReturn(WorkSourceHelper.PRIORITY_PRIVILEGED);
+ when(mWorkSourceHelper1.getRequestorWsPriority())
+ .thenReturn(WorkSourceHelper.PRIORITY_PRIVILEGED);
+ when(mWorkSourceHelper2.getRequestorWsPriority())
+ .thenReturn(WorkSourceHelper.PRIORITY_PRIVILEGED);
when(mWorkSourceHelper0.getWorkSource()).thenReturn(TEST_WORKSOURCE_0);
when(mWorkSourceHelper1.getWorkSource()).thenReturn(TEST_WORKSOURCE_1);
when(mWorkSourceHelper2.getWorkSource()).thenReturn(TEST_WORKSOURCE_2);
@@ -845,8 +851,8 @@ public class HalDeviceManagerTest extends WifiBaseTest {
collector.checkThat("P2P was not created", p2pIface, IsNull.notNullValue());
// get NAN interface from a system app: should fail
- when(mWorkSourceHelper1.hasAnyPrivilegedAppRequest()).thenReturn(false);
- when(mWorkSourceHelper1.hasAnySystemAppRequest()).thenReturn(true);
+ when(mWorkSourceHelper1.getRequestorWsPriority())
+ .thenReturn(WorkSourceHelper.PRIORITY_SYSTEM);
List<Pair<Integer, WorkSource>> nanDetails = mDut.reportImpactToCreateIface(
HDM_CREATE_IFACE_NAN, false, TEST_WORKSOURCE_1);
assertNull("Should not create this NAN", nanDetails);
@@ -856,13 +862,13 @@ public class HalDeviceManagerTest extends WifiBaseTest {
collector.checkThat("not allocated interface", nanIface, IsNull.nullValue());
// Now replace the requestorWs (fg app now) for the P2P iface.
- when(mWorkSourceHelper2.hasAnyPrivilegedAppRequest()).thenReturn(false);
- when(mWorkSourceHelper2.hasAnyForegroundAppRequest(true)).thenReturn(true);
+ when(mWorkSourceHelper2.getRequestorWsPriority())
+ .thenReturn(WorkSourceHelper.PRIORITY_FG_APP);
assertTrue(mDut.replaceRequestorWs(p2pIface, TEST_WORKSOURCE_2));
// get AP interface again from a system app: should succeed now
- when(mWorkSourceHelper1.hasAnyPrivilegedAppRequest()).thenReturn(false);
- when(mWorkSourceHelper1.hasAnySystemAppRequest()).thenReturn(true);
+ when(mWorkSourceHelper1.getRequestorWsPriority())
+ .thenReturn(WorkSourceHelper.PRIORITY_SYSTEM);
nanIface = (IWifiNanIface) validateInterfaceSequence(chipMock,
true, // chipModeValid
TestChipV1.STA_CHIP_MODE_ID, // chipModeId (only used if chipModeValid is true)
@@ -878,24 +884,17 @@ public class HalDeviceManagerTest extends WifiBaseTest {
}
/**
- * Validate a flow sequence for test chip 2 if the
- * |config_wifiUserApprovalRequiredForD2dInterfacePriority| overlay value is true. If enabled,
- * interface requests for AP/P2P/NAN should be approved over other AP/P2P/NAN interfaces as
- * long as the new requestor's worksource priority is > PRIORITY_BG and they aren't the same
- * type.
+ * Validate a flow sequence for test chip 2 if a new interface is able to delete an existing
+ * interface with user approval.
*
* Flow sequence:
* - create P2P (privileged app)
- * - create NAN (foreground app)
- * - tear down NAN
- * - create P2P (privileged app)
- * - create NAN (background app): should fail.
+ * - create NAN (foreground app) but cannot delete P2P with user approval: should fail
+ * - create NAN (foreground app) but can delete P2P with user approval: should succeed
*/
@Test
- public void testInterfaceCreationFlowIfD2dInterfacePriorityOverlayEnabled() throws Exception {
+ public void testInterfaceCreationFlowIfCanDeleteWithUserApproval() throws Exception {
assumeTrue(SdkLevel.isAtLeastT());
- when(mResources.getBoolean(R.bool.config_wifiUserApprovalRequiredForD2dInterfacePriority))
- .thenReturn(true);
mDut = new HalDeviceManagerSpy();
ChipMockBase chipMock = new TestChipV2();
chipMock.initialize();
@@ -920,18 +919,24 @@ public class HalDeviceManagerTest extends WifiBaseTest {
);
collector.checkThat("P2P was not created", p2pIface, IsNull.notNullValue());
- // Check if we can create a new P2P interface from foreground app: should fail.
- when(mWorkSourceHelper1.hasAnyPrivilegedAppRequest()).thenReturn(false);
- when(mWorkSourceHelper1.hasAnyForegroundAppRequest(true)).thenReturn(true);
- List<Pair<Integer, WorkSource>> p2pDetails = mDut.reportImpactToCreateIface(
- HDM_CREATE_IFACE_P2P, true, TEST_WORKSOURCE_1);
- assertNull("Should not create this P2P", p2pDetails);
-
- // Create NAN interface from foreground app: should succeed.
+ // Create NAN interface from foreground app: should fail.
+ when(mWorkSourceHelper1.getRequestorWsPriority())
+ .thenReturn(WorkSourceHelper.PRIORITY_FG_APP);
List<Pair<Integer, WorkSource>> nanDetails = mDut.reportImpactToCreateIface(
HDM_CREATE_IFACE_NAN, true, TEST_WORKSOURCE_1);
+ assertNull("Should not create this NAN", nanDetails);
+ IWifiIface nanIface = mDut.createNanIface(null, null, TEST_WORKSOURCE_1);
+ collector.checkThat("NAN was created", nanIface, IsNull.nullValue());
+
+ // Can now delete P2P with user approval
+ when(mInterfaceConflictManager.needsUserApprovalToDelete(anyInt(), any(), anyInt(), any()))
+ .thenReturn(true);
+
+ // Can create NAN now.
+ nanDetails = mDut.reportImpactToCreateIface(
+ HDM_CREATE_IFACE_NAN, true, TEST_WORKSOURCE_1);
assertNotNull("Should create this NAN", nanDetails);
- IWifiIface nanIface = validateInterfaceSequence(chipMock,
+ nanIface = validateInterfaceSequence(chipMock,
true, // chipModeValid
TestChipV2.CHIP_MODE_ID, // chipModeId (only used if chipModeValid is true)
HDM_CREATE_IFACE_NAN,
@@ -943,140 +948,8 @@ public class HalDeviceManagerTest extends WifiBaseTest {
new InterfaceDestroyedListenerWithIfaceName(getName(p2pIface), nanDestroyedListener)
);
collector.checkThat("NAN was not created", nanIface, IsNull.notNullValue());
-
- // Tear down the NAN interface.
- mDut.removeIface(nanIface);
- mTestLooper.dispatchAll();
-
- // Create a new P2P interface from privileged app: should succeed.
- p2pIface = validateInterfaceSequence(chipMock,
- true, // chipModeValid
- TestChipV2.CHIP_MODE_ID, // chipModeId (only used if chipModeValid is true)
- HDM_CREATE_IFACE_P2P,
- "wlan0",
- TestChipV2.CHIP_MODE_ID,
- null, // tearDownList
- nanDestroyedListener, // destroyedListener
- TEST_WORKSOURCE_0 // requestorWs
- );
- collector.checkThat("P2P was not created", p2pIface, IsNull.notNullValue());
-
- // Check if we can create a new NAN interface from background app: should fail.
- when(mWorkSourceHelper1.hasAnyForegroundAppRequest(true)).thenReturn(false);
- nanDetails = mDut.reportImpactToCreateIface(HDM_CREATE_IFACE_NAN, true, TEST_WORKSOURCE_1);
- assertNull("Should not create this NAN", nanDetails);
}
- /**
- * Tests that
- * {@link HalDeviceManager#needsUserApprovalToDelete(int, WorkSource, int, WorkSource)} returns
- * true on the following conditions:
- * 1) Requested interface is AP, AP_BRIDGED, P2P, or NAN.
- * 2) Existing interface is AP, AP_BRIDGED, P2P, or NAN (but not the same as the requested).
- * 3) Requestor worksource has higher priority than PRIORITY_BG.
- * 4) Existing worksource is not PRIORITY_INTERNAL.
- */
- @Test
- public void testShouldShowDialogToDelete() throws Exception {
- WorkSource newWorkSource = mock(WorkSource.class);
- WorkSource oldWorkSource = mock(WorkSource.class);
- WorkSourceHelper newWsHelper = mock(WorkSourceHelper.class);
- WorkSourceHelper oldWsHelper = mock(WorkSourceHelper.class);
- when(mWifiInjector.makeWsHelper(newWorkSource)).thenReturn(newWsHelper);
- when(mWifiInjector.makeWsHelper(oldWorkSource)).thenReturn(oldWsHelper);
-
- when(mResources.getBoolean(R.bool.config_wifiUserApprovalRequiredForD2dInterfacePriority))
- .thenReturn(false);
- mDut = new HalDeviceManagerSpy();
-
- // No dialog if dialogs aren't enabled
- when(newWsHelper.hasAnyForegroundAppRequest(anyBoolean())).thenReturn(true);
- when(oldWsHelper.hasAnyForegroundAppRequest(anyBoolean())).thenReturn(true);
- assertFalse(mDut.needsUserApprovalToDelete(
- HDM_CREATE_IFACE_P2P, newWorkSource,
- HDM_CREATE_IFACE_AP, oldWorkSource));
-
- when(mResources.getBoolean(R.bool.config_wifiUserApprovalRequiredForD2dInterfacePriority))
- .thenReturn(true);
- mDut = new HalDeviceManagerSpy();
-
- // Should show dialog for appropriate types.
- when(newWsHelper.hasAnyForegroundAppRequest(anyBoolean())).thenReturn(true);
- when(oldWsHelper.hasAnyForegroundAppRequest(anyBoolean())).thenReturn(true);
-
- // Requesting AP
- assertFalse(mDut.needsUserApprovalToDelete(
- HDM_CREATE_IFACE_AP, newWorkSource,
- HDM_CREATE_IFACE_AP, oldWorkSource));
- assertFalse(mDut.needsUserApprovalToDelete(
- HDM_CREATE_IFACE_AP, newWorkSource,
- HDM_CREATE_IFACE_AP_BRIDGE, oldWorkSource));
- assertTrue(mDut.needsUserApprovalToDelete(
- HDM_CREATE_IFACE_AP, newWorkSource,
- HDM_CREATE_IFACE_NAN, oldWorkSource));
- assertTrue(mDut.needsUserApprovalToDelete(
- HDM_CREATE_IFACE_AP, newWorkSource,
- HDM_CREATE_IFACE_P2P, oldWorkSource));
-
- // Requesting AP_BRIDGE
- assertFalse(mDut.needsUserApprovalToDelete(
- HDM_CREATE_IFACE_AP_BRIDGE, newWorkSource,
- HDM_CREATE_IFACE_AP, oldWorkSource));
- assertFalse(mDut.needsUserApprovalToDelete(
- HDM_CREATE_IFACE_AP_BRIDGE, newWorkSource,
- HDM_CREATE_IFACE_AP_BRIDGE, oldWorkSource));
- assertTrue(mDut.needsUserApprovalToDelete(
- HDM_CREATE_IFACE_AP_BRIDGE, newWorkSource,
- HDM_CREATE_IFACE_NAN, oldWorkSource));
- assertTrue(mDut.needsUserApprovalToDelete(
- HDM_CREATE_IFACE_AP_BRIDGE, newWorkSource,
- HDM_CREATE_IFACE_P2P, oldWorkSource));
-
- // Requesting P2P
- assertTrue(mDut.needsUserApprovalToDelete(
- HDM_CREATE_IFACE_P2P, newWorkSource,
- HDM_CREATE_IFACE_AP, oldWorkSource));
- assertTrue(mDut.needsUserApprovalToDelete(
- HDM_CREATE_IFACE_P2P, newWorkSource,
- HDM_CREATE_IFACE_AP_BRIDGE, oldWorkSource));
- assertTrue(mDut.needsUserApprovalToDelete(
- HDM_CREATE_IFACE_P2P, newWorkSource,
- HDM_CREATE_IFACE_NAN, oldWorkSource));
- assertFalse(mDut.needsUserApprovalToDelete(
- HDM_CREATE_IFACE_P2P, newWorkSource,
- HDM_CREATE_IFACE_P2P, oldWorkSource));
-
- // Requesting NAN
- assertTrue(mDut.needsUserApprovalToDelete(
- HDM_CREATE_IFACE_NAN, newWorkSource,
- HDM_CREATE_IFACE_AP, oldWorkSource));
- assertTrue(mDut.needsUserApprovalToDelete(
- HDM_CREATE_IFACE_NAN, newWorkSource,
- HDM_CREATE_IFACE_AP_BRIDGE, oldWorkSource));
- assertFalse(mDut.needsUserApprovalToDelete(
- HDM_CREATE_IFACE_NAN, newWorkSource,
- HDM_CREATE_IFACE_NAN, oldWorkSource));
- assertTrue(mDut.needsUserApprovalToDelete(
- HDM_CREATE_IFACE_NAN, newWorkSource,
- HDM_CREATE_IFACE_P2P, oldWorkSource));
-
- // Foreground should show dialog over Privileged
- when(newWsHelper.hasAnyForegroundAppRequest(anyBoolean())).thenReturn(true);
- when(oldWsHelper.hasAnyPrivilegedAppRequest()).thenReturn(true);
- assertTrue(mDut.needsUserApprovalToDelete(
- HDM_CREATE_IFACE_NAN, newWorkSource,
- HDM_CREATE_IFACE_P2P, oldWorkSource));
-
- // Foreground should delete Internal without showing dialog
- when(oldWsHelper.hasAnyPrivilegedAppRequest()).thenReturn(false);
- when(oldWsHelper.hasAnyForegroundAppRequest(anyBoolean())).thenReturn(false);
- when(oldWsHelper.hasAnyInternalRequest()).thenReturn(true);
- assertFalse(mDut.needsUserApprovalToDelete(
- HDM_CREATE_IFACE_NAN, newWorkSource,
- HDM_CREATE_IFACE_P2P, oldWorkSource));
- }
-
-
//////////////////////////////////////////////////////////////////////////////////////
// Chip Specific Tests - but should work on all chips!
// (i.e. add copies for each test chip)
@@ -1512,8 +1385,8 @@ public class HalDeviceManagerTest extends WifiBaseTest {
mInOrder.verify(chipMock.chip).configureChip(TestChipV1.STA_CHIP_MODE_ID);
// Now Create AP Iface.
- when(mWorkSourceHelper1.hasAnyPrivilegedAppRequest()).thenReturn(false);
- when(mWorkSourceHelper1.hasAnyForegroundAppRequest(anyBoolean())).thenReturn(true);
+ when(mWorkSourceHelper1.getRequestorWsPriority())
+ .thenReturn(WorkSourceHelper.PRIORITY_FG_APP);
IWifiApIface apIface = mock(IWifiApIface.class);
doAnswer(new GetNameAnswer("wlan0")).when(apIface).getName(
any(IWifiIface.getNameCallback.class));
@@ -1712,8 +1585,8 @@ public class HalDeviceManagerTest extends WifiBaseTest {
collector.checkThat("STA created", staIface1, IsNull.notNullValue());
// get STA interface again (from a system app)
- when(mWorkSourceHelper1.hasAnyPrivilegedAppRequest()).thenReturn(false);
- when(mWorkSourceHelper1.hasAnySystemAppRequest()).thenReturn(true);
+ when(mWorkSourceHelper1.getRequestorWsPriority())
+ .thenReturn(WorkSourceHelper.PRIORITY_SYSTEM);
List<Pair<Integer, WorkSource>> staDetails = mDut.reportImpactToCreateIface(
HDM_CREATE_IFACE_STA, false, TEST_WORKSOURCE_1);
assertNotNull("Should not have a problem if STA already exists", staDetails);
@@ -1938,8 +1811,8 @@ public class HalDeviceManagerTest extends WifiBaseTest {
executeAndValidateStartupSequence();
// get STA interface from system app.
- when(mWorkSourceHelper0.hasAnyPrivilegedAppRequest()).thenReturn(false);
- when(mWorkSourceHelper0.hasAnySystemAppRequest()).thenReturn(true);
+ when(mWorkSourceHelper0.getRequestorWsPriority())
+ .thenReturn(WorkSourceHelper.PRIORITY_SYSTEM);
IWifiIface staIface = validateInterfaceSequence(chipMock,
false, // chipModeValid
-1000, // chipModeId (only used if chipModeValid is true)
@@ -1953,27 +1826,27 @@ public class HalDeviceManagerTest extends WifiBaseTest {
collector.checkThat("STA created", staIface, IsNull.notNullValue());
// FG app not allowed to create AP interface.
- when(mWorkSourceHelper1.hasAnyPrivilegedAppRequest()).thenReturn(false);
- when(mWorkSourceHelper1.hasAnyForegroundAppRequest(true)).thenReturn(true);
+ when(mWorkSourceHelper1.getRequestorWsPriority())
+ .thenReturn(WorkSourceHelper.PRIORITY_FG_APP);
assertFalse(mDut.isItPossibleToCreateIface(HDM_CREATE_IFACE_AP, TEST_WORKSOURCE_1));
// New system app not allowed to create AP interface.
- when(mWorkSourceHelper1.hasAnyForegroundAppRequest(true)).thenReturn(false);
- when(mWorkSourceHelper1.hasAnySystemAppRequest()).thenReturn(true);
+ when(mWorkSourceHelper1.getRequestorWsPriority())
+ .thenReturn(WorkSourceHelper.PRIORITY_SYSTEM);
assertFalse(mDut.isItPossibleToCreateIface(HDM_CREATE_IFACE_AP, TEST_WORKSOURCE_1));
// Privileged app allowed to create AP interface.
- when(mWorkSourceHelper1.hasAnySystemAppRequest()).thenReturn(false);
- when(mWorkSourceHelper1.hasAnyPrivilegedAppRequest()).thenReturn(true);
+ when(mWorkSourceHelper1.getRequestorWsPriority())
+ .thenReturn(WorkSourceHelper.PRIORITY_PRIVILEGED);
assertTrue(mDut.isItPossibleToCreateIface(HDM_CREATE_IFACE_AP, TEST_WORKSOURCE_1));
// FG app allowed to create NAN interface (since there is no need to delete any interfaces).
- when(mWorkSourceHelper1.hasAnyPrivilegedAppRequest()).thenReturn(false);
- when(mWorkSourceHelper1.hasAnyForegroundAppRequest(true)).thenReturn(true);
+ when(mWorkSourceHelper1.getRequestorWsPriority())
+ .thenReturn(WorkSourceHelper.PRIORITY_FG_APP);
assertTrue(mDut.isItPossibleToCreateIface(HDM_CREATE_IFACE_NAN, TEST_WORKSOURCE_1));
// BG app allowed to create P2P interface (since there is no need to delete any interfaces).
- when(mWorkSourceHelper1.hasAnyForegroundAppRequest(true)).thenReturn(false);
+ when(mWorkSourceHelper1.getRequestorWsPriority()).thenReturn(WorkSourceHelper.PRIORITY_BG);
assertTrue(mDut.isItPossibleToCreateIface(HDM_CREATE_IFACE_P2P, TEST_WORKSOURCE_1));
}
@@ -2006,12 +1879,12 @@ public class HalDeviceManagerTest extends WifiBaseTest {
assertTrue(mDut.isItPossibleToCreateIface(HDM_CREATE_IFACE_AP, TEST_WORKSOURCE_1));
// Allow to create NAN interface (since there is no need to delete any interfaces).
- when(mWorkSourceHelper1.hasAnyPrivilegedAppRequest()).thenReturn(false);
- when(mWorkSourceHelper1.hasAnyForegroundAppRequest(true)).thenReturn(true);
+ when(mWorkSourceHelper1.getRequestorWsPriority())
+ .thenReturn(WorkSourceHelper.PRIORITY_FG_APP);
assertTrue(mDut.isItPossibleToCreateIface(HDM_CREATE_IFACE_NAN, TEST_WORKSOURCE_1));
// Allow to create P2P interface (since there is no need to delete any interfaces).
- when(mWorkSourceHelper1.hasAnyForegroundAppRequest(true)).thenReturn(false);
+ when(mWorkSourceHelper1.getRequestorWsPriority()).thenReturn(WorkSourceHelper.PRIORITY_BG);
assertTrue(mDut.isItPossibleToCreateIface(HDM_CREATE_IFACE_P2P, TEST_WORKSOURCE_1));
}
@@ -2061,8 +1934,8 @@ public class HalDeviceManagerTest extends WifiBaseTest {
// create STA (system app)
when(mClock.getUptimeSinceBootMillis()).thenReturn(15L);
- when(mWorkSourceHelper0.hasAnyPrivilegedAppRequest()).thenReturn(false);
- when(mWorkSourceHelper0.hasAnySystemAppRequest()).thenReturn(true);
+ when(mWorkSourceHelper0.getRequestorWsPriority())
+ .thenReturn(WorkSourceHelper.PRIORITY_SYSTEM);
IWifiIface staIface = validateInterfaceSequence(chipMock,
false, // chipModeValid
-1000, // chipModeId (only used if chipModeValid is true)
@@ -2076,8 +1949,8 @@ public class HalDeviceManagerTest extends WifiBaseTest {
collector.checkThat("STA interface wasn't created", staIface, IsNull.notNullValue());
// create P2P (system app)
- when(mWorkSourceHelper1.hasAnyPrivilegedAppRequest()).thenReturn(false);
- when(mWorkSourceHelper1.hasAnySystemAppRequest()).thenReturn(true);
+ when(mWorkSourceHelper1.getRequestorWsPriority())
+ .thenReturn(WorkSourceHelper.PRIORITY_SYSTEM);
IWifiIface p2pIface = validateInterfaceSequence(chipMock,
true, // chipModeValid
TestChipV2.CHIP_MODE_ID, // chipModeId
@@ -2386,8 +2259,8 @@ public class HalDeviceManagerTest extends WifiBaseTest {
executeAndValidateStartupSequence();
// get STA interface from system app.
- when(mWorkSourceHelper0.hasAnyPrivilegedAppRequest()).thenReturn(false);
- when(mWorkSourceHelper0.hasAnySystemAppRequest()).thenReturn(true);
+ when(mWorkSourceHelper0.getRequestorWsPriority())
+ .thenReturn(WorkSourceHelper.PRIORITY_SYSTEM);
IWifiIface staIface = validateInterfaceSequence(chipMock,
false, // chipModeValid
-1000, // chipModeId (only used if chipModeValid is true)
@@ -2401,8 +2274,8 @@ public class HalDeviceManagerTest extends WifiBaseTest {
collector.checkThat("STA created", staIface, IsNull.notNullValue());
// get AP interface from system app.
- when(mWorkSourceHelper0.hasAnyPrivilegedAppRequest()).thenReturn(false);
- when(mWorkSourceHelper0.hasAnySystemAppRequest()).thenReturn(true);
+ when(mWorkSourceHelper0.getRequestorWsPriority())
+ .thenReturn(WorkSourceHelper.PRIORITY_SYSTEM);
IWifiIface apIface = validateInterfaceSequence(chipMock,
true, // chipModeValid
TestChipV2.CHIP_MODE_ID, // chipModeId
@@ -2416,27 +2289,27 @@ public class HalDeviceManagerTest extends WifiBaseTest {
collector.checkThat("AP created", apIface, IsNull.notNullValue());
// FG app not allowed to create STA interface.
- when(mWorkSourceHelper1.hasAnyPrivilegedAppRequest()).thenReturn(false);
- when(mWorkSourceHelper1.hasAnyForegroundAppRequest(true)).thenReturn(true);
+ when(mWorkSourceHelper1.getRequestorWsPriority())
+ .thenReturn(WorkSourceHelper.PRIORITY_FG_APP);
assertFalse(mDut.isItPossibleToCreateIface(HDM_CREATE_IFACE_STA, TEST_WORKSOURCE_1));
// New system app not allowed to create STA interface.
- when(mWorkSourceHelper1.hasAnyForegroundAppRequest(true)).thenReturn(false);
- when(mWorkSourceHelper1.hasAnySystemAppRequest()).thenReturn(true);
+ when(mWorkSourceHelper1.getRequestorWsPriority())
+ .thenReturn(WorkSourceHelper.PRIORITY_SYSTEM);
assertFalse(mDut.isItPossibleToCreateIface(HDM_CREATE_IFACE_STA, TEST_WORKSOURCE_1));
// Privileged app allowed to create STA interface.
- when(mWorkSourceHelper1.hasAnySystemAppRequest()).thenReturn(false);
- when(mWorkSourceHelper1.hasAnyPrivilegedAppRequest()).thenReturn(true);
+ when(mWorkSourceHelper1.getRequestorWsPriority())
+ .thenReturn(WorkSourceHelper.PRIORITY_PRIVILEGED);
assertTrue(mDut.isItPossibleToCreateIface(HDM_CREATE_IFACE_STA, TEST_WORKSOURCE_1));
// FG app allowed to create NAN interface (since there is no need to delete any interfaces).
- when(mWorkSourceHelper1.hasAnyPrivilegedAppRequest()).thenReturn(false);
- when(mWorkSourceHelper1.hasAnyForegroundAppRequest(true)).thenReturn(true);
+ when(mWorkSourceHelper1.getRequestorWsPriority())
+ .thenReturn(WorkSourceHelper.PRIORITY_FG_APP);
assertTrue(mDut.isItPossibleToCreateIface(HDM_CREATE_IFACE_NAN, TEST_WORKSOURCE_1));
// BG app allowed to create P2P interface (since there is no need to delete any interfaces).
- when(mWorkSourceHelper1.hasAnyForegroundAppRequest(true)).thenReturn(false);
+ when(mWorkSourceHelper0.getRequestorWsPriority()).thenReturn(WorkSourceHelper.PRIORITY_BG);
assertTrue(mDut.isItPossibleToCreateIface(HDM_CREATE_IFACE_P2P, TEST_WORKSOURCE_1));
}
@@ -2486,8 +2359,8 @@ public class HalDeviceManagerTest extends WifiBaseTest {
// create STA (system app)
when(mClock.getUptimeSinceBootMillis()).thenReturn(15L);
- when(mWorkSourceHelper0.hasAnyPrivilegedAppRequest()).thenReturn(false);
- when(mWorkSourceHelper0.hasAnySystemAppRequest()).thenReturn(true);
+ when(mWorkSourceHelper0.getRequestorWsPriority())
+ .thenReturn(WorkSourceHelper.PRIORITY_SYSTEM);
IWifiIface staIface = validateInterfaceSequence(chipMock,
false, // chipModeValid
-1000, // chipModeId (only used if chipModeValid is true)
@@ -2501,8 +2374,8 @@ public class HalDeviceManagerTest extends WifiBaseTest {
collector.checkThat("STA interface wasn't created", staIface, IsNull.notNullValue());
// create P2P (system app)
- when(mWorkSourceHelper1.hasAnyPrivilegedAppRequest()).thenReturn(false);
- when(mWorkSourceHelper1.hasAnySystemAppRequest()).thenReturn(true);
+ when(mWorkSourceHelper1.getRequestorWsPriority())
+ .thenReturn(WorkSourceHelper.PRIORITY_SYSTEM);
IWifiIface p2pIface = validateInterfaceSequence(chipMock,
true, // chipModeValid
TestChipV3.CHIP_MODE_ID, // chipModeId
@@ -2628,8 +2501,8 @@ public class HalDeviceManagerTest extends WifiBaseTest {
verify(staDestroyedListener2).onDestroyed(getName(staIface2));
// request STA2 (foreground app): should fail
- when(mWorkSourceHelper1.hasAnySystemAppRequest()).thenReturn(false);
- when(mWorkSourceHelper1.hasAnyForegroundAppRequest(true)).thenReturn(true);
+ when(mWorkSourceHelper1.getRequestorWsPriority())
+ .thenReturn(WorkSourceHelper.PRIORITY_FG_APP);
staDetails = mDut.reportImpactToCreateIface(HDM_CREATE_IFACE_STA, false, TEST_WORKSOURCE_1);
assertNotNull("should not fail when asking for same STA", staDetails);
assertEquals(0, staDetails.size());
@@ -2723,8 +2596,8 @@ public class HalDeviceManagerTest extends WifiBaseTest {
executeAndValidateStartupSequence();
// get STA interface from system app.
- when(mWorkSourceHelper0.hasAnyPrivilegedAppRequest()).thenReturn(false);
- when(mWorkSourceHelper0.hasAnySystemAppRequest()).thenReturn(true);
+ when(mWorkSourceHelper0.getRequestorWsPriority())
+ .thenReturn(WorkSourceHelper.PRIORITY_SYSTEM);
IWifiIface staIface = validateInterfaceSequence(chipMock,
false, // chipModeValid
-1000, // chipModeId (only used if chipModeValid is true)
@@ -2738,8 +2611,8 @@ public class HalDeviceManagerTest extends WifiBaseTest {
collector.checkThat("STA created", staIface, IsNull.notNullValue());
// get AP interface from system app.
- when(mWorkSourceHelper0.hasAnyPrivilegedAppRequest()).thenReturn(false);
- when(mWorkSourceHelper0.hasAnySystemAppRequest()).thenReturn(true);
+ when(mWorkSourceHelper0.getRequestorWsPriority())
+ .thenReturn(WorkSourceHelper.PRIORITY_SYSTEM);
IWifiIface apIface = validateInterfaceSequence(chipMock,
true, // chipModeValid
TestChipV3.CHIP_MODE_ID, // chipModeId (only used if chipModeValid is true)
@@ -2753,27 +2626,28 @@ public class HalDeviceManagerTest extends WifiBaseTest {
collector.checkThat("AP created", apIface, IsNull.notNullValue());
// FG app not allowed to create STA interface.
- when(mWorkSourceHelper1.hasAnyPrivilegedAppRequest()).thenReturn(false);
- when(mWorkSourceHelper1.hasAnyForegroundAppRequest(true)).thenReturn(true);
+ when(mWorkSourceHelper1.getRequestorWsPriority())
+ .thenReturn(WorkSourceHelper.PRIORITY_FG_APP);
assertFalse(mDut.isItPossibleToCreateIface(HDM_CREATE_IFACE_STA, TEST_WORKSOURCE_1));
// New system app not allowed to create STA interface.
- when(mWorkSourceHelper1.hasAnyForegroundAppRequest(true)).thenReturn(false);
- when(mWorkSourceHelper1.hasAnySystemAppRequest()).thenReturn(true);
+ when(mWorkSourceHelper1.getRequestorWsPriority())
+ .thenReturn(WorkSourceHelper.PRIORITY_SYSTEM);
assertFalse(mDut.isItPossibleToCreateIface(HDM_CREATE_IFACE_STA, TEST_WORKSOURCE_1));
// Privileged app allowed to create STA interface.
- when(mWorkSourceHelper1.hasAnySystemAppRequest()).thenReturn(false);
- when(mWorkSourceHelper1.hasAnyPrivilegedAppRequest()).thenReturn(true);
+ when(mWorkSourceHelper1.getRequestorWsPriority())
+ .thenReturn(WorkSourceHelper.PRIORITY_PRIVILEGED);
assertTrue(mDut.isItPossibleToCreateIface(HDM_CREATE_IFACE_STA, TEST_WORKSOURCE_1));
// FG app not allowed to create NAN interface.
- when(mWorkSourceHelper1.hasAnyPrivilegedAppRequest()).thenReturn(false);
- when(mWorkSourceHelper1.hasAnyForegroundAppRequest(true)).thenReturn(true);
+ when(mWorkSourceHelper1.getRequestorWsPriority())
+ .thenReturn(WorkSourceHelper.PRIORITY_FG_APP);
assertFalse(mDut.isItPossibleToCreateIface(HDM_CREATE_IFACE_NAN, TEST_WORKSOURCE_1));
// Privileged app allowed to create P2P interface.
- when(mWorkSourceHelper1.hasAnyPrivilegedAppRequest()).thenReturn(true);
+ when(mWorkSourceHelper1.getRequestorWsPriority())
+ .thenReturn(WorkSourceHelper.PRIORITY_PRIVILEGED);
assertTrue(mDut.isItPossibleToCreateIface(HDM_CREATE_IFACE_P2P, TEST_WORKSOURCE_1));
}
@@ -2822,8 +2696,8 @@ public class HalDeviceManagerTest extends WifiBaseTest {
// create STA (system app)
when(mClock.getUptimeSinceBootMillis()).thenReturn(15L);
- when(mWorkSourceHelper0.hasAnyPrivilegedAppRequest()).thenReturn(false);
- when(mWorkSourceHelper0.hasAnySystemAppRequest()).thenReturn(true);
+ when(mWorkSourceHelper0.getRequestorWsPriority())
+ .thenReturn(WorkSourceHelper.PRIORITY_SYSTEM);
IWifiIface staIface = validateInterfaceSequence(chipMock,
false, // chipModeValid
-1000, // chipModeId (only used if chipModeValid is true)
@@ -2837,8 +2711,8 @@ public class HalDeviceManagerTest extends WifiBaseTest {
collector.checkThat("STA interface wasn't created", staIface, IsNull.notNullValue());
// create P2P (system app)
- when(mWorkSourceHelper1.hasAnyPrivilegedAppRequest()).thenReturn(false);
- when(mWorkSourceHelper1.hasAnySystemAppRequest()).thenReturn(true);
+ when(mWorkSourceHelper1.getRequestorWsPriority())
+ .thenReturn(WorkSourceHelper.PRIORITY_SYSTEM);
IWifiIface p2pIface = validateInterfaceSequence(chipMock,
true, // chipModeValid
TestChipV4.CHIP_MODE_ID, // chipModeId
@@ -2945,8 +2819,8 @@ public class HalDeviceManagerTest extends WifiBaseTest {
collector.checkThat("NAN interface wasn't created", nanIface, IsNull.notNullValue());
// request STA2 (foreground app): should fail
- when(mWorkSourceHelper1.hasAnySystemAppRequest()).thenReturn(false);
- when(mWorkSourceHelper1.hasAnyForegroundAppRequest(true)).thenReturn(true);
+ when(mWorkSourceHelper1.getRequestorWsPriority())
+ .thenReturn(WorkSourceHelper.PRIORITY_FG_APP);
staDetails = mDut.reportImpactToCreateIface(HDM_CREATE_IFACE_STA, false, TEST_WORKSOURCE_1);
assertNotNull("should not fail when asking for same STA", staDetails);
assertEquals(0, staDetails.size());
@@ -3132,8 +3006,8 @@ public class HalDeviceManagerTest extends WifiBaseTest {
InterfaceDestroyedListener.class);
// create P2P (internal request)
- when(mWorkSourceHelper0.hasAnyPrivilegedAppRequest()).thenReturn(false);
- when(mWorkSourceHelper0.hasAnyInternalRequest()).thenReturn(true);
+ when(mWorkSourceHelper0.getRequestorWsPriority())
+ .thenReturn(WorkSourceHelper.PRIORITY_INTERNAL);
// create NAN (privileged app): will destroy P2P
IWifiIface nanIface = validateInterfaceSequence(chipMock,
true, // chipModeValid
@@ -3254,8 +3128,8 @@ public class HalDeviceManagerTest extends WifiBaseTest {
executeAndValidateStartupSequence();
// get STA interface from system app.
- when(mWorkSourceHelper0.hasAnyPrivilegedAppRequest()).thenReturn(false);
- when(mWorkSourceHelper0.hasAnySystemAppRequest()).thenReturn(true);
+ when(mWorkSourceHelper0.getRequestorWsPriority())
+ .thenReturn(WorkSourceHelper.PRIORITY_SYSTEM);
IWifiIface staIface = validateInterfaceSequence(chipMock,
false, // chipModeValid
-1000, // chipModeId (only used if chipModeValid is true)
@@ -3269,8 +3143,8 @@ public class HalDeviceManagerTest extends WifiBaseTest {
collector.checkThat("STA created", staIface, IsNull.notNullValue());
// get AP interface from system app.
- when(mWorkSourceHelper0.hasAnyPrivilegedAppRequest()).thenReturn(false);
- when(mWorkSourceHelper0.hasAnySystemAppRequest()).thenReturn(true);
+ when(mWorkSourceHelper0.getRequestorWsPriority())
+ .thenReturn(WorkSourceHelper.PRIORITY_SYSTEM);
IWifiIface apIface = validateInterfaceSequence(chipMock,
true, // chipModeValid
TestChipV4.CHIP_MODE_ID, // chipModeId (only used if chipModeValid is true)
@@ -3284,27 +3158,28 @@ public class HalDeviceManagerTest extends WifiBaseTest {
collector.checkThat("AP created", apIface, IsNull.notNullValue());
// FG app not allowed to create STA interface.
- when(mWorkSourceHelper1.hasAnyPrivilegedAppRequest()).thenReturn(false);
- when(mWorkSourceHelper1.hasAnyForegroundAppRequest(true)).thenReturn(true);
+ when(mWorkSourceHelper1.getRequestorWsPriority())
+ .thenReturn(WorkSourceHelper.PRIORITY_FG_APP);
assertFalse(mDut.isItPossibleToCreateIface(HDM_CREATE_IFACE_STA, TEST_WORKSOURCE_1));
// New system app not allowed to create STA interface.
- when(mWorkSourceHelper1.hasAnyForegroundAppRequest(true)).thenReturn(false);
- when(mWorkSourceHelper1.hasAnySystemAppRequest()).thenReturn(true);
+ when(mWorkSourceHelper1.getRequestorWsPriority())
+ .thenReturn(WorkSourceHelper.PRIORITY_SYSTEM);
assertFalse(mDut.isItPossibleToCreateIface(HDM_CREATE_IFACE_STA, TEST_WORKSOURCE_1));
// Privileged app allowed to create STA interface.
- when(mWorkSourceHelper1.hasAnySystemAppRequest()).thenReturn(false);
- when(mWorkSourceHelper1.hasAnyPrivilegedAppRequest()).thenReturn(true);
+ when(mWorkSourceHelper1.getRequestorWsPriority())
+ .thenReturn(WorkSourceHelper.PRIORITY_PRIVILEGED);
assertTrue(mDut.isItPossibleToCreateIface(HDM_CREATE_IFACE_STA, TEST_WORKSOURCE_1));
// FG app not allowed to create NAN interface.
- when(mWorkSourceHelper1.hasAnyPrivilegedAppRequest()).thenReturn(false);
- when(mWorkSourceHelper1.hasAnyForegroundAppRequest(true)).thenReturn(true);
+ when(mWorkSourceHelper1.getRequestorWsPriority())
+ .thenReturn(WorkSourceHelper.PRIORITY_FG_APP);
assertFalse(mDut.isItPossibleToCreateIface(HDM_CREATE_IFACE_NAN, TEST_WORKSOURCE_1));
// Privileged app allowed to create P2P interface.
- when(mWorkSourceHelper1.hasAnyPrivilegedAppRequest()).thenReturn(true);
+ when(mWorkSourceHelper1.getRequestorWsPriority())
+ .thenReturn(WorkSourceHelper.PRIORITY_PRIVILEGED);
assertTrue(mDut.isItPossibleToCreateIface(HDM_CREATE_IFACE_P2P, TEST_WORKSOURCE_1));
}
@@ -3376,8 +3251,8 @@ public class HalDeviceManagerTest extends WifiBaseTest {
executeAndValidateStartupSequence();
// get STA interface from system app.
- when(mWorkSourceHelper0.hasAnyPrivilegedAppRequest()).thenReturn(false);
- when(mWorkSourceHelper0.hasAnySystemAppRequest()).thenReturn(true);
+ when(mWorkSourceHelper0.getRequestorWsPriority())
+ .thenReturn(WorkSourceHelper.PRIORITY_SYSTEM);
IWifiIface staIface;
if (isWigigSupported) {
staIface = validateInterfaceSequence(chipMock,
@@ -3403,8 +3278,8 @@ public class HalDeviceManagerTest extends WifiBaseTest {
}
// get AP interface from system app.
- when(mWorkSourceHelper0.hasAnyPrivilegedAppRequest()).thenReturn(false);
- when(mWorkSourceHelper0.hasAnySystemAppRequest()).thenReturn(true);
+ when(mWorkSourceHelper0.getRequestorWsPriority())
+ .thenReturn(WorkSourceHelper.PRIORITY_SYSTEM);
IWifiIface apIface;
if (isWigigSupported) {
apIface = validateInterfaceSequence(chipMock,
@@ -3429,7 +3304,8 @@ public class HalDeviceManagerTest extends WifiBaseTest {
}
if (SdkLevel.isAtLeastS()) {
// Privileged app allowed to create P2P interface.
- when(mWorkSourceHelper1.hasAnyPrivilegedAppRequest()).thenReturn(true);
+ when(mWorkSourceHelper1.getRequestorWsPriority())
+ .thenReturn(WorkSourceHelper.PRIORITY_PRIVILEGED);
assertThat(mDut.isItPossibleToCreateIface(HDM_CREATE_IFACE_P2P,
android.hardware.wifi.V1_5.IWifiChip.ChipCapabilityMask.WIGIG,
TEST_WORKSOURCE_1), is(isWigigSupported));
@@ -3837,9 +3713,8 @@ public class HalDeviceManagerTest extends WifiBaseTest {
collector.checkThat("STA created", staIface, IsNull.notNullValue());
// get STA interface from foreground app.
- when(mWorkSourceHelper1.hasAnyPrivilegedAppRequest()).thenReturn(false);
- when(mWorkSourceHelper1.hasAnySystemAppRequest()).thenReturn(false);
- when(mWorkSourceHelper1.hasAnyForegroundAppRequest(true)).thenReturn(true);
+ when(mWorkSourceHelper1.getRequestorWsPriority())
+ .thenReturn(WorkSourceHelper.PRIORITY_FG_APP);
staIface = validateInterfaceSequence(chipMock,
true, // chipModeValid
TestChipV7.DUAL_STA_CHIP_MODE_ID, // chipModeId (only used if chipModeValid is true)
@@ -3854,13 +3729,14 @@ public class HalDeviceManagerTest extends WifiBaseTest {
// New system app not allowed to create AP interface since it would tear down the privileged
// app STA during the chip mode change.
- when(mWorkSourceHelper2.hasAnyPrivilegedAppRequest()).thenReturn(false);
- when(mWorkSourceHelper2.hasAnySystemAppRequest()).thenReturn(true);
+ when(mWorkSourceHelper2.getRequestorWsPriority())
+ .thenReturn(WorkSourceHelper.PRIORITY_SYSTEM);
assertFalse(mDut.isItPossibleToCreateIface(HDM_CREATE_IFACE_AP, TEST_WORKSOURCE_2));
// Privileged app allowed to create AP interface since it is able to tear down the
// privileged app STA during the chip mode change.
- when(mWorkSourceHelper2.hasAnyPrivilegedAppRequest()).thenReturn(true);
+ when(mWorkSourceHelper2.getRequestorWsPriority())
+ .thenReturn(WorkSourceHelper.PRIORITY_PRIVILEGED);
assertTrue(mDut.isItPossibleToCreateIface(HDM_CREATE_IFACE_AP, TEST_WORKSOURCE_2));
}
@@ -3898,8 +3774,8 @@ public class HalDeviceManagerTest extends WifiBaseTest {
collector.checkThat("Bridged AP created", apBridgedIface, IsNull.notNullValue());
// get AP interface for a system app.
- when(mWorkSourceHelper1.hasAnyPrivilegedAppRequest()).thenReturn(false);
- when(mWorkSourceHelper1.hasAnySystemAppRequest()).thenReturn(true);
+ when(mWorkSourceHelper1.getRequestorWsPriority())
+ .thenReturn(WorkSourceHelper.PRIORITY_SYSTEM);
IWifiIface apIface = validateInterfaceSequence(chipMock,
true, // chipModeValid
TestChipV8.CHIP_MODE_ID, // chipModeId
diff --git a/service/tests/wifitests/src/com/android/server/wifi/InterfaceConflictManagerTest.java b/service/tests/wifitests/src/com/android/server/wifi/InterfaceConflictManagerTest.java
index a90e8e19db..387b5c54dc 100644
--- a/service/tests/wifitests/src/com/android/server/wifi/InterfaceConflictManagerTest.java
+++ b/service/tests/wifitests/src/com/android/server/wifi/InterfaceConflictManagerTest.java
@@ -16,11 +16,17 @@
package com.android.server.wifi;
+import static com.android.server.wifi.HalDeviceManager.HDM_CREATE_IFACE_AP;
+import static com.android.server.wifi.HalDeviceManager.HDM_CREATE_IFACE_AP_BRIDGE;
+import static com.android.server.wifi.HalDeviceManager.HDM_CREATE_IFACE_NAN;
+import static com.android.server.wifi.HalDeviceManager.HDM_CREATE_IFACE_P2P;
+
import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertFalse;
+import static org.junit.Assert.assertTrue;
import static org.mockito.ArgumentMatchers.eq;
import static org.mockito.Matchers.any;
import static org.mockito.Matchers.anyInt;
-import static org.mockito.Matchers.anyString;
import static org.mockito.Mockito.never;
import static org.mockito.Mockito.times;
import static org.mockito.Mockito.verify;
@@ -47,6 +53,7 @@ import com.android.dx.mockito.inline.extended.ExtendedMockito;
import com.android.internal.util.State;
import com.android.internal.util.StateMachine;
import com.android.server.wifi.util.WaitingState;
+import com.android.server.wifi.util.WorkSourceHelper;
import com.android.wifi.resources.R;
import org.junit.Before;
@@ -67,6 +74,7 @@ public class InterfaceConflictManagerTest {
private TestLooper mTestLooper;
private InterfaceConflictManager mDut;
+ @Mock WifiInjector mWifiInjector;
@Mock WifiContext mWifiContext;
@Mock Resources mResources;
@Mock FrameworkFacade mFrameworkFacade;
@@ -77,11 +85,18 @@ public class InterfaceConflictManagerTest {
@Mock WifiDialogManager mWifiDialogManager;
@Mock WifiDialogManager.DialogHandle mDialogHandle;
@Mock LocalLog mLocalLog;
+ @Mock WorkSourceHelper mWsHelper;
+ @Mock WorkSourceHelper mExistingWsHelper;
private static final int TEST_UID = 1234;
private static final String TEST_PACKAGE_NAME = "some.package.name";
private static final String TEST_APP_NAME = "Some App Name";
private static final WorkSource TEST_WS = new WorkSource(TEST_UID, TEST_PACKAGE_NAME);
+ private static final int EXISTING_UID = 5678;
+ private static final String EXISTING_PACKAGE_NAME = "existing.package.name";
+ private static final String EXISTING_APP_NAME = "Existing App Name";
+ private static final WorkSource EXISTING_WS =
+ new WorkSource(EXISTING_UID, EXISTING_PACKAGE_NAME);
ArgumentCaptor<WifiDialogManager.SimpleDialogCallback> mCallbackCaptor =
ArgumentCaptor.forClass(WifiDialogManager.SimpleDialogCallback.class);
@@ -99,15 +114,25 @@ public class InterfaceConflictManagerTest {
when(mResources.getBoolean(
R.bool.config_wifiUserApprovalRequiredForD2dInterfacePriority)).thenReturn(true);
- when(mHdm.needsUserApprovalToDelete(anyInt(), any(), anyInt(), any())).thenReturn(true);
-
- when(mFrameworkFacade.getAppName(any(), anyString(), anyInt())).thenReturn(TEST_APP_NAME);
+ when(mFrameworkFacade.getAppName(any(), eq(TEST_PACKAGE_NAME), anyInt()))
+ .thenReturn(TEST_APP_NAME);
+ when(mFrameworkFacade.getAppName(any(), eq(EXISTING_PACKAGE_NAME), anyInt()))
+ .thenReturn(EXISTING_APP_NAME);
when(mWifiDialogManager.createSimpleDialog(
any(), any(), any(), any(), any(), any(), any())).thenReturn(mDialogHandle);
+
+ when(mWifiInjector.makeWsHelper(eq(TEST_WS))).thenReturn(mWsHelper);
+ when(mWifiInjector.makeWsHelper(eq(EXISTING_WS))).thenReturn(mExistingWsHelper);
+ when(mWsHelper.getRequestorWsPriority())
+ .thenReturn(WorkSourceHelper.PRIORITY_FG_APP);
+ when(mExistingWsHelper.getRequestorWsPriority())
+ .thenReturn(WorkSourceHelper.PRIORITY_FG_APP);
+ when(mWsHelper.getWorkSource()).thenReturn(TEST_WS);
+ when(mExistingWsHelper.getWorkSource()).thenReturn(EXISTING_WS);
}
private void initInterfaceConflictManager() {
- mDut = new InterfaceConflictManager(mWifiContext, mFrameworkFacade, mHdm,
+ mDut = new InterfaceConflictManager(mWifiInjector, mWifiContext, mFrameworkFacade, mHdm,
new WifiThreadRunner(new Handler(mTestLooper.getLooper())), mWifiDialogManager,
mLocalLog);
mDut.handleBootCompleted();
@@ -215,30 +240,6 @@ public class InterfaceConflictManagerTest {
}
/**
- * Verify that if interface cannot be created or if interface can be created w/o side effects
- * then command simply proceeds.
- */
- @Test
- public void testUserApprovalNotNeeded() {
- initInterfaceConflictManager();
-
- int interfaceType = HalDeviceManager.HDM_CREATE_IFACE_P2P;
- Message msg = Message.obtain();
-
- // can delete iface without user approval
- when(mHdm.reportImpactToCreateIface(eq(interfaceType), eq(false), eq(TEST_WS))).thenReturn(
- Arrays.asList(Pair.create(HalDeviceManager.HDM_CREATE_IFACE_NAN,
- new WorkSource(10, "something else"))));
- when(mHdm.needsUserApprovalToDelete(anyInt(), any(), anyInt(), any())).thenReturn(false);
-
- // request should pass through without the dialog
- assertEquals(InterfaceConflictManager.ICM_EXECUTE_COMMAND,
- mDut.manageInterfaceConflictForStateMachine("Some Tag", msg,
- mStateMachine, mWaitingState, mTargetState,
- interfaceType, TEST_WS, false));
- }
-
- /**
* Verify flow with user approval.
*/
@Test
@@ -250,8 +251,7 @@ public class InterfaceConflictManagerTest {
// can create interface - but with side effects
when(mHdm.reportImpactToCreateIface(eq(interfaceType), eq(false), eq(TEST_WS))).thenReturn(
- Arrays.asList(Pair.create(HalDeviceManager.HDM_CREATE_IFACE_NAN,
- new WorkSource(10, "something else"))));
+ Arrays.asList(Pair.create(HalDeviceManager.HDM_CREATE_IFACE_NAN, EXISTING_WS)));
// send request
assertEquals(InterfaceConflictManager.ICM_SKIP_COMMAND_WAIT_FOR_USER,
@@ -291,8 +291,7 @@ public class InterfaceConflictManagerTest {
// can create interface - but with side effects
when(mHdm.reportImpactToCreateIface(eq(interfaceType), eq(false), eq(TEST_WS))).thenReturn(
- Arrays.asList(Pair.create(HalDeviceManager.HDM_CREATE_IFACE_NAN,
- new WorkSource(10, "something else"))));
+ Arrays.asList(Pair.create(HalDeviceManager.HDM_CREATE_IFACE_NAN, EXISTING_WS)));
// send request
assertEquals(InterfaceConflictManager.ICM_SKIP_COMMAND_WAIT_FOR_USER,
@@ -332,8 +331,7 @@ public class InterfaceConflictManagerTest {
// can create interface - but with side effects
when(mHdm.reportImpactToCreateIface(eq(interfaceType), eq(false), eq(TEST_WS))).thenReturn(
- Arrays.asList(Pair.create(HalDeviceManager.HDM_CREATE_IFACE_NAN,
- new WorkSource(10, "something else"))));
+ Arrays.asList(Pair.create(HalDeviceManager.HDM_CREATE_IFACE_NAN, EXISTING_WS)));
// send request
assertEquals(InterfaceConflictManager.ICM_SKIP_COMMAND_WAIT_FOR_USER,
@@ -384,7 +382,7 @@ public class InterfaceConflictManagerTest {
// Unexpected impact to create, launch the dialog again
when(mHdm.reportImpactToCreateIface(eq(interfaceType), eq(false), eq(TEST_WS)))
.thenReturn(Arrays.asList(Pair.create(HalDeviceManager.HDM_CREATE_IFACE_NAN,
- new WorkSource(10, "something else"))));
+ EXISTING_WS)));
assertEquals(InterfaceConflictManager.ICM_SKIP_COMMAND_WAIT_FOR_USER,
mDut.manageInterfaceConflictForStateMachine("Some Tag", waitingMsg,
mStateMachine, mWaitingState, mTargetState, interfaceType, TEST_WS,
@@ -411,8 +409,7 @@ public class InterfaceConflictManagerTest {
// can create interface - but with side effects
when(mHdm.reportImpactToCreateIface(eq(interfaceType), eq(false), eq(TEST_WS))).thenReturn(
- Arrays.asList(Pair.create(HalDeviceManager.HDM_CREATE_IFACE_NAN,
- new WorkSource(10, "something else"))));
+ Arrays.asList(Pair.create(HalDeviceManager.HDM_CREATE_IFACE_NAN, EXISTING_WS)));
// send request
assertEquals(InterfaceConflictManager.ICM_SKIP_COMMAND_WAIT_FOR_USER,
@@ -492,8 +489,7 @@ public class InterfaceConflictManagerTest {
// can create interface - but with side effects
when(mHdm.reportImpactToCreateIface(eq(interfaceType), eq(false), eq(TEST_WS))).thenReturn(
- Arrays.asList(Pair.create(HalDeviceManager.HDM_CREATE_IFACE_P2P,
- new WorkSource(10, "something else"))));
+ Arrays.asList(Pair.create(HalDeviceManager.HDM_CREATE_IFACE_P2P, EXISTING_WS)));
// send request
assertEquals(InterfaceConflictManager.ICM_EXECUTE_COMMAND,
@@ -532,8 +528,7 @@ public class InterfaceConflictManagerTest {
// can create interface - but with side effects
when(mHdm.reportImpactToCreateIface(eq(interfaceType), eq(false), eq(TEST_WS))).thenReturn(
- Arrays.asList(Pair.create(HalDeviceManager.HDM_CREATE_IFACE_P2P,
- new WorkSource(10, "something else"))));
+ Arrays.asList(Pair.create(HalDeviceManager.HDM_CREATE_IFACE_P2P, EXISTING_WS)));
// send request
assertEquals(InterfaceConflictManager.ICM_SKIP_COMMAND_WAIT_FOR_USER,
@@ -560,8 +555,7 @@ public class InterfaceConflictManagerTest {
// can create interface - but with side effects
when(mHdm.reportImpactToCreateIface(eq(interfaceType), eq(false), eq(TEST_WS))).thenReturn(
- Arrays.asList(Pair.create(HalDeviceManager.HDM_CREATE_IFACE_NAN,
- new WorkSource(10, "something else"))));
+ Arrays.asList(Pair.create(HalDeviceManager.HDM_CREATE_IFACE_NAN, EXISTING_WS)));
// send request
assertEquals(InterfaceConflictManager.ICM_SKIP_COMMAND_WAIT_FOR_USER,
@@ -593,4 +587,137 @@ public class InterfaceConflictManagerTest {
any(), any(), any(), any(), any(), any(), any());
verify(mDialogHandle, times(2)).launchDialog();
}
+
+ /**
+ * Tests that
+ * {@link InterfaceConflictManager#needsUserApprovalToDelete(int, WorkSourceHelper, int,
+ * WorkSourceHelper)} returns true on the following conditions:
+ * 1) Requested interface is AP, AP_BRIDGED, P2P, or NAN.
+ * 2) Existing interface is AP, AP_BRIDGED, P2P, or NAN (but not the same as the requested).
+ * 3) Requestor worksource has higher priority than PRIORITY_BG.
+ * 4) Existing worksource is not PRIORITY_INTERNAL.
+ * 5) User approval is required (by overlay or override).
+ * 6) Requestor package is not exempt from user approval.
+ */
+ @Test
+ public void testCanDeleteWithUserApproval() throws Exception {
+ // No dialog if dialogs aren't enabled.
+ when(mResources.getBoolean(R.bool.config_wifiUserApprovalRequiredForD2dInterfacePriority))
+ .thenReturn(false);
+ initInterfaceConflictManager();
+ assertFalse(mDut.needsUserApprovalToDelete(
+ HDM_CREATE_IFACE_P2P, mWsHelper,
+ HDM_CREATE_IFACE_AP, mExistingWsHelper));
+
+ // No dialog if requesting package is exempt.
+ when(mResources.getBoolean(R.bool.config_wifiUserApprovalRequiredForD2dInterfacePriority))
+ .thenReturn(true);
+ when(mResources.getStringArray(
+ R.array.config_wifiExcludedFromUserApprovalForD2dInterfacePriority)).thenReturn(
+ new String[]{TEST_PACKAGE_NAME});
+ initInterfaceConflictManager();
+ assertFalse(mDut.needsUserApprovalToDelete(
+ HDM_CREATE_IFACE_P2P, mWsHelper,
+ HDM_CREATE_IFACE_AP, mExistingWsHelper));
+
+ // No dialog if override is set to false.
+ when(mResources.getStringArray(
+ R.array.config_wifiExcludedFromUserApprovalForD2dInterfacePriority))
+ .thenReturn(null);
+ initInterfaceConflictManager();
+ mDut.setUserApprovalNeededOverride(true, false);
+ assertFalse(mDut.needsUserApprovalToDelete(
+ HDM_CREATE_IFACE_P2P, mWsHelper,
+ HDM_CREATE_IFACE_AP, mExistingWsHelper));
+
+ // Dialog if overlay is false but override is true.
+ when(mResources.getBoolean(R.bool.config_wifiUserApprovalRequiredForD2dInterfacePriority))
+ .thenReturn(false);
+ initInterfaceConflictManager();
+ mDut.setUserApprovalNeededOverride(true, true);
+ assertTrue(mDut.needsUserApprovalToDelete(
+ HDM_CREATE_IFACE_AP, mWsHelper,
+ HDM_CREATE_IFACE_NAN, mExistingWsHelper));
+
+ // No dialog if overlay is false and override is changed from true to false.
+ mDut.setUserApprovalNeededOverride(false, false);
+ assertFalse(mDut.needsUserApprovalToDelete(
+ HDM_CREATE_IFACE_AP, mWsHelper,
+ HDM_CREATE_IFACE_NAN, mExistingWsHelper));
+
+ // Should show dialog for appropriate types if overlay is set to true.
+ when(mResources.getBoolean(R.bool.config_wifiUserApprovalRequiredForD2dInterfacePriority))
+ .thenReturn(true);
+ initInterfaceConflictManager();
+
+ // Requesting AP
+ assertFalse(mDut.needsUserApprovalToDelete(
+ HDM_CREATE_IFACE_AP, mWsHelper,
+ HDM_CREATE_IFACE_AP, mExistingWsHelper));
+ assertFalse(mDut.needsUserApprovalToDelete(
+ HDM_CREATE_IFACE_AP, mWsHelper,
+ HDM_CREATE_IFACE_AP_BRIDGE, mExistingWsHelper));
+ assertTrue(mDut.needsUserApprovalToDelete(
+ HDM_CREATE_IFACE_AP, mWsHelper,
+ HDM_CREATE_IFACE_NAN, mExistingWsHelper));
+ assertTrue(mDut.needsUserApprovalToDelete(
+ HDM_CREATE_IFACE_AP, mWsHelper,
+ HDM_CREATE_IFACE_P2P, mExistingWsHelper));
+
+ // Requesting AP_BRIDGE
+ assertFalse(mDut.needsUserApprovalToDelete(
+ HDM_CREATE_IFACE_AP_BRIDGE, mWsHelper,
+ HDM_CREATE_IFACE_AP, mExistingWsHelper));
+ assertFalse(mDut.needsUserApprovalToDelete(
+ HDM_CREATE_IFACE_AP_BRIDGE, mWsHelper,
+ HDM_CREATE_IFACE_AP_BRIDGE, mExistingWsHelper));
+ assertTrue(mDut.needsUserApprovalToDelete(
+ HDM_CREATE_IFACE_AP_BRIDGE, mWsHelper,
+ HDM_CREATE_IFACE_NAN, mExistingWsHelper));
+ assertTrue(mDut.needsUserApprovalToDelete(
+ HDM_CREATE_IFACE_AP_BRIDGE, mWsHelper,
+ HDM_CREATE_IFACE_P2P, mExistingWsHelper));
+
+ // Requesting P2P
+ assertTrue(mDut.needsUserApprovalToDelete(
+ HDM_CREATE_IFACE_P2P, mWsHelper,
+ HDM_CREATE_IFACE_AP, mExistingWsHelper));
+ assertTrue(mDut.needsUserApprovalToDelete(
+ HDM_CREATE_IFACE_P2P, mWsHelper,
+ HDM_CREATE_IFACE_AP_BRIDGE, mExistingWsHelper));
+ assertTrue(mDut.needsUserApprovalToDelete(
+ HDM_CREATE_IFACE_P2P, mWsHelper,
+ HDM_CREATE_IFACE_NAN, mExistingWsHelper));
+ assertFalse(mDut.needsUserApprovalToDelete(
+ HDM_CREATE_IFACE_P2P, mWsHelper,
+ HDM_CREATE_IFACE_P2P, mExistingWsHelper));
+
+ // Requesting NAN
+ assertTrue(mDut.needsUserApprovalToDelete(
+ HDM_CREATE_IFACE_NAN, mWsHelper,
+ HDM_CREATE_IFACE_AP, mExistingWsHelper));
+ assertTrue(mDut.needsUserApprovalToDelete(
+ HDM_CREATE_IFACE_NAN, mWsHelper,
+ HDM_CREATE_IFACE_AP_BRIDGE, mExistingWsHelper));
+ assertFalse(mDut.needsUserApprovalToDelete(
+ HDM_CREATE_IFACE_NAN, mWsHelper,
+ HDM_CREATE_IFACE_NAN, mExistingWsHelper));
+ assertTrue(mDut.needsUserApprovalToDelete(
+ HDM_CREATE_IFACE_NAN, mWsHelper,
+ HDM_CREATE_IFACE_P2P, mExistingWsHelper));
+
+ // Foreground should show dialog over Privileged
+ when(mExistingWsHelper.getRequestorWsPriority())
+ .thenReturn(WorkSourceHelper.PRIORITY_PRIVILEGED);
+ assertTrue(mDut.needsUserApprovalToDelete(
+ HDM_CREATE_IFACE_NAN, mWsHelper,
+ HDM_CREATE_IFACE_P2P, mExistingWsHelper));
+
+ // Foreground should delete Internal without showing dialog
+ when(mExistingWsHelper.getRequestorWsPriority())
+ .thenReturn(WorkSourceHelper.PRIORITY_INTERNAL);
+ assertFalse(mDut.needsUserApprovalToDelete(
+ HDM_CREATE_IFACE_NAN, mWsHelper,
+ HDM_CREATE_IFACE_P2P, mExistingWsHelper));
+ }
}
diff --git a/service/tests/wifitests/src/com/android/server/wifi/SupplicantStaIfaceHalHidlImplTest.java b/service/tests/wifitests/src/com/android/server/wifi/SupplicantStaIfaceHalHidlImplTest.java
index 87d881cffb..c261a319e2 100644
--- a/service/tests/wifitests/src/com/android/server/wifi/SupplicantStaIfaceHalHidlImplTest.java
+++ b/service/tests/wifitests/src/com/android/server/wifi/SupplicantStaIfaceHalHidlImplTest.java
@@ -2035,13 +2035,8 @@ public class SupplicantStaIfaceHalHidlImplTest extends WifiBaseTest {
public void testTerminateV1_0() throws Exception {
executeAndValidateInitializationSequence();
- doAnswer(new MockAnswerUtil.AnswerWithArguments() {
- public boolean answer(IHwBinder.DeathRecipient cb, long cookie) throws RemoteException {
- mHandler.post(() -> cb.serviceDied(cookie));
- return true;
- }
- }).when(mISupplicantMock).linkToDeath(any(IHwBinder.DeathRecipient.class), any(long.class));
mDut.terminate();
+ mSupplicantDeathCaptor.getValue().serviceDied(mDeathRecipientCookieCaptor.getValue());
mLooper.dispatchAll();
verify(mFrameworkFacade).stopSupplicant();
@@ -2057,16 +2052,8 @@ public class SupplicantStaIfaceHalHidlImplTest extends WifiBaseTest {
setupMocksForHalV1_1();
executeAndValidateInitializationSequenceV1_1(false, false);
-
- doAnswer(new MockAnswerUtil.AnswerWithArguments() {
- public boolean answer(IHwBinder.DeathRecipient cb, long cookie) throws RemoteException {
- mHandler.post(() -> cb.serviceDied(cookie));
- return true;
- }
- }).when(mISupplicantMockV11).linkToDeath(any(IHwBinder.DeathRecipient.class),
- any(long.class));
-
mDut.terminate();
+ mSupplicantDeathCaptor.getValue().serviceDied(mDeathRecipientCookieCaptor.getValue());
mLooper.dispatchAll();
verify(mFrameworkFacade, never()).stopSupplicant();
verify(mISupplicantMockV11).terminate();
@@ -2797,7 +2784,7 @@ public class SupplicantStaIfaceHalHidlImplTest extends WifiBaseTest {
assertTrue(mDut.isInitializationComplete());
assertTrue(mDut.setupIface(WLAN0_IFACE_NAME) == shouldSucceed);
mInOrder.verify(mISupplicantMockV11).linkToDeath(mSupplicantDeathCaptor.capture(),
- anyLong());
+ mDeathRecipientCookieCaptor.capture());
// verify: addInterface is called
mInOrder.verify(mISupplicantMockV11)
.addInterface(any(ISupplicant.IfaceInfo.class),
diff --git a/service/tests/wifitests/src/com/android/server/wifi/WifiDataStallTest.java b/service/tests/wifitests/src/com/android/server/wifi/WifiDataStallTest.java
index d76a860929..fb610b9a95 100644
--- a/service/tests/wifitests/src/com/android/server/wifi/WifiDataStallTest.java
+++ b/service/tests/wifitests/src/com/android/server/wifi/WifiDataStallTest.java
@@ -148,6 +148,7 @@ public class WifiDataStallTest extends WifiBaseTest {
mWifiDataStall = new WifiDataStall(mWifiMetrics, mContext,
mDeviceConfigFacade, mWifiChannelUtilization, mClock, mHandler,
mThroughputPredictor, mActiveModeWarden, mClientModeImplMonitor);
+ mWifiDataStall.enableVerboseLogging(true);
mOldLlStats.txmpdu_be = 1000;
mOldLlStats.retries_be = 1000;
mOldLlStats.lostmpdu_be = 3000;
@@ -386,6 +387,7 @@ public class WifiDataStallTest extends WifiBaseTest {
WifiIsUnusableEvent.TYPE_DATA_STALL_BAD_TX);
}
+
/**
* Verify there is no data stall from tx failures if tx is not consecutively bad
*/
@@ -416,7 +418,11 @@ public class WifiDataStallTest extends WifiBaseTest {
*/
@Test
public void verifyDataStallRxFailure() throws Exception {
- when(mWifiInfo.getRxLinkSpeedMbps()).thenReturn(1);
+ when(mWifiInfo.getRxLinkSpeedMbps()).thenReturn(2);
+ when(mDeviceConfigFacade.getTputSufficientRatioThrDen()).thenReturn(1);
+ when(mDeviceConfigFacade.getTputSufficientRatioThrNum()).thenReturn(3);
+ when(mDeviceConfigFacade.getRxTputSufficientLowThrKbps()).thenReturn(1);
+
mNewLlStats.retries_be = 2 * mOldLlStats.retries_be;
when(mClock.getElapsedSinceBootMillis()).thenReturn(10L);
assertEquals(WifiIsUnusableEvent.TYPE_UNKNOWN, mWifiDataStall
@@ -431,7 +437,7 @@ public class WifiDataStallTest extends WifiBaseTest {
mCapabilities, mOldLlStats, mNewLlStats, mWifiInfo, mTxBytes, mRxBytes));
assertEquals(false, mWifiDataStall.isThroughputSufficient());
assertEquals(4804, mWifiDataStall.getTxThroughputKbps());
- assertEquals(960, mWifiDataStall.getRxThroughputKbps());
+ assertEquals(1921, mWifiDataStall.getRxThroughputKbps());
verify(mWifiMetrics).logWifiIsUnusableEvent(TEST_IFACE_NAME,
WifiIsUnusableEvent.TYPE_DATA_STALL_TX_WITHOUT_RX);
}
diff --git a/service/tests/wifitests/src/com/android/server/wifi/WifiNetworkFactoryTest.java b/service/tests/wifitests/src/com/android/server/wifi/WifiNetworkFactoryTest.java
index a856e14de9..16bcd86a1b 100644
--- a/service/tests/wifitests/src/com/android/server/wifi/WifiNetworkFactoryTest.java
+++ b/service/tests/wifitests/src/com/android/server/wifi/WifiNetworkFactoryTest.java
@@ -270,6 +270,7 @@ public class WifiNetworkFactoryTest extends WifiBaseTest {
when(mActiveModeWarden.hasPrimaryClientModeManager()).thenReturn(true);
when(mActiveModeWarden.getPrimaryClientModeManager()).thenReturn(mPrimaryClientModeManager);
+ when(mPrimaryClientModeManager.getRole()).thenReturn(ActiveModeManager.ROLE_CLIENT_PRIMARY);
doAnswer(invocation -> {
Object[] args = invocation.getArguments();
ActiveModeWarden.ExternalClientModeManagerRequestListener requestListener =
@@ -3559,6 +3560,67 @@ public class WifiNetworkFactoryTest extends WifiBaseTest {
.getSpecificNetworkRequestUids(mSelectedNetwork, TEST_BSSID_1).size());
}
+ /**
+ * Validates a new network request with Car Mode Priority for same network which is already
+ * a saved network, the connection will be on primary STA and the should have the internet
+ * capabilities
+ */
+ @Test
+ public void testShareConnectedNetworkWithCarModePriorityAndSavedNetwork() throws Exception {
+ mockPackageImportance(TEST_PACKAGE_NAME_1, true, true);
+ when(mWifiPermissionsUtil.checkEnterCarModePrioritized(TEST_UID_1)).thenReturn(true);
+
+ // Connect to request 1
+ when(mClock.getElapsedSinceBootMillis()).thenReturn(0L);
+
+ sendNetworkRequestAndSetupForUserSelection(TEST_SSID_1, false);
+
+ INetworkRequestUserSelectionCallback networkRequestUserSelectionCallback =
+ mNetworkRequestUserSelectionCallback.getValue();
+ assertNotNull(networkRequestUserSelectionCallback);
+
+ // Now trigger user selection to one of the network.
+ mSelectedNetwork = WifiConfigurationTestUtil.createPskNetwork();
+ mSelectedNetwork.SSID = "\"" + TEST_SSID_1 + "\"";
+ mSelectedNetwork.preSharedKey = TEST_WPA_PRESHARED_KEY;
+ when(mWifiConfigManager.getConfiguredNetworksWithPasswords())
+ .thenReturn(List.of(mSelectedNetwork));
+ sendUserSelectionSelect(networkRequestUserSelectionCallback, mSelectedNetwork);
+ mLooper.dispatchAll();
+
+ verify(mActiveModeWarden, never()).requestLocalOnlyClientModeManager(
+ any(), any(), any(), any(), anyBoolean());
+ verify(mActiveModeWarden, atLeastOnce()).getPrimaryClientModeManager();
+ if (SdkLevel.isAtLeastS()) {
+ verify(mPrimaryClientModeManager, atLeastOnce()).getConnectedWifiConfiguration();
+ verify(mPrimaryClientModeManager, atLeastOnce()).getConnectingWifiConfiguration();
+ verify(mPrimaryClientModeManager, atLeastOnce()).getConnectingBssid();
+ verify(mPrimaryClientModeManager, atLeastOnce()).getConnectedBssid();
+ }
+
+ // Cancel the periodic scan timer.
+ mInOrder.verify(mAlarmManager).cancel(mPeriodicScanListenerArgumentCaptor.getValue());
+ // Disable connectivity manager
+ verify(mWifiConnectivityManager, atLeastOnce()).setSpecificNetworkRequestInProgress(true);
+
+ // Increment the number of unique apps.
+ verify(mWifiMetrics).incrementNetworkRequestApiNumApps();
+
+ verify(mPrimaryClientModeManager, atLeastOnce()).disconnect();
+ verify(mConnectHelper, atLeastOnce()).connectToNetwork(
+ eq(mPrimaryClientModeManager),
+ eq(new NetworkUpdateResult(TEST_NETWORK_ID_1)),
+ mConnectListenerArgumentCaptor.capture(), anyInt(), any());
+ verify(mWifiMetrics, atLeastOnce()).incrementNetworkRequestApiNumConnectOnPrimaryIface();
+
+ // Start the connection timeout alarm.
+ mInOrder.verify(mAlarmManager).set(eq(AlarmManager.ELAPSED_REALTIME_WAKEUP),
+ eq((long) WifiNetworkFactory.NETWORK_CONNECTION_TIMEOUT_MS), any(),
+ mConnectionTimeoutAlarmListenerArgumentCaptor.capture(), any());
+ assertNotNull(mConnectionTimeoutAlarmListenerArgumentCaptor.getValue());
+ assertTrue(mWifiNetworkFactory.shouldHaveInternetCapabilities());
+ }
+
private void sendNetworkRequestAndSetupForConnectionStatus() throws RemoteException {
sendNetworkRequestAndSetupForConnectionStatus(TEST_SSID_1);
}
diff --git a/service/tests/wifitests/src/com/android/server/wifi/WifiServiceImplTest.java b/service/tests/wifitests/src/com/android/server/wifi/WifiServiceImplTest.java
index c7c78f362e..cd73f7d0b6 100644
--- a/service/tests/wifitests/src/com/android/server/wifi/WifiServiceImplTest.java
+++ b/service/tests/wifitests/src/com/android/server/wifi/WifiServiceImplTest.java
@@ -126,6 +126,7 @@ import android.net.DhcpInfo;
import android.net.DhcpOption;
import android.net.DhcpResultsParcelable;
import android.net.MacAddress;
+import android.net.Network;
import android.net.NetworkStack;
import android.net.Uri;
import android.net.wifi.CoexUnsafeChannel;
@@ -10679,4 +10680,27 @@ public class WifiServiceImplTest extends WifiBaseTest {
assertEquals(-1, mWifiServiceImpl.addOrUpdateNetwork(config, TEST_PACKAGE_NAME,
mAttribution));
}
+
+ /**
+ * Tests that {@link WifiServiceImpl#getCurrentNetwork} throws
+ * {@link SecurityException} if the caller doesn't have the necessary permissions.
+ */
+ @Test(expected = SecurityException.class)
+ public void testGetCurrentNetworkNoPermission() throws Exception {
+ doThrow(SecurityException.class)
+ .when(mContext).enforceCallingOrSelfPermission(eq(ACCESS_WIFI_STATE), any());
+ mWifiServiceImpl.getCurrentNetwork();
+ }
+
+ /**
+ * Verifies that WifiServiceImpl#getCurrentNetwork() returns the current Wifi network.
+ */
+ @Test
+ public void testGetCurrentNetworkWithNetworkSettingsPermission() throws Exception {
+ when(mContext.checkPermission(eq(android.Manifest.permission.NETWORK_SETTINGS),
+ anyInt(), anyInt())).thenReturn(PackageManager.PERMISSION_GRANTED);
+ Network mockNetwork = mock(Network.class);
+ when(mActiveModeWarden.getCurrentNetwork()).thenReturn(mockNetwork);
+ assertEquals(mockNetwork, mWifiServiceImpl.getCurrentNetwork());
+ }
}
diff --git a/service/tests/wifitests/src/com/android/server/wifi/WifiShellCommandTest.java b/service/tests/wifitests/src/com/android/server/wifi/WifiShellCommandTest.java
index a522d0531a..fe4417815a 100644
--- a/service/tests/wifitests/src/com/android/server/wifi/WifiShellCommandTest.java
+++ b/service/tests/wifitests/src/com/android/server/wifi/WifiShellCommandTest.java
@@ -758,9 +758,9 @@ public class WifiShellCommandTest extends WifiBaseTest {
new String[]{"status"});
verify(mActiveModeWarden).getClientModeManagers();
verify(mPrimaryClientModeManager).syncRequestConnectionInfo();
- verify(mPrimaryClientModeManager).syncGetCurrentNetwork();
+ verify(mPrimaryClientModeManager).getCurrentNetwork();
verify(additionalClientModeManager).syncRequestConnectionInfo();
- verify(additionalClientModeManager).syncGetCurrentNetwork();
+ verify(additionalClientModeManager).getCurrentNetwork();
}
@Test
diff --git a/service/tests/wifitests/src/com/android/server/wifi/util/WorkSourceHelperTest.java b/service/tests/wifitests/src/com/android/server/wifi/util/WorkSourceHelperTest.java
index d7d46be3a7..a7210b9fee 100644
--- a/service/tests/wifitests/src/com/android/server/wifi/util/WorkSourceHelperTest.java
+++ b/service/tests/wifitests/src/com/android/server/wifi/util/WorkSourceHelperTest.java
@@ -16,11 +16,11 @@
package com.android.server.wifi.util;
import static android.app.ActivityManager.RunningAppProcessInfo.IMPORTANCE_BACKGROUND;
+import static android.app.ActivityManager.RunningAppProcessInfo.IMPORTANCE_CACHED;
import static android.app.ActivityManager.RunningAppProcessInfo.IMPORTANCE_FOREGROUND;
import static android.app.ActivityManager.RunningAppProcessInfo.IMPORTANCE_FOREGROUND_SERVICE;
-import static org.junit.Assert.assertFalse;
-import static org.junit.Assert.assertTrue;
+import static org.junit.Assert.assertEquals;
import static org.mockito.ArgumentMatchers.any;
import static org.mockito.ArgumentMatchers.anyInt;
import static org.mockito.Mockito.when;
@@ -42,6 +42,7 @@ import org.junit.Test;
import org.junit.runner.RunWith;
import org.junit.runners.JUnit4;
import org.mockito.Mock;
+import org.mockito.Mockito;
import org.mockito.MockitoAnnotations;
/** Unit tests for {@link WorkSourceHelper}. */
@@ -58,91 +59,54 @@ public class WorkSourceHelperTest extends WifiBaseTest {
@Mock private PackageManager mPackageManager;
@Mock private Resources mResources;
- private WorkSource mWorkSource;
- private WorkSourceHelper mWorkSourceHelper;
-
- @Before public void setUp() {
+ @Before public void setUp() throws Exception {
MockitoAnnotations.initMocks(this);
-
- // Create a test worksource with 2 app's request.
- mWorkSource = new WorkSource();
- mWorkSource.add(new WorkSource(TEST_UID_1, TEST_PACKAGE_1));
- mWorkSource.add(new WorkSource(TEST_UID_2, TEST_PACKAGE_2));
-
- mWorkSourceHelper = new WorkSourceHelper(
- mWorkSource, mWifiPermissionsUtil, mActivityManager, mPackageManager, mResources);
- }
-
- @Test
- public void testHasAnyPrivilegedRequest() {
- assertFalse(mWorkSourceHelper.hasAnyPrivilegedAppRequest());
-
- when(mWifiPermissionsUtil.checkNetworkSettingsPermission(TEST_UID_1)).thenReturn(true);
- assertTrue(mWorkSourceHelper.hasAnyPrivilegedAppRequest());
- }
-
- @Test
- public void testHasAnySystemRequest() throws Exception {
- ApplicationInfo appInfo = new ApplicationInfo();
- when(mPackageManager.getApplicationInfoAsUser(any(), anyInt(), any())).thenReturn(appInfo);
-
- assertFalse(mWorkSourceHelper.hasAnySystemAppRequest());
-
- appInfo.flags = ApplicationInfo.FLAG_SYSTEM;
- assertTrue(mWorkSourceHelper.hasAnySystemAppRequest());
+ when(mActivityManager.getPackageImportance(null)).thenReturn(IMPORTANCE_CACHED);
+ when(mPackageManager.getApplicationInfoAsUser(any(), anyInt(), any())).thenReturn(
+ Mockito.mock(ApplicationInfo.class));
}
@Test
- public void testHasAnyForegroundAppRequest() throws Exception {
- // 2 from bg app.
+ public void testGetRequestorWsPriority() throws Exception {
+ // PRIORITY_INTERNAL
+ WorkSource ws = new WorkSource(Process.WIFI_UID, "com.android.wifi");
+ WorkSourceHelper wsHelper = new WorkSourceHelper(
+ ws, mWifiPermissionsUtil, mActivityManager, mPackageManager, mResources);
+ assertEquals(wsHelper.getRequestorWsPriority(), WorkSourceHelper.PRIORITY_INTERNAL);
+
+ // PRIORITY_BG
+ ws.add(new WorkSource(TEST_UID_1, TEST_PACKAGE_1));
+ ws.add(new WorkSource(TEST_UID_2, TEST_PACKAGE_2));
+ when(mActivityManager.getPackageImportance(TEST_PACKAGE_1)).thenReturn(IMPORTANCE_CACHED);
+ when(mActivityManager.getPackageImportance(TEST_PACKAGE_2)).thenReturn(IMPORTANCE_CACHED);
+ assertEquals(WorkSourceHelper.PRIORITY_BG, wsHelper.getRequestorWsPriority());
+
+ // PRIORITY_FG_SERVICE
when(mActivityManager.getPackageImportance(TEST_PACKAGE_1))
- .thenReturn(IMPORTANCE_BACKGROUND);
- when(mActivityManager.getPackageImportance(TEST_PACKAGE_2))
- .thenReturn(IMPORTANCE_BACKGROUND);
- assertFalse(mWorkSourceHelper.hasAnyForegroundAppRequest(true));
-
- // override background status
- when(mResources.getStringArray(
- R.array.config_wifiInterfacePriorityTreatAsForegroundList)).thenReturn(
- new String[]{TEST_PACKAGE_2});
- assertTrue(mWorkSourceHelper.hasAnyForegroundAppRequest(true));
- assertFalse(mWorkSourceHelper.hasAnyForegroundAppRequest(false));
+ .thenReturn(IMPORTANCE_FOREGROUND_SERVICE);
+ assertEquals(WorkSourceHelper.PRIORITY_FG_SERVICE, wsHelper.getRequestorWsPriority());
- // 1 request from fg app, 1 from bg app.
+ // PRIORITY_FG_APP
when(mActivityManager.getPackageImportance(TEST_PACKAGE_1))
.thenReturn(IMPORTANCE_FOREGROUND);
- assertTrue(mWorkSourceHelper.hasAnyForegroundAppRequest(true));
- }
+ assertEquals(WorkSourceHelper.PRIORITY_FG_APP, wsHelper.getRequestorWsPriority());
- @Test
- public void testHasAnyForegroundServiceRequest() throws Exception {
- // 2 from bg app.
+ // PRIORITY_FG_APP with "treat as foreground" package
when(mActivityManager.getPackageImportance(TEST_PACKAGE_1))
.thenReturn(IMPORTANCE_BACKGROUND);
- when(mActivityManager.getPackageImportance(TEST_PACKAGE_2))
- .thenReturn(IMPORTANCE_BACKGROUND);
- assertFalse(mWorkSourceHelper.hasAnyForegroundServiceRequest());
-
- // 1 request from fg service, 1 from bg app.
- when(mActivityManager.getPackageImportance(TEST_PACKAGE_1))
- .thenReturn(IMPORTANCE_FOREGROUND_SERVICE);
- when(mActivityManager.getPackageImportance(TEST_PACKAGE_2))
- .thenReturn(IMPORTANCE_BACKGROUND);
- assertTrue(mWorkSourceHelper.hasAnyForegroundServiceRequest());
- }
-
+ when(mResources.getStringArray(
+ R.array.config_wifiInterfacePriorityTreatAsForegroundList)).thenReturn(
+ new String[]{TEST_PACKAGE_2});
+ assertEquals(WorkSourceHelper.PRIORITY_FG_APP, wsHelper.getRequestorWsPriority());
- @Test
- public void testHasAnyInternalRequest() throws Exception {
- // 2 from bg app.
- when(mActivityManager.getPackageImportance(TEST_PACKAGE_1))
- .thenReturn(IMPORTANCE_BACKGROUND);
- when(mActivityManager.getPackageImportance(TEST_PACKAGE_2))
- .thenReturn(IMPORTANCE_BACKGROUND);
- assertFalse(mWorkSourceHelper.hasAnyInternalRequest());
+ // PRIORITY_SYSTEM
+ ApplicationInfo appInfo = new ApplicationInfo();
+ appInfo.flags = ApplicationInfo.FLAG_SYSTEM;
+ when(mPackageManager.getApplicationInfoAsUser(any(), anyInt(), any())).thenReturn(appInfo);
+ assertEquals(WorkSourceHelper.PRIORITY_SYSTEM, wsHelper.getRequestorWsPriority());
- // add a new internal request.
- mWorkSource.add(new WorkSource(Process.WIFI_UID, "com.android.wifi"));
- assertTrue(mWorkSourceHelper.hasAnyInternalRequest());
+ // PRIORITY_PRIVILEGED
+ when(mWifiPermissionsUtil.checkNetworkSettingsPermission(TEST_UID_1)).thenReturn(true);
+ assertEquals(WorkSourceHelper.PRIORITY_PRIVILEGED, wsHelper.getRequestorWsPriority());
}
}