17.1 October ASB work

Signed-off-by: Tad <tad@spotco.us>
This commit is contained in:
Tad 2023-10-09 17:04:49 -04:00
parent d90bcb8ad3
commit 27066c202f
No known key found for this signature in database
GPG Key ID: B286E9F57A07424B
27 changed files with 1026 additions and 140 deletions

View File

@ -0,0 +1,123 @@
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
From: Nick Wellnhofer <wellnhofer@aevum.de>
Date: Fri, 17 Feb 2023 15:53:07 +0100
Subject: [PATCH] malloc-fail: Fix OOB read after xmlRegGetCounter
Found with libFuzzer, see #344.
(cherry picked from commit 1743c4c3fc58cf38ecce68db9de51d0f3651e033)
I also copied the error label from
e64653c0e7975594e27d7de2ed4be062c1e4ad03 to fix the build failure.
Bug: http://b/274231102
Test: TreeHugger
(cherry picked from https://googleplex-android-review.googlesource.com/q/commit:381160fc2a293d50a627c9e35bb34485bf97b6e7)
Merged-In: I3bad3e03092e17a761cb6e299aff848ebd35b6f4
Change-Id: I3bad3e03092e17a761cb6e299aff848ebd35b6f4
---
xmlregexp.c | 28 ++++++++++++++++++++++++++++
1 file changed, 28 insertions(+)
diff --git a/xmlregexp.c b/xmlregexp.c
index d255fbf0..6234a879 100644
--- a/xmlregexp.c
+++ b/xmlregexp.c
@@ -1641,6 +1641,8 @@ xmlFAGenerateTransitions(xmlRegParserCtxtPtr ctxt, xmlRegStatePtr from,
return(-1);
inter = ctxt->state;
counter = xmlRegGetCounter(ctxt);
+ if (counter < 0)
+ return(-1);
ctxt->counters[counter].min = atom->min - 1;
ctxt->counters[counter].max = atom->max - 1;
/* count the number of times we see it again */
@@ -1659,6 +1661,8 @@ xmlFAGenerateTransitions(xmlRegParserCtxtPtr ctxt, xmlRegStatePtr from,
* epsilon transition.
*/
counter = xmlRegGetCounter(ctxt);
+ if (counter < 0)
+ return(-1);
ctxt->counters[counter].min = atom->min - 1;
ctxt->counters[counter].max = atom->max - 1;
/* count the number of times we see it again */
@@ -5924,6 +5928,8 @@ xmlAutomataNewCountTrans2(xmlAutomataPtr am, xmlAutomataStatePtr from,
* associate a counter to the transition.
*/
counter = xmlRegGetCounter(am);
+ if (counter < 0)
+ goto error;
am->counters[counter].min = min;
am->counters[counter].max = max;
@@ -5943,6 +5949,10 @@ xmlAutomataNewCountTrans2(xmlAutomataPtr am, xmlAutomataStatePtr from,
if (min == 0)
xmlFAGenerateEpsilonTransition(am, from, to);
return(to);
+
+error:
+ xmlRegFreeAtom(atom);
+ return(NULL);
}
/**
@@ -5990,6 +6000,8 @@ xmlAutomataNewCountTrans(xmlAutomataPtr am, xmlAutomataStatePtr from,
* associate a counter to the transition.
*/
counter = xmlRegGetCounter(am);
+ if (counter < 0)
+ goto error;
am->counters[counter].min = min;
am->counters[counter].max = max;
@@ -6009,6 +6021,10 @@ xmlAutomataNewCountTrans(xmlAutomataPtr am, xmlAutomataStatePtr from,
if (min == 0)
xmlFAGenerateEpsilonTransition(am, from, to);
return(to);
+
+error:
+ xmlRegFreeAtom(atom);
+ return(NULL);
}
/**
@@ -6076,6 +6092,8 @@ xmlAutomataNewOnceTrans2(xmlAutomataPtr am, xmlAutomataStatePtr from,
* associate a counter to the transition.
*/
counter = xmlRegGetCounter(am);
+ if (counter < 0)
+ goto error;
am->counters[counter].min = 1;
am->counters[counter].max = 1;
@@ -6088,6 +6106,10 @@ xmlAutomataNewOnceTrans2(xmlAutomataPtr am, xmlAutomataStatePtr from,
xmlRegAtomPush(am, atom);
am->state = to;
return(to);
+
+error:
+ xmlRegFreeAtom(atom);
+ return(NULL);
}
@@ -6135,6 +6157,8 @@ xmlAutomataNewOnceTrans(xmlAutomataPtr am, xmlAutomataStatePtr from,
* associate a counter to the transition.
*/
counter = xmlRegGetCounter(am);
+ if (counter < 0)
+ goto error;
am->counters[counter].min = 1;
am->counters[counter].max = 1;
@@ -6147,6 +6171,10 @@ xmlAutomataNewOnceTrans(xmlAutomataPtr am, xmlAutomataStatePtr from,
xmlRegAtomPush(am, atom);
am->state = to;
return(to);
+
+error:
+ xmlRegFreeAtom(atom);
+ return(NULL);
}
/**

View File

@ -10,7 +10,7 @@ requiring the READ_PHONE_STATE permission.
1 file changed, 1 insertion(+), 6 deletions(-)
diff --git a/services/core/java/com/android/server/am/ActivityManagerService.java b/services/core/java/com/android/server/am/ActivityManagerService.java
index 4f3dd3449fae..d0fef3427b65 100644
index ec8841debb7a..c9d3d44beb02 100644
--- a/services/core/java/com/android/server/am/ActivityManagerService.java
+++ b/services/core/java/com/android/server/am/ActivityManagerService.java
@@ -5010,12 +5010,7 @@ public class ActivityManagerService extends IActivityManager.Stub

View File

@ -0,0 +1,60 @@
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
From: Jean-Michel Trivi <jmtrivi@google.com>
Date: Wed, 7 Dec 2022 04:36:46 +0000
Subject: [PATCH] RingtoneManager: verify default ringtone is audio
When a ringtone picker tries to set a ringtone through
RingtoneManager.setActualDefaultRingtoneUri (also
called by com.android.settings.DefaultRingtonePreference),
verify the mimeType can be obtained (not found when caller
doesn't have access to it) and it is an audio resource.
Bug: 205837340
Test: atest android.media.audio.cts.RingtoneManagerTest
(cherry picked from commit 38618f9fb16d3b5617e2289354d47abe5af17dad)
(cherry picked from https://googleplex-android-review.googlesource.com/q/commit:377144b64325dadad102f5233ecb50a4446b205b)
Merged-In: I3f2c487ded405c0c1a83ef0a2fe99cff7cc9328e
Change-Id: I3f2c487ded405c0c1a83ef0a2fe99cff7cc9328e
---
media/java/android/media/RingtoneManager.java | 19 +++++++++++++++++--
1 file changed, 17 insertions(+), 2 deletions(-)
diff --git a/media/java/android/media/RingtoneManager.java b/media/java/android/media/RingtoneManager.java
index 05b96ad016a8..ad4751165d30 100644
--- a/media/java/android/media/RingtoneManager.java
+++ b/media/java/android/media/RingtoneManager.java
@@ -792,10 +792,10 @@ public class RingtoneManager {
return ringtoneUri;
}
-
+
/**
* Sets the {@link Uri} of the default sound for a given sound type.
- *
+ *
* @param context A context used for querying.
* @param type The type whose default sound should be set. One of
* {@link #TYPE_RINGTONE}, {@link #TYPE_NOTIFICATION}, or
@@ -816,6 +816,21 @@ public class RingtoneManager {
if(!isInternalRingtoneUri(ringtoneUri)) {
ringtoneUri = ContentProvider.maybeAddUserId(ringtoneUri, context.getUserId());
}
+
+ if (ringtoneUri != null) {
+ final String mimeType = resolver.getType(ringtoneUri);
+ if (mimeType == null) {
+ Log.e(TAG, "setActualDefaultRingtoneUri for URI:" + ringtoneUri
+ + " ignored: failure to find mimeType (no access from this context?)");
+ return;
+ }
+ if (!(mimeType.startsWith("audio/") || mimeType.equals("application/ogg"))) {
+ Log.e(TAG, "setActualDefaultRingtoneUri for URI:" + ringtoneUri
+ + " ignored: associated mimeType:" + mimeType + " is not an audio type");
+ return;
+ }
+ }
+
Settings.System.putStringForUser(resolver, setting,
ringtoneUri != null ? ringtoneUri.toString() : null, context.getUserId());

View File

@ -0,0 +1,52 @@
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
From: Josep del Rio <joseprio@google.com>
Date: Mon, 26 Jun 2023 11:16:37 +0000
Subject: [PATCH] Do not share key mappings with JNI object
The key mapping information between the native key mappings and
the KeyCharacterMap object available in Java is currently shared,
which means that a read can be attempted while it's being modified.
Because the code changed between R and S, this CL fixes it just
for R; the patch for versions S+ is ag/23785419
Bug: 274058082
Test: Presubmit
(cherry picked from https://googleplex-android-review.googlesource.com/q/commit:4b3c4620166071561ec44961fb08a56676b4fd6c)
Merged-In: I3be94534dcda365da473f82347ae2e3f57bb1b42
Change-Id: I3be94534dcda365da473f82347ae2e3f57bb1b42
---
core/jni/android_view_InputDevice.cpp | 12 ++++++++++--
1 file changed, 10 insertions(+), 2 deletions(-)
diff --git a/core/jni/android_view_InputDevice.cpp b/core/jni/android_view_InputDevice.cpp
index 9f4e3e516ada..81ada6ad535c 100644
--- a/core/jni/android_view_InputDevice.cpp
+++ b/core/jni/android_view_InputDevice.cpp
@@ -14,6 +14,7 @@
* limitations under the License.
*/
+#include <binder/Parcel.h>
#include <input/Input.h>
#include <android_runtime/AndroidRuntime.h>
@@ -48,9 +49,16 @@ jobject android_view_InputDevice_create(JNIEnv* env, const InputDeviceInfo& devi
return NULL;
}
+ sp<KeyCharacterMap> map = deviceInfo.getKeyCharacterMap();
+ if (map != nullptr) {
+ Parcel parcel;
+ map->writeToParcel(&parcel);
+ map = map->readFromParcel(&parcel);
+ }
+
ScopedLocalRef<jobject> kcmObj(env,
- android_view_KeyCharacterMap_create(env, deviceInfo.getId(),
- deviceInfo.getKeyCharacterMap()));
+ android_view_KeyCharacterMap_create(env, deviceInfo.getId(),
+ map));
if (!kcmObj.get()) {
return NULL;
}

View File

@ -0,0 +1,152 @@
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
From: Tim Yu <yunicorn@google.com>
Date: Tue, 20 Jun 2023 21:24:36 +0000
Subject: [PATCH] Verify URI Permissions in Autofill RemoteViews
Check permissions of URI inside of FillResponse's RemoteViews. If the
current user does not have the required permissions to view the URI, the
RemoteView is dropped from displaying.
This fixes a security spill in which a user can view content of another
user through a malicious Autofill provider.
Bug: 283137865
Fixes: b/283264674 b/281666022 b/281665050 b/281848557 b/281533566
b/281534749 b/283101289
Test: Verified by POC app attached in bugs
Test: atest CtsAutoFillServiceTestCases (added new tests)
(cherry picked from https://googleplex-android-review.googlesource.com/q/commit:26beceb9a252a50374d056b162fa7e8ea55051b3)
Merged-In: I6f4d2a35e89bbed7bd9e07bf5cd3e2d68b20af9a
Change-Id: I6f4d2a35e89bbed7bd9e07bf5cd3e2d68b20af9a
---
.../com/android/server/autofill/Helper.java | 45 +++++++++++++++++++
.../android/server/autofill/ui/FillUi.java | 11 +++--
.../android/server/autofill/ui/SaveUi.java | 2 +-
3 files changed, 54 insertions(+), 4 deletions(-)
diff --git a/services/autofill/java/com/android/server/autofill/Helper.java b/services/autofill/java/com/android/server/autofill/Helper.java
index 80b0375a229d..8954a0c39091 100644
--- a/services/autofill/java/com/android/server/autofill/Helper.java
+++ b/services/autofill/java/com/android/server/autofill/Helper.java
@@ -18,6 +18,8 @@ package com.android.server.autofill;
import android.annotation.NonNull;
import android.annotation.Nullable;
+import android.annotation.UserIdInt;
+import android.app.ActivityManager;
import android.app.assist.AssistStructure;
import android.app.assist.AssistStructure.ViewNode;
import android.app.assist.AssistStructure.WindowNode;
@@ -31,13 +33,18 @@ import android.view.View;
import android.view.WindowManager;
import android.view.autofill.AutofillId;
import android.view.autofill.AutofillValue;
+import android.widget.RemoteViews;
import com.android.internal.logging.nano.MetricsProto.MetricsEvent;
import com.android.internal.util.ArrayUtils;
import java.io.PrintWriter;
+
+import java.util.Arrays;
import java.util.ArrayDeque;
import java.util.ArrayList;
+import java.util.concurrent.atomic.AtomicBoolean;
+
public final class Helper {
@@ -71,6 +78,44 @@ public final class Helper {
throw new UnsupportedOperationException("contains static members only");
}
+ private static boolean checkRemoteViewUriPermissions(
+ @UserIdInt int userId, @NonNull RemoteViews rView) {
+ final AtomicBoolean permissionsOk = new AtomicBoolean(true);
+
+ rView.visitUris(uri -> {
+ int uriOwnerId = android.content.ContentProvider.getUserIdFromUri(uri);
+ boolean allowed = uriOwnerId == userId;
+ permissionsOk.set(allowed && permissionsOk.get());
+ });
+
+ return permissionsOk.get();
+ }
+
+ /**
+ * Checks the URI permissions of the remote view,
+ * to see if the current userId is able to access it.
+ *
+ * Returns the RemoteView that is passed if user is able, null otherwise.
+ *
+ * TODO: instead of returning a null remoteview when
+ * the current userId cannot access an URI,
+ * return a new RemoteView with the URI removed.
+ */
+ public static @Nullable RemoteViews sanitizeRemoteView(RemoteViews rView) {
+ if (rView == null) return null;
+
+ int userId = ActivityManager.getCurrentUser();
+
+ boolean ok = checkRemoteViewUriPermissions(userId, rView);
+ if (!ok) {
+ Slog.w(TAG,
+ "sanitizeRemoteView() user: " + userId
+ + " tried accessing resource that does not belong to them");
+ }
+ return (ok ? rView : null);
+ }
+
+
@Nullable
static AutofillId[] toArray(@Nullable ArraySet<AutofillId> set) {
if (set == null) return null;
diff --git a/services/autofill/java/com/android/server/autofill/ui/FillUi.java b/services/autofill/java/com/android/server/autofill/ui/FillUi.java
index dbd4d8c168ba..e728a6b91e11 100644
--- a/services/autofill/java/com/android/server/autofill/ui/FillUi.java
+++ b/services/autofill/java/com/android/server/autofill/ui/FillUi.java
@@ -140,8 +140,9 @@ final class FillUi {
final LayoutInflater inflater = LayoutInflater.from(mContext);
- final RemoteViews headerPresentation = response.getHeader();
- final RemoteViews footerPresentation = response.getFooter();
+ final RemoteViews headerPresentation = Helper.sanitizeRemoteView(response.getHeader());
+ final RemoteViews footerPresentation = Helper.sanitizeRemoteView(response.getFooter());
+
final ViewGroup decor;
if (mFullScreen) {
decor = (ViewGroup) inflater.inflate(R.layout.autofill_dataset_picker_fullscreen, null);
@@ -219,6 +220,9 @@ final class FillUi {
ViewGroup container = decor.findViewById(R.id.autofill_dataset_picker);
final View content;
try {
+ if (Helper.sanitizeRemoteView(response.getPresentation()) == null) {
+ throw new RuntimeException("Permission error accessing RemoteView");
+ }
content = response.getPresentation().applyWithTheme(
mContext, decor, interceptionHandler, mThemeId);
container.addView(content);
@@ -295,7 +299,8 @@ final class FillUi {
final Dataset dataset = response.getDatasets().get(i);
final int index = dataset.getFieldIds().indexOf(focusedViewId);
if (index >= 0) {
- final RemoteViews presentation = dataset.getFieldPresentation(index);
+ final RemoteViews presentation = Helper.sanitizeRemoteView(
+ dataset.getFieldPresentation(index));
if (presentation == null) {
Slog.w(TAG, "not displaying UI on field " + focusedViewId + " because "
+ "service didn't provide a presentation for it on " + dataset);
diff --git a/services/autofill/java/com/android/server/autofill/ui/SaveUi.java b/services/autofill/java/com/android/server/autofill/ui/SaveUi.java
index 73f5cb8326ea..6ae9a8b55c1e 100644
--- a/services/autofill/java/com/android/server/autofill/ui/SaveUi.java
+++ b/services/autofill/java/com/android/server/autofill/ui/SaveUi.java
@@ -288,7 +288,7 @@ final class SaveUi {
final int type = info.getType();
writeLog(MetricsEvent.AUTOFILL_SAVE_CUSTOM_DESCRIPTION, type);
- final RemoteViews template = customDescription.getPresentation();
+ final RemoteViews template = Helper.sanitizeRemoteView(customDescription.getPresentation());
if (template == null) {
Slog.w(TAG, "No remote view on custom description");
return false;

View File

@ -0,0 +1,29 @@
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
From: Josep del Rio <joseprio@google.com>
Date: Wed, 12 Jul 2023 16:32:05 +0000
Subject: [PATCH] Fix KCM key mapping cloning
ag/23792288 tried to fix a security issue by cloning the key
mappings, but unfortunately the parcel was not being rewinded.
Bug: 274058082
Test: Confirmed change works in newer Android versions
(cherry picked from https://googleplex-android-review.googlesource.com/q/commit:aaaba6cf190d976efdc5db6c78997dbdc9214c15)
Merged-In: I6f75b9202e20d82ebf81a35a2916e653ee1b8372
Change-Id: I6f75b9202e20d82ebf81a35a2916e653ee1b8372
---
core/jni/android_view_InputDevice.cpp | 1 +
1 file changed, 1 insertion(+)
diff --git a/core/jni/android_view_InputDevice.cpp b/core/jni/android_view_InputDevice.cpp
index 81ada6ad535c..87102d3359a7 100644
--- a/core/jni/android_view_InputDevice.cpp
+++ b/core/jni/android_view_InputDevice.cpp
@@ -53,6 +53,7 @@ jobject android_view_InputDevice_create(JNIEnv* env, const InputDeviceInfo& devi
if (map != nullptr) {
Parcel parcel;
map->writeToParcel(&parcel);
+ parcel.setDataPosition(0);
map = map->readFromParcel(&parcel);
}

View File

@ -0,0 +1,49 @@
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
From: Hongwei Wang <hwwang@google.com>
Date: Wed, 24 May 2023 19:35:44 -0700
Subject: [PATCH] Disallow loading icon from content URI to PipMenu
Bug: 278246904
Test: manually, with the PoC app attached to the bug
(cherry picked from https://googleplex-android-review.googlesource.com/q/commit:5f5a87d8a0dc9190327ba0e6113d5b80ee96abae)
Merged-In: Iecfc1fb962de611cbe3c51a44ba4fded53925a7d
Change-Id: Iecfc1fb962de611cbe3c51a44ba4fded53925a7d
---
.../systemui/pip/phone/PipMenuActivity.java | 17 ++++++++++++-----
1 file changed, 12 insertions(+), 5 deletions(-)
diff --git a/packages/SystemUI/src/com/android/systemui/pip/phone/PipMenuActivity.java b/packages/SystemUI/src/com/android/systemui/pip/phone/PipMenuActivity.java
index ec6d7ffaedb0..08658694c5b8 100644
--- a/packages/SystemUI/src/com/android/systemui/pip/phone/PipMenuActivity.java
+++ b/packages/SystemUI/src/com/android/systemui/pip/phone/PipMenuActivity.java
@@ -51,6 +51,7 @@ import android.graphics.Color;
import android.graphics.Rect;
import android.graphics.drawable.ColorDrawable;
import android.graphics.drawable.Drawable;
+import android.graphics.drawable.Icon;
import android.net.Uri;
import android.os.Bundle;
import android.os.Handler;
@@ -457,11 +458,17 @@ public class PipMenuActivity extends Activity {
final RemoteAction action = mActions.get(i);
final ImageView actionView = (ImageView) mActionsGroup.getChildAt(i);
- // TODO: Check if the action drawable has changed before we reload it
- action.getIcon().loadDrawableAsync(this, d -> {
- d.setTint(Color.WHITE);
- actionView.setImageDrawable(d);
- }, mHandler);
+ final int iconType = action.getIcon().getType();
+ if (iconType == Icon.TYPE_URI /* || iconType == Icon.TYPE_URI_ADAPTIVE_BITMAP*/) {
+ // Disallow loading icon from content URI
+ actionView.setImageDrawable(null);
+ } else {
+ // TODO: Check if the action drawable has changed before we reload it
+ action.getIcon().loadDrawableAsync(this, d -> {
+ d.setTint(Color.WHITE);
+ actionView.setImageDrawable(d);
+ }, mHandler);
+ }
actionView.setContentDescription(action.getContentDescription());
if (action.isEnabled()) {
actionView.setOnClickListener(v -> {

View File

@ -0,0 +1,59 @@
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
From: Kunal Malhotra <malhk@google.com>
Date: Fri, 2 Jun 2023 23:32:02 +0000
Subject: [PATCH] Fixing DatabaseUtils to detect malformed UTF-16 strings
Test: tested with POC in bug, also using atest
Bug: 224771621
(cherry picked from https://googleplex-android-review.googlesource.com/q/commit:fb4a72e3943d166088407e61aa4439ac349f3f12)
Merged-In: Ide65205b83063801971c5778af3154bcf3f0e530
Change-Id: Ide65205b83063801971c5778af3154bcf3f0e530
---
core/java/android/database/DatabaseUtils.java | 32 +++++++++++++------
1 file changed, 23 insertions(+), 9 deletions(-)
diff --git a/core/java/android/database/DatabaseUtils.java b/core/java/android/database/DatabaseUtils.java
index 171fc8270d37..648b50877b61 100644
--- a/core/java/android/database/DatabaseUtils.java
+++ b/core/java/android/database/DatabaseUtils.java
@@ -463,17 +463,31 @@ public class DatabaseUtils {
*/
public static void appendEscapedSQLString(StringBuilder sb, String sqlString) {
sb.append('\'');
- if (sqlString.indexOf('\'') != -1) {
- int length = sqlString.length();
- for (int i = 0; i < length; i++) {
- char c = sqlString.charAt(i);
- if (c == '\'') {
- sb.append('\'');
+ int length = sqlString.length();
+ for (int i = 0; i < length; i++) {
+ char c = sqlString.charAt(i);
+ if (Character.isHighSurrogate(c)) {
+ if (i == length - 1) {
+ continue;
+ }
+ if (Character.isLowSurrogate(sqlString.charAt(i + 1))) {
+ // add them both
+ sb.append(c);
+ sb.append(sqlString.charAt(i + 1));
+ continue;
+ } else {
+ // this is a lone surrogate, skip it
+ continue;
}
- sb.append(c);
}
- } else
- sb.append(sqlString);
+ if (Character.isLowSurrogate(c)) {
+ continue;
+ }
+ if (c == '\'') {
+ sb.append('\'');
+ }
+ sb.append(c);
+ }
sb.append('\'');
}

View File

@ -0,0 +1,136 @@
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
From: Eric Biggers <ebiggers@google.com>
Date: Fri, 28 Jul 2023 22:03:03 +0000
Subject: [PATCH] RESTRICT AUTOMERGE: SettingsProvider: exclude secure_frp_mode
from resets
When RescueParty detects that a system process is crashing frequently,
it tries to recover in various ways, such as by resetting all settings.
Unfortunately, this included resetting the secure_frp_mode setting,
which is the means by which the system keeps track of whether the
Factory Reset Protection (FRP) challenge has been passed yet. With this
setting reset, some FRP restrictions went away and it became possible to
bypass FRP by setting a new lockscreen credential.
Fix this by excluding secure_frp_mode from resets.
Note: currently this bug isn't reproducible on 'main' due to ag/23727749
disabling much of RescueParty, but that is a temporary change.
Bug: 253043065
Test: With ag/23727749 reverted and with my fix to prevent
com.android.settings from crashing *not* applied, tried repeatedly
setting lockscreen credential while in FRP mode, using the
smartlock setup activity launched by intent via adb. Verified
that although RescueParty is still triggered after 5 attempts,
secure_frp_mode is no longer reset (its value remains "1").
Test: Verified that secure_frp_mode still gets changed from 1 to 0 when
FRP is passed legitimately.
Test: atest com.android.providers.settings.SettingsProviderTest
Test: atest android.provider.SettingsProviderTest
(cherry picked from commit 9890dd7f15c091f7d1a09e4fddb9f85d32015955)
(changed Global.SECURE_FRP_MODE to Secure.SECURE_FRP_MODE,
needed because this setting was moved in U)
(removed static keyword from shouldExcludeSettingFromReset(),
needed for compatibility with Java 15 and earlier)
(resolved conflict in resetSettingsLocked())
(cherry picked from https://googleplex-android-review.googlesource.com/q/commit:f0f020c21fd29d8076733e07847e6314172a312e)
Merged-In: Id95ed43b9cc2208090064392bcd5dc012710af93
Change-Id: Id95ed43b9cc2208090064392bcd5dc012710af93
---
.../providers/settings/SettingsProvider.java | 17 ++++++++++---
.../settings/SettingsProviderTest.java | 25 +++++++++++++++++++
2 files changed, 38 insertions(+), 4 deletions(-)
diff --git a/packages/SettingsProvider/src/com/android/providers/settings/SettingsProvider.java b/packages/SettingsProvider/src/com/android/providers/settings/SettingsProvider.java
index 760b0604a604..1569129c3797 100644
--- a/packages/SettingsProvider/src/com/android/providers/settings/SettingsProvider.java
+++ b/packages/SettingsProvider/src/com/android/providers/settings/SettingsProvider.java
@@ -2737,6 +2737,15 @@ public class SettingsProvider extends ContentProvider {
return settingsState.getSettingLocked(name);
}
+ private boolean shouldExcludeSettingFromReset(Setting setting, String prefix) {
+ // If a prefix was specified, exclude settings whose names don't start with it.
+ if (prefix != null && !setting.getName().startsWith(prefix)) {
+ return true;
+ }
+ // Never reset SECURE_FRP_MODE, as it could be abused to bypass FRP via RescueParty.
+ return Secure.SECURE_FRP_MODE.equals(setting.getName());
+ }
+
public void resetSettingsLocked(int type, int userId, String packageName, int mode,
String tag) {
resetSettingsLocked(type, userId, packageName, mode, tag, null);
@@ -2757,7 +2766,7 @@ public class SettingsProvider extends ContentProvider {
Setting setting = settingsState.getSettingLocked(name);
if (packageName.equals(setting.getPackageName())) {
if ((tag != null && !tag.equals(setting.getTag()))
- || (prefix != null && !setting.getName().startsWith(prefix))) {
+ || shouldExcludeSettingFromReset(setting, prefix)) {
continue;
}
if (settingsState.resetSettingLocked(name)) {
@@ -2777,7 +2786,7 @@ public class SettingsProvider extends ContentProvider {
Setting setting = settingsState.getSettingLocked(name);
if (!SettingsState.isSystemPackage(getContext(),
setting.getPackageName(), INVALID_UID, userId)) {
- if (prefix != null && !setting.getName().startsWith(prefix)) {
+ if (shouldExcludeSettingFromReset(setting, prefix)) {
continue;
}
if (settingsState.resetSettingLocked(name)) {
@@ -2797,7 +2806,7 @@ public class SettingsProvider extends ContentProvider {
Setting setting = settingsState.getSettingLocked(name);
if (!SettingsState.isSystemPackage(getContext(),
setting.getPackageName(), INVALID_UID, userId)) {
- if (prefix != null && !setting.getName().startsWith(prefix)) {
+ if (shouldExcludeSettingFromReset(setting, prefix)) {
continue;
}
if (setting.isDefaultFromSystem()) {
@@ -2820,7 +2829,7 @@ public class SettingsProvider extends ContentProvider {
for (String name : settingsState.getSettingNamesLocked()) {
Setting setting = settingsState.getSettingLocked(name);
boolean someSettingChanged = false;
- if (prefix != null && !setting.getName().startsWith(prefix)) {
+ if (shouldExcludeSettingFromReset(setting, prefix)) {
continue;
}
if (setting.isDefaultFromSystem()) {
diff --git a/packages/SettingsProvider/test/src/com/android/providers/settings/SettingsProviderTest.java b/packages/SettingsProvider/test/src/com/android/providers/settings/SettingsProviderTest.java
index 183f5997a6b5..47c15d257ded 100644
--- a/packages/SettingsProvider/test/src/com/android/providers/settings/SettingsProviderTest.java
+++ b/packages/SettingsProvider/test/src/com/android/providers/settings/SettingsProviderTest.java
@@ -463,6 +463,31 @@ public class SettingsProviderTest extends BaseSettingsProviderTest {
}
}
+ // To prevent FRP bypasses, the SECURE_FRP_MODE setting should not be reset when all other
+ // settings are reset. But it should still be possible to explicitly set its value.
+ @Test
+ public void testSecureFrpModeSettingCannotBeReset() throws Exception {
+ final String name = Settings.Secure.SECURE_FRP_MODE;
+ final String origValue = getSetting(SETTING_TYPE_GLOBAL, name);
+ setSettingViaShell(SETTING_TYPE_GLOBAL, name, "1", false);
+ try {
+ assertEquals("1", getSetting(SETTING_TYPE_GLOBAL, name));
+ for (int type : new int[] { SETTING_TYPE_GLOBAL, SETTING_TYPE_SECURE }) {
+ resetSettingsViaShell(type, Settings.RESET_MODE_UNTRUSTED_DEFAULTS);
+ resetSettingsViaShell(type, Settings.RESET_MODE_UNTRUSTED_CHANGES);
+ resetSettingsViaShell(type, Settings.RESET_MODE_TRUSTED_DEFAULTS);
+ }
+ // The value should still be "1". It should not have been reset to null.
+ assertEquals("1", getSetting(SETTING_TYPE_GLOBAL, name));
+ // It should still be possible to explicitly set the value to "0".
+ setSettingViaShell(SETTING_TYPE_GLOBAL, name, "0", false);
+ assertEquals("0", getSetting(SETTING_TYPE_GLOBAL, name));
+ } finally {
+ setSettingViaShell(SETTING_TYPE_GLOBAL, name, origValue, false);
+ assertEquals(origValue, getSetting(SETTING_TYPE_GLOBAL, name));
+ }
+ }
+
private void doTestQueryStringInBracketsViaProviderApiForType(int type) {
// Make sure we have a clean slate.
deleteStringViaProviderApi(type, FAKE_SETTING_NAME);

View File

@ -0,0 +1,31 @@
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
From: Aaron Liu <aaronjli@google.com>
Date: Thu, 10 Aug 2023 15:37:24 +0000
Subject: [PATCH] Revert "DO NOT MERGE Dismiss keyguard when simpin auth'd
and..."
This reverts commit 09f004722284ef6b9790ddf9338a1708b3f0833c.
Reason for revert: causing a partner bug
Fixes: 295205456
Bug: 222446076
(cherry picked from https://googleplex-android-review.googlesource.com/q/commit:8df038265475bb062ead9eec1749ee92a0f5eb4e)
Merged-In: Ida11d98117727f63547b096617a4778bea429e22
Change-Id: Ida11d98117727f63547b096617a4778bea429e22
---
.../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 bd555e7360d8..89514a52d0bd 100644
--- a/packages/SystemUI/src/com/android/keyguard/KeyguardSecurityContainer.java
+++ b/packages/SystemUI/src/com/android/keyguard/KeyguardSecurityContainer.java
@@ -529,7 +529,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;
eventSubtype = BOUNCER_DISMISS_SIM;

View File

@ -29,7 +29,7 @@ Change-Id: Ibbffdb5f3930df74ca8b4ba93d451f7fad086989
create mode 100644 src/com/android/settings/network/CaptivePortalWarningDialogHost.java
diff --git a/res/values-de/cm_strings.xml b/res/values-de/cm_strings.xml
index d1ed0c6863..7ab4de0561 100644
index d1ed0c68631..7ab4de05610 100644
--- a/res/values-de/cm_strings.xml
+++ b/res/values-de/cm_strings.xml
@@ -112,4 +112,7 @@
@ -41,7 +41,7 @@ index d1ed0c6863..7ab4de0561 100644
+ <string name="captive_portal_switch_warning">Nach dem Ausschalten der Captive-Portal-Erkennung empfangen Sie keine Verbindungs-Rückmeldung mehr. Wirklich fortfahren?</string>
</resources>
diff --git a/res/values/cm_strings.xml b/res/values/cm_strings.xml
index 12ad48e683..44fad8e762 100644
index 12ad48e6834..44fad8e762a 100644
--- a/res/values/cm_strings.xml
+++ b/res/values/cm_strings.xml
@@ -197,4 +197,9 @@
@ -55,7 +55,7 @@ index 12ad48e683..44fad8e762 100644
+ <string name="captive_portal_switch_warning">If you switch off the captive portal, you will not receive connectivity informations any longer. Really switch off?</string>
</resources>
diff --git a/res/xml/network_and_internet.xml b/res/xml/network_and_internet.xml
index 32b51d48fc..456f169e8f 100644
index 32b51d48fca..456f169e8fa 100644
--- a/res/xml/network_and_internet.xml
+++ b/res/xml/network_and_internet.xml
@@ -97,4 +97,10 @@
@ -70,7 +70,7 @@ index 32b51d48fc..456f169e8f 100644
+
</PreferenceScreen>
diff --git a/res/xml/network_and_internet_v2.xml b/res/xml/network_and_internet_v2.xml
index 36044803d1..e2a271f63a 100644
index 36044803d1f..e2a271f63a8 100644
--- a/res/xml/network_and_internet_v2.xml
+++ b/res/xml/network_and_internet_v2.xml
@@ -107,4 +107,10 @@
@ -85,7 +85,7 @@ index 36044803d1..e2a271f63a 100644
+
</PreferenceScreen>
diff --git a/src/com/android/settings/ResetNetworkConfirm.java b/src/com/android/settings/ResetNetworkConfirm.java
index beb0528f6a..e24cbfc424 100644
index beb0528f6a9..e24cbfc424d 100644
--- a/src/com/android/settings/ResetNetworkConfirm.java
+++ b/src/com/android/settings/ResetNetworkConfirm.java
@@ -35,6 +35,7 @@ import android.os.Bundle;
@ -108,7 +108,7 @@ index beb0528f6a..e24cbfc424 100644
restoreDefaultApn(mContext);
diff --git a/src/com/android/settings/network/CaptivePortalModePreferenceController.java b/src/com/android/settings/network/CaptivePortalModePreferenceController.java
new file mode 100644
index 0000000000..ae21b29292
index 00000000000..ae21b292922
--- /dev/null
+++ b/src/com/android/settings/network/CaptivePortalModePreferenceController.java
@@ -0,0 +1,82 @@
@ -196,7 +196,7 @@ index 0000000000..ae21b29292
+}
diff --git a/src/com/android/settings/network/CaptivePortalWarningDialog.java b/src/com/android/settings/network/CaptivePortalWarningDialog.java
new file mode 100644
index 0000000000..d27bd7d2f0
index 00000000000..d27bd7d2f06
--- /dev/null
+++ b/src/com/android/settings/network/CaptivePortalWarningDialog.java
@@ -0,0 +1,74 @@
@ -276,7 +276,7 @@ index 0000000000..d27bd7d2f0
+}
diff --git a/src/com/android/settings/network/CaptivePortalWarningDialogHost.java b/src/com/android/settings/network/CaptivePortalWarningDialogHost.java
new file mode 100644
index 0000000000..7a04d1f831
index 00000000000..7a04d1f8311
--- /dev/null
+++ b/src/com/android/settings/network/CaptivePortalWarningDialogHost.java
@@ -0,0 +1,32 @@
@ -313,7 +313,7 @@ index 0000000000..7a04d1f831
+ void onCaptivePortalSwitchOffDialogDismissed();
+}
diff --git a/src/com/android/settings/network/NetworkDashboardFragment.java b/src/com/android/settings/network/NetworkDashboardFragment.java
index 8c686a54aa..f16d489331 100644
index 8c686a54aae..f16d4893317 100644
--- a/src/com/android/settings/network/NetworkDashboardFragment.java
+++ b/src/com/android/settings/network/NetworkDashboardFragment.java
@@ -44,7 +44,7 @@ import java.util.List;

View File

@ -11,7 +11,7 @@ Change-Id: Ic1dce1c0fffc3c3f6459c4c85e0a64d480d3315a
2 files changed, 53 deletions(-)
diff --git a/AndroidManifest.xml b/AndroidManifest.xml
index c7c55d381e..fd6f4178bd 100644
index c7c55d381e1..fd6f4178bd8 100644
--- a/AndroidManifest.xml
+++ b/AndroidManifest.xml
@@ -3080,17 +3080,6 @@
@ -33,7 +33,7 @@ index c7c55d381e..fd6f4178bd 100644
android:name=".HelpTrampoline"
android:exported="true"
diff --git a/src/com/android/settings/development/qstile/DevelopmentTiles.java b/src/com/android/settings/development/qstile/DevelopmentTiles.java
index bb791abef8..2fdb410150 100644
index bb791abef81..2fdb410150e 100644
--- a/src/com/android/settings/development/qstile/DevelopmentTiles.java
+++ b/src/com/android/settings/development/qstile/DevelopmentTiles.java
@@ -20,7 +20,6 @@ import android.app.settings.SettingsEnums;

View File

@ -21,7 +21,7 @@ Change-Id: I423ad5a3c360a687a226e61df3f75b5550f851c0
4 files changed, 249 insertions(+)
diff --git a/res/layout/private_dns_mode_dialog.xml b/res/layout/private_dns_mode_dialog.xml
index 641905dc01..3614dd7cd8 100644
index 641905dc010..3614dd7cd8f 100644
--- a/res/layout/private_dns_mode_dialog.xml
+++ b/res/layout/private_dns_mode_dialog.xml
@@ -38,6 +38,110 @@
@ -136,7 +136,7 @@ index 641905dc01..3614dd7cd8 100644
android:id="@+id/private_dns_mode_opportunistic"
android:text="@string/private_dns_mode_opportunistic"
diff --git a/res/values/cm_strings.xml b/res/values/cm_strings.xml
index 44fad8e762..fb2c7377cd 100644
index 44fad8e762a..fb2c7377cdc 100644
--- a/res/values/cm_strings.xml
+++ b/res/values/cm_strings.xml
@@ -104,6 +104,21 @@
@ -162,7 +162,7 @@ index 44fad8e762..fb2c7377cd 100644
<string name="volume_link_notification_title">Link ring &amp; notification volumes</string>
diff --git a/src/com/android/settings/network/PrivateDnsModeDialogPreference.java b/src/com/android/settings/network/PrivateDnsModeDialogPreference.java
index 1655c69cea..0beef5fc13 100644
index 1655c69cea4..0beef5fc13a 100644
--- a/src/com/android/settings/network/PrivateDnsModeDialogPreference.java
+++ b/src/com/android/settings/network/PrivateDnsModeDialogPreference.java
@@ -17,6 +17,19 @@ package com.android.settings.network;
@ -252,7 +252,7 @@ index 1655c69cea..0beef5fc13 100644
mMode = PRIVATE_DNS_MODE_OPPORTUNISTIC;
break;
diff --git a/src/com/android/settings/network/PrivateDnsPreferenceController.java b/src/com/android/settings/network/PrivateDnsPreferenceController.java
index b74345170c..0cbb9d52de 100644
index b74345170c0..0cbb9d52de8 100644
--- a/src/com/android/settings/network/PrivateDnsPreferenceController.java
+++ b/src/com/android/settings/network/PrivateDnsPreferenceController.java
@@ -17,6 +17,19 @@

View File

@ -13,7 +13,7 @@ Subject: [PATCH] add auto-reboot setting
create mode 100644 src/com/android/settings/security/AutoRebootPreferenceController.java
diff --git a/res/values/arrays.xml b/res/values/arrays.xml
index b983f467df..5813bb18db 100644
index b983f467df0..5813bb18dbb 100644
--- a/res/values/arrays.xml
+++ b/res/values/arrays.xml
@@ -144,6 +144,37 @@
@ -55,7 +55,7 @@ index b983f467df..5813bb18db 100644
<item msgid="6490061470416867723">Small</item>
<item msgid="3579015730662088893">Default</item>
diff --git a/res/values/strings.xml b/res/values/strings.xml
index f6e3b0f62d..8f4a3c6115 100644
index f6e3b0f62df..8f4a3c61157 100644
--- a/res/values/strings.xml
+++ b/res/values/strings.xml
@@ -810,6 +810,9 @@
@ -69,7 +69,7 @@ index f6e3b0f62d..8f4a3c6115 100644
<string name="trust_agents_extend_unlock_title">Trust agents only extend unlock</string>
<!-- Text shown for the description of the extend unlock mode option [CHAR LIMIT=NONE] -->
diff --git a/res/xml/security_dashboard_settings.xml b/res/xml/security_dashboard_settings.xml
index 6a896ced42..1667943ba4 100644
index 6a896ced42c..1667943ba41 100644
--- a/res/xml/security_dashboard_settings.xml
+++ b/res/xml/security_dashboard_settings.xml
@@ -55,6 +55,14 @@
@ -89,7 +89,7 @@ index 6a896ced42..1667943ba4 100644
<!-- work profile security section -->
diff --git a/src/com/android/settings/security/AutoRebootPreferenceController.java b/src/com/android/settings/security/AutoRebootPreferenceController.java
new file mode 100644
index 0000000000..c7a75219a5
index 00000000000..c7a75219a5e
--- /dev/null
+++ b/src/com/android/settings/security/AutoRebootPreferenceController.java
@@ -0,0 +1,82 @@
@ -176,7 +176,7 @@ index 0000000000..c7a75219a5
+ }
+}
diff --git a/src/com/android/settings/security/SecuritySettings.java b/src/com/android/settings/security/SecuritySettings.java
index ecf3359e20..b5d7814e4a 100644
index ecf3359e200..b5d7814e4a9 100644
--- a/src/com/android/settings/security/SecuritySettings.java
+++ b/src/com/android/settings/security/SecuritySettings.java
@@ -120,6 +120,7 @@ public class SecuritySettings extends DashboardFragment {

View File

@ -12,7 +12,7 @@ Subject: [PATCH] add bluetooth auto-turn-off setting
create mode 100644 src/com/android/settings/bluetooth/BluetoothTimeoutPreferenceController.java
diff --git a/res/values/arrays.xml b/res/values/arrays.xml
index 5813bb18db..40d01907a4 100644
index 5813bb18dbb..40d01907a43 100644
--- a/res/values/arrays.xml
+++ b/res/values/arrays.xml
@@ -39,6 +39,50 @@
@ -67,7 +67,7 @@ index 5813bb18db..40d01907a4 100644
<string-array name="screen_timeout_entries">
<item>15 seconds</item>
diff --git a/res/values/strings.xml b/res/values/strings.xml
index 8f4a3c6115..ef517e8503 100644
index 8f4a3c61157..ef517e8503c 100644
--- a/res/values/strings.xml
+++ b/res/values/strings.xml
@@ -25,6 +25,25 @@
@ -97,7 +97,7 @@ index 8f4a3c6115..ef517e8503 100644
<string name="device_info_default">Unknown</string>
<!-- [CHAR LIMIT=NONE] Device Info screen. Countdown for user taps to enable development settings -->
diff --git a/res/xml/connected_devices.xml b/res/xml/connected_devices.xml
index da55fe33f4..d0f9dcc507 100644
index da55fe33f4f..d0f9dcc507e 100644
--- a/res/xml/connected_devices.xml
+++ b/res/xml/connected_devices.xml
@@ -52,6 +52,14 @@
@ -117,7 +117,7 @@ index da55fe33f4..d0f9dcc507 100644
android:title="@string/connected_device_previously_connected_title"
diff --git a/src/com/android/settings/bluetooth/BluetoothTimeoutPreferenceController.java b/src/com/android/settings/bluetooth/BluetoothTimeoutPreferenceController.java
new file mode 100644
index 0000000000..244147948a
index 00000000000..244147948aa
--- /dev/null
+++ b/src/com/android/settings/bluetooth/BluetoothTimeoutPreferenceController.java
@@ -0,0 +1,115 @@

View File

@ -12,7 +12,7 @@ Subject: [PATCH] add Wi-Fi timeout feature
create mode 100644 src/com/android/settings/wifi/WifiTimeoutPreferenceController.java
diff --git a/res/values/arrays.xml b/res/values/arrays.xml
index 40d01907a4..0a9a9a31e8 100644
index 40d01907a43..0a9a9a31e82 100644
--- a/res/values/arrays.xml
+++ b/res/values/arrays.xml
@@ -83,6 +83,50 @@
@ -67,7 +67,7 @@ index 40d01907a4..0a9a9a31e8 100644
<string-array name="screen_timeout_entries">
<item>15 seconds</item>
diff --git a/res/values/strings.xml b/res/values/strings.xml
index ef517e8503..228d9570dd 100644
index ef517e8503c..228d9570dd7 100644
--- a/res/values/strings.xml
+++ b/res/values/strings.xml
@@ -44,6 +44,25 @@
@ -97,7 +97,7 @@ index ef517e8503..228d9570dd 100644
<string name="device_info_default">Unknown</string>
<!-- [CHAR LIMIT=NONE] Device Info screen. Countdown for user taps to enable development settings -->
diff --git a/res/xml/wifi_configure_settings.xml b/res/xml/wifi_configure_settings.xml
index c6214662d3..27e913949e 100644
index c6214662d35..27e913949e6 100644
--- a/res/xml/wifi_configure_settings.xml
+++ b/res/xml/wifi_configure_settings.xml
@@ -26,6 +26,14 @@
@ -117,7 +117,7 @@ index c6214662d3..27e913949e 100644
android:icon="@drawable/ic_open_wifi_autoconnect"
diff --git a/src/com/android/settings/wifi/WifiTimeoutPreferenceController.java b/src/com/android/settings/wifi/WifiTimeoutPreferenceController.java
new file mode 100644
index 0000000000..7116c90519
index 00000000000..7116c905190
--- /dev/null
+++ b/src/com/android/settings/wifi/WifiTimeoutPreferenceController.java
@@ -0,0 +1,115 @@

View File

@ -12,7 +12,7 @@ Subject: [PATCH] add native debugging setting
create mode 100644 src/com/android/settings/security/NativeDebugPreferenceController.java
diff --git a/res/values/strings.xml b/res/values/strings.xml
index 228d9570dd..d965a63b0d 100644
index 228d9570dd7..d965a63b0d5 100644
--- a/res/values/strings.xml
+++ b/res/values/strings.xml
@@ -11316,6 +11316,9 @@
@ -26,7 +26,7 @@ index 228d9570dd..d965a63b0d 100644
<string name="privacy_dashboard_title">Privacy</string>
<!-- Summary for the top level Privacy Settings [CHAR LIMIT=NONE]-->
diff --git a/res/xml/security_dashboard_settings.xml b/res/xml/security_dashboard_settings.xml
index 1667943ba4..2c7b006f8b 100644
index 1667943ba41..2c7b006f8bb 100644
--- a/res/xml/security_dashboard_settings.xml
+++ b/res/xml/security_dashboard_settings.xml
@@ -63,6 +63,12 @@
@ -44,7 +44,7 @@ index 1667943ba4..2c7b006f8b 100644
<!-- work profile security section -->
diff --git a/src/com/android/settings/security/NativeDebugPreferenceController.java b/src/com/android/settings/security/NativeDebugPreferenceController.java
new file mode 100644
index 0000000000..9271e6e21c
index 00000000000..9271e6e21cf
--- /dev/null
+++ b/src/com/android/settings/security/NativeDebugPreferenceController.java
@@ -0,0 +1,106 @@
@ -155,7 +155,7 @@ index 0000000000..9271e6e21c
+ }
+}
diff --git a/src/com/android/settings/security/SecuritySettings.java b/src/com/android/settings/security/SecuritySettings.java
index b5d7814e4a..7aa126b75c 100644
index b5d7814e4a9..7aa126b75c7 100644
--- a/src/com/android/settings/security/SecuritySettings.java
+++ b/src/com/android/settings/security/SecuritySettings.java
@@ -121,6 +121,7 @@ public class SecuritySettings extends DashboardFragment {

View File

@ -12,7 +12,7 @@ Subject: [PATCH] add exec spawning toggle
create mode 100644 src/com/android/settings/security/ExecSpawnPreferenceController.java
diff --git a/res/values/strings.xml b/res/values/strings.xml
index d965a63b0d..e7dcf62ddc 100644
index d965a63b0d5..e7dcf62ddc3 100644
--- a/res/values/strings.xml
+++ b/res/values/strings.xml
@@ -11316,6 +11316,8 @@
@ -25,7 +25,7 @@ index d965a63b0d..e7dcf62ddc 100644
<string name="native_debug_summary">Generate useful logs / bug reports from crashes and permit debugging native code.</string>
diff --git a/res/xml/security_dashboard_settings.xml b/res/xml/security_dashboard_settings.xml
index 2c7b006f8b..08328ad7b6 100644
index 2c7b006f8bb..08328ad7b62 100644
--- a/res/xml/security_dashboard_settings.xml
+++ b/res/xml/security_dashboard_settings.xml
@@ -64,6 +64,12 @@
@ -43,7 +43,7 @@ index 2c7b006f8b..08328ad7b6 100644
android:title="@string/native_debug_title"
diff --git a/src/com/android/settings/security/ExecSpawnPreferenceController.java b/src/com/android/settings/security/ExecSpawnPreferenceController.java
new file mode 100644
index 0000000000..98cc3c29e1
index 00000000000..98cc3c29e12
--- /dev/null
+++ b/src/com/android/settings/security/ExecSpawnPreferenceController.java
@@ -0,0 +1,106 @@
@ -154,7 +154,7 @@ index 0000000000..98cc3c29e1
+ }
+}
diff --git a/src/com/android/settings/security/SecuritySettings.java b/src/com/android/settings/security/SecuritySettings.java
index 7aa126b75c..a5e0add739 100644
index 7aa126b75c7..a5e0add739b 100644
--- a/src/com/android/settings/security/SecuritySettings.java
+++ b/src/com/android/settings/security/SecuritySettings.java
@@ -121,6 +121,7 @@ public class SecuritySettings extends DashboardFragment {

View File

@ -11,7 +11,7 @@ RANDOMIZATION_ALWAYS is set as the default option
3 files changed, 29 insertions(+), 9 deletions(-)
diff --git a/res/values/arrays.xml b/res/values/arrays.xml
index 0a9a9a31e8..6d95bcc58b 100644
index 0a9a9a31e82..6d95bcc58b0 100644
--- a/res/values/arrays.xml
+++ b/res/values/arrays.xml
@@ -1239,7 +1239,8 @@
@ -33,7 +33,7 @@ index 0a9a9a31e8..6d95bcc58b 100644
<item>0</item>
</string-array>
diff --git a/src/com/android/settings/wifi/details/WifiDetailPreferenceController.java b/src/com/android/settings/wifi/details/WifiDetailPreferenceController.java
index afcf883fb6..ce45108f22 100644
index afcf883fb68..ce45108f22e 100644
--- a/src/com/android/settings/wifi/details/WifiDetailPreferenceController.java
+++ b/src/com/android/settings/wifi/details/WifiDetailPreferenceController.java
@@ -700,7 +700,8 @@ public class WifiDetailPreferenceController extends AbstractPreferenceController
@ -47,7 +47,7 @@ index afcf883fb6..ce45108f22 100644
}
diff --git a/src/com/android/settings/wifi/details/WifiPrivacyPreferenceController.java b/src/com/android/settings/wifi/details/WifiPrivacyPreferenceController.java
index 950cc131f4..1ed9646a7f 100644
index 950cc131f4a..1ed9646a7f3 100644
--- a/src/com/android/settings/wifi/details/WifiPrivacyPreferenceController.java
+++ b/src/com/android/settings/wifi/details/WifiPrivacyPreferenceController.java
@@ -112,11 +112,12 @@ public class WifiPrivacyPreferenceController extends BasePreferenceController im

View File

@ -92,7 +92,7 @@ Subject: [PATCH] removed all translations for wifi MAC privacy setting
85 files changed, 340 deletions(-)
diff --git a/res/values-af/arrays.xml b/res/values-af/arrays.xml
index c8b0d47563..1ab2da3cc3 100644
index c8b0d47563b..1ab2da3cc3b 100644
--- a/res/values-af/arrays.xml
+++ b/res/values-af/arrays.xml
@@ -475,10 +475,6 @@
@ -107,7 +107,7 @@ index c8b0d47563..1ab2da3cc3 100644
<item msgid="342232116597649254">"Nee"</item>
<item msgid="2163015208097377388">"Ja"</item>
diff --git a/res/values-am/arrays.xml b/res/values-am/arrays.xml
index 722b48c403..a89588e031 100644
index 722b48c403b..a89588e0311 100644
--- a/res/values-am/arrays.xml
+++ b/res/values-am/arrays.xml
@@ -475,10 +475,6 @@
@ -122,7 +122,7 @@ index 722b48c403..a89588e031 100644
<item msgid="342232116597649254">"አይ"</item>
<item msgid="2163015208097377388">"አዎ"</item>
diff --git a/res/values-ar/arrays.xml b/res/values-ar/arrays.xml
index f6e693ff1c..97c0a846f2 100644
index f6e693ff1cb..97c0a846f24 100644
--- a/res/values-ar/arrays.xml
+++ b/res/values-ar/arrays.xml
@@ -475,10 +475,6 @@
@ -137,7 +137,7 @@ index f6e693ff1c..97c0a846f2 100644
<item msgid="342232116597649254">"لا"</item>
<item msgid="2163015208097377388">"نعم"</item>
diff --git a/res/values-as/arrays.xml b/res/values-as/arrays.xml
index 07c7b3d6f6..7f17397335 100644
index 07c7b3d6f6a..7f173973350 100644
--- a/res/values-as/arrays.xml
+++ b/res/values-as/arrays.xml
@@ -475,10 +475,6 @@
@ -152,7 +152,7 @@ index 07c7b3d6f6..7f17397335 100644
<item msgid="342232116597649254">"নহয়"</item>
<item msgid="2163015208097377388">"হয়"</item>
diff --git a/res/values-az/arrays.xml b/res/values-az/arrays.xml
index 1e8758f029..fb99ada256 100644
index 1e8758f0292..fb99ada2567 100644
--- a/res/values-az/arrays.xml
+++ b/res/values-az/arrays.xml
@@ -475,10 +475,6 @@
@ -167,7 +167,7 @@ index 1e8758f029..fb99ada256 100644
<item msgid="342232116597649254">"Xeyr"</item>
<item msgid="2163015208097377388">"Bəli"</item>
diff --git a/res/values-b+sr+Latn/arrays.xml b/res/values-b+sr+Latn/arrays.xml
index b355390ac1..de326aec49 100644
index b355390ac1e..de326aec49a 100644
--- a/res/values-b+sr+Latn/arrays.xml
+++ b/res/values-b+sr+Latn/arrays.xml
@@ -475,10 +475,6 @@
@ -182,7 +182,7 @@ index b355390ac1..de326aec49 100644
<item msgid="342232116597649254">"Ne"</item>
<item msgid="2163015208097377388">"Da"</item>
diff --git a/res/values-be/arrays.xml b/res/values-be/arrays.xml
index e1038b94fd..b455b0ea48 100644
index e1038b94fd6..b455b0ea483 100644
--- a/res/values-be/arrays.xml
+++ b/res/values-be/arrays.xml
@@ -475,10 +475,6 @@
@ -197,7 +197,7 @@ index e1038b94fd..b455b0ea48 100644
<item msgid="342232116597649254">"Не"</item>
<item msgid="2163015208097377388">"Так"</item>
diff --git a/res/values-bg/arrays.xml b/res/values-bg/arrays.xml
index f37eceaf6d..c651876a73 100644
index f37eceaf6d4..c651876a731 100644
--- a/res/values-bg/arrays.xml
+++ b/res/values-bg/arrays.xml
@@ -475,10 +475,6 @@
@ -212,7 +212,7 @@ index f37eceaf6d..c651876a73 100644
<item msgid="342232116597649254">"Не"</item>
<item msgid="2163015208097377388">"Да"</item>
diff --git a/res/values-bn/arrays.xml b/res/values-bn/arrays.xml
index f14398a328..d4a3e68637 100644
index f14398a3284..d4a3e68637a 100644
--- a/res/values-bn/arrays.xml
+++ b/res/values-bn/arrays.xml
@@ -475,10 +475,6 @@
@ -227,7 +227,7 @@ index f14398a328..d4a3e68637 100644
<item msgid="342232116597649254">"না"</item>
<item msgid="2163015208097377388">"হ্যাঁ"</item>
diff --git a/res/values-bs/arrays.xml b/res/values-bs/arrays.xml
index 365473e269..52ecd63c5c 100644
index 365473e2690..52ecd63c5c0 100644
--- a/res/values-bs/arrays.xml
+++ b/res/values-bs/arrays.xml
@@ -475,10 +475,6 @@
@ -242,7 +242,7 @@ index 365473e269..52ecd63c5c 100644
<item msgid="342232116597649254">"Ne"</item>
<item msgid="2163015208097377388">"Da"</item>
diff --git a/res/values-ca/arrays.xml b/res/values-ca/arrays.xml
index 81e9f83fef..24b886f213 100644
index 81e9f83fef8..24b886f213b 100644
--- a/res/values-ca/arrays.xml
+++ b/res/values-ca/arrays.xml
@@ -475,10 +475,6 @@
@ -257,7 +257,7 @@ index 81e9f83fef..24b886f213 100644
<item msgid="342232116597649254">"No"</item>
<item msgid="2163015208097377388">"Sí"</item>
diff --git a/res/values-cs/arrays.xml b/res/values-cs/arrays.xml
index f44b947198..652f2bbf9c 100644
index f44b947198e..652f2bbf9cb 100644
--- a/res/values-cs/arrays.xml
+++ b/res/values-cs/arrays.xml
@@ -475,10 +475,6 @@
@ -272,7 +272,7 @@ index f44b947198..652f2bbf9c 100644
<item msgid="342232116597649254">"Ne"</item>
<item msgid="2163015208097377388">"Ano"</item>
diff --git a/res/values-da/arrays.xml b/res/values-da/arrays.xml
index fd4e58d030..692ef9c8b4 100644
index fd4e58d030b..692ef9c8b4d 100644
--- a/res/values-da/arrays.xml
+++ b/res/values-da/arrays.xml
@@ -475,10 +475,6 @@
@ -287,7 +287,7 @@ index fd4e58d030..692ef9c8b4 100644
<item msgid="342232116597649254">"Nej"</item>
<item msgid="2163015208097377388">"Ja"</item>
diff --git a/res/values-de/arrays.xml b/res/values-de/arrays.xml
index 886c9f68f4..3524eb9ccd 100644
index 886c9f68f42..3524eb9ccd5 100644
--- a/res/values-de/arrays.xml
+++ b/res/values-de/arrays.xml
@@ -475,10 +475,6 @@
@ -302,7 +302,7 @@ index 886c9f68f4..3524eb9ccd 100644
<item msgid="342232116597649254">"Nein"</item>
<item msgid="2163015208097377388">"Ja"</item>
diff --git a/res/values-el/arrays.xml b/res/values-el/arrays.xml
index 6b4a697877..d7cbe3f017 100644
index 6b4a6978773..d7cbe3f017e 100644
--- a/res/values-el/arrays.xml
+++ b/res/values-el/arrays.xml
@@ -475,10 +475,6 @@
@ -317,7 +317,7 @@ index 6b4a697877..d7cbe3f017 100644
<item msgid="342232116597649254">"Όχι"</item>
<item msgid="2163015208097377388">"Ναι"</item>
diff --git a/res/values-en-rAU/arrays.xml b/res/values-en-rAU/arrays.xml
index 62498e8cbf..3684d540c4 100644
index 62498e8cbf7..3684d540c4a 100644
--- a/res/values-en-rAU/arrays.xml
+++ b/res/values-en-rAU/arrays.xml
@@ -475,10 +475,6 @@
@ -332,7 +332,7 @@ index 62498e8cbf..3684d540c4 100644
<item msgid="342232116597649254">"No"</item>
<item msgid="2163015208097377388">"Yes"</item>
diff --git a/res/values-en-rCA/arrays.xml b/res/values-en-rCA/arrays.xml
index 62498e8cbf..3684d540c4 100644
index 62498e8cbf7..3684d540c4a 100644
--- a/res/values-en-rCA/arrays.xml
+++ b/res/values-en-rCA/arrays.xml
@@ -475,10 +475,6 @@
@ -347,7 +347,7 @@ index 62498e8cbf..3684d540c4 100644
<item msgid="342232116597649254">"No"</item>
<item msgid="2163015208097377388">"Yes"</item>
diff --git a/res/values-en-rGB/arrays.xml b/res/values-en-rGB/arrays.xml
index 62498e8cbf..3684d540c4 100644
index 62498e8cbf7..3684d540c4a 100644
--- a/res/values-en-rGB/arrays.xml
+++ b/res/values-en-rGB/arrays.xml
@@ -475,10 +475,6 @@
@ -362,7 +362,7 @@ index 62498e8cbf..3684d540c4 100644
<item msgid="342232116597649254">"No"</item>
<item msgid="2163015208097377388">"Yes"</item>
diff --git a/res/values-en-rIN/arrays.xml b/res/values-en-rIN/arrays.xml
index 62498e8cbf..3684d540c4 100644
index 62498e8cbf7..3684d540c4a 100644
--- a/res/values-en-rIN/arrays.xml
+++ b/res/values-en-rIN/arrays.xml
@@ -475,10 +475,6 @@
@ -377,7 +377,7 @@ index 62498e8cbf..3684d540c4 100644
<item msgid="342232116597649254">"No"</item>
<item msgid="2163015208097377388">"Yes"</item>
diff --git a/res/values-en-rXC/arrays.xml b/res/values-en-rXC/arrays.xml
index 1faec9168a..3762c105b5 100644
index 1faec9168ad..3762c105b58 100644
--- a/res/values-en-rXC/arrays.xml
+++ b/res/values-en-rXC/arrays.xml
@@ -475,10 +475,6 @@
@ -392,7 +392,7 @@ index 1faec9168a..3762c105b5 100644
<item msgid="342232116597649254">"No"</item>
<item msgid="2163015208097377388">"Yes"</item>
diff --git a/res/values-es-rUS/arrays.xml b/res/values-es-rUS/arrays.xml
index b5cee26ce1..8052f71290 100644
index b5cee26ce1d..8052f71290c 100644
--- a/res/values-es-rUS/arrays.xml
+++ b/res/values-es-rUS/arrays.xml
@@ -475,10 +475,6 @@
@ -407,7 +407,7 @@ index b5cee26ce1..8052f71290 100644
<item msgid="342232116597649254">"No"</item>
<item msgid="2163015208097377388">"Sí"</item>
diff --git a/res/values-es/arrays.xml b/res/values-es/arrays.xml
index d60f164a55..24021bc2f0 100644
index d60f164a55f..24021bc2f04 100644
--- a/res/values-es/arrays.xml
+++ b/res/values-es/arrays.xml
@@ -475,10 +475,6 @@
@ -422,7 +422,7 @@ index d60f164a55..24021bc2f0 100644
<item msgid="342232116597649254">"No"</item>
<item msgid="2163015208097377388">"Sí"</item>
diff --git a/res/values-et/arrays.xml b/res/values-et/arrays.xml
index 0836f3a438..17e9768f60 100644
index 0836f3a4380..17e9768f609 100644
--- a/res/values-et/arrays.xml
+++ b/res/values-et/arrays.xml
@@ -475,10 +475,6 @@
@ -437,7 +437,7 @@ index 0836f3a438..17e9768f60 100644
<item msgid="342232116597649254">"Ei"</item>
<item msgid="2163015208097377388">"Jah"</item>
diff --git a/res/values-eu/arrays.xml b/res/values-eu/arrays.xml
index 5924a7c5f7..628c00ffd8 100644
index 5924a7c5f7c..628c00ffd86 100644
--- a/res/values-eu/arrays.xml
+++ b/res/values-eu/arrays.xml
@@ -475,10 +475,6 @@
@ -452,7 +452,7 @@ index 5924a7c5f7..628c00ffd8 100644
<item msgid="342232116597649254">"Ez"</item>
<item msgid="2163015208097377388">"Bai"</item>
diff --git a/res/values-fa/arrays.xml b/res/values-fa/arrays.xml
index a44cefd482..4e4e7f30c5 100644
index a44cefd4822..4e4e7f30c57 100644
--- a/res/values-fa/arrays.xml
+++ b/res/values-fa/arrays.xml
@@ -475,10 +475,6 @@
@ -467,7 +467,7 @@ index a44cefd482..4e4e7f30c5 100644
<item msgid="342232116597649254">"نه"</item>
<item msgid="2163015208097377388">"بله"</item>
diff --git a/res/values-fi/arrays.xml b/res/values-fi/arrays.xml
index 98f0d4db0f..91728473d2 100644
index 98f0d4db0f0..91728473d26 100644
--- a/res/values-fi/arrays.xml
+++ b/res/values-fi/arrays.xml
@@ -475,10 +475,6 @@
@ -482,7 +482,7 @@ index 98f0d4db0f..91728473d2 100644
<item msgid="342232116597649254">"Ei"</item>
<item msgid="2163015208097377388">"Kyllä"</item>
diff --git a/res/values-fr-rCA/arrays.xml b/res/values-fr-rCA/arrays.xml
index ea4cb2d274..36d8a77dfa 100644
index ea4cb2d2749..36d8a77dfa0 100644
--- a/res/values-fr-rCA/arrays.xml
+++ b/res/values-fr-rCA/arrays.xml
@@ -475,10 +475,6 @@
@ -497,7 +497,7 @@ index ea4cb2d274..36d8a77dfa 100644
<item msgid="342232116597649254">"Non"</item>
<item msgid="2163015208097377388">"Oui"</item>
diff --git a/res/values-fr/arrays.xml b/res/values-fr/arrays.xml
index 2673a8f532..7bfea30840 100644
index 2673a8f5329..7bfea30840d 100644
--- a/res/values-fr/arrays.xml
+++ b/res/values-fr/arrays.xml
@@ -475,10 +475,6 @@
@ -512,7 +512,7 @@ index 2673a8f532..7bfea30840 100644
<item msgid="342232116597649254">"Non"</item>
<item msgid="2163015208097377388">"Oui"</item>
diff --git a/res/values-gl/arrays.xml b/res/values-gl/arrays.xml
index eab6c49f03..5085226822 100644
index eab6c49f03e..5085226822c 100644
--- a/res/values-gl/arrays.xml
+++ b/res/values-gl/arrays.xml
@@ -475,10 +475,6 @@
@ -527,7 +527,7 @@ index eab6c49f03..5085226822 100644
<item msgid="342232116597649254">"Non"</item>
<item msgid="2163015208097377388">"Si"</item>
diff --git a/res/values-gu/arrays.xml b/res/values-gu/arrays.xml
index ece9976bcf..51ea73284d 100644
index ece9976bcfd..51ea73284d9 100644
--- a/res/values-gu/arrays.xml
+++ b/res/values-gu/arrays.xml
@@ -475,10 +475,6 @@
@ -542,7 +542,7 @@ index ece9976bcf..51ea73284d 100644
<item msgid="342232116597649254">"ના"</item>
<item msgid="2163015208097377388">"હા"</item>
diff --git a/res/values-hi/arrays.xml b/res/values-hi/arrays.xml
index b0b1aedaba..a3eb3167a9 100644
index b0b1aedaba0..a3eb3167a9f 100644
--- a/res/values-hi/arrays.xml
+++ b/res/values-hi/arrays.xml
@@ -475,10 +475,6 @@
@ -557,7 +557,7 @@ index b0b1aedaba..a3eb3167a9 100644
<item msgid="342232116597649254">"नहीं"</item>
<item msgid="2163015208097377388">"हां"</item>
diff --git a/res/values-hr/arrays.xml b/res/values-hr/arrays.xml
index 2a865b6e30..1fd6bd79c8 100644
index 2a865b6e306..1fd6bd79c8a 100644
--- a/res/values-hr/arrays.xml
+++ b/res/values-hr/arrays.xml
@@ -475,10 +475,6 @@
@ -572,7 +572,7 @@ index 2a865b6e30..1fd6bd79c8 100644
<item msgid="342232116597649254">"Ne"</item>
<item msgid="2163015208097377388">"Da"</item>
diff --git a/res/values-hu/arrays.xml b/res/values-hu/arrays.xml
index 1cee4db941..fb7893d70e 100644
index 1cee4db9416..fb7893d70e2 100644
--- a/res/values-hu/arrays.xml
+++ b/res/values-hu/arrays.xml
@@ -475,10 +475,6 @@
@ -587,7 +587,7 @@ index 1cee4db941..fb7893d70e 100644
<item msgid="342232116597649254">"Nem"</item>
<item msgid="2163015208097377388">"Igen"</item>
diff --git a/res/values-hy/arrays.xml b/res/values-hy/arrays.xml
index a31975ca6b..8815456dec 100644
index a31975ca6bc..8815456dec9 100644
--- a/res/values-hy/arrays.xml
+++ b/res/values-hy/arrays.xml
@@ -475,10 +475,6 @@
@ -602,7 +602,7 @@ index a31975ca6b..8815456dec 100644
<item msgid="342232116597649254">"Ոչ"</item>
<item msgid="2163015208097377388">"Այո"</item>
diff --git a/res/values-in/arrays.xml b/res/values-in/arrays.xml
index 5cad411615..a9a4803355 100644
index 5cad4116156..a9a48033550 100644
--- a/res/values-in/arrays.xml
+++ b/res/values-in/arrays.xml
@@ -475,10 +475,6 @@
@ -617,7 +617,7 @@ index 5cad411615..a9a4803355 100644
<item msgid="342232116597649254">"Tidak"</item>
<item msgid="2163015208097377388">"Ya"</item>
diff --git a/res/values-is/arrays.xml b/res/values-is/arrays.xml
index 135aee5854..07f5265219 100644
index 135aee58543..07f52652190 100644
--- a/res/values-is/arrays.xml
+++ b/res/values-is/arrays.xml
@@ -475,10 +475,6 @@
@ -632,7 +632,7 @@ index 135aee5854..07f5265219 100644
<item msgid="342232116597649254">"Nei"</item>
<item msgid="2163015208097377388">"Já"</item>
diff --git a/res/values-it/arrays.xml b/res/values-it/arrays.xml
index fa9f8a5c7e..43e0493159 100644
index fa9f8a5c7e3..43e04931595 100644
--- a/res/values-it/arrays.xml
+++ b/res/values-it/arrays.xml
@@ -475,10 +475,6 @@
@ -647,7 +647,7 @@ index fa9f8a5c7e..43e0493159 100644
<item msgid="342232116597649254">"No"</item>
<item msgid="2163015208097377388">"Sì"</item>
diff --git a/res/values-iw/arrays.xml b/res/values-iw/arrays.xml
index 6e699a5943..d5b6c1bb18 100644
index 6e699a59438..d5b6c1bb18c 100644
--- a/res/values-iw/arrays.xml
+++ b/res/values-iw/arrays.xml
@@ -475,10 +475,6 @@
@ -662,7 +662,7 @@ index 6e699a5943..d5b6c1bb18 100644
<item msgid="342232116597649254">"לא"</item>
<item msgid="2163015208097377388">"כן"</item>
diff --git a/res/values-ja/arrays.xml b/res/values-ja/arrays.xml
index ec6032a37b..0eed2ba98f 100644
index ec6032a37be..0eed2ba98fb 100644
--- a/res/values-ja/arrays.xml
+++ b/res/values-ja/arrays.xml
@@ -475,10 +475,6 @@
@ -677,7 +677,7 @@ index ec6032a37b..0eed2ba98f 100644
<item msgid="342232116597649254">"いいえ"</item>
<item msgid="2163015208097377388">"はい"</item>
diff --git a/res/values-ka/arrays.xml b/res/values-ka/arrays.xml
index 5a5ddf40dc..26c952765c 100644
index 5a5ddf40dca..26c952765cd 100644
--- a/res/values-ka/arrays.xml
+++ b/res/values-ka/arrays.xml
@@ -475,10 +475,6 @@
@ -692,7 +692,7 @@ index 5a5ddf40dc..26c952765c 100644
<item msgid="342232116597649254">"არა"</item>
<item msgid="2163015208097377388">"დიახ"</item>
diff --git a/res/values-kk/arrays.xml b/res/values-kk/arrays.xml
index 296f53f2c0..17eb66ed83 100644
index 296f53f2c00..17eb66ed83f 100644
--- a/res/values-kk/arrays.xml
+++ b/res/values-kk/arrays.xml
@@ -475,10 +475,6 @@
@ -707,7 +707,7 @@ index 296f53f2c0..17eb66ed83 100644
<item msgid="342232116597649254">"Жоқ"</item>
<item msgid="2163015208097377388">"Иә"</item>
diff --git a/res/values-km/arrays.xml b/res/values-km/arrays.xml
index c8ccd75d46..0f3e9543e7 100644
index c8ccd75d46f..0f3e9543e79 100644
--- a/res/values-km/arrays.xml
+++ b/res/values-km/arrays.xml
@@ -475,10 +475,6 @@
@ -722,7 +722,7 @@ index c8ccd75d46..0f3e9543e7 100644
<item msgid="342232116597649254">"ទេ"</item>
<item msgid="2163015208097377388">"បាទ/ចាស"</item>
diff --git a/res/values-kn/arrays.xml b/res/values-kn/arrays.xml
index 4cf184bc0e..84e36ff71f 100644
index 4cf184bc0ec..84e36ff71f4 100644
--- a/res/values-kn/arrays.xml
+++ b/res/values-kn/arrays.xml
@@ -475,10 +475,6 @@
@ -737,7 +737,7 @@ index 4cf184bc0e..84e36ff71f 100644
<item msgid="342232116597649254">"ಇಲ್ಲ"</item>
<item msgid="2163015208097377388">"ಹೌದು"</item>
diff --git a/res/values-ko/arrays.xml b/res/values-ko/arrays.xml
index ebaf3c0ba3..c4156fe1a4 100644
index ebaf3c0ba30..c4156fe1a4d 100644
--- a/res/values-ko/arrays.xml
+++ b/res/values-ko/arrays.xml
@@ -475,10 +475,6 @@
@ -752,7 +752,7 @@ index ebaf3c0ba3..c4156fe1a4 100644
<item msgid="342232116597649254">"아니요"</item>
<item msgid="2163015208097377388">"예"</item>
diff --git a/res/values-ky/arrays.xml b/res/values-ky/arrays.xml
index 165f2c6b33..17e8bae37e 100644
index 165f2c6b338..17e8bae37e2 100644
--- a/res/values-ky/arrays.xml
+++ b/res/values-ky/arrays.xml
@@ -475,10 +475,6 @@
@ -767,7 +767,7 @@ index 165f2c6b33..17e8bae37e 100644
<item msgid="342232116597649254">"Жок"</item>
<item msgid="2163015208097377388">"Ооба"</item>
diff --git a/res/values-lo/arrays.xml b/res/values-lo/arrays.xml
index 48d3bd9b83..f1373922b6 100644
index 48d3bd9b838..f1373922b68 100644
--- a/res/values-lo/arrays.xml
+++ b/res/values-lo/arrays.xml
@@ -475,10 +475,6 @@
@ -782,7 +782,7 @@ index 48d3bd9b83..f1373922b6 100644
<item msgid="342232116597649254">"ບໍ່"</item>
<item msgid="2163015208097377388">"ແມ່ນ"</item>
diff --git a/res/values-lt/arrays.xml b/res/values-lt/arrays.xml
index bf9dbe19a2..324451d99b 100644
index bf9dbe19a22..324451d99b4 100644
--- a/res/values-lt/arrays.xml
+++ b/res/values-lt/arrays.xml
@@ -475,10 +475,6 @@
@ -797,7 +797,7 @@ index bf9dbe19a2..324451d99b 100644
<item msgid="342232116597649254">"Ne"</item>
<item msgid="2163015208097377388">"Taip"</item>
diff --git a/res/values-lv/arrays.xml b/res/values-lv/arrays.xml
index 0463c08d65..c3c2cdd6a2 100644
index 0463c08d65d..c3c2cdd6a2e 100644
--- a/res/values-lv/arrays.xml
+++ b/res/values-lv/arrays.xml
@@ -475,10 +475,6 @@
@ -812,7 +812,7 @@ index 0463c08d65..c3c2cdd6a2 100644
<item msgid="342232116597649254">"Nē"</item>
<item msgid="2163015208097377388">"Jā"</item>
diff --git a/res/values-mk/arrays.xml b/res/values-mk/arrays.xml
index f4fb3d37d2..6614a5dd30 100644
index f4fb3d37d2a..6614a5dd300 100644
--- a/res/values-mk/arrays.xml
+++ b/res/values-mk/arrays.xml
@@ -475,10 +475,6 @@
@ -827,7 +827,7 @@ index f4fb3d37d2..6614a5dd30 100644
<item msgid="342232116597649254">"Не"</item>
<item msgid="2163015208097377388">"Да"</item>
diff --git a/res/values-ml/arrays.xml b/res/values-ml/arrays.xml
index 90f5e2de07..48bef28038 100644
index 90f5e2de07f..48bef28038c 100644
--- a/res/values-ml/arrays.xml
+++ b/res/values-ml/arrays.xml
@@ -475,10 +475,6 @@
@ -842,7 +842,7 @@ index 90f5e2de07..48bef28038 100644
<item msgid="342232116597649254">"ഇല്ല"</item>
<item msgid="2163015208097377388">"ഉവ്വ്"</item>
diff --git a/res/values-mn/arrays.xml b/res/values-mn/arrays.xml
index 0fc94feb47..29aa5258f9 100644
index 0fc94feb47e..29aa5258f9d 100644
--- a/res/values-mn/arrays.xml
+++ b/res/values-mn/arrays.xml
@@ -475,10 +475,6 @@
@ -857,7 +857,7 @@ index 0fc94feb47..29aa5258f9 100644
<item msgid="342232116597649254">"Үгүй"</item>
<item msgid="2163015208097377388">"Тийм"</item>
diff --git a/res/values-mr/arrays.xml b/res/values-mr/arrays.xml
index 19eed5bd5b..dfd860952c 100644
index 19eed5bd5be..dfd860952c7 100644
--- a/res/values-mr/arrays.xml
+++ b/res/values-mr/arrays.xml
@@ -475,10 +475,6 @@
@ -872,7 +872,7 @@ index 19eed5bd5b..dfd860952c 100644
<item msgid="342232116597649254">"नाही"</item>
<item msgid="2163015208097377388">"होय"</item>
diff --git a/res/values-ms/arrays.xml b/res/values-ms/arrays.xml
index 7a61cb0473..e9db095279 100644
index 7a61cb0473d..e9db0952792 100644
--- a/res/values-ms/arrays.xml
+++ b/res/values-ms/arrays.xml
@@ -475,10 +475,6 @@
@ -887,7 +887,7 @@ index 7a61cb0473..e9db095279 100644
<item msgid="342232116597649254">"Tidak"</item>
<item msgid="2163015208097377388">"Ya"</item>
diff --git a/res/values-my/arrays.xml b/res/values-my/arrays.xml
index 60eb09db46..0a48a4fdcf 100644
index 60eb09db465..0a48a4fdcf0 100644
--- a/res/values-my/arrays.xml
+++ b/res/values-my/arrays.xml
@@ -475,10 +475,6 @@
@ -902,7 +902,7 @@ index 60eb09db46..0a48a4fdcf 100644
<item msgid="342232116597649254">"No"</item>
<item msgid="2163015208097377388">"Yes"</item>
diff --git a/res/values-nb/arrays.xml b/res/values-nb/arrays.xml
index 73f2b60d75..0a848af8c2 100644
index 73f2b60d75f..0a848af8c2b 100644
--- a/res/values-nb/arrays.xml
+++ b/res/values-nb/arrays.xml
@@ -475,10 +475,6 @@
@ -917,7 +917,7 @@ index 73f2b60d75..0a848af8c2 100644
<item msgid="342232116597649254">"Nei"</item>
<item msgid="2163015208097377388">"Ja"</item>
diff --git a/res/values-ne/arrays.xml b/res/values-ne/arrays.xml
index 3f4810694d..f7d966ac45 100644
index 3f4810694d7..f7d966ac450 100644
--- a/res/values-ne/arrays.xml
+++ b/res/values-ne/arrays.xml
@@ -475,10 +475,6 @@
@ -932,7 +932,7 @@ index 3f4810694d..f7d966ac45 100644
<item msgid="342232116597649254">"होइन"</item>
<item msgid="2163015208097377388">"हो"</item>
diff --git a/res/values-nl/arrays.xml b/res/values-nl/arrays.xml
index ae3fbb3286..fc48746a6a 100644
index ae3fbb32869..fc48746a6a3 100644
--- a/res/values-nl/arrays.xml
+++ b/res/values-nl/arrays.xml
@@ -475,10 +475,6 @@
@ -947,7 +947,7 @@ index ae3fbb3286..fc48746a6a 100644
<item msgid="342232116597649254">"Nee"</item>
<item msgid="2163015208097377388">"Ja"</item>
diff --git a/res/values-or/arrays.xml b/res/values-or/arrays.xml
index cb53759887..11469a960e 100644
index cb53759887f..11469a960e5 100644
--- a/res/values-or/arrays.xml
+++ b/res/values-or/arrays.xml
@@ -475,10 +475,6 @@
@ -962,7 +962,7 @@ index cb53759887..11469a960e 100644
<item msgid="342232116597649254">"ନା"</item>
<item msgid="2163015208097377388">"ହଁ"</item>
diff --git a/res/values-pa/arrays.xml b/res/values-pa/arrays.xml
index 9ab1d808bc..19a251fb80 100644
index 9ab1d808bc8..19a251fb80d 100644
--- a/res/values-pa/arrays.xml
+++ b/res/values-pa/arrays.xml
@@ -475,10 +475,6 @@
@ -977,7 +977,7 @@ index 9ab1d808bc..19a251fb80 100644
<item msgid="342232116597649254">"ਨਹੀਂ"</item>
<item msgid="2163015208097377388">"ਹਾਂ"</item>
diff --git a/res/values-pl/arrays.xml b/res/values-pl/arrays.xml
index 1b0f899fcb..ca2b43b031 100644
index 1b0f899fcbd..ca2b43b0313 100644
--- a/res/values-pl/arrays.xml
+++ b/res/values-pl/arrays.xml
@@ -475,10 +475,6 @@
@ -992,7 +992,7 @@ index 1b0f899fcb..ca2b43b031 100644
<item msgid="342232116597649254">"Nie"</item>
<item msgid="2163015208097377388">"Tak"</item>
diff --git a/res/values-pt-rBR/arrays.xml b/res/values-pt-rBR/arrays.xml
index 0cb0d0c1ee..6bbd0c3d35 100644
index 0cb0d0c1ee6..6bbd0c3d35c 100644
--- a/res/values-pt-rBR/arrays.xml
+++ b/res/values-pt-rBR/arrays.xml
@@ -475,10 +475,6 @@
@ -1007,7 +1007,7 @@ index 0cb0d0c1ee..6bbd0c3d35 100644
<item msgid="342232116597649254">"Não"</item>
<item msgid="2163015208097377388">"Sim"</item>
diff --git a/res/values-pt-rPT/arrays.xml b/res/values-pt-rPT/arrays.xml
index aec6985e28..953ce83cb7 100644
index aec6985e280..953ce83cb71 100644
--- a/res/values-pt-rPT/arrays.xml
+++ b/res/values-pt-rPT/arrays.xml
@@ -475,10 +475,6 @@
@ -1022,7 +1022,7 @@ index aec6985e28..953ce83cb7 100644
<item msgid="342232116597649254">"Não"</item>
<item msgid="2163015208097377388">"Sim"</item>
diff --git a/res/values-pt/arrays.xml b/res/values-pt/arrays.xml
index 0cb0d0c1ee..6bbd0c3d35 100644
index 0cb0d0c1ee6..6bbd0c3d35c 100644
--- a/res/values-pt/arrays.xml
+++ b/res/values-pt/arrays.xml
@@ -475,10 +475,6 @@
@ -1037,7 +1037,7 @@ index 0cb0d0c1ee..6bbd0c3d35 100644
<item msgid="342232116597649254">"Não"</item>
<item msgid="2163015208097377388">"Sim"</item>
diff --git a/res/values-ro/arrays.xml b/res/values-ro/arrays.xml
index f12e145e4d..d31680423b 100644
index f12e145e4dc..d31680423b6 100644
--- a/res/values-ro/arrays.xml
+++ b/res/values-ro/arrays.xml
@@ -475,10 +475,6 @@
@ -1052,7 +1052,7 @@ index f12e145e4d..d31680423b 100644
<item msgid="342232116597649254">"Nu"</item>
<item msgid="2163015208097377388">"Da"</item>
diff --git a/res/values-ru/arrays.xml b/res/values-ru/arrays.xml
index ac5e085dc1..4f3f001d52 100644
index ac5e085dc10..4f3f001d52f 100644
--- a/res/values-ru/arrays.xml
+++ b/res/values-ru/arrays.xml
@@ -475,10 +475,6 @@
@ -1067,7 +1067,7 @@ index ac5e085dc1..4f3f001d52 100644
<item msgid="342232116597649254">"Нет"</item>
<item msgid="2163015208097377388">"Да"</item>
diff --git a/res/values-si/arrays.xml b/res/values-si/arrays.xml
index 67c9a97f09..967ab1847a 100644
index 67c9a97f091..967ab1847ab 100644
--- a/res/values-si/arrays.xml
+++ b/res/values-si/arrays.xml
@@ -475,10 +475,6 @@
@ -1082,7 +1082,7 @@ index 67c9a97f09..967ab1847a 100644
<item msgid="342232116597649254">"නැත"</item>
<item msgid="2163015208097377388">"ඔව්"</item>
diff --git a/res/values-sk/arrays.xml b/res/values-sk/arrays.xml
index 639e8faafa..b4bceee991 100644
index 639e8faafa7..b4bceee9912 100644
--- a/res/values-sk/arrays.xml
+++ b/res/values-sk/arrays.xml
@@ -475,10 +475,6 @@
@ -1097,7 +1097,7 @@ index 639e8faafa..b4bceee991 100644
<item msgid="342232116597649254">"Nie"</item>
<item msgid="2163015208097377388">"Áno"</item>
diff --git a/res/values-sl/arrays.xml b/res/values-sl/arrays.xml
index 31ff81fef9..4bc9cf638e 100644
index 31ff81fef93..4bc9cf638e7 100644
--- a/res/values-sl/arrays.xml
+++ b/res/values-sl/arrays.xml
@@ -475,10 +475,6 @@
@ -1112,7 +1112,7 @@ index 31ff81fef9..4bc9cf638e 100644
<item msgid="342232116597649254">"Ne"</item>
<item msgid="2163015208097377388">"Da"</item>
diff --git a/res/values-sq/arrays.xml b/res/values-sq/arrays.xml
index 5a9fde5c17..fe8b19cf2b 100644
index 5a9fde5c178..fe8b19cf2bb 100644
--- a/res/values-sq/arrays.xml
+++ b/res/values-sq/arrays.xml
@@ -475,10 +475,6 @@
@ -1127,7 +1127,7 @@ index 5a9fde5c17..fe8b19cf2b 100644
<item msgid="342232116597649254">"Jo"</item>
<item msgid="2163015208097377388">"Po"</item>
diff --git a/res/values-sr/arrays.xml b/res/values-sr/arrays.xml
index 1c975e04c8..8308828975 100644
index 1c975e04c8e..83088289757 100644
--- a/res/values-sr/arrays.xml
+++ b/res/values-sr/arrays.xml
@@ -475,10 +475,6 @@
@ -1142,7 +1142,7 @@ index 1c975e04c8..8308828975 100644
<item msgid="342232116597649254">"Не"</item>
<item msgid="2163015208097377388">"Да"</item>
diff --git a/res/values-sv/arrays.xml b/res/values-sv/arrays.xml
index 00c54a0cb6..95a2a40c9c 100644
index 00c54a0cb6a..95a2a40c9ca 100644
--- a/res/values-sv/arrays.xml
+++ b/res/values-sv/arrays.xml
@@ -475,10 +475,6 @@
@ -1157,7 +1157,7 @@ index 00c54a0cb6..95a2a40c9c 100644
<item msgid="342232116597649254">"Nej"</item>
<item msgid="2163015208097377388">"Ja"</item>
diff --git a/res/values-sw/arrays.xml b/res/values-sw/arrays.xml
index 6eed66078e..d9bffc9693 100644
index 6eed66078e1..d9bffc96938 100644
--- a/res/values-sw/arrays.xml
+++ b/res/values-sw/arrays.xml
@@ -475,10 +475,6 @@
@ -1172,7 +1172,7 @@ index 6eed66078e..d9bffc9693 100644
<item msgid="342232116597649254">"Hapana"</item>
<item msgid="2163015208097377388">"Ndiyo"</item>
diff --git a/res/values-ta/arrays.xml b/res/values-ta/arrays.xml
index 9135fffcfa..f894b9247d 100644
index 9135fffcfad..f894b9247d0 100644
--- a/res/values-ta/arrays.xml
+++ b/res/values-ta/arrays.xml
@@ -475,10 +475,6 @@
@ -1187,7 +1187,7 @@ index 9135fffcfa..f894b9247d 100644
<item msgid="342232116597649254">"வேண்டாம்"</item>
<item msgid="2163015208097377388">"ஆம்"</item>
diff --git a/res/values-te/arrays.xml b/res/values-te/arrays.xml
index 7c9270691b..fd2f4ce74f 100644
index 7c9270691b3..fd2f4ce74f7 100644
--- a/res/values-te/arrays.xml
+++ b/res/values-te/arrays.xml
@@ -475,10 +475,6 @@
@ -1202,7 +1202,7 @@ index 7c9270691b..fd2f4ce74f 100644
<item msgid="342232116597649254">"లేదు"</item>
<item msgid="2163015208097377388">"అవును"</item>
diff --git a/res/values-th/arrays.xml b/res/values-th/arrays.xml
index 33fbe3bb8c..723d88c59c 100644
index 33fbe3bb8c1..723d88c59c7 100644
--- a/res/values-th/arrays.xml
+++ b/res/values-th/arrays.xml
@@ -475,10 +475,6 @@
@ -1217,7 +1217,7 @@ index 33fbe3bb8c..723d88c59c 100644
<item msgid="342232116597649254">"ไม่"</item>
<item msgid="2163015208097377388">"ใช่"</item>
diff --git a/res/values-tl/arrays.xml b/res/values-tl/arrays.xml
index 3d439a67e6..62d500b96f 100644
index 3d439a67e6e..62d500b96fb 100644
--- a/res/values-tl/arrays.xml
+++ b/res/values-tl/arrays.xml
@@ -475,10 +475,6 @@
@ -1232,7 +1232,7 @@ index 3d439a67e6..62d500b96f 100644
<item msgid="342232116597649254">"Hindi"</item>
<item msgid="2163015208097377388">"Oo"</item>
diff --git a/res/values-tr/arrays.xml b/res/values-tr/arrays.xml
index 080847c4cb..e4f388e05c 100644
index 080847c4cb8..e4f388e05c5 100644
--- a/res/values-tr/arrays.xml
+++ b/res/values-tr/arrays.xml
@@ -475,10 +475,6 @@
@ -1247,7 +1247,7 @@ index 080847c4cb..e4f388e05c 100644
<item msgid="342232116597649254">"Hayır"</item>
<item msgid="2163015208097377388">"Evet"</item>
diff --git a/res/values-uk/arrays.xml b/res/values-uk/arrays.xml
index 850a400846..c001d9a2a3 100644
index 850a4008464..c001d9a2a34 100644
--- a/res/values-uk/arrays.xml
+++ b/res/values-uk/arrays.xml
@@ -475,10 +475,6 @@
@ -1262,7 +1262,7 @@ index 850a400846..c001d9a2a3 100644
<item msgid="342232116597649254">"Ні"</item>
<item msgid="2163015208097377388">"Так"</item>
diff --git a/res/values-ur/arrays.xml b/res/values-ur/arrays.xml
index 8b13cf953d..4b377bfc5a 100644
index 8b13cf953da..4b377bfc5a6 100644
--- a/res/values-ur/arrays.xml
+++ b/res/values-ur/arrays.xml
@@ -475,10 +475,6 @@
@ -1277,7 +1277,7 @@ index 8b13cf953d..4b377bfc5a 100644
<item msgid="342232116597649254">"نہیں"</item>
<item msgid="2163015208097377388">"ہاں"</item>
diff --git a/res/values-uz/arrays.xml b/res/values-uz/arrays.xml
index abe944c792..775149e27c 100644
index abe944c792d..775149e27ce 100644
--- a/res/values-uz/arrays.xml
+++ b/res/values-uz/arrays.xml
@@ -475,10 +475,6 @@
@ -1292,7 +1292,7 @@ index abe944c792..775149e27c 100644
<item msgid="342232116597649254">"Yoq"</item>
<item msgid="2163015208097377388">"Ha"</item>
diff --git a/res/values-vi/arrays.xml b/res/values-vi/arrays.xml
index e54b3bc05c..d988e368a5 100644
index e54b3bc05ce..d988e368a5d 100644
--- a/res/values-vi/arrays.xml
+++ b/res/values-vi/arrays.xml
@@ -475,10 +475,6 @@
@ -1307,7 +1307,7 @@ index e54b3bc05c..d988e368a5 100644
<item msgid="342232116597649254">"Không"</item>
<item msgid="2163015208097377388">"Có"</item>
diff --git a/res/values-zh-rCN/arrays.xml b/res/values-zh-rCN/arrays.xml
index fffcf47ae6..1b4a951c70 100644
index fffcf47ae62..1b4a951c701 100644
--- a/res/values-zh-rCN/arrays.xml
+++ b/res/values-zh-rCN/arrays.xml
@@ -475,10 +475,6 @@
@ -1322,7 +1322,7 @@ index fffcf47ae6..1b4a951c70 100644
<item msgid="342232116597649254">"否"</item>
<item msgid="2163015208097377388">"是"</item>
diff --git a/res/values-zh-rHK/arrays.xml b/res/values-zh-rHK/arrays.xml
index 7055620562..9de09cd360 100644
index 7055620562f..9de09cd360e 100644
--- a/res/values-zh-rHK/arrays.xml
+++ b/res/values-zh-rHK/arrays.xml
@@ -475,10 +475,6 @@
@ -1337,7 +1337,7 @@ index 7055620562..9de09cd360 100644
<item msgid="342232116597649254">"否"</item>
<item msgid="2163015208097377388">"是"</item>
diff --git a/res/values-zh-rTW/arrays.xml b/res/values-zh-rTW/arrays.xml
index 2dd50e6cc8..932faf2958 100644
index 2dd50e6cc83..932faf2958b 100644
--- a/res/values-zh-rTW/arrays.xml
+++ b/res/values-zh-rTW/arrays.xml
@@ -475,10 +475,6 @@
@ -1352,7 +1352,7 @@ index 2dd50e6cc8..932faf2958 100644
<item msgid="342232116597649254">"否"</item>
<item msgid="2163015208097377388">"是"</item>
diff --git a/res/values-zu/arrays.xml b/res/values-zu/arrays.xml
index 9a31ab4a07..aa7ae71e02 100644
index 9a31ab4a07b..aa7ae71e02b 100644
--- a/res/values-zu/arrays.xml
+++ b/res/values-zu/arrays.xml
@@ -475,10 +475,6 @@

View File

@ -15,7 +15,7 @@ Closes https://github.com/GrapheneOS/os_issue_tracker/issues/107
4 files changed, 26 insertions(+), 3 deletions(-)
diff --git a/res/values/arrays.xml b/res/values/arrays.xml
index 6d95bcc58b..072004e447 100644
index 6d95bcc58b0..072004e4474 100644
--- a/res/values/arrays.xml
+++ b/res/values/arrays.xml
@@ -1301,16 +1301,19 @@
@ -106,7 +106,7 @@ index 6d95bcc58b..072004e447 100644
<item>"18"</item>
<item>"1"</item>
diff --git a/res/values/strings.xml b/res/values/strings.xml
index e7dcf62ddc..fedb9f3fde 100644
index e7dcf62ddc3..fedb9f3fdea 100644
--- a/res/values/strings.xml
+++ b/res/values/strings.xml
@@ -10942,6 +10942,8 @@
@ -132,7 +132,7 @@ index e7dcf62ddc..fedb9f3fde 100644
<string name="network_3G" translatable="false">3G</string>
<!-- Text for Network 2g [CHAR LIMIT=NONE] -->
diff --git a/src/com/android/settings/network/telephony/EnabledNetworkModePreferenceController.java b/src/com/android/settings/network/telephony/EnabledNetworkModePreferenceController.java
index b9be4c2f10..d577f9ac55 100644
index b9be4c2f107..d577f9ac559 100644
--- a/src/com/android/settings/network/telephony/EnabledNetworkModePreferenceController.java
+++ b/src/com/android/settings/network/telephony/EnabledNetworkModePreferenceController.java
@@ -438,7 +438,6 @@ public class EnabledNetworkModePreferenceController extends
@ -157,7 +157,7 @@ index b9be4c2f10..d577f9ac55 100644
if (MobileNetworkUtils.isWorldMode(mContext, mSubId)) {
preference.setSummary(
diff --git a/src/com/android/settings/network/telephony/PreferredNetworkModePreferenceController.java b/src/com/android/settings/network/telephony/PreferredNetworkModePreferenceController.java
index 965fc729d3..3a7261b5b8 100644
index 965fc729d31..3a7261b5b8f 100644
--- a/src/com/android/settings/network/telephony/PreferredNetworkModePreferenceController.java
+++ b/src/com/android/settings/network/telephony/PreferredNetworkModePreferenceController.java
@@ -143,7 +143,7 @@ public class PreferredNetworkModePreferenceController extends TelephonyBasePrefe

View File

@ -16,7 +16,7 @@ Change-Id: Ic01a142722372d9d57f52947025cd9db23e58ef4
create mode 100644 src/com/android/settings/security/HostsPreferenceController.java
diff --git a/res/values/strings.xml b/res/values/strings.xml
index fedb9f3fde..b5dbdc7d81 100644
index fedb9f3fdea..b5dbdc7d81f 100644
--- a/res/values/strings.xml
+++ b/res/values/strings.xml
@@ -11327,6 +11327,9 @@
@ -30,7 +30,7 @@ index fedb9f3fde..b5dbdc7d81 100644
<string name="privacy_dashboard_title">Privacy</string>
<!-- Summary for the top level Privacy Settings [CHAR LIMIT=NONE]-->
diff --git a/res/xml/security_dashboard_settings.xml b/res/xml/security_dashboard_settings.xml
index 08328ad7b6..23a39d3106 100644
index 08328ad7b62..23a39d31067 100644
--- a/res/xml/security_dashboard_settings.xml
+++ b/res/xml/security_dashboard_settings.xml
@@ -75,6 +75,12 @@
@ -48,7 +48,7 @@ index 08328ad7b6..23a39d3106 100644
<!-- work profile security section -->
diff --git a/src/com/android/settings/security/HostsPreferenceController.java b/src/com/android/settings/security/HostsPreferenceController.java
new file mode 100644
index 0000000000..d8af6d2649
index 00000000000..d8af6d26490
--- /dev/null
+++ b/src/com/android/settings/security/HostsPreferenceController.java
@@ -0,0 +1,106 @@
@ -159,7 +159,7 @@ index 0000000000..d8af6d2649
+ }
+}
diff --git a/src/com/android/settings/security/SecuritySettings.java b/src/com/android/settings/security/SecuritySettings.java
index a5e0add739..88ba2ece3a 100644
index a5e0add739b..88ba2ece3a2 100644
--- a/src/com/android/settings/security/SecuritySettings.java
+++ b/src/com/android/settings/security/SecuritySettings.java
@@ -123,6 +123,7 @@ public class SecuritySettings extends DashboardFragment {

View File

@ -11,7 +11,7 @@ Subject: [PATCH] add a toggle for forcibly disabling SUPL
create mode 100644 src/com/android/settings/location/ForceDisableSuplPrefController.java
diff --git a/res/values/strings.xml b/res/values/strings.xml
index b5dbdc7d81..a5aab8e5d0 100644
index b5dbdc7d81f..a5aab8e5d08 100644
--- a/res/values/strings.xml
+++ b/res/values/strings.xml
@@ -11517,4 +11517,7 @@
@ -23,7 +23,7 @@ index b5dbdc7d81..a5aab8e5d0 100644
+ <string name="force_disable_supl_summary">Always disable SUPL assisted location support regardless of carrier configuration or emergency call status (does not disable control plane A-GNSS and DivestOS does not send IMSI to the SUPL)</string>
</resources>
diff --git a/res/xml/location_settings.xml b/res/xml/location_settings.xml
index 136e6ab619..ae1a0e0f3e 100644
index 136e6ab6195..ae1a0e0f3e2 100644
--- a/res/xml/location_settings.xml
+++ b/res/xml/location_settings.xml
@@ -68,6 +68,12 @@
@ -41,7 +41,7 @@ index 136e6ab619..ae1a0e0f3e 100644
<PreferenceCategory
diff --git a/src/com/android/settings/location/ForceDisableSuplPrefController.java b/src/com/android/settings/location/ForceDisableSuplPrefController.java
new file mode 100644
index 0000000000..1cfae3f3a6
index 00000000000..1cfae3f3a65
--- /dev/null
+++ b/src/com/android/settings/location/ForceDisableSuplPrefController.java
@@ -0,0 +1,41 @@

View File

@ -16,7 +16,7 @@ Signed-off-by: Tad <tad@spotco.us>
create mode 100644 src/com/android/settings/security/SigSpoofPreferenceController.java
diff --git a/res/values/strings.xml b/res/values/strings.xml
index a5aab8e5d0..85985433c4 100644
index a5aab8e5d08..85985433c4a 100644
--- a/res/values/strings.xml
+++ b/res/values/strings.xml
@@ -11330,6 +11330,9 @@
@ -30,7 +30,7 @@ index a5aab8e5d0..85985433c4 100644
<string name="privacy_dashboard_title">Privacy</string>
<!-- Summary for the top level Privacy Settings [CHAR LIMIT=NONE]-->
diff --git a/res/xml/security_dashboard_settings.xml b/res/xml/security_dashboard_settings.xml
index 23a39d3106..c5a6c8cada 100644
index 23a39d31067..c5a6c8cadad 100644
--- a/res/xml/security_dashboard_settings.xml
+++ b/res/xml/security_dashboard_settings.xml
@@ -81,6 +81,12 @@
@ -47,7 +47,7 @@ index 23a39d3106..c5a6c8cada 100644
<!-- work profile security section -->
diff --git a/src/com/android/settings/security/SecuritySettings.java b/src/com/android/settings/security/SecuritySettings.java
index 88ba2ece3a..3ba3f518b0 100644
index 88ba2ece3a2..3ba3f518b08 100644
--- a/src/com/android/settings/security/SecuritySettings.java
+++ b/src/com/android/settings/security/SecuritySettings.java
@@ -124,6 +124,7 @@ public class SecuritySettings extends DashboardFragment {
@ -60,7 +60,7 @@ index 88ba2ece3a..3ba3f518b0 100644
controllers.addAll(securityPreferenceControllers);
diff --git a/src/com/android/settings/security/SigSpoofPreferenceController.java b/src/com/android/settings/security/SigSpoofPreferenceController.java
new file mode 100644
index 0000000000..258b59b0b0
index 00000000000..258b59b0b07
--- /dev/null
+++ b/src/com/android/settings/security/SigSpoofPreferenceController.java
@@ -0,0 +1,106 @@

View File

@ -0,0 +1,129 @@
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
From: Weng Su <wengsu@google.com>
Date: Fri, 7 Jul 2023 19:52:04 +0800
Subject: [PATCH] Restrict ApnEditor settings
- Finish ApnEditor settings if user is not an admin
- Finish ApnEditor settings if user has DISALLOW_CONFIG_MOBILE_NETWORKS restriction
Bug: 279902472
Test: manual test
make RunSettingsRoboTests ROBOTEST_FILTER=ApnEditorTest
(cherry picked from https://googleplex-android-review.googlesource.com/q/commit:5c2d727b8f9198bf758a4896eda7c9e5385435ff)
Merged-In: Iecdbbff7e21dfb11e3ba385858747a220cfd3e04
Change-Id: Iecdbbff7e21dfb11e3ba385858747a220cfd3e04
---
.../android/settings/network/ApnEditor.java | 23 +++++++++++++++
.../settings/network/ApnEditorTest.java | 29 +++++++++++++++++++
2 files changed, 52 insertions(+)
diff --git a/src/com/android/settings/network/ApnEditor.java b/src/com/android/settings/network/ApnEditor.java
index 92e689ddd16..cb1c5cce242 100644
--- a/src/com/android/settings/network/ApnEditor.java
+++ b/src/com/android/settings/network/ApnEditor.java
@@ -27,6 +27,7 @@ import android.database.Cursor;
import android.net.Uri;
import android.os.Bundle;
import android.os.PersistableBundle;
+import android.os.UserManager;
import android.provider.Telephony;
import android.telephony.CarrierConfigManager;
import android.telephony.ServiceState;
@@ -209,6 +210,11 @@ public class ApnEditor extends SettingsPreferenceFragment
@Override
public void onCreate(Bundle icicle) {
super.onCreate(icicle);
+ if (isUserRestricted()) {
+ Log.e(TAG, "This setting isn't available due to user restriction.");
+ finish();
+ return;
+ }
addPreferencesFromResource(R.xml.apn_editor);
@@ -1203,6 +1209,23 @@ public class ApnEditor extends SettingsPreferenceFragment
return userEnteredApnType;
}
+ @VisibleForTesting
+ boolean isUserRestricted() {
+ UserManager userManager = getContext().getSystemService(UserManager.class);
+ if (userManager == null) {
+ return false;
+ }
+ if (!userManager.isAdminUser()) {
+ Log.e(TAG, "User is not an admin");
+ return true;
+ }
+ if (userManager.hasUserRestriction(UserManager.DISALLOW_CONFIG_MOBILE_NETWORKS)) {
+ Log.e(TAG, "User is not allowed to configure mobile network");
+ return true;
+ }
+ return false;
+ }
+
public static class ErrorDialog extends InstrumentedDialogFragment {
public static void showError(ApnEditor editor) {
diff --git a/tests/robotests/src/com/android/settings/network/ApnEditorTest.java b/tests/robotests/src/com/android/settings/network/ApnEditorTest.java
index dc14418b596..6251484aad9 100644
--- a/tests/robotests/src/com/android/settings/network/ApnEditorTest.java
+++ b/tests/robotests/src/com/android/settings/network/ApnEditorTest.java
@@ -33,6 +33,7 @@ import android.content.Context;
import android.content.res.Resources;
import android.database.Cursor;
import android.net.Uri;
+import android.os.UserManager;
import android.view.KeyEvent;
import android.view.Menu;
import android.view.MenuItem;
@@ -101,6 +102,8 @@ public class ApnEditorTest {
private ApnEditor mApnEditorUT;
private FragmentActivity mActivity;
+ @Mock
+ private UserManager mUserManager;
private Resources mResources;
@Before
@@ -116,6 +119,11 @@ public class ApnEditorTest {
doNothing().when(mApnEditorUT).showError();
when(mApnEditorUT.getContext()).thenReturn(RuntimeEnvironment.application);
+ doReturn(mUserManager).when(mContext).getSystemService(UserManager.class);
+ doReturn(true).when(mUserManager).isAdminUser();
+ doReturn(false).when(mUserManager)
+ .hasUserRestriction(UserManager.DISALLOW_CONFIG_MOBILE_NETWORKS);
+
setMockPreference(mActivity);
mApnEditorUT.mApnData = new FakeApnData(APN_DATA);
mApnEditorUT.sNotSet = "Not Set";
@@ -454,6 +462,27 @@ public class ApnEditorTest {
assertThat(ApnEditor.formatInteger("not an int")).isEqualTo("not an int");
}
+ @Test
+ @Config(shadows = ShadowFragment.class)
+ public void onCreate_notAdminUser_shouldFinish() {
+ doReturn(false).when(mUserManager).isAdminUser();
+
+ mApnEditorUT.onCreate(null);
+
+ verify(mApnEditorUT).finish();
+ }
+
+ @Test
+ @Config(shadows = ShadowFragment.class)
+ public void onCreate_hasUserRestriction_shouldFinish() {
+ doReturn(true).when(mUserManager)
+ .hasUserRestriction(UserManager.DISALLOW_CONFIG_MOBILE_NETWORKS);
+
+ mApnEditorUT.onCreate(null);
+
+ verify(mApnEditorUT).finish();
+ }
+
@Test
public void onCreate_noAction_shouldFinishAndNoCrash() {
doNothing().when(mApnEditorUT).addPreferencesFromResource(anyInt());

View File

@ -0,0 +1,48 @@
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
From: Grace Jia <xiaotonj@google.com>
Date: Thu, 20 Jul 2023 13:42:50 -0700
Subject: [PATCH] Fix vulnerability in CallRedirectionService.
Currently when the CallRedirectionService binding died, we didn't do
anything, which cause malicious app start activities even not run in the
background by implementing a CallRedirectionService and overriding the
onPlaceCall method to schedule a activity start job in an independent
process and then kill itself. In that way, the activity can still
start after the CallRedirectionService died. Fix this by unbinding the
service when the binding died.
Bug: b/289809991
Test: Using testapp provided in bug to make sure the test activity can't
be started
(cherry picked from https://googleplex-android-review.googlesource.com/q/commit:29b52e3cd027da2d8644450a4dee3a7d95dc0043)
Merged-In: I065d361b83700474a1efab2a75928427ee0a14ba
Change-Id: I065d361b83700474a1efab2a75928427ee0a14ba
---
.../callredirection/CallRedirectionProcessor.java | 14 ++++++++++++++
1 file changed, 14 insertions(+)
diff --git a/src/com/android/server/telecom/callredirection/CallRedirectionProcessor.java b/src/com/android/server/telecom/callredirection/CallRedirectionProcessor.java
index 5de576ccb..b7c719689 100644
--- a/src/com/android/server/telecom/callredirection/CallRedirectionProcessor.java
+++ b/src/com/android/server/telecom/callredirection/CallRedirectionProcessor.java
@@ -164,6 +164,20 @@ public class CallRedirectionProcessor implements CallRedirectionCallback {
Log.endSession();
}
}
+
+ @Override
+ public void onBindingDied(ComponentName componentName) {
+ // Make sure we unbind the service if binding died to avoid background stating
+ // activity leaks
+ Log.startSession("CRSC.oBD");
+ try {
+ synchronized (mTelecomLock) {
+ finishCallRedirection();
+ }
+ } finally {
+ Log.endSession();
+ }
+ }
}
private class CallRedirectionAdapter extends ICallRedirectionAdapter.Stub {

View File

@ -98,6 +98,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-09-05/2023-10-05/' core/version_defaults.mk; #Bump Security String #Q_asb_2023-10 #XXX
fi;
if enterAndClear "build/soong"; then
@ -129,6 +130,10 @@ if enterAndClear "external/libvpx"; then
applyPatch "$DOS_PATCHES_COMMON/android_external_libvpx/CVE-2023-5217.patch"; #VP8: disallow thread count changes
fi;
if enterAndClear "external/libxml2"; then
applyPatch "$DOS_PATCHES/android_external_libxml2/368053.patch"; #R_asb_2023-10 malloc-fail: Fix OOB read after xmlRegGetCounter
fi;
if enterAndClear "external/svox"; then
git revert --no-edit 1419d63b4889a26d22443fd8df1f9073bf229d3d; #Add back Makefiles
sed -i '12iLOCAL_SDK_VERSION := current' pico/Android.mk; #Fix build under Pie
@ -141,6 +146,14 @@ git fetch https://github.com/LineageOS/android_external_zlib refs/changes/70/352
fi;
if enterAndClear "frameworks/base"; then
applyPatch "$DOS_PATCHES/android_frameworks_base/368055.patch"; #R_asb_2023-10 RingtoneManager: verify default ringtone is audio
applyPatch "$DOS_PATCHES/android_frameworks_base/368059.patch"; #R_asb_2023-10 Do not share key mappings with JNI object
applyPatch "$DOS_PATCHES/android_frameworks_base/368060-backport.patch"; #R_asb_2023-10 Verify URI Permissions in Autofill RemoteViews
applyPatch "$DOS_PATCHES/android_frameworks_base/368061.patch"; #R_asb_2023-10 Fix KCM key mapping cloning
applyPatch "$DOS_PATCHES/android_frameworks_base/368062-backport.patch"; #R_asb_2023-10 Disallow loading icon from content URI to PipMenu
applyPatch "$DOS_PATCHES/android_frameworks_base/368063.patch"; #R_asb_2023-10 Fixing DatabaseUtils to detect malformed UTF-16 strings
#applyPatch "$DOS_PATCHES/android_frameworks_base/368065-backport.patch"; #R_asb_2023-10 SettingsProvider: exclude secure_frp_mode from resets
applyPatch "$DOS_PATCHES/android_frameworks_base/368067.patch"; #R_asb_2023-10 Revert "DO NOT MERGE Dismiss keyguard when simpin auth'd and..."
#applyPatch "$DOS_PATCHES/android_frameworks_base/272645.patch"; #ten-bt-sbc-hd-dualchannel: Add CHANNEL_MODE_DUAL_CHANNEL constant (ValdikSS)
#applyPatch "$DOS_PATCHES/android_frameworks_base/272646-forwardport.patch"; #ten-bt-sbc-hd-dualchannel: Add Dual Channel into Bluetooth Audio Channel Mode developer options menu (ValdikSS)
#applyPatch "$DOS_PATCHES/android_frameworks_base/272647.patch"; #ten-bt-sbc-hd-dualchannel: Allow SBC as HD audio codec in Bluetooth device configuration (ValdikSS)
@ -316,6 +329,7 @@ fi;
if enterAndClear "packages/apps/Settings"; then
git revert --no-edit 486980cfecce2ca64267f41462f9371486308e9d; #Don't hide OEM unlock
applyPatch "$DOS_PATCHES/android_packages_apps_Settings/368069-backport.patch"; #R_asb_2023-10 Restrict ApnEditor settings
#applyPatch "$DOS_PATCHES/android_packages_apps_Settings/272651.patch"; #ten-bt-sbc-hd-dualchannel: Add Dual Channel into Bluetooth Audio Channel Mode developer options menu (ValdikSS)
applyPatch "$DOS_PATCHES/android_packages_apps_Settings/0001-Captive_Portal_Toggle.patch"; #Add option to disable captive portal checks (MSe1969)
#applyPatch "$DOS_PATCHES/android_packages_apps_Settings/0001-Captive_Portal_Toggle-gos.patch"; #Add option to disable captive portal checks (GrapheneOS) #FIXME: needs work
@ -369,6 +383,10 @@ fi;
#cp $DOS_PATCHES_COMMON/android_packages_providers_TelephonyProvider/carrier_list.* assets/;
#fi;
if enterAndClear "packages/services/Telecomm"; then
applyPatch "$DOS_PATCHES/android_packages_services_Telecomm/368072.patch"; #R_asb_2023-10 Fix vulnerability in CallRedirectionService.
fi;
if enterAndClear "prebuilts/abi-dumps/vndk"; then
applyPatch "$DOS_PATCHES/android_prebuilts_abi-dumps_vndk/0001-protobuf-avi.patch"; #Work around ABI changes from compiler hardening (GrapheneOS)
fi;