diff --git a/Patches/LineageOS-16.0/android_external_freetype/360951.patch b/Patches/LineageOS-16.0/android_external_freetype/360951.patch new file mode 100644 index 00000000..b6282274 --- /dev/null +++ b/Patches/LineageOS-16.0/android_external_freetype/360951.patch @@ -0,0 +1,50 @@ +From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 +From: Werner Lemberg +Date: Sat, 19 Mar 2022 06:40:17 +0100 +Subject: [PATCH] DO NOT MERGE - Cherry-pick two upstream changes + +This cherry picks following two changes: + +0c2bdb01a2e1d24a3e592377a6d0822856e10df2 +22a0cccb4d9d002f33c1ba7a4b36812c7d4f46b5 + +Bug: 271680254 +Test: N/A +(cherry picked from https://googleplex-android-review.googlesource.com/q/commit:4ffa271ab538f57b65a65d434a2df9d3f8cd2f4a) +(cherry picked from https://googleplex-android-review.googlesource.com/q/commit:b0f8930701bf19229075cc930ad15813ff5fb07b) +Merged-In: I42469df8e8b07221d64e3f8574c4f30110dbda7e +Change-Id: I42469df8e8b07221d64e3f8574c4f30110dbda7e +--- + src/base/ftobjs.c | 12 ++++++++++++ + 1 file changed, 12 insertions(+) + +diff --git a/src/base/ftobjs.c b/src/base/ftobjs.c +index 8d07e35ae..fda7e21de 100644 +--- a/src/base/ftobjs.c ++++ b/src/base/ftobjs.c +@@ -2345,6 +2345,15 @@ + #endif + + ++ /* only use lower 31 bits together with sign bit */ ++ if ( face_index > 0 ) ++ face_index &= 0x7FFFFFFFL; ++ else ++ { ++ face_index &= 0x7FFFFFFFL; ++ face_index = -face_index; ++ } ++ + #ifdef FT_DEBUG_LEVEL_TRACE + FT_TRACE3(( "FT_Open_Face: " )); + if ( face_index < 0 ) +@@ -3200,6 +3209,9 @@ + if ( !face ) + return FT_THROW( Invalid_Face_Handle ); + ++ if ( !face->size ) ++ return FT_THROW( Invalid_Size_Handle ); ++ + if ( !req || req->width < 0 || req->height < 0 || + req->type >= FT_SIZE_REQUEST_TYPE_MAX ) + return FT_THROW( Invalid_Argument ); diff --git a/Patches/LineageOS-16.0/android_frameworks_base/360953-backport.patch b/Patches/LineageOS-16.0/android_frameworks_base/360953-backport.patch new file mode 100644 index 00000000..54fd089c --- /dev/null +++ b/Patches/LineageOS-16.0/android_frameworks_base/360953-backport.patch @@ -0,0 +1,145 @@ +From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 +From: Lucas Lin +Date: Fri, 3 Mar 2023 08:13:50 +0000 +Subject: [PATCH] Sanitize VPN label to prevent HTML injection + +This commit will try to sanitize the content of VpnDialog. This +commit creates a function which will try to sanitize the VPN +label, if the sanitized VPN label is different from the original +one, which means the VPN label might contain HTML tag or the VPN +label violates the words restriction(may contain some wording +which will mislead the user). For this kind of case, show the +package name instead of the VPN label to prevent misleading the +user. + +The malicious VPN app might be able to add a large number of line +breaks with HTML in order to hide the system-displayed text from +the user in the connection request dialog. Thus, sanitizing the +content of the dialog is needed. + +Bug: 204554636 +Test: N/A +(cherry picked from https://googleplex-android-review.googlesource.com/q/commit:2178216b98bf9865edee198f45192f0b883624ab) +Merged-In: I8eb890fd2e5797d8d6ab5b12f9c628bc9616081d +Change-Id: I8eb890fd2e5797d8d6ab5b12f9c628bc9616081d +--- + packages/VpnDialogs/res/values/strings.xml | 28 ++++++++++ + .../com/android/vpndialogs/ConfirmDialog.java | 53 +++++++++++++++++-- + 2 files changed, 76 insertions(+), 5 deletions(-) + +diff --git a/packages/VpnDialogs/res/values/strings.xml b/packages/VpnDialogs/res/values/strings.xml +index 443a9bc33b90..b4166f0bedfd 100644 +--- a/packages/VpnDialogs/res/values/strings.xml ++++ b/packages/VpnDialogs/res/values/strings.xml +@@ -89,4 +89,32 @@ + without any consequences. [CHAR LIMIT=20] --> + Dismiss + ++ ++ ++ %1$s… ( ++ %2$s) ++ ++ ++ ++ ++ %1$s ( ++ %2$s) ++ + +diff --git a/packages/VpnDialogs/src/com/android/vpndialogs/ConfirmDialog.java b/packages/VpnDialogs/src/com/android/vpndialogs/ConfirmDialog.java +index 09339743db5c..43d18df3a10d 100644 +--- a/packages/VpnDialogs/src/com/android/vpndialogs/ConfirmDialog.java ++++ b/packages/VpnDialogs/src/com/android/vpndialogs/ConfirmDialog.java +@@ -42,10 +42,52 @@ public class ConfirmDialog extends AlertActivity + implements DialogInterface.OnClickListener, ImageGetter { + private static final String TAG = "VpnConfirm"; + ++ // Usually the label represents the app name, 150 code points might be enough to display the app ++ // name, and 150 code points won't cover the warning message from VpnDialog. ++ static final int MAX_VPN_LABEL_LENGTH = 150; ++ + private String mPackage; + + private IConnectivityManager mService; + ++ private View mView; ++ ++ /** ++ * This function will use the string resource to combine the VPN label and the package name. ++ * ++ * If the VPN label violates the length restriction, the first 30 code points of VPN label and ++ * the package name will be returned. Or return the VPN label and the package name directly if ++ * the VPN label doesn't violate the length restriction. ++ * ++ * The result will be something like, ++ * - ThisIsAVeryLongVpnAppNameWhich... (com.vpn.app) ++ * if the VPN label violates the length restriction. ++ * or ++ * - VpnLabelWith<br>HtmlTag (com.vpn.app) ++ * if the VPN label doesn't violate the length restriction. ++ * ++ */ ++ private String getSimplifiedLabel(String vpnLabel, String packageName) { ++ if (vpnLabel.codePointCount(0, vpnLabel.length()) > 30) { ++ return getString(R.string.sanitized_vpn_label_with_ellipsis, ++ vpnLabel.substring(0, vpnLabel.offsetByCodePoints(0, 30)), ++ packageName); ++ } ++ ++ return getString(R.string.sanitized_vpn_label, vpnLabel, packageName); ++ } ++ ++ protected String getSanitizedVpnLabel(String vpnLabel, String packageName) { ++ final String sanitizedVpnLabel = Html.escapeHtml(vpnLabel); ++ final boolean exceedMaxVpnLabelLength = sanitizedVpnLabel.codePointCount(0, ++ sanitizedVpnLabel.length()) > MAX_VPN_LABEL_LENGTH; ++ if (exceedMaxVpnLabelLength || !vpnLabel.equals(sanitizedVpnLabel)) { ++ return getSimplifiedLabel(sanitizedVpnLabel, packageName); ++ } ++ ++ return sanitizedVpnLabel; ++ } ++ + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); +@@ -68,15 +110,16 @@ public class ConfirmDialog extends AlertActivity + finish(); + return; + } +- View view = View.inflate(this, R.layout.confirm, null); +- ((TextView) view.findViewById(R.id.warning)).setText( +- Html.fromHtml(getString(R.string.warning, getVpnLabel()), +- this, null /* tagHandler */)); ++ mView = View.inflate(this, R.layout.confirm, null); ++ ((TextView) mView.findViewById(R.id.warning)).setText( ++ Html.fromHtml(getString(R.string.warning, getSanitizedVpnLabel( ++ getVpnLabel().toString(), mPackage)), ++ this /* imageGetter */, null /* tagHandler */)); + mAlertParams.mTitle = getText(R.string.prompt); + mAlertParams.mPositiveButtonText = getText(android.R.string.ok); + mAlertParams.mPositiveButtonListener = this; + mAlertParams.mNegativeButtonText = getText(android.R.string.cancel); +- mAlertParams.mView = view; ++ mAlertParams.mView = mView; + setupAlert(); + + getWindow().setCloseOnTouchOutside(false); diff --git a/Patches/LineageOS-16.0/android_frameworks_base/360954.patch b/Patches/LineageOS-16.0/android_frameworks_base/360954.patch new file mode 100644 index 00000000..449a4d66 --- /dev/null +++ b/Patches/LineageOS-16.0/android_frameworks_base/360954.patch @@ -0,0 +1,84 @@ +From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 +From: Michael Groover +Date: Fri, 31 Mar 2023 21:31:22 +0000 +Subject: [PATCH] Limit the number of supported v1 and v2 signers + +The v1 and v2 APK Signature Schemes support multiple signers; this +was intended to allow multiple entities to sign an APK. Previously, +the platform had no limits placed on the number of signers supported +in an APK, but this commit sets a hard limit of 10 supported signers +for these signature schemes to ensure a large number of signers +does not place undue burden on the platform. + +Bug: 266580022 +Test: Manually verified the platform only allowed an APK with the + maximum number of supported signers. +(cherry picked from https://googleplex-android-review.googlesource.com/q/commit:6f6ee8a55f37c2b8c0df041b2bd53ec928764597) +Merged-In: I6aa86b615b203cdc69d58a593ccf8f18474ca091 +Change-Id: I6aa86b615b203cdc69d58a593ccf8f18474ca091 +--- + .../util/apk/ApkSignatureSchemeV2Verifier.java | 10 ++++++++++ + core/java/android/util/jar/StrictJarVerifier.java | 11 +++++++++++ + 2 files changed, 21 insertions(+) + +diff --git a/core/java/android/util/apk/ApkSignatureSchemeV2Verifier.java b/core/java/android/util/apk/ApkSignatureSchemeV2Verifier.java +index 533d72590f0a..d5f6ebe8c2e9 100644 +--- a/core/java/android/util/apk/ApkSignatureSchemeV2Verifier.java ++++ b/core/java/android/util/apk/ApkSignatureSchemeV2Verifier.java +@@ -83,6 +83,11 @@ public class ApkSignatureSchemeV2Verifier { + + private static final int APK_SIGNATURE_SCHEME_V2_BLOCK_ID = 0x7109871a; + ++ /** ++ * The maximum number of signers supported by the v2 APK signature scheme. ++ */ ++ private static final int MAX_V2_SIGNERS = 10; ++ + /** + * Returns {@code true} if the provided APK contains an APK Signature Scheme V2 signature. + * +@@ -188,6 +193,11 @@ public class ApkSignatureSchemeV2Verifier { + } + while (signers.hasRemaining()) { + signerCount++; ++ if (signerCount > MAX_V2_SIGNERS) { ++ throw new SecurityException( ++ "APK Signature Scheme v2 only supports a maximum of " + MAX_V2_SIGNERS ++ + " signers"); ++ } + try { + ByteBuffer signer = getLengthPrefixedSlice(signers); + X509Certificate[] certs = verifySigner(signer, contentDigests, certFactory); +diff --git a/core/java/android/util/jar/StrictJarVerifier.java b/core/java/android/util/jar/StrictJarVerifier.java +index 45254908c5c9..a6aca330d323 100644 +--- a/core/java/android/util/jar/StrictJarVerifier.java ++++ b/core/java/android/util/jar/StrictJarVerifier.java +@@ -78,6 +78,11 @@ class StrictJarVerifier { + "SHA1", + }; + ++ /** ++ * The maximum number of signers supported by the JAR signature scheme. ++ */ ++ private static final int MAX_JAR_SIGNERS = 10; ++ + private final String jarName; + private final StrictJarManifest manifest; + private final HashMap metaEntries; +@@ -293,10 +298,16 @@ class StrictJarVerifier { + return false; + } + ++ int signerCount = 0; + Iterator it = metaEntries.keySet().iterator(); + while (it.hasNext()) { + String key = it.next(); + if (key.endsWith(".DSA") || key.endsWith(".RSA") || key.endsWith(".EC")) { ++ if (++signerCount > MAX_JAR_SIGNERS) { ++ throw new SecurityException( ++ "APK Signature Scheme v1 only supports a maximum of " + MAX_JAR_SIGNERS ++ + " signers"); ++ } + verifyCertificate(key); + it.remove(); + } diff --git a/Patches/LineageOS-16.0/android_frameworks_base/360955-backport.patch b/Patches/LineageOS-16.0/android_frameworks_base/360955-backport.patch new file mode 100644 index 00000000..16178028 --- /dev/null +++ b/Patches/LineageOS-16.0/android_frameworks_base/360955-backport.patch @@ -0,0 +1,1034 @@ +From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 +From: Bill Yi +Date: Tue, 4 Apr 2023 10:14:08 -0700 +Subject: [PATCH] Import translations. DO NOT MERGE ANYWHERE + +BUG:204554636 + +Auto-generated-cl: translation import +(cherry picked from https://googleplex-android-review.googlesource.com/q/commit:2fe87df11e447755351c1934bcbae5f2f870950d) +Merged-In: I1720c67e4361d9019b12fa5a510cd34918dfedb4 +Change-Id: I1720c67e4361d9019b12fa5a510cd34918dfedb4 +--- + packages/VpnDialogs/res/values-af/strings.xml | 2 ++ + packages/VpnDialogs/res/values-am/strings.xml | 2 ++ + packages/VpnDialogs/res/values-ar/strings.xml | 2 ++ + packages/VpnDialogs/res/values-as/strings.xml | 2 ++ + packages/VpnDialogs/res/values-az/strings.xml | 2 ++ + packages/VpnDialogs/res/values-b+sr+Latn/strings.xml | 2 ++ + packages/VpnDialogs/res/values-be/strings.xml | 2 ++ + packages/VpnDialogs/res/values-bg/strings.xml | 2 ++ + packages/VpnDialogs/res/values-bn/strings.xml | 2 ++ + packages/VpnDialogs/res/values-bs/strings.xml | 2 ++ + packages/VpnDialogs/res/values-ca/strings.xml | 2 ++ + packages/VpnDialogs/res/values-cs/strings.xml | 2 ++ + packages/VpnDialogs/res/values-da/strings.xml | 2 ++ + packages/VpnDialogs/res/values-de/strings.xml | 2 ++ + packages/VpnDialogs/res/values-el/strings.xml | 2 ++ + packages/VpnDialogs/res/values-en-rAU/strings.xml | 2 ++ + packages/VpnDialogs/res/values-en-rCA/strings.xml | 2 ++ + packages/VpnDialogs/res/values-en-rGB/strings.xml | 2 ++ + packages/VpnDialogs/res/values-en-rIN/strings.xml | 2 ++ + packages/VpnDialogs/res/values-en-rXC/strings.xml | 2 ++ + packages/VpnDialogs/res/values-es-rUS/strings.xml | 2 ++ + packages/VpnDialogs/res/values-es/strings.xml | 2 ++ + packages/VpnDialogs/res/values-et/strings.xml | 2 ++ + packages/VpnDialogs/res/values-eu/strings.xml | 2 ++ + packages/VpnDialogs/res/values-fa/strings.xml | 2 ++ + packages/VpnDialogs/res/values-fi/strings.xml | 2 ++ + packages/VpnDialogs/res/values-fr-rCA/strings.xml | 2 ++ + packages/VpnDialogs/res/values-fr/strings.xml | 2 ++ + packages/VpnDialogs/res/values-gl/strings.xml | 2 ++ + packages/VpnDialogs/res/values-gu/strings.xml | 2 ++ + packages/VpnDialogs/res/values-hi/strings.xml | 2 ++ + packages/VpnDialogs/res/values-hr/strings.xml | 2 ++ + packages/VpnDialogs/res/values-hu/strings.xml | 2 ++ + packages/VpnDialogs/res/values-hy/strings.xml | 2 ++ + packages/VpnDialogs/res/values-in/strings.xml | 2 ++ + packages/VpnDialogs/res/values-is/strings.xml | 2 ++ + packages/VpnDialogs/res/values-it/strings.xml | 2 ++ + packages/VpnDialogs/res/values-iw/strings.xml | 2 ++ + packages/VpnDialogs/res/values-ja/strings.xml | 2 ++ + packages/VpnDialogs/res/values-ka/strings.xml | 2 ++ + packages/VpnDialogs/res/values-kk/strings.xml | 2 ++ + packages/VpnDialogs/res/values-km/strings.xml | 2 ++ + packages/VpnDialogs/res/values-kn/strings.xml | 2 ++ + packages/VpnDialogs/res/values-ko/strings.xml | 2 ++ + packages/VpnDialogs/res/values-ky/strings.xml | 2 ++ + packages/VpnDialogs/res/values-lo/strings.xml | 2 ++ + packages/VpnDialogs/res/values-lt/strings.xml | 2 ++ + packages/VpnDialogs/res/values-lv/strings.xml | 2 ++ + packages/VpnDialogs/res/values-mk/strings.xml | 2 ++ + packages/VpnDialogs/res/values-ml/strings.xml | 2 ++ + packages/VpnDialogs/res/values-mn/strings.xml | 2 ++ + packages/VpnDialogs/res/values-mr/strings.xml | 2 ++ + packages/VpnDialogs/res/values-ms/strings.xml | 2 ++ + packages/VpnDialogs/res/values-my/strings.xml | 2 ++ + packages/VpnDialogs/res/values-nb/strings.xml | 2 ++ + packages/VpnDialogs/res/values-ne/strings.xml | 2 ++ + packages/VpnDialogs/res/values-nl/strings.xml | 2 ++ + packages/VpnDialogs/res/values-or/strings.xml | 2 ++ + packages/VpnDialogs/res/values-pa/strings.xml | 2 ++ + packages/VpnDialogs/res/values-pl/strings.xml | 2 ++ + packages/VpnDialogs/res/values-pt-rBR/strings.xml | 2 ++ + packages/VpnDialogs/res/values-pt-rPT/strings.xml | 2 ++ + packages/VpnDialogs/res/values-pt/strings.xml | 2 ++ + packages/VpnDialogs/res/values-ro/strings.xml | 2 ++ + packages/VpnDialogs/res/values-ru/strings.xml | 2 ++ + packages/VpnDialogs/res/values-si/strings.xml | 2 ++ + packages/VpnDialogs/res/values-sk/strings.xml | 2 ++ + packages/VpnDialogs/res/values-sl/strings.xml | 2 ++ + packages/VpnDialogs/res/values-sq/strings.xml | 2 ++ + packages/VpnDialogs/res/values-sr/strings.xml | 2 ++ + packages/VpnDialogs/res/values-sv/strings.xml | 2 ++ + packages/VpnDialogs/res/values-sw/strings.xml | 2 ++ + packages/VpnDialogs/res/values-ta/strings.xml | 2 ++ + packages/VpnDialogs/res/values-te/strings.xml | 2 ++ + packages/VpnDialogs/res/values-th/strings.xml | 2 ++ + packages/VpnDialogs/res/values-tl/strings.xml | 2 ++ + packages/VpnDialogs/res/values-tr/strings.xml | 2 ++ + packages/VpnDialogs/res/values-uk/strings.xml | 2 ++ + packages/VpnDialogs/res/values-ur/strings.xml | 2 ++ + packages/VpnDialogs/res/values-uz/strings.xml | 2 ++ + packages/VpnDialogs/res/values-vi/strings.xml | 2 ++ + packages/VpnDialogs/res/values-zh-rCN/strings.xml | 2 ++ + packages/VpnDialogs/res/values-zh-rHK/strings.xml | 2 ++ + packages/VpnDialogs/res/values-zh-rTW/strings.xml | 2 ++ + packages/VpnDialogs/res/values-zu/strings.xml | 2 ++ + 85 files changed, 170 insertions(+) + +diff --git a/packages/VpnDialogs/res/values-af/strings.xml b/packages/VpnDialogs/res/values-af/strings.xml +index ac82b0e0009a..b2718fd83e4f 100644 +--- a/packages/VpnDialogs/res/values-af/strings.xml ++++ b/packages/VpnDialogs/res/values-af/strings.xml +@@ -33,4 +33,6 @@ + "Ontkoppel" + "Maak program oop" + "Maak toe" ++ "%1$s … ( %2$s)" ++ "%1$s ( %2$s)" + +diff --git a/packages/VpnDialogs/res/values-am/strings.xml b/packages/VpnDialogs/res/values-am/strings.xml +index 103f101b8262..aa92dd708051 100644 +--- a/packages/VpnDialogs/res/values-am/strings.xml ++++ b/packages/VpnDialogs/res/values-am/strings.xml +@@ -33,4 +33,6 @@ + "አለያይ" + "መተግበሪያን ክፈት" + "አሰናብት" ++ "%1$s… ( %2$s)" ++ "%1$s ( %2$s)" + +diff --git a/packages/VpnDialogs/res/values-ar/strings.xml b/packages/VpnDialogs/res/values-ar/strings.xml +index 808cde906d2f..20057c66750c 100644 +--- a/packages/VpnDialogs/res/values-ar/strings.xml ++++ b/packages/VpnDialogs/res/values-ar/strings.xml +@@ -33,4 +33,6 @@ + "قطع الاتصال" + "فتح التطبيق" + "تجاهل" ++ "%1$s… ( %2$s)" ++ "%1$s ( %2$s)" + +diff --git a/packages/VpnDialogs/res/values-as/strings.xml b/packages/VpnDialogs/res/values-as/strings.xml +index 45d8458f4d45..9d05505b1fa8 100644 +--- a/packages/VpnDialogs/res/values-as/strings.xml ++++ b/packages/VpnDialogs/res/values-as/strings.xml +@@ -33,4 +33,6 @@ + "সংযোগ বিচ্ছিন্ন কৰক" + "এপ্ খোলক" + "অগ্ৰাহ্য কৰক" ++ "%1$s… ( %2$s)" ++ "%1$s ( %2$s)" + +diff --git a/packages/VpnDialogs/res/values-az/strings.xml b/packages/VpnDialogs/res/values-az/strings.xml +index 2bdf23ee2aa0..47cdeee180ed 100644 +--- a/packages/VpnDialogs/res/values-az/strings.xml ++++ b/packages/VpnDialogs/res/values-az/strings.xml +@@ -33,4 +33,6 @@ + "Əlaqəni kəs" + "Tətbiqi açın" + "İmtina edin" ++ "%1$s… ( %2$s)" ++ "%1$s ( %2$s)" + +diff --git a/packages/VpnDialogs/res/values-b+sr+Latn/strings.xml b/packages/VpnDialogs/res/values-b+sr+Latn/strings.xml +index f40e40670bf3..ea8e60d36ba5 100644 +--- a/packages/VpnDialogs/res/values-b+sr+Latn/strings.xml ++++ b/packages/VpnDialogs/res/values-b+sr+Latn/strings.xml +@@ -33,4 +33,6 @@ + "Prekini vezu" + "Otvori aplikaciju" + "Odbaci" ++ "%1$s… ( %2$s)" ++ "%1$s ( %2$s)" + +diff --git a/packages/VpnDialogs/res/values-be/strings.xml b/packages/VpnDialogs/res/values-be/strings.xml +index 0903c8ece36b..914a1638b14a 100644 +--- a/packages/VpnDialogs/res/values-be/strings.xml ++++ b/packages/VpnDialogs/res/values-be/strings.xml +@@ -33,4 +33,6 @@ + "Адключыцца" + "Адкрыць праграму" + "Адхіліць" ++ "%1$s… ( %2$s)" ++ "%1$s ( %2$s)" + +diff --git a/packages/VpnDialogs/res/values-bg/strings.xml b/packages/VpnDialogs/res/values-bg/strings.xml +index 9ac853d2016f..e1aa242496de 100644 +--- a/packages/VpnDialogs/res/values-bg/strings.xml ++++ b/packages/VpnDialogs/res/values-bg/strings.xml +@@ -33,4 +33,6 @@ + "Изключване" + "Към приложението" + "Отхвърляне" ++ "%1$s… (%2$s)" ++ "%1$s (%2$s)" + +diff --git a/packages/VpnDialogs/res/values-bn/strings.xml b/packages/VpnDialogs/res/values-bn/strings.xml +index 2defd8184c5e..4aadfdd022f9 100644 +--- a/packages/VpnDialogs/res/values-bn/strings.xml ++++ b/packages/VpnDialogs/res/values-bn/strings.xml +@@ -33,4 +33,6 @@ + "সংযোগ বিচ্ছিন্ন করুন" + "অ্যাপটি খুলুন" + "খারিজ করুন" ++ "%1$s… ( %2$s)" ++ "%1$s ( %2$s)" + +diff --git a/packages/VpnDialogs/res/values-bs/strings.xml b/packages/VpnDialogs/res/values-bs/strings.xml +index 56812d59e106..c8537ca6de17 100644 +--- a/packages/VpnDialogs/res/values-bs/strings.xml ++++ b/packages/VpnDialogs/res/values-bs/strings.xml +@@ -33,4 +33,6 @@ + "Prekini vezu" + "Otvori aplikaciju" + "Odbaci" ++ "%1$s… ( %2$s)" ++ "%1$s ( %2$s)" + +diff --git a/packages/VpnDialogs/res/values-ca/strings.xml b/packages/VpnDialogs/res/values-ca/strings.xml +index 97738c316f4b..1702e553f6e3 100644 +--- a/packages/VpnDialogs/res/values-ca/strings.xml ++++ b/packages/VpnDialogs/res/values-ca/strings.xml +@@ -33,4 +33,6 @@ + "Desconnecta" + "Obre l\'aplicació" + "Ignora" ++ "%1$s… ( %2$s)" ++ "%1$s ( %2$s)" + +diff --git a/packages/VpnDialogs/res/values-cs/strings.xml b/packages/VpnDialogs/res/values-cs/strings.xml +index 5cc809c7cb02..909cd2982b27 100644 +--- a/packages/VpnDialogs/res/values-cs/strings.xml ++++ b/packages/VpnDialogs/res/values-cs/strings.xml +@@ -33,4 +33,6 @@ + "Odpojit" + "Do aplikace" + "Zavřít" ++ "%1$s… ( %2$s)" ++ "%1$s (%2$s)" + +diff --git a/packages/VpnDialogs/res/values-da/strings.xml b/packages/VpnDialogs/res/values-da/strings.xml +index 7641158af3da..f8985bd263f3 100644 +--- a/packages/VpnDialogs/res/values-da/strings.xml ++++ b/packages/VpnDialogs/res/values-da/strings.xml +@@ -33,4 +33,6 @@ + "Fjern tilknytning" + "Åbn app" + "Luk" ++ "%1$s… ( %2$s)" ++ "%1$s ( %2$s)" + +diff --git a/packages/VpnDialogs/res/values-de/strings.xml b/packages/VpnDialogs/res/values-de/strings.xml +index 0f1e00980439..d75736315767 100644 +--- a/packages/VpnDialogs/res/values-de/strings.xml ++++ b/packages/VpnDialogs/res/values-de/strings.xml +@@ -33,4 +33,6 @@ + "Verbindung trennen" + "App öffnen" + "Schließen" ++ "%1$s… (%2$s)" ++ "%1$s (%2$s)" + +diff --git a/packages/VpnDialogs/res/values-el/strings.xml b/packages/VpnDialogs/res/values-el/strings.xml +index 78bcc43ff609..13df0dda440d 100644 +--- a/packages/VpnDialogs/res/values-el/strings.xml ++++ b/packages/VpnDialogs/res/values-el/strings.xml +@@ -33,4 +33,6 @@ + "Αποσύνδεση" + "Άνοιγμα εφαρμογής" + "Παράβλεψη" ++ "%1$s… ( %2$s)" ++ "%1$s ( %2$s)" + +diff --git a/packages/VpnDialogs/res/values-en-rAU/strings.xml b/packages/VpnDialogs/res/values-en-rAU/strings.xml +index 6ed50a7668ae..0fb49a1ad7e7 100644 +--- a/packages/VpnDialogs/res/values-en-rAU/strings.xml ++++ b/packages/VpnDialogs/res/values-en-rAU/strings.xml +@@ -33,4 +33,6 @@ + "Disconnect" + "Open app" + "Dismiss" ++ "%1$s… ( %2$s)" ++ "%1$s ( %2$s)" + +diff --git a/packages/VpnDialogs/res/values-en-rCA/strings.xml b/packages/VpnDialogs/res/values-en-rCA/strings.xml +index 6ed50a7668ae..0fb49a1ad7e7 100644 +--- a/packages/VpnDialogs/res/values-en-rCA/strings.xml ++++ b/packages/VpnDialogs/res/values-en-rCA/strings.xml +@@ -33,4 +33,6 @@ + "Disconnect" + "Open app" + "Dismiss" ++ "%1$s… ( %2$s)" ++ "%1$s ( %2$s)" + +diff --git a/packages/VpnDialogs/res/values-en-rGB/strings.xml b/packages/VpnDialogs/res/values-en-rGB/strings.xml +index 6ed50a7668ae..0fb49a1ad7e7 100644 +--- a/packages/VpnDialogs/res/values-en-rGB/strings.xml ++++ b/packages/VpnDialogs/res/values-en-rGB/strings.xml +@@ -33,4 +33,6 @@ + "Disconnect" + "Open app" + "Dismiss" ++ "%1$s… ( %2$s)" ++ "%1$s ( %2$s)" + +diff --git a/packages/VpnDialogs/res/values-en-rIN/strings.xml b/packages/VpnDialogs/res/values-en-rIN/strings.xml +index 6ed50a7668ae..0fb49a1ad7e7 100644 +--- a/packages/VpnDialogs/res/values-en-rIN/strings.xml ++++ b/packages/VpnDialogs/res/values-en-rIN/strings.xml +@@ -33,4 +33,6 @@ + "Disconnect" + "Open app" + "Dismiss" ++ "%1$s… ( %2$s)" ++ "%1$s ( %2$s)" + +diff --git a/packages/VpnDialogs/res/values-en-rXC/strings.xml b/packages/VpnDialogs/res/values-en-rXC/strings.xml +index 9d010e63518f..2fb8403a6920 100644 +--- a/packages/VpnDialogs/res/values-en-rXC/strings.xml ++++ b/packages/VpnDialogs/res/values-en-rXC/strings.xml +@@ -33,4 +33,6 @@ + "‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‎‎‏‏‎‏‎‏‏‏‏‎‏‏‎‎‏‎‎‏‏‎‎‏‎‏‏‏‏‏‏‏‏‏‏‎‏‏‎‎‎‎‏‏‎‏‏‎‏‎‏‏‎‏‎‏‏‏‏‎‎‎‎Disconnect‎‏‎‎‏‎" + "‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‎‏‏‎‎‏‏‏‎‎‏‎‏‏‏‏‎‏‏‎‏‎‏‎‎‏‎‎‎‏‎‏‏‎‏‎‎‏‏‎‏‎‎‏‎‎‏‎‏‏‏‏‏‏‏‏‎‎‎‏‎‏‏‎Open app‎‏‎‎‏‎" + "‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‎‏‎‏‎‏‏‏‏‏‎‎‎‏‎‏‏‏‎‏‎‎‏‏‎‎‎‎‎‎‏‎‏‏‏‏‎‏‎‎‎‎‎‎‏‎‎‎‎‎‎‎‏‏‎‎‏‏‏‎‏‏‎Dismiss‎‏‎‎‏‎" ++ "‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‏‎‎‎‎‏‎‏‎‏‎‏‏‏‏‏‏‎‎‏‎‏‏‎‏‎‏‏‎‎‏‎‏‏‎‏‏‏‏‏‎‎‏‎‎‏‏‎‏‏‎‏‎‏‏‎‎‏‏‎‏‏‎‎‏‎‎‏‏‎%1$s‎‏‎‎‏‏‏‎… ( ‎‏‎‎‏‏‎%2$s‎‏‎‎‏‏‏‎)‎‏‎‎‏‎" ++ "‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‎‏‏‏‎‏‎‎‎‎‎‏‏‎‏‏‏‏‎‏‎‏‏‎‎‎‎‎‎‏‎‎‏‎‏‏‎‎‏‏‎‏‎‎‏‎‎‏‎‏‏‏‎‏‎‏‏‎‎‏‏‏‎‎‎‏‎‎‏‏‎%1$s‎‏‎‎‏‏‏‎ ( ‎‏‎‎‏‏‎%2$s‎‏‎‎‏‏‏‎)‎‏‎‎‏‎" + +diff --git a/packages/VpnDialogs/res/values-es-rUS/strings.xml b/packages/VpnDialogs/res/values-es-rUS/strings.xml +index 21cfc042e707..4917d6158bba 100644 +--- a/packages/VpnDialogs/res/values-es-rUS/strings.xml ++++ b/packages/VpnDialogs/res/values-es-rUS/strings.xml +@@ -33,4 +33,6 @@ + "Desconectar" + "Abrir app" + "Descartar" ++ "%1$s… ( %2$s)" ++ "%1$s ( %2$s)" + +diff --git a/packages/VpnDialogs/res/values-es/strings.xml b/packages/VpnDialogs/res/values-es/strings.xml +index 372147f2479a..6efb545a97ed 100644 +--- a/packages/VpnDialogs/res/values-es/strings.xml ++++ b/packages/VpnDialogs/res/values-es/strings.xml +@@ -33,4 +33,6 @@ + "Desconectar" + "Abrir aplicación" + "Cerrar" ++ "%1$s… ( %2$s)" ++ "%1$s ( %2$s)" + +diff --git a/packages/VpnDialogs/res/values-et/strings.xml b/packages/VpnDialogs/res/values-et/strings.xml +index c328cd725396..b15c130f0d70 100644 +--- a/packages/VpnDialogs/res/values-et/strings.xml ++++ b/packages/VpnDialogs/res/values-et/strings.xml +@@ -33,4 +33,6 @@ + "Katkesta ühendus" + "Ava rakendus" + "Loobu" ++ "%1$s… ( %2$s)" ++ "%1$s ( %2$s)" + +diff --git a/packages/VpnDialogs/res/values-eu/strings.xml b/packages/VpnDialogs/res/values-eu/strings.xml +index a3b7716e91d3..a07237366c29 100644 +--- a/packages/VpnDialogs/res/values-eu/strings.xml ++++ b/packages/VpnDialogs/res/values-eu/strings.xml +@@ -33,4 +33,6 @@ + "Deskonektatu" + "Ireki aplikazioa" + "Baztertu" ++ "%1$s… (%2$s)" ++ "%1$s (%2$s)" + +diff --git a/packages/VpnDialogs/res/values-fa/strings.xml b/packages/VpnDialogs/res/values-fa/strings.xml +index 56f847c15827..30e7493141c6 100644 +--- a/packages/VpnDialogs/res/values-fa/strings.xml ++++ b/packages/VpnDialogs/res/values-fa/strings.xml +@@ -33,4 +33,6 @@ + "قطع اتصال" + "باز کردن برنامه" + "رد کردن" ++ "%1$s… ( %2$s)" ++ "%1$s ( %2$s)" + +diff --git a/packages/VpnDialogs/res/values-fi/strings.xml b/packages/VpnDialogs/res/values-fi/strings.xml +index 91c918af09c3..40d4a9feb4a1 100644 +--- a/packages/VpnDialogs/res/values-fi/strings.xml ++++ b/packages/VpnDialogs/res/values-fi/strings.xml +@@ -33,4 +33,6 @@ + "Katkaise yhteys" + "Avaa sovellus" + "Hylkää" ++ "%1$s… (%2$s)" ++ "%1$s (%2$s)" + +diff --git a/packages/VpnDialogs/res/values-fr-rCA/strings.xml b/packages/VpnDialogs/res/values-fr-rCA/strings.xml +index aa86c7ca8a7f..2bcf6b2ed382 100644 +--- a/packages/VpnDialogs/res/values-fr-rCA/strings.xml ++++ b/packages/VpnDialogs/res/values-fr-rCA/strings.xml +@@ -33,4 +33,6 @@ + "Déconnecter" + "Ouvrir l\'application" + "Ignorer" ++ "%1$s… ( %2$s)" ++ "%1$s ( %2$s)" + +diff --git a/packages/VpnDialogs/res/values-fr/strings.xml b/packages/VpnDialogs/res/values-fr/strings.xml +index 71801197ddf2..820c8f98c806 100644 +--- a/packages/VpnDialogs/res/values-fr/strings.xml ++++ b/packages/VpnDialogs/res/values-fr/strings.xml +@@ -33,4 +33,6 @@ + "Déconnecter" + "Ouvrir l\'application" + "Ignorer" ++ "%1$s… (%2$s)" ++ "%1$s (%2$s)" + +diff --git a/packages/VpnDialogs/res/values-gl/strings.xml b/packages/VpnDialogs/res/values-gl/strings.xml +index 8a66d081a71b..765e7f7336e2 100644 +--- a/packages/VpnDialogs/res/values-gl/strings.xml ++++ b/packages/VpnDialogs/res/values-gl/strings.xml +@@ -33,4 +33,6 @@ + "Desconectar" + "Abrir aplicación" + "Ignorar" ++ "%1$s… (%2$s)" ++ "%1$s (%2$s)" + +diff --git a/packages/VpnDialogs/res/values-gu/strings.xml b/packages/VpnDialogs/res/values-gu/strings.xml +index 961711c57c3d..6faeb8758d0b 100644 +--- a/packages/VpnDialogs/res/values-gu/strings.xml ++++ b/packages/VpnDialogs/res/values-gu/strings.xml +@@ -33,4 +33,6 @@ + "ડિસ્કનેક્ટ કરો" + "ઍપ ખોલો" + "છોડી દો" ++ "%1$s… ( %2$s)" ++ "%1$s ( %2$s)" + +diff --git a/packages/VpnDialogs/res/values-hi/strings.xml b/packages/VpnDialogs/res/values-hi/strings.xml +index 5560a855627f..0e28c2b063d7 100644 +--- a/packages/VpnDialogs/res/values-hi/strings.xml ++++ b/packages/VpnDialogs/res/values-hi/strings.xml +@@ -33,4 +33,6 @@ + "डिस्‍कनेक्‍ट करें" + "ऐप खोलें" + "खारिज करें" ++ "%1$s… ( %2$s)" ++ "%1$s ( %2$s)" + +diff --git a/packages/VpnDialogs/res/values-hr/strings.xml b/packages/VpnDialogs/res/values-hr/strings.xml +index aa9e436f56e7..7d68f0ab4f44 100644 +--- a/packages/VpnDialogs/res/values-hr/strings.xml ++++ b/packages/VpnDialogs/res/values-hr/strings.xml +@@ -33,4 +33,6 @@ + "Prekini vezu" + "Otvori aplikaciju" + "Odbaci" ++ "%1$s… (%2$s)" ++ "%1$s (%2$s)" + +diff --git a/packages/VpnDialogs/res/values-hu/strings.xml b/packages/VpnDialogs/res/values-hu/strings.xml +index 703aa792f3c3..97d3946418b4 100644 +--- a/packages/VpnDialogs/res/values-hu/strings.xml ++++ b/packages/VpnDialogs/res/values-hu/strings.xml +@@ -33,4 +33,6 @@ + "Kapcsolat bontása" + "Alkalmazás indítása" + "Bezárás" ++ "%1$s… ( %2$s)" ++ "%1$s ( %2$s)" + +diff --git a/packages/VpnDialogs/res/values-hy/strings.xml b/packages/VpnDialogs/res/values-hy/strings.xml +index c296c8547283..84eace72bb3c 100644 +--- a/packages/VpnDialogs/res/values-hy/strings.xml ++++ b/packages/VpnDialogs/res/values-hy/strings.xml +@@ -33,4 +33,6 @@ + "Անջատել" + "Բացել հավելվածը" + "Փակել" ++ "%1$s… ( %2$s)" ++ "%1$s ( %2$s)" + +diff --git a/packages/VpnDialogs/res/values-in/strings.xml b/packages/VpnDialogs/res/values-in/strings.xml +index 18ef372a8cda..1782b696805b 100644 +--- a/packages/VpnDialogs/res/values-in/strings.xml ++++ b/packages/VpnDialogs/res/values-in/strings.xml +@@ -33,4 +33,6 @@ + "Putuskan sambungan" + "Buka aplikasi" + "Tutup" ++ "%1$s… ( %2$s)" ++ "%1$s ( %2$s)" + +diff --git a/packages/VpnDialogs/res/values-is/strings.xml b/packages/VpnDialogs/res/values-is/strings.xml +index 70fb40fc467c..af87d13e7aaf 100644 +--- a/packages/VpnDialogs/res/values-is/strings.xml ++++ b/packages/VpnDialogs/res/values-is/strings.xml +@@ -33,4 +33,6 @@ + "Aftengja" + "Opna forrit" + "Hunsa" ++ "%1$s… ( %2$s)" ++ "%1$s ( %2$s)" + +diff --git a/packages/VpnDialogs/res/values-it/strings.xml b/packages/VpnDialogs/res/values-it/strings.xml +index 2602493faf00..5689acbea102 100644 +--- a/packages/VpnDialogs/res/values-it/strings.xml ++++ b/packages/VpnDialogs/res/values-it/strings.xml +@@ -33,4 +33,6 @@ + "Disconnetti" + "Apri app" + "Ignora" ++ "%1$s… (%2$s)" ++ "%1$s (%2$s)" + +diff --git a/packages/VpnDialogs/res/values-iw/strings.xml b/packages/VpnDialogs/res/values-iw/strings.xml +index 55ac85f2c76a..96233bfa5fdf 100644 +--- a/packages/VpnDialogs/res/values-iw/strings.xml ++++ b/packages/VpnDialogs/res/values-iw/strings.xml +@@ -33,4 +33,6 @@ + "נתק" + "לאפליקציה" + "סגירה" ++ "%1$s… ( %2$s)" ++ "%1$s ( %2$s)" + +diff --git a/packages/VpnDialogs/res/values-ja/strings.xml b/packages/VpnDialogs/res/values-ja/strings.xml +index 8480692e9dd3..32898a3a1ce2 100644 +--- a/packages/VpnDialogs/res/values-ja/strings.xml ++++ b/packages/VpnDialogs/res/values-ja/strings.xml +@@ -33,4 +33,6 @@ + "切断" + "アプリを開く" + "閉じる" ++ "%1$s…(%2$s)" ++ "%1$s%2$s)" + +diff --git a/packages/VpnDialogs/res/values-ka/strings.xml b/packages/VpnDialogs/res/values-ka/strings.xml +index e5a07532c32e..0cc59d21a1da 100644 +--- a/packages/VpnDialogs/res/values-ka/strings.xml ++++ b/packages/VpnDialogs/res/values-ka/strings.xml +@@ -33,4 +33,6 @@ + "კავშირის გაწყვეტა" + "გახსენით აპი" + "დახურვა" ++ "%1$s… ( %2$s)" ++ "%1$s ( %2$s)" + +diff --git a/packages/VpnDialogs/res/values-kk/strings.xml b/packages/VpnDialogs/res/values-kk/strings.xml +index 79f79c34e1b4..d702f3f4a424 100644 +--- a/packages/VpnDialogs/res/values-kk/strings.xml ++++ b/packages/VpnDialogs/res/values-kk/strings.xml +@@ -33,4 +33,6 @@ + "Ажырату" + "Қолданбаны ашу" + "Жабу" ++ "%1$s… ( %2$s)" ++ "%1$s ( %2$s)" + +diff --git a/packages/VpnDialogs/res/values-km/strings.xml b/packages/VpnDialogs/res/values-km/strings.xml +index 06f34dbf2733..60627104f3f4 100644 +--- a/packages/VpnDialogs/res/values-km/strings.xml ++++ b/packages/VpnDialogs/res/values-km/strings.xml +@@ -33,4 +33,6 @@ + "ផ្ដាច់" + "បើកកម្មវិធី" + "បដិសេធ" ++ "%1$s… ( %2$s)" ++ "%1$s ( %2$s)" + +diff --git a/packages/VpnDialogs/res/values-kn/strings.xml b/packages/VpnDialogs/res/values-kn/strings.xml +index 040cd6c5aeda..254d64de3bdf 100644 +--- a/packages/VpnDialogs/res/values-kn/strings.xml ++++ b/packages/VpnDialogs/res/values-kn/strings.xml +@@ -33,4 +33,6 @@ + "ಸಂಪರ್ಕ ಕಡಿತಗೊಳಿಸು" + "ಅಪ್ಲಿಕೇಶನ್ ತೆರೆಯಿರಿ" + "ವಜಾಗೊಳಿಸಿ" ++ "%1$s… ( %2$s)" ++ "%1$s ( %2$s)" + +diff --git a/packages/VpnDialogs/res/values-ko/strings.xml b/packages/VpnDialogs/res/values-ko/strings.xml +index 6ad497680ae7..d2281938176a 100644 +--- a/packages/VpnDialogs/res/values-ko/strings.xml ++++ b/packages/VpnDialogs/res/values-ko/strings.xml +@@ -33,4 +33,6 @@ + "연결 끊기" + "앱 열기" + "닫기" ++ "%1$s…(%2$s)" ++ "%1$s(%2$s)" + +diff --git a/packages/VpnDialogs/res/values-ky/strings.xml b/packages/VpnDialogs/res/values-ky/strings.xml +index 4e2f698bb1e5..452176674571 100644 +--- a/packages/VpnDialogs/res/values-ky/strings.xml ++++ b/packages/VpnDialogs/res/values-ky/strings.xml +@@ -33,4 +33,6 @@ + "Ажыратуу" + "Колдонмону ачуу" + "Четке кагуу" ++ "%1$s… ( %2$s)" ++ "%1$s ( %2$s)" + +diff --git a/packages/VpnDialogs/res/values-lo/strings.xml b/packages/VpnDialogs/res/values-lo/strings.xml +index c591308480c1..1b851e127abd 100644 +--- a/packages/VpnDialogs/res/values-lo/strings.xml ++++ b/packages/VpnDialogs/res/values-lo/strings.xml +@@ -33,4 +33,6 @@ + "ຕັດການເຊື່ອມຕໍ່" + "ເປີດແອັບ" + "ປິດໄວ້" ++ "%1$s… ( %2$s)" ++ "%1$s ( %2$s)" + +diff --git a/packages/VpnDialogs/res/values-lt/strings.xml b/packages/VpnDialogs/res/values-lt/strings.xml +index 8846310730ce..e8e20a8d218d 100644 +--- a/packages/VpnDialogs/res/values-lt/strings.xml ++++ b/packages/VpnDialogs/res/values-lt/strings.xml +@@ -33,4 +33,6 @@ + "Atsijungti" + "Atidaryti programą" + "Atsisakyti" ++ "%1$s… (%2$s)" ++ "%1$s (%2$s)" + +diff --git a/packages/VpnDialogs/res/values-lv/strings.xml b/packages/VpnDialogs/res/values-lv/strings.xml +index 07625b6173c6..af19f4dce065 100644 +--- a/packages/VpnDialogs/res/values-lv/strings.xml ++++ b/packages/VpnDialogs/res/values-lv/strings.xml +@@ -33,4 +33,6 @@ + "Pārtraukt savienojumu" + "Atvērt lietotni" + "Nerādīt" ++ "%1$s… ( %2$s)" ++ "%1$s ( %2$s)" + +diff --git a/packages/VpnDialogs/res/values-mk/strings.xml b/packages/VpnDialogs/res/values-mk/strings.xml +index b5a64f213066..4db7e4a50241 100644 +--- a/packages/VpnDialogs/res/values-mk/strings.xml ++++ b/packages/VpnDialogs/res/values-mk/strings.xml +@@ -33,4 +33,6 @@ + "Исклучи" + "Отвори ја апликацијата" + "Отфрли" ++ "%1$s… ( %2$s)" ++ "%1$s ( %2$s)" + +diff --git a/packages/VpnDialogs/res/values-ml/strings.xml b/packages/VpnDialogs/res/values-ml/strings.xml +index 680d0ef539b7..9d3bba43f84c 100644 +--- a/packages/VpnDialogs/res/values-ml/strings.xml ++++ b/packages/VpnDialogs/res/values-ml/strings.xml +@@ -33,4 +33,6 @@ + "വിച്ഛേദിക്കുക" + "ആപ്പ് തുറക്കുക" + "നിരസിക്കുക" ++ "%1$s… ( %2$s)" ++ "%1$s ( %2$s)" + +diff --git a/packages/VpnDialogs/res/values-mn/strings.xml b/packages/VpnDialogs/res/values-mn/strings.xml +index 9aa104aff5ab..15f56b155053 100644 +--- a/packages/VpnDialogs/res/values-mn/strings.xml ++++ b/packages/VpnDialogs/res/values-mn/strings.xml +@@ -33,4 +33,6 @@ + "Салгах" + "Апп нээх" + "Хаах" ++ "%1$s… ( %2$s)" ++ "%1$s ( %2$s)" + +diff --git a/packages/VpnDialogs/res/values-mr/strings.xml b/packages/VpnDialogs/res/values-mr/strings.xml +index 318f854340e2..d8fbe904043d 100644 +--- a/packages/VpnDialogs/res/values-mr/strings.xml ++++ b/packages/VpnDialogs/res/values-mr/strings.xml +@@ -33,4 +33,6 @@ + "‍डिस्कनेक्ट करा" + "अ‍ॅप उघडा" + "डिसमिस करा" ++ "%1$s… ( %2$s)" ++ "%1$s ( %2$s)" + +diff --git a/packages/VpnDialogs/res/values-ms/strings.xml b/packages/VpnDialogs/res/values-ms/strings.xml +index b489f2edabc0..a7de3f166303 100644 +--- a/packages/VpnDialogs/res/values-ms/strings.xml ++++ b/packages/VpnDialogs/res/values-ms/strings.xml +@@ -33,4 +33,6 @@ + "Putuskan sambungan" + "Buka apl" + "Ketepikan" ++ "%1$s… ( %2$s)" ++ "%1$s ( %2$s)" + +diff --git a/packages/VpnDialogs/res/values-my/strings.xml b/packages/VpnDialogs/res/values-my/strings.xml +index 9d60ff42a7cd..52675b6092ac 100644 +--- a/packages/VpnDialogs/res/values-my/strings.xml ++++ b/packages/VpnDialogs/res/values-my/strings.xml +@@ -33,4 +33,6 @@ + "ချိတ်ဆက်ခြင်းရပ်ရန်" + "အက်ပ်ကို ဖွင့်ရန်" + "ပယ်ရန်" ++ "%1$s… ( %2$s)" ++ "%1$s ( %2$s)" + +diff --git a/packages/VpnDialogs/res/values-nb/strings.xml b/packages/VpnDialogs/res/values-nb/strings.xml +index be572d4408f8..bad15e913938 100644 +--- a/packages/VpnDialogs/res/values-nb/strings.xml ++++ b/packages/VpnDialogs/res/values-nb/strings.xml +@@ -33,4 +33,6 @@ + "Koble fra" + "Åpne appen" + "Lukk" ++ "%1$s… ( %2$s)" ++ "%1$s ( %2$s)" + +diff --git a/packages/VpnDialogs/res/values-ne/strings.xml b/packages/VpnDialogs/res/values-ne/strings.xml +index b716c35cfad4..ac21dd1713d1 100644 +--- a/packages/VpnDialogs/res/values-ne/strings.xml ++++ b/packages/VpnDialogs/res/values-ne/strings.xml +@@ -33,4 +33,6 @@ + "विच्छेदन गर्नुहोस्" + "अनुप्रयोग खोल्नुहोस्" + "खारेज गर्नुहोस्" ++ "%1$s… ( %2$s)" ++ "%1$s ( %2$s)" + +diff --git a/packages/VpnDialogs/res/values-nl/strings.xml b/packages/VpnDialogs/res/values-nl/strings.xml +index 8073b09e203c..ab77d5e9f218 100644 +--- a/packages/VpnDialogs/res/values-nl/strings.xml ++++ b/packages/VpnDialogs/res/values-nl/strings.xml +@@ -33,4 +33,6 @@ + "Verbinding verbreken" + "App openen" + "Sluiten" ++ "%1$s… (%2$s)" ++ "%1$s (%2$s)" + +diff --git a/packages/VpnDialogs/res/values-or/strings.xml b/packages/VpnDialogs/res/values-or/strings.xml +index f1122ebd4386..40ad247433de 100644 +--- a/packages/VpnDialogs/res/values-or/strings.xml ++++ b/packages/VpnDialogs/res/values-or/strings.xml +@@ -33,4 +33,6 @@ + "ବିଚ୍ଛିନ୍ନ କରନ୍ତୁ" + "ଆପ୍‌ ଖୋଲନ୍ତୁ" + "ଖାରଜ କରନ୍ତୁ" ++ "%1$s… ( %2$s)" ++ "%1$s ( %2$s)" + +diff --git a/packages/VpnDialogs/res/values-pa/strings.xml b/packages/VpnDialogs/res/values-pa/strings.xml +index 1815f4fb0d25..a3b6e04061c1 100644 +--- a/packages/VpnDialogs/res/values-pa/strings.xml ++++ b/packages/VpnDialogs/res/values-pa/strings.xml +@@ -33,4 +33,6 @@ + "ਡਿਸਕਨੈਕਟ ਕਰੋ" + "ਐਪ ਖੋਲ੍ਹੋ" + "ਖਾਰਜ ਕਰੋ" ++ "%1$s… ( %2$s)" ++ "%1$s ( %2$s)" + +diff --git a/packages/VpnDialogs/res/values-pl/strings.xml b/packages/VpnDialogs/res/values-pl/strings.xml +index d5201d7fbdf5..3af093ae9841 100644 +--- a/packages/VpnDialogs/res/values-pl/strings.xml ++++ b/packages/VpnDialogs/res/values-pl/strings.xml +@@ -33,4 +33,6 @@ + "Rozłącz" + "Otwórz aplikację" + "Zamknij" ++ "%1$s… (%2$s)" ++ "%1$s (%2$s)" + +diff --git a/packages/VpnDialogs/res/values-pt-rBR/strings.xml b/packages/VpnDialogs/res/values-pt-rBR/strings.xml +index 75c140617cf5..8c1ae840aa15 100644 +--- a/packages/VpnDialogs/res/values-pt-rBR/strings.xml ++++ b/packages/VpnDialogs/res/values-pt-rBR/strings.xml +@@ -33,4 +33,6 @@ + "Desconectar" + "Abrir app" + "Dispensar" ++ "%1$s… (%2$s)" ++ "%1$s (%2$s)" + +diff --git a/packages/VpnDialogs/res/values-pt-rPT/strings.xml b/packages/VpnDialogs/res/values-pt-rPT/strings.xml +index 01beddbab4e4..34980dc30916 100644 +--- a/packages/VpnDialogs/res/values-pt-rPT/strings.xml ++++ b/packages/VpnDialogs/res/values-pt-rPT/strings.xml +@@ -33,4 +33,6 @@ + "Desligar" + "Abrir aplicação" + "Ignorar" ++ "%1$s… ( %2$s)" ++ "%1$s ( %2$s)" + +diff --git a/packages/VpnDialogs/res/values-pt/strings.xml b/packages/VpnDialogs/res/values-pt/strings.xml +index 75c140617cf5..8c1ae840aa15 100644 +--- a/packages/VpnDialogs/res/values-pt/strings.xml ++++ b/packages/VpnDialogs/res/values-pt/strings.xml +@@ -33,4 +33,6 @@ + "Desconectar" + "Abrir app" + "Dispensar" ++ "%1$s… (%2$s)" ++ "%1$s (%2$s)" + +diff --git a/packages/VpnDialogs/res/values-ro/strings.xml b/packages/VpnDialogs/res/values-ro/strings.xml +index 4e60df2eca8e..11137cce96b5 100644 +--- a/packages/VpnDialogs/res/values-ro/strings.xml ++++ b/packages/VpnDialogs/res/values-ro/strings.xml +@@ -33,4 +33,6 @@ + "Deconectați" + "Deschideți aplicația" + "Închideți" ++ "%1$s… (%2$s)" ++ "%1$s (%2$s)" + +diff --git a/packages/VpnDialogs/res/values-ru/strings.xml b/packages/VpnDialogs/res/values-ru/strings.xml +index f8fcfb83aa9a..84a71d25cc16 100644 +--- a/packages/VpnDialogs/res/values-ru/strings.xml ++++ b/packages/VpnDialogs/res/values-ru/strings.xml +@@ -33,4 +33,6 @@ + "Разъединить" + "Открыть приложение" + "Закрыть" ++ "%1$s… (%2$s)" ++ "%1$s (%2$s)" + +diff --git a/packages/VpnDialogs/res/values-si/strings.xml b/packages/VpnDialogs/res/values-si/strings.xml +index bb97a5d86c5f..e1dbf9774839 100644 +--- a/packages/VpnDialogs/res/values-si/strings.xml ++++ b/packages/VpnDialogs/res/values-si/strings.xml +@@ -33,4 +33,6 @@ + "විසන්ධි කරන්න" + "යෙදුම විවෘත කරන්න" + "ඉවතලන්න" ++ "%1$s… ( %2$s)" ++ "%1$s ( %2$s)" + +diff --git a/packages/VpnDialogs/res/values-sk/strings.xml b/packages/VpnDialogs/res/values-sk/strings.xml +index 00029641e57b..f5c42280fb86 100644 +--- a/packages/VpnDialogs/res/values-sk/strings.xml ++++ b/packages/VpnDialogs/res/values-sk/strings.xml +@@ -33,4 +33,6 @@ + "Odpojiť" + "Otvoriť aplikáciu" + "Zrušiť" ++ "%1$s… ( %2$s" ++ "%1$s ( %2$s)" + +diff --git a/packages/VpnDialogs/res/values-sl/strings.xml b/packages/VpnDialogs/res/values-sl/strings.xml +index d5014fa34394..62bdd03cbe67 100644 +--- a/packages/VpnDialogs/res/values-sl/strings.xml ++++ b/packages/VpnDialogs/res/values-sl/strings.xml +@@ -33,4 +33,6 @@ + "Prekini povezavo" + "Odpri aplikacijo" + "Opusti" ++ "%1$s … (%2$s)" ++ "%1$s (%2$s)" + +diff --git a/packages/VpnDialogs/res/values-sq/strings.xml b/packages/VpnDialogs/res/values-sq/strings.xml +index 4a96e7b92212..50ad7cf02c8e 100644 +--- a/packages/VpnDialogs/res/values-sq/strings.xml ++++ b/packages/VpnDialogs/res/values-sq/strings.xml +@@ -33,4 +33,6 @@ + "Shkëputu" + "Hap aplikacionin" + "Largoje" ++ "%1$s… ( %2$s)" ++ "%1$s ( %2$s)" + +diff --git a/packages/VpnDialogs/res/values-sr/strings.xml b/packages/VpnDialogs/res/values-sr/strings.xml +index 8ce8060e333d..3bc65413b728 100644 +--- a/packages/VpnDialogs/res/values-sr/strings.xml ++++ b/packages/VpnDialogs/res/values-sr/strings.xml +@@ -33,4 +33,6 @@ + "Прекини везу" + "Отвори апликацију" + "Одбаци" ++ "%1$s… ( %2$s)" ++ "%1$s ( %2$s)" + +diff --git a/packages/VpnDialogs/res/values-sv/strings.xml b/packages/VpnDialogs/res/values-sv/strings.xml +index 16b6a31d7d1a..fee6f971824d 100644 +--- a/packages/VpnDialogs/res/values-sv/strings.xml ++++ b/packages/VpnDialogs/res/values-sv/strings.xml +@@ -33,4 +33,6 @@ + "Koppla från" + "Öppna appen" + "Ignorera" ++ "%1$s… (%2$s)" ++ "%1$s (%2$s)" + +diff --git a/packages/VpnDialogs/res/values-sw/strings.xml b/packages/VpnDialogs/res/values-sw/strings.xml +index ea2688438b7a..3e696f20fabe 100644 +--- a/packages/VpnDialogs/res/values-sw/strings.xml ++++ b/packages/VpnDialogs/res/values-sw/strings.xml +@@ -33,4 +33,6 @@ + "Tenganisha" + "Fungua programu" + "Ondoa" ++ "%1$s… ( %2$s)" ++ "%1$s ( %2$s)" + +diff --git a/packages/VpnDialogs/res/values-ta/strings.xml b/packages/VpnDialogs/res/values-ta/strings.xml +index 3b4cc571d860..8cdffc8579eb 100644 +--- a/packages/VpnDialogs/res/values-ta/strings.xml ++++ b/packages/VpnDialogs/res/values-ta/strings.xml +@@ -33,4 +33,6 @@ + "தொடர்பைத் துண்டி" + "பயன்பாட்டைத் திற" + "நிராகரி" ++ "%1$s… ( %2$s)" ++ "%1$s ( %2$s)" + +diff --git a/packages/VpnDialogs/res/values-te/strings.xml b/packages/VpnDialogs/res/values-te/strings.xml +index 864c926bc615..416f2e399240 100644 +--- a/packages/VpnDialogs/res/values-te/strings.xml ++++ b/packages/VpnDialogs/res/values-te/strings.xml +@@ -33,4 +33,6 @@ + "డిస్‌కనెక్ట్ చేయి" + "యాప్‌ని తెరవండి" + "తీసివేయండి" ++ "%1$s… ( %2$s)" ++ "%1$s ( %2$s)" + +diff --git a/packages/VpnDialogs/res/values-th/strings.xml b/packages/VpnDialogs/res/values-th/strings.xml +index 333ff5fefacc..14e2b7fcb8c9 100644 +--- a/packages/VpnDialogs/res/values-th/strings.xml ++++ b/packages/VpnDialogs/res/values-th/strings.xml +@@ -33,4 +33,6 @@ + "ยกเลิกการเชื่อมต่อ" + "เปิดแอป" + "ปิด" ++ "%1$s… ( %2$s)" ++ "%1$s ( %2$s)" + +diff --git a/packages/VpnDialogs/res/values-tl/strings.xml b/packages/VpnDialogs/res/values-tl/strings.xml +index 9c01c32d0d0d..b79e262ffce9 100644 +--- a/packages/VpnDialogs/res/values-tl/strings.xml ++++ b/packages/VpnDialogs/res/values-tl/strings.xml +@@ -33,4 +33,6 @@ + "Idiskonekta" + "Buksan ang app" + "I-dismiss" ++ "%1$s… ( %2$s)" ++ "%1$s ( %2$s)" + +diff --git a/packages/VpnDialogs/res/values-tr/strings.xml b/packages/VpnDialogs/res/values-tr/strings.xml +index 8665a47e6633..309d116d7715 100644 +--- a/packages/VpnDialogs/res/values-tr/strings.xml ++++ b/packages/VpnDialogs/res/values-tr/strings.xml +@@ -33,4 +33,6 @@ + "Bağlantıyı kes" + "Uygulamayı aç" + "Kapat" ++ "%1$s… ( %2$s)" ++ "%1$s ( %2$s)" + +diff --git a/packages/VpnDialogs/res/values-uk/strings.xml b/packages/VpnDialogs/res/values-uk/strings.xml +index 8f91abf990b3..fe726049974a 100644 +--- a/packages/VpnDialogs/res/values-uk/strings.xml ++++ b/packages/VpnDialogs/res/values-uk/strings.xml +@@ -33,4 +33,6 @@ + "Від’єднати" + "Відкрити додаток" + "Закрити" ++ "%1$s… ( %2$s)" ++ "%1$s ( %2$s)" + +diff --git a/packages/VpnDialogs/res/values-ur/strings.xml b/packages/VpnDialogs/res/values-ur/strings.xml +index db0c2971a64c..d2ee5a8d0aa9 100644 +--- a/packages/VpnDialogs/res/values-ur/strings.xml ++++ b/packages/VpnDialogs/res/values-ur/strings.xml +@@ -33,4 +33,6 @@ + "منقطع کریں" + "ایپ کھولیں" + "برخاست کریں" ++ "%1$s… ( %2$s)" ++ "%1$s ( %2$s)" + +diff --git a/packages/VpnDialogs/res/values-uz/strings.xml b/packages/VpnDialogs/res/values-uz/strings.xml +index 5a348a0610d3..854417691e30 100644 +--- a/packages/VpnDialogs/res/values-uz/strings.xml ++++ b/packages/VpnDialogs/res/values-uz/strings.xml +@@ -33,4 +33,6 @@ + "Aloqani uzish" + "Ilovani ochish" + "Yopish" ++ "%1$s… ( %2$s)" ++ "%1$s ( %2$s)" + +diff --git a/packages/VpnDialogs/res/values-vi/strings.xml b/packages/VpnDialogs/res/values-vi/strings.xml +index 097c9aeee013..d74151a819e1 100644 +--- a/packages/VpnDialogs/res/values-vi/strings.xml ++++ b/packages/VpnDialogs/res/values-vi/strings.xml +@@ -33,4 +33,6 @@ + "Ngắt kết nối" + "Mở ứng dụng" + "Loại bỏ" ++ "%1$s… (%2$s)" ++ "%1$s (%2$s)" + +diff --git a/packages/VpnDialogs/res/values-zh-rCN/strings.xml b/packages/VpnDialogs/res/values-zh-rCN/strings.xml +index 7e528bdfb04a..92e10fd9fe16 100644 +--- a/packages/VpnDialogs/res/values-zh-rCN/strings.xml ++++ b/packages/VpnDialogs/res/values-zh-rCN/strings.xml +@@ -33,4 +33,6 @@ + "断开连接" + "打开应用" + "关闭" ++ "%1$s…(%2$s)" ++ "%1$s (%2$s)" + +diff --git a/packages/VpnDialogs/res/values-zh-rHK/strings.xml b/packages/VpnDialogs/res/values-zh-rHK/strings.xml +index f70cd5115e72..9c61128c2e45 100644 +--- a/packages/VpnDialogs/res/values-zh-rHK/strings.xml ++++ b/packages/VpnDialogs/res/values-zh-rHK/strings.xml +@@ -33,4 +33,6 @@ + "中斷連線" + "開啟應用程式" + "關閉" ++ "%1$s… ( %2$s)" ++ "%1$s ( %2$s)" + +diff --git a/packages/VpnDialogs/res/values-zh-rTW/strings.xml b/packages/VpnDialogs/res/values-zh-rTW/strings.xml +index edd8e61d5555..234635091f11 100644 +--- a/packages/VpnDialogs/res/values-zh-rTW/strings.xml ++++ b/packages/VpnDialogs/res/values-zh-rTW/strings.xml +@@ -33,4 +33,6 @@ + "中斷連線" + "開啟應用程式" + "關閉" ++ "%1$s… (%2$s)" ++ "%1$s (%2$s)" + +diff --git a/packages/VpnDialogs/res/values-zu/strings.xml b/packages/VpnDialogs/res/values-zu/strings.xml +index 4ab1225e6fc6..6c7d0471efac 100644 +--- a/packages/VpnDialogs/res/values-zu/strings.xml ++++ b/packages/VpnDialogs/res/values-zu/strings.xml +@@ -33,4 +33,6 @@ + "Ayixhumekile kwi-inthanethi" + "Vula uhlelo lokusebenza" + "Cashisa" ++ "%1$s… ( %2$s)" ++ "%1$s ( %2$s)" + diff --git a/Patches/LineageOS-16.0/android_frameworks_base/360959-backport.patch b/Patches/LineageOS-16.0/android_frameworks_base/360959-backport.patch new file mode 100644 index 00000000..2a314156 --- /dev/null +++ b/Patches/LineageOS-16.0/android_frameworks_base/360959-backport.patch @@ -0,0 +1,39 @@ +From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 +From: Aaron Liu +Date: Tue, 28 Mar 2023 13:15:04 -0700 +Subject: [PATCH] DO NOT MERGE Dismiss keyguard when simpin auth'd and... + +security method is none. This is mostly to fix the case where we auth +sim pin in the set up wizard and it goes straight to keyguard instead of +the setup wizard activity. + +This works with the prevent bypass keyguard flag because the device +should be noe secure in this case. + +Fixes: 222446076 +Test: turn locked sim on, which opens the sim pin screen. Auth the +screen and observe that keyguard is not shown. +(cherry picked from https://googleplex-android-review.googlesource.com/q/commit:48fa9bef3451e4a358c941af5b230f99881c5cb6) +Cherry-picking this CL as a security fix + +Bug: 222446076 +(cherry picked from https://googleplex-android-review.googlesource.com/q/commit:09f004722284ef6b9790ddf9338a1708b3f0833c) +Merged-In: If4360dd6ae2e5f79b43eaf1a29687ac9cc4b6101 +Change-Id: If4360dd6ae2e5f79b43eaf1a29687ac9cc4b6101 +--- + .../src/com/android/keyguard/KeyguardSecurityContainer.java | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/packages/SystemUI/src/com/android/keyguard/KeyguardSecurityContainer.java b/packages/SystemUI/src/com/android/keyguard/KeyguardSecurityContainer.java +index 6a71cf84759c..bb205956e932 100644 +--- a/packages/SystemUI/src/com/android/keyguard/KeyguardSecurityContainer.java ++++ b/packages/SystemUI/src/com/android/keyguard/KeyguardSecurityContainer.java +@@ -351,7 +351,7 @@ public class KeyguardSecurityContainer extends FrameLayout implements KeyguardSe + case SimPuk: + // Shortcut for SIM PIN/PUK to go to directly to user's security screen or home + SecurityMode securityMode = mSecurityModel.getSecurityMode(targetUserId); +- if (securityMode == SecurityMode.None && mLockPatternUtils.isLockScreenDisabled( ++ if (securityMode == SecurityMode.None || mLockPatternUtils.isLockScreenDisabled( + KeyguardUpdateMonitor.getCurrentUser())) { + finish = true; + } else { diff --git a/Patches/LineageOS-16.0/android_frameworks_base/360962-backport.patch b/Patches/LineageOS-16.0/android_frameworks_base/360962-backport.patch new file mode 100644 index 00000000..d519547c --- /dev/null +++ b/Patches/LineageOS-16.0/android_frameworks_base/360962-backport.patch @@ -0,0 +1,99 @@ +From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?Andr=C3=A1s=20Kurucz?= +Date: Fri, 21 Apr 2023 09:45:07 +0000 +Subject: [PATCH] Truncate ShortcutInfo Id + +Creating Conversation with a ShortcutId longer than 65_535 (max unsigned short), we did not save the conversation settings into the notification_policy.xml due to a restriction in FastDataOutput. +This put us to a state where the user changing the importance or turning off the notifications for the given conversation had no effect on notification behavior. + +Fixes: 273729476 +Test: atest ShortcutManagerTest2 +Test: Create a test app which creates a Conversation with a long shortcutId. Go to the Conversation Settings and turn off Notifications. Post a new Notification to this Conversation and see if it is displayed. +(cherry picked from https://googleplex-android-review.googlesource.com/q/commit:f31df6234091b5b1de258a01dd4b2d8e5415ee2e) +Merged-In: I2617de6f9e8a7dbfd8fbeff589a7d592f00d87c5 +Change-Id: I2617de6f9e8a7dbfd8fbeff589a7d592f00d87c5 +--- + .../java/android/content/pm/ShortcutInfo.java | 20 ++++++++++++++++--- + .../server/pm/ShortcutManagerTest2.java | 10 ++++++++++ + 2 files changed, 27 insertions(+), 3 deletions(-) + +diff --git a/core/java/android/content/pm/ShortcutInfo.java b/core/java/android/content/pm/ShortcutInfo.java +index ea476b0abf33..cddad1798219 100644 +--- a/core/java/android/content/pm/ShortcutInfo.java ++++ b/core/java/android/content/pm/ShortcutInfo.java +@@ -214,6 +214,12 @@ public final class ShortcutInfo implements Parcelable { + */ + public static final int DISABLED_REASON_OTHER_RESTORE_ISSUE = 103; + ++ /** ++ * The maximum length of Shortcut ID. IDs will be truncated at this limit. ++ * @hide ++ */ ++ public static final int MAX_ID_LENGTH = 1000; ++ + /** @hide */ + @IntDef(prefix = { "DISABLED_REASON_" }, value = { + DISABLED_REASON_NOT_DISABLED, +@@ -380,8 +386,7 @@ public final class ShortcutInfo implements Parcelable { + + private ShortcutInfo(Builder b) { + mUserId = b.mContext.getUserId(); +- +- mId = Preconditions.checkStringNotEmpty(b.mId, "Shortcut ID must be provided"); ++ mId = getSafeId(Preconditions.checkStringNotEmpty(b.mId, "Shortcut ID must be provided")); + + // Note we can't do other null checks here because SM.updateShortcuts() takes partial + // information. +@@ -463,6 +468,14 @@ public final class ShortcutInfo implements Parcelable { + return ret; + } + ++ @NonNull ++ private static String getSafeId(@NonNull String id) { ++ if (id.length() > MAX_ID_LENGTH) { ++ return id.substring(0, MAX_ID_LENGTH); ++ } ++ return id; ++ } ++ + /** + * Throws if any of the mandatory fields is not set. + * +@@ -1851,7 +1864,8 @@ public final class ShortcutInfo implements Parcelable { + final ClassLoader cl = getClass().getClassLoader(); + + mUserId = source.readInt(); +- mId = source.readString(); ++ mId = getSafeId(Preconditions.checkStringNotEmpty(source.readString(), ++ "Shortcut ID must be provided")); + mPackageName = source.readString(); + mActivity = source.readParcelable(cl); + mFlags = source.readInt(); +diff --git a/services/tests/servicestests/src/com/android/server/pm/ShortcutManagerTest2.java b/services/tests/servicestests/src/com/android/server/pm/ShortcutManagerTest2.java +index fcdadaccd2ac..464f563640c1 100644 +--- a/services/tests/servicestests/src/com/android/server/pm/ShortcutManagerTest2.java ++++ b/services/tests/servicestests/src/com/android/server/pm/ShortcutManagerTest2.java +@@ -53,6 +53,7 @@ import java.io.IOException; + import java.io.PrintWriter; + import java.io.StringWriter; + import java.io.Writer; ++import java.util.Collections; + import java.util.Locale; + + /** +@@ -223,6 +224,15 @@ public class ShortcutManagerTest2 extends BaseShortcutManagerTest { + }); + } + ++ public void testShortcutIdTruncated() { ++ ShortcutInfo si = new ShortcutInfo.Builder(getTestContext(), ++ String.join("", Collections.nCopies(Short.MAX_VALUE, "s"))).build(); ++ ++ assertTrue( ++ "id must be truncated to MAX_ID_LENGTH", ++ si.getId().length() <= ShortcutInfo.MAX_ID_LENGTH); ++ } ++ + public void testShortcutInfoParcel() { + setCaller(CALLING_PACKAGE_1, USER_10); + ShortcutInfo si = parceled(new ShortcutInfo.Builder(mClientContext) diff --git a/Patches/LineageOS-16.0/android_frameworks_base/360963-backport.patch b/Patches/LineageOS-16.0/android_frameworks_base/360963-backport.patch new file mode 100644 index 00000000..c6315db0 --- /dev/null +++ b/Patches/LineageOS-16.0/android_frameworks_base/360963-backport.patch @@ -0,0 +1,128 @@ +From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 +From: Ioana Alexandru +Date: Thu, 27 Apr 2023 12:36:05 +0000 +Subject: [PATCH] Visit URIs in landscape/portrait custom remote views. + +Bug: 277740848 +Test: atest RemoteViewsTest NotificationManagerServiceTest & tested with POC from bug +(cherry picked from https://googleplex-android-review.googlesource.com/q/commit:e8acb2f660bdb03616989852f9dbbf1726f8237e) +(cherry picked from https://googleplex-android-review.googlesource.com/q/commit:43e1ae4e0d408604b9e3c18ac0e9bf87529b92a8) +Merged-In: I7d3d35df0ec38945019f71755bed8797b7af4517 +Change-Id: I7d3d35df0ec38945019f71755bed8797b7af4517 +--- + core/java/android/widget/RemoteViews.java | 6 ++ + .../src/android/widget/RemoteViewsTest.java | 65 +++++++++++++++++++ + 2 files changed, 71 insertions(+) + +diff --git a/core/java/android/widget/RemoteViews.java b/core/java/android/widget/RemoteViews.java +index 4865dab6056a..10053dddb0fb 100644 +--- a/core/java/android/widget/RemoteViews.java ++++ b/core/java/android/widget/RemoteViews.java +@@ -543,6 +543,12 @@ public class RemoteViews implements Parcelable, Filter { + mActions.get(i).visitUris(visitor); + } + } ++ if (mLandscape != null) { ++ mLandscape.visitUris(visitor); ++ } ++ if (mPortrait != null) { ++ mPortrait.visitUris(visitor); ++ } + } + + private static void visitIconUri(Icon icon, @NonNull Consumer visitor) { +diff --git a/core/tests/coretests/src/android/widget/RemoteViewsTest.java b/core/tests/coretests/src/android/widget/RemoteViewsTest.java +index 70cf097f42a3..7d2e07ecbd71 100644 +--- a/core/tests/coretests/src/android/widget/RemoteViewsTest.java ++++ b/core/tests/coretests/src/android/widget/RemoteViewsTest.java +@@ -19,6 +19,10 @@ package android.widget; + import static org.junit.Assert.assertEquals; + import static org.junit.Assert.assertSame; + import static org.junit.Assert.assertTrue; ++import static org.mockito.ArgumentMatchers.eq; ++import static org.mockito.Mockito.spy; ++import static org.mockito.Mockito.times; ++import static org.mockito.Mockito.verify; + + import android.app.PendingIntent; + import android.content.Context; +@@ -26,6 +30,8 @@ import android.content.Intent; + import android.graphics.Bitmap; + import android.graphics.drawable.BitmapDrawable; + import android.graphics.drawable.Drawable; ++import android.graphics.drawable.Icon; ++import android.net.Uri; + import android.os.AsyncTask; + import android.os.Binder; + import android.os.Parcel; +@@ -46,6 +52,7 @@ import org.junit.runner.RunWith; + import java.util.ArrayList; + import java.util.Arrays; + import java.util.concurrent.CountDownLatch; ++import java.util.function.Consumer; + + /** + * Tests for RemoteViews. +@@ -444,4 +451,62 @@ public class RemoteViewsTest { + } + return found[0]; + } ++ ++ ++ @Test ++ public void visitUris() { ++ RemoteViews views = new RemoteViews(mPackage, R.layout.remote_views_test); ++ ++ final Uri imageUri = Uri.parse("content://media/image"); ++ final Icon icon1 = Icon.createWithContentUri("content://media/icon1"); ++ final Icon icon2 = Icon.createWithContentUri("content://media/icon2"); ++ final Icon icon3 = Icon.createWithContentUri("content://media/icon3"); ++ final Icon icon4 = Icon.createWithContentUri("content://media/icon4"); ++ views.setImageViewUri(R.id.image, imageUri); ++ views.setTextViewCompoundDrawables(R.id.text, icon1, icon2, icon3, icon4); ++ ++ Consumer visitor = (Consumer) spy(Consumer.class); ++ views.visitUris(visitor); ++ verify(visitor, times(1)).accept(eq(imageUri)); ++ verify(visitor, times(1)).accept(eq(icon1.getUri())); ++ verify(visitor, times(1)).accept(eq(icon2.getUri())); ++ verify(visitor, times(1)).accept(eq(icon3.getUri())); ++ verify(visitor, times(1)).accept(eq(icon4.getUri())); ++ } ++ ++ @Test ++ public void visitUris_separateOrientation() { ++ final RemoteViews landscape = new RemoteViews(mPackage, R.layout.remote_views_test); ++ final Uri imageUriL = Uri.parse("content://landscape/image"); ++ final Icon icon1L = Icon.createWithContentUri("content://landscape/icon1"); ++ final Icon icon2L = Icon.createWithContentUri("content://landscape/icon2"); ++ final Icon icon3L = Icon.createWithContentUri("content://landscape/icon3"); ++ final Icon icon4L = Icon.createWithContentUri("content://landscape/icon4"); ++ landscape.setImageViewUri(R.id.image, imageUriL); ++ landscape.setTextViewCompoundDrawables(R.id.text, icon1L, icon2L, icon3L, icon4L); ++ ++ final RemoteViews portrait = new RemoteViews(mPackage, 33); ++ final Uri imageUriP = Uri.parse("content://portrait/image"); ++ final Icon icon1P = Icon.createWithContentUri("content://portrait/icon1"); ++ final Icon icon2P = Icon.createWithContentUri("content://portrait/icon2"); ++ final Icon icon3P = Icon.createWithContentUri("content://portrait/icon3"); ++ final Icon icon4P = Icon.createWithContentUri("content://portrait/icon4"); ++ portrait.setImageViewUri(R.id.image, imageUriP); ++ portrait.setTextViewCompoundDrawables(R.id.text, icon1P, icon2P, icon3P, icon4P); ++ ++ RemoteViews views = new RemoteViews(landscape, portrait); ++ ++ Consumer visitor = (Consumer) spy(Consumer.class); ++ views.visitUris(visitor); ++ verify(visitor, times(1)).accept(eq(imageUriL)); ++ verify(visitor, times(1)).accept(eq(icon1L.getUri())); ++ verify(visitor, times(1)).accept(eq(icon2L.getUri())); ++ verify(visitor, times(1)).accept(eq(icon3L.getUri())); ++ verify(visitor, times(1)).accept(eq(icon4L.getUri())); ++ verify(visitor, times(1)).accept(eq(imageUriP)); ++ verify(visitor, times(1)).accept(eq(icon1P.getUri())); ++ verify(visitor, times(1)).accept(eq(icon2P.getUri())); ++ verify(visitor, times(1)).accept(eq(icon3P.getUri())); ++ verify(visitor, times(1)).accept(eq(icon4P.getUri())); ++ } + } diff --git a/Patches/LineageOS-16.0/android_system_bt/360969.patch b/Patches/LineageOS-16.0/android_system_bt/360969.patch new file mode 100644 index 00000000..6dd75430 --- /dev/null +++ b/Patches/LineageOS-16.0/android_system_bt/360969.patch @@ -0,0 +1,45 @@ +From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 +From: tyiu +Date: Tue, 28 Mar 2023 18:40:51 +0000 +Subject: [PATCH] Fix gatt_end_operation buffer overflow + +Added boundary check for gatt_end_operation to prevent writing out of +boundary. + +Since response of the GATT server is handled in +gatt_client_handle_server_rsp() and gatt_process_read_rsp(), the maximum +lenth that can be passed into the handlers is bounded by +GATT_MAX_MTU_SIZE, which is set to 517, which is greater than +GATT_MAX_ATTR_LEN which is set to 512. The fact that there is no spec +that gaurentees MTU response to be less than or equal to 512 bytes can +cause a buffer overflow when performing memcpy without length check. + +Bug: 261068592 +Test: No test since not affecting behavior +Tag: #security +Ignore-AOSP-First: security +(cherry picked from https://googleplex-android-review.googlesource.com/q/commit:dd7298e982e4bbf0138a490562679c9a4a755200) +Merged-In: I49e2797cd9300ee4cd69f2c7fa5f0073db78b873 +Change-Id: I49e2797cd9300ee4cd69f2c7fa5f0073db78b873 +--- + stack/gatt/gatt_utils.cc | 7 +++++++ + 1 file changed, 7 insertions(+) + +diff --git a/stack/gatt/gatt_utils.cc b/stack/gatt/gatt_utils.cc +index 9e8d3b930..52891efc4 100644 +--- a/stack/gatt/gatt_utils.cc ++++ b/stack/gatt/gatt_utils.cc +@@ -1193,6 +1193,13 @@ void gatt_end_operation(tGATT_CLCB* p_clcb, tGATT_STATUS status, void* p_data) { + cb_data.att_value.handle = p_clcb->s_handle; + cb_data.att_value.len = p_clcb->counter; + ++ if (cb_data.att_value.len > GATT_MAX_ATTR_LEN) { ++ LOG(WARNING) << __func__ ++ << StringPrintf(" Large cb_data.att_value, size=%d", ++ cb_data.att_value.len); ++ cb_data.att_value.len = GATT_MAX_ATTR_LEN; ++ } ++ + if (p_data && p_clcb->counter) + memcpy(cb_data.att_value.value, p_data, cb_data.att_value.len); + } diff --git a/Patches/LineageOS-16.0/android_system_nfc/360972.patch b/Patches/LineageOS-16.0/android_system_nfc/360972.patch new file mode 100644 index 00000000..b0624a9b --- /dev/null +++ b/Patches/LineageOS-16.0/android_system_nfc/360972.patch @@ -0,0 +1,34 @@ +From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 +From: Alisher Alikhodjaev +Date: Tue, 2 May 2023 14:20:57 -0700 +Subject: [PATCH] OOBW in rw_i93_send_to_upper() + +Bug: 271849189 +Test: tag r/w +(cherry picked from https://googleplex-android-review.googlesource.com/q/commit:dc9d09e1698725712628d394bf9be4c9003579e8) +Merged-In: I1d55954e56a3f995f8dd48bf484fe9fce02b2ed1 +Change-Id: I1d55954e56a3f995f8dd48bf484fe9fce02b2ed1 +--- + src/nfc/tags/rw_i93.cc | 9 +++++++++ + 1 file changed, 9 insertions(+) + +diff --git a/src/nfc/tags/rw_i93.cc b/src/nfc/tags/rw_i93.cc +index acf28a6..232a4dd 100644 +--- a/src/nfc/tags/rw_i93.cc ++++ b/src/nfc/tags/rw_i93.cc +@@ -507,6 +507,15 @@ void rw_i93_send_to_upper(NFC_HDR* p_resp) { + case I93_CMD_GET_MULTI_BLK_SEC: + case I93_CMD_EXT_GET_MULTI_BLK_SEC: + ++ if (UINT16_MAX - length < NFC_HDR_SIZE) { ++ rw_data.i93_cmd_cmpl.status = NFC_STATUS_FAILED; ++ rw_data.i93_cmd_cmpl.command = p_i93->sent_cmd; ++ rw_cb.tcb.i93.sent_cmd = 0; ++ ++ event = RW_I93_CMD_CMPL_EVT; ++ break; ++ } ++ + /* forward tag data or security status */ + p_buff = (NFC_HDR*)GKI_getbuf((uint16_t)(length + NFC_HDR_SIZE)); + diff --git a/Patches/LineageOS-16.0/android_vendor_nxp_opensource_commonsys_external_libnfc-nci/360974-backport.patch b/Patches/LineageOS-16.0/android_vendor_nxp_opensource_commonsys_external_libnfc-nci/360974-backport.patch new file mode 100644 index 00000000..fce1d56c --- /dev/null +++ b/Patches/LineageOS-16.0/android_vendor_nxp_opensource_commonsys_external_libnfc-nci/360974-backport.patch @@ -0,0 +1,36 @@ +From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 +From: Alisher Alikhodjaev +Date: Tue, 2 May 2023 14:20:57 -0700 +Subject: [PATCH] OOBW in rw_i93_send_to_upper() + +Bug: 271849189 +Test: tag r/w +(cherry picked from https://googleplex-android-review.googlesource.com/q/commit:dc9d09e1698725712628d394bf9be4c9003579e8) +Merged-In: I1d55954e56a3f995f8dd48bf484fe9fce02b2ed1 +Change-Id: I1d55954e56a3f995f8dd48bf484fe9fce02b2ed1 + +Change-Id: Ia10491e388a495a164462c73ced7ea1965808860 +--- + src/nfc/tags/rw_i93.cc | 9 +++++++++ + 1 file changed, 9 insertions(+) + +diff --git a/src/nfc/tags/rw_i93.cc b/src/nfc/tags/rw_i93.cc +index 62c5b54c..13ccaf0e 100755 +--- a/src/nfc/tags/rw_i93.cc ++++ b/src/nfc/tags/rw_i93.cc +@@ -472,6 +472,15 @@ void rw_i93_send_to_upper(NFC_HDR* p_resp) { + case I93_CMD_GET_MULTI_BLK_SEC: + case I93_CMD_EXT_GET_MULTI_BLK_SEC: + ++ if (UINT16_MAX - length < NFC_HDR_SIZE) { ++ rw_data.i93_cmd_cmpl.status = NFC_STATUS_FAILED; ++ rw_data.i93_cmd_cmpl.command = p_i93->sent_cmd; ++ rw_cb.tcb.i93.sent_cmd = 0; ++ ++ event = RW_I93_CMD_CMPL_EVT; ++ break; ++ } ++ + /* forward tag data or security status */ + p_buff = (NFC_HDR*)GKI_getbuf((uint16_t)(length + NFC_HDR_SIZE)); + diff --git a/Scripts/LineageOS-16.0/Patch.sh b/Scripts/LineageOS-16.0/Patch.sh index 16742223..d9080cc2 100644 --- a/Scripts/LineageOS-16.0/Patch.sh +++ b/Scripts/LineageOS-16.0/Patch.sh @@ -97,7 +97,7 @@ applyPatch "$DOS_PATCHES/android_build/0002-Enable_fwrapv.patch"; #Use -fwrapv a sed -i '74i$(my_res_package): PRIVATE_AAPT_FLAGS += --auto-add-overlay' core/aapt2.mk; #Enable auto-add-overlay for packages, this allows the vendor overlay to easily work across all branches. sed -i 's/PLATFORM_MIN_SUPPORTED_TARGET_SDK_VERSION := 17/PLATFORM_MIN_SUPPORTED_TARGET_SDK_VERSION := 28/' core/version_defaults.mk; #Set the minimum supported target SDK to Pie (GrapheneOS) awk -i inplace '!/Email/' target/product/core.mk; #Remove Email -sed -i 's/2022-01-05/2023-06-05/' core/version_defaults.mk; #Bump Security String #P_asb_2023-06 #XXX +sed -i 's/2022-01-05/2023-07-05/' core/version_defaults.mk; #Bump Security String #P_asb_2023-07 #XXX fi; if enterAndClear "build/soong"; then @@ -132,6 +132,10 @@ git fetch https://github.com/LineageOS/android_external_expat refs/changes/56/33 git fetch https://github.com/LineageOS/android_external_expat refs/changes/28/349328/1 && git cherry-pick FETCH_HEAD; #P_asb_2023-02 fi; +if enterAndClear "external/freetype"; then +applyPatch "$DOS_PATCHES/android_external_freetype/360951.patch"; #R_asb_2023-07 Cherry-pick two upstream changes +fi; + if [ "$DOS_GRAPHENE_MALLOC" = true ]; then if enterAndClear "external/hardened_malloc"; then applyPatch "$DOS_PATCHES_COMMON/android_external_hardened_malloc/0001-Broken_Audio.patch"; #DeviceDescriptor sorting wrongly relies on malloc addresses (GrapheneOS) @@ -151,6 +155,12 @@ if [ "$DOS_GRAPHENE_MALLOC" = true ]; then applyPatch "$DOS_PATCHES/android_fram fi; if enterAndClear "frameworks/base"; then +applyPatch "$DOS_PATCHES/android_frameworks_base/360953-backport.patch"; #R_asb_2023-07 Sanitize VPN label to prevent HTML injection +applyPatch "$DOS_PATCHES/android_frameworks_base/360954.patch"; #R_asb_2023-07 Limit the number of supported v1 and v2 signers +applyPatch "$DOS_PATCHES/android_frameworks_base/360955-backport.patch"; #R_asb_2023-07 Import translations. +applyPatch "$DOS_PATCHES/android_frameworks_base/360959-backport.patch"; #R_asb_2023-07 Dismiss keyguard when simpin auth'd and security method is none. +applyPatch "$DOS_PATCHES/android_frameworks_base/360962-backport.patch"; #R_asb_2023-07 Truncate ShortcutInfo Id +applyPatch "$DOS_PATCHES/android_frameworks_base/360963-backport.patch"; #R_asb_2023-07 Visit URIs in landscape/portrait custom remote views. applyPatch "$DOS_PATCHES/android_frameworks_base/0007-Always_Restict_Serial.patch"; #Always restrict access to Build.SERIAL (GrapheneOS) applyPatch "$DOS_PATCHES/android_frameworks_base/0008-Browser_No_Location.patch"; #Don't grant location permission to system browsers (GrapheneOS) applyPatch "$DOS_PATCHES/android_frameworks_base/0009-SystemUI_No_Permission_Review.patch"; #Allow SystemUI to directly manage Bluetooth/WiFi (GrapheneOS) @@ -335,6 +345,7 @@ applyPatch "$DOS_PATCHES/android_packages_services_Telephony/0002-More_Preferred fi; if enterAndClear "system/bt"; then +applyPatch "$DOS_PATCHES/android_system_bt/360969.patch"; #R_asb_2023-07 Fix gatt_end_operation buffer overflow #applyPatch "$DOS_PATCHES_COMMON/android_system_bt/0001-alloc_size.patch"; #Add alloc_size attributes to the allocator (GrapheneOS) fi; @@ -356,6 +367,14 @@ if enterAndClear "system/extras"; then applyPatch "$DOS_PATCHES/android_system_extras/0001-ext4_pad_filenames.patch"; #FBE: pad filenames more (GrapheneOS) fi; +if enterAndClear "system/nfc"; then +applyPatch "$DOS_PATCHES/android_system_nfc/360972.patch"; #R_asb_2023-07 OOBW in rw_i93_send_to_upper() +fi; + +if enterAndClear "vendor/nxp/opensource/commonsys/external/libnfc-nci"; then +applyPatch "$DOS_PATCHES/android_vendor_nxp_opensource_commonsys_external_libnfc-nci/360974-backport.patch"; #R_asb_2023-07 OOBW in rw_i93_send_to_upper() +fi; + if enterAndClear "system/sepolicy"; then applyPatch "$DOS_PATCHES/android_system_sepolicy/0002-protected_files.patch"; #label protected_{fifos,regular} as proc_security (GrapheneOS) #applyPatch "$DOS_PATCHES/android_system_sepolicy/0003-ptrace_scope-1.patch"; #Allow init to control kernel.yama.ptrace_scope (GrapheneOS) diff --git a/Scripts/LineageOS-17.1/Patch.sh b/Scripts/LineageOS-17.1/Patch.sh index db84cd8d..b73f8c2a 100644 --- a/Scripts/LineageOS-17.1/Patch.sh +++ b/Scripts/LineageOS-17.1/Patch.sh @@ -97,7 +97,7 @@ sed -i '75i$(my_res_package): PRIVATE_AAPT_FLAGS += --auto-add-overlay' core/aap awk -i inplace '!/updatable_apex.mk/' target/product/mainline_system.mk; #Disable APEX sed -i 's/PLATFORM_MIN_SUPPORTED_TARGET_SDK_VERSION := 23/PLATFORM_MIN_SUPPORTED_TARGET_SDK_VERSION := 28/' core/version_defaults.mk; #Set the minimum supported target SDK to Pie (GrapheneOS) #sed -i 's/PRODUCT_OTA_ENFORCE_VINTF_KERNEL_REQUIREMENTS := true/PRODUCT_OTA_ENFORCE_VINTF_KERNEL_REQUIREMENTS := false/' core/product_config.mk; #broken by hardenDefconfig -sed -i 's/2023-06-05/2023-07-05/' core/version_defaults.mk; #Bump Security String #R_asb_2023-07 #XXX +sed -i 's/2023-06-05/2023-07-05/' core/version_defaults.mk; #Bump Security String #Q_asb_2023-07 #XXX fi; if enterAndClear "build/soong"; then