diff --git a/aosp_diff/preliminary/build/make/0004-Update-security_patch_level-string.patch b/aosp_diff/preliminary/build/make/0004-Update-security_patch_level-string.patch index ee453e1081..f47fe5e008 100644 --- a/aosp_diff/preliminary/build/make/0004-Update-security_patch_level-string.patch +++ b/aosp_diff/preliminary/build/make/0004-Update-security_patch_level-string.patch @@ -20,7 +20,7 @@ index 419ff1aadc..fbbe777754 100644 # It must match one of the Android Security Patch Level strings of the Public Security Bulletins. # If there is no $PLATFORM_SECURITY_PATCH set, keep it empty. - PLATFORM_SECURITY_PATCH := 2023-05-05 -+ PLATFORM_SECURITY_PATCH := 2024-08-01 ++ PLATFORM_SECURITY_PATCH := 2024-09-01 endif include $(BUILD_SYSTEM)/version_util.mk diff --git a/aosp_diff/preliminary/frameworks/av/0033-omx-check-HDR10-info-param-size.bulletin.patch b/aosp_diff/preliminary/frameworks/av/0033-omx-check-HDR10-info-param-size.bulletin.patch new file mode 100644 index 0000000000..7791d4f037 --- /dev/null +++ b/aosp_diff/preliminary/frameworks/av/0033-omx-check-HDR10-info-param-size.bulletin.patch @@ -0,0 +1,37 @@ +From 9c087eac3e4ffbb0e369e59d30dd96a1d86e89f7 Mon Sep 17 00:00:00 2001 +From: Wonsik Kim +Date: Fri, 28 Jun 2024 00:33:51 +0000 +Subject: [PATCH] omx: check HDR10+ info param size + +Bug: 329641908 +Test: presubmit +Flag: EXEMPT security fix +(cherry picked from https://googleplex-android-review.googlesource.com/q/commit:53298956ba6bb8f147a632d7aaed8566dfc203ee) +(cherry picked from https://googleplex-android-review.googlesource.com/q/commit:f816148a719d2a3bbf432f11da98b3d5fa7de74f) +Merged-In: I72523e1de61e5f947174272b732e170e1c2964df +Change-Id: I72523e1de61e5f947174272b732e170e1c2964df +--- + media/libstagefright/omx/SoftVideoDecoderOMXComponent.cpp | 7 +++++++ + 1 file changed, 7 insertions(+) + +diff --git a/media/libstagefright/omx/SoftVideoDecoderOMXComponent.cpp b/media/libstagefright/omx/SoftVideoDecoderOMXComponent.cpp +index 418302389d..4ab5d10609 100644 +--- a/media/libstagefright/omx/SoftVideoDecoderOMXComponent.cpp ++++ b/media/libstagefright/omx/SoftVideoDecoderOMXComponent.cpp +@@ -619,6 +619,13 @@ OMX_ERRORTYPE SoftVideoDecoderOMXComponent::getConfig( + if (!isValidOMXParam(outParams)) { + return OMX_ErrorBadParameter; + } ++ if (offsetof(DescribeHDR10PlusInfoParams, nValue) + outParams->nParamSize > ++ outParams->nSize) { ++ ALOGE("b/329641908: too large param size; nParamSize=%u nSize=%u", ++ outParams->nParamSize, outParams->nSize); ++ android_errorWriteLog(0x534e4554, "329641908"); ++ return OMX_ErrorBadParameter; ++ } + + outParams->nParamSizeUsed = info->size(); + +-- +2.46.0.rc2.264.g509ed76dc8-goog + diff --git a/aosp_diff/preliminary/frameworks/base/99_0209-DO-NOT-MERGE-Ignore-Sanitized-uri-scheme-by-removing.patch b/aosp_diff/preliminary/frameworks/base/99_0209-DO-NOT-MERGE-Ignore-Sanitized-uri-scheme-by-removing.patch new file mode 100644 index 0000000000..96e43ab029 --- /dev/null +++ b/aosp_diff/preliminary/frameworks/base/99_0209-DO-NOT-MERGE-Ignore-Sanitized-uri-scheme-by-removing.patch @@ -0,0 +1,85 @@ +From 5258b4797cbb000819fa7bbc1821351e2d8a7749 Mon Sep 17 00:00:00 2001 +From: Kiran Ramachandra +Date: Thu, 30 May 2024 21:21:12 +0000 +Subject: [PATCH] DO NOT MERGE Ignore - Sanitized uri scheme by removing scheme + delimiter + +Initially considered removing unsupported characters as per IANA guidelines, but this could break applications that use custom schemes with asterisks. Instead, opted to remove only the "://" to minimize disruption + +Bug: 261721900 +Test: atest FrameworksCoreTests:android.net.UriTest + +No-Typo-Check: The unit test is specifically written to test few cases, string "http://https://" is not a typo + +NOTE FOR REVIEWERS - original patch and result patch are not identical. +PLEASE REVIEW CAREFULLY. +Diffs between the patches: + @AsbSecurityTest(cveBugId = 261721900) +> + @SmallTest +> + public void testSchemeSanitization() { +> + Uri uri = new Uri.Builder() +> + .scheme("http://https://evil.com:/te:st/") +> + .authority("google.com").path("one/way").build(); +> + assertEquals("httphttpsevil.com:/te:st/", uri.getScheme()); +> + assertEquals("httphttpsevil.com:/te:st/://google.com/one/way", uri.toString()); +> + } +> + + +Original patch: + diff --git a/core/java/android/net/Uri.java b/core/java/android/net/Uri.java +old mode 100644 +new mode 100644 +--- + core/java/android/net/Uri.java | 6 +++++- + core/tests/coretests/src/android/net/UriTest.java | 11 +++++++++++ + 2 files changed, 16 insertions(+), 1 deletion(-) + +diff --git a/core/java/android/net/Uri.java b/core/java/android/net/Uri.java +index 3da696ad0bc7..f0262e9f7566 100644 +--- a/core/java/android/net/Uri.java ++++ b/core/java/android/net/Uri.java +@@ -1388,7 +1388,11 @@ public abstract class Uri implements Parcelable, Comparable { + * @param scheme name or {@code null} if this is a relative Uri + */ + public Builder scheme(String scheme) { +- this.scheme = scheme; ++ if (scheme != null) { ++ this.scheme = scheme.replace("://", ""); ++ } else { ++ this.scheme = null; ++ } + return this; + } + +diff --git a/core/tests/coretests/src/android/net/UriTest.java b/core/tests/coretests/src/android/net/UriTest.java +index 89632a46267e..fd12e519e8f8 100644 +--- a/core/tests/coretests/src/android/net/UriTest.java ++++ b/core/tests/coretests/src/android/net/UriTest.java +@@ -18,6 +18,7 @@ package android.net; + + import android.content.ContentUris; + import android.os.Parcel; ++import android.platform.test.annotations.AsbSecurityTest; + + import androidx.test.filters.SmallTest; + +@@ -88,6 +89,16 @@ public class UriTest extends TestCase { + assertNull(u.getHost()); + } + ++ @AsbSecurityTest(cveBugId = 261721900) ++ @SmallTest ++ public void testSchemeSanitization() { ++ Uri uri = new Uri.Builder() ++ .scheme("http://https://evil.com:/te:st/") ++ .authority("google.com").path("one/way").build(); ++ assertEquals("httphttpsevil.com:/te:st/", uri.getScheme()); ++ assertEquals("httphttpsevil.com:/te:st/://google.com/one/way", uri.toString()); ++ } ++ + @SmallTest + public void testStringUri() { + assertEquals("bob lee", +-- +2.34.1 + diff --git a/aosp_diff/preliminary/frameworks/base/99_0210-RESTRICT-AUTOMERGE-Delete-keystore-keys-from-RecoveryService-reb.bulletin.patch b/aosp_diff/preliminary/frameworks/base/99_0210-RESTRICT-AUTOMERGE-Delete-keystore-keys-from-RecoveryService-reb.bulletin.patch new file mode 100644 index 0000000000..6ddbd4a014 --- /dev/null +++ b/aosp_diff/preliminary/frameworks/base/99_0210-RESTRICT-AUTOMERGE-Delete-keystore-keys-from-RecoveryService-reb.bulletin.patch @@ -0,0 +1,141 @@ +From 17aa5aaa5f9c97a3de16b4af7dc758555e4687cf Mon Sep 17 00:00:00 2001 +From: Nikolay Elenkov +Date: Sun, 30 Jun 2024 06:23:00 +0000 +Subject: [PATCH] RESTRICT AUTOMERGE Delete keystore keys from + RecoveryService.rebootRecoveryWithCommand() + +Adds deleteSecrets() to RecoverySystemService. This method is called +from rebootRecoveryWithCommand () before the --wipe_data command is +passed to recovery and the device is force-rebooted. + +deleteSecerts() calls IKeystoreMaintenance.deleteAllKeys() in order to +quickly destroy the keys protecting the synthetic password blobs +used to derive FBE encryption keys. + +The intent is to make FBE-encrypted data unrecoverable even if the full +data wipe in recovery is interrupted or skipped. + +Bug: 324321147 +Test: Manual - System -> Reset options -> Erase all data. +Test: Hold VolDown key to interrupt reboot and stop at bootloader +screen. +Test: fastboot oem bcd wipe command && fastboot oem bcd wipe recovery +Test: fastboot reboot +Test: Device reboots into recovery and prompts to factory reset: +Test: 'Cannot load Android system. Your data may be corrupt. ...' +(cherry picked from https://android-review.googlesource.com/q/commit:0d00031851e9f5d8ef93947205a7e8b5257f0d8d) +Ignore-AOSP-First: Security fix backport +(cherry picked from https://googleplex-android-review.googlesource.com/q/commit:dfbaa7295390de97ae2e8b154cc9be5512108ac4) +(cherry picked from https://googleplex-android-review.googlesource.com/q/commit:d020a38e4148a642e2f06363e27cce60097efa5d) +Merged-In: I5eb8e97f3ae1a18d5e7e7c2c7eca048ebff3440a +Change-Id: I5eb8e97f3ae1a18d5e7e7c2c7eca048ebff3440a +--- + .../security/AndroidKeyStoreMaintenance.java | 22 +++++++++++++++++++ + .../recoverysystem/RecoverySystemService.java | 19 ++++++++++++++++ + 2 files changed, 41 insertions(+) + +diff --git a/keystore/java/android/security/AndroidKeyStoreMaintenance.java b/keystore/java/android/security/AndroidKeyStoreMaintenance.java +index 919a93b8f107..b2d1755bb860 100644 +--- a/keystore/java/android/security/AndroidKeyStoreMaintenance.java ++++ b/keystore/java/android/security/AndroidKeyStoreMaintenance.java +@@ -18,8 +18,10 @@ package android.security; + + import android.annotation.NonNull; + import android.annotation.Nullable; ++import android.os.RemoteException; + import android.os.ServiceManager; + import android.os.ServiceSpecificException; ++import android.os.StrictMode; + import android.security.maintenance.IKeystoreMaintenance; + import android.system.keystore2.Domain; + import android.system.keystore2.KeyDescriptor; +@@ -183,4 +185,24 @@ public class AndroidKeyStoreMaintenance { + return SYSTEM_ERROR; + } + } ++ ++ /** ++ * Deletes all keys in all KeyMint devices. ++ * Called by RecoverySystem before rebooting to recovery in order to delete all KeyMint keys, ++ * including synthetic password protector keys (used by LockSettingsService), as well as keys ++ * protecting DE and metadata encryption keys (used by vold). This ensures that FBE-encrypted ++ * data is unrecoverable even if the data wipe in recovery is interrupted or skipped. ++ */ ++ public static void deleteAllKeys() throws KeyStoreException { ++ StrictMode.noteDiskWrite(); ++ try { ++ getService().deleteAllKeys(); ++ } catch (RemoteException | NullPointerException e) { ++ throw new KeyStoreException(SYSTEM_ERROR, ++ "Failure to connect to Keystore while trying to delete all keys."); ++ } catch (ServiceSpecificException e) { ++ throw new KeyStoreException(e.errorCode, ++ "Keystore error while trying to delete all keys."); ++ } ++ } + } +diff --git a/services/core/java/com/android/server/recoverysystem/RecoverySystemService.java b/services/core/java/com/android/server/recoverysystem/RecoverySystemService.java +index 13218731af70..23941bc338b8 100644 +--- a/services/core/java/com/android/server/recoverysystem/RecoverySystemService.java ++++ b/services/core/java/com/android/server/recoverysystem/RecoverySystemService.java +@@ -52,6 +52,7 @@ import android.os.ShellCallback; + import android.os.SystemProperties; + import android.provider.DeviceConfig; + import android.sysprop.ApexProperties; ++import android.security.AndroidKeyStoreMaintenance; + import android.util.ArrayMap; + import android.util.ArraySet; + import android.util.FastImmutableArraySet; +@@ -66,6 +67,7 @@ import com.android.internal.widget.RebootEscrowListener; + import com.android.server.LocalServices; + import com.android.server.SystemService; + import com.android.server.pm.ApexManager; ++import com.android.server.utils.Slogf; + + import libcore.io.IoUtils; + +@@ -117,6 +119,8 @@ public class RecoverySystemService extends IRecoverySystem.Stub implements Reboo + static final String LSKF_CAPTURED_TIMESTAMP_PREF = "lskf_captured_timestamp"; + static final String LSKF_CAPTURED_COUNT_PREF = "lskf_captured_count"; + ++ static final String RECOVERY_WIPE_DATA_COMMAND = "--wipe_data"; ++ + private final Injector mInjector; + private final Context mContext; + +@@ -511,17 +515,32 @@ public class RecoverySystemService extends IRecoverySystem.Stub implements Reboo + @Override // Binder call + public void rebootRecoveryWithCommand(String command) { + if (DEBUG) Slog.d(TAG, "rebootRecoveryWithCommand: [" + command + "]"); ++ ++ boolean isForcedWipe = command != null && command.contains(RECOVERY_WIPE_DATA_COMMAND); + synchronized (sRequestLock) { + if (!setupOrClearBcb(true, command)) { + return; + } + ++ if (isForcedWipe) { ++ deleteSecrets(); ++ } ++ + // Having set up the BCB, go ahead and reboot. + PowerManager pm = mInjector.getPowerManager(); + pm.reboot(PowerManager.REBOOT_RECOVERY); + } + } + ++ private static void deleteSecrets() { ++ Slogf.w(TAG, "deleteSecrets"); ++ try { ++ AndroidKeyStoreMaintenance.deleteAllKeys(); ++ } catch (android.security.KeyStoreException e) { ++ Log.wtf(TAG, "Failed to delete all keys from keystore.", e); ++ } ++ } ++ + private void enforcePermissionForResumeOnReboot() { + if (mContext.checkCallingOrSelfPermission(android.Manifest.permission.RECOVERY) + != PackageManager.PERMISSION_GRANTED +-- +2.46.0.rc2.264.g509ed76dc8-goog + diff --git a/aosp_diff/preliminary/packages/apps/Settings/0027-Replace-getCallingActivity-with-getLaunchedFromPackage-.bulletin.patch b/aosp_diff/preliminary/packages/apps/Settings/0027-Replace-getCallingActivity-with-getLaunchedFromPackage-.bulletin.patch new file mode 100644 index 0000000000..5f855b7fe2 --- /dev/null +++ b/aosp_diff/preliminary/packages/apps/Settings/0027-Replace-getCallingActivity-with-getLaunchedFromPackage-.bulletin.patch @@ -0,0 +1,176 @@ +From 7c9a51580aaa78775069af7615392a93c4405921 Mon Sep 17 00:00:00 2001 +From: Jason Chiu +Date: Wed, 31 Jan 2024 16:29:01 +0800 +Subject: [PATCH] Replace getCallingActivity() with getLaunchedFromPackage() + +getLaunchedFromPackage() reports who launched this Activity or built +PendingIntent used to launch it, whereas getCallingActivity() reports +who will get result of Activity. + +Bug: 316891059 +Test: robotest, manual +(cherry picked from commit ddc11bc03ab48e885f652b89df5f92ff283bcd4a) +(cherry picked from commit 8bdbb580da847d82f16fb57883a01a5e65ffa696) +(cherry picked from https://googleplex-android-review.googlesource.com/q/commit:c7a8127d3bb6010617e507c03f7207dd50082953) +Merged-In: If97018c2741caef622f0596bbfeaa42ef1788b78 +Change-Id: If97018c2741caef622f0596bbfeaa42ef1788b78 +--- + .../settings/search/SearchFeatureProvider.java | 2 +- + .../search/SearchFeatureProviderImpl.java | 18 ++++++++---------- + .../search/SearchResultTrampoline.java | 13 ++++++------- + .../search/SearchFeatureProviderImplTest.java | 15 ++++++++------- + 4 files changed, 23 insertions(+), 25 deletions(-) + +diff --git a/src/com/android/settings/search/SearchFeatureProvider.java b/src/com/android/settings/search/SearchFeatureProvider.java +index 1785361d3b..c4141e91f7 100644 +--- a/src/com/android/settings/search/SearchFeatureProvider.java ++++ b/src/com/android/settings/search/SearchFeatureProvider.java +@@ -56,7 +56,7 @@ public interface SearchFeatureProvider { + * @throws IllegalArgumentException when caller is null + * @throws SecurityException when caller is not allowed to launch search result page + */ +- void verifyLaunchSearchResultPageCaller(Context context, @NonNull ComponentName caller) ++ void verifyLaunchSearchResultPageCaller(@NonNull Context context, @NonNull String callerPackage) + throws SecurityException, IllegalArgumentException; + + /** +diff --git a/src/com/android/settings/search/SearchFeatureProviderImpl.java b/src/com/android/settings/search/SearchFeatureProviderImpl.java +index 6f90970905..3a62ddfb67 100644 +--- a/src/com/android/settings/search/SearchFeatureProviderImpl.java ++++ b/src/com/android/settings/search/SearchFeatureProviderImpl.java +@@ -17,13 +17,14 @@ + + package com.android.settings.search; + +-import android.content.ComponentName; + import android.content.Context; + import android.content.Intent; + import android.net.Uri; + import android.provider.Settings; + import android.text.TextUtils; + ++import androidx.annotation.NonNull; ++ + import com.android.settingslib.search.SearchIndexableResources; + import com.android.settingslib.search.SearchIndexableResourcesMobile; + +@@ -32,21 +33,18 @@ import com.android.settingslib.search.SearchIndexableResourcesMobile; + */ + public class SearchFeatureProviderImpl implements SearchFeatureProvider { + +- private static final String TAG = "SearchFeatureProvider"; +- + private SearchIndexableResources mSearchIndexableResources; + + @Override +- public void verifyLaunchSearchResultPageCaller(Context context, ComponentName caller) { +- if (caller == null) { ++ public void verifyLaunchSearchResultPageCaller(@NonNull Context context, ++ @NonNull String callerPackage) { ++ if (TextUtils.isEmpty(callerPackage)) { + throw new IllegalArgumentException("ExternalSettingsTrampoline intents " + + "must be called with startActivityForResult"); + } +- final String packageName = caller.getPackageName(); +- final boolean isSettingsPackage = TextUtils.equals(packageName, context.getPackageName()) +- || TextUtils.equals(getSettingsIntelligencePkgName(context), packageName); +- final boolean isAllowlistedPackage = +- isSignatureAllowlisted(context, caller.getPackageName()); ++ final boolean isSettingsPackage = TextUtils.equals(callerPackage, context.getPackageName()) ++ || TextUtils.equals(getSettingsIntelligencePkgName(context), callerPackage); ++ final boolean isAllowlistedPackage = isSignatureAllowlisted(context, callerPackage); + if (isSettingsPackage || isAllowlistedPackage) { + return; + } +diff --git a/src/com/android/settings/search/SearchResultTrampoline.java b/src/com/android/settings/search/SearchResultTrampoline.java +index 5e710293c2..2c6fd67a2f 100644 +--- a/src/com/android/settings/search/SearchResultTrampoline.java ++++ b/src/com/android/settings/search/SearchResultTrampoline.java +@@ -20,7 +20,6 @@ import static com.android.settings.SettingsActivity.EXTRA_SHOW_FRAGMENT_ARGUMENT + import static com.android.settings.SettingsActivity.EXTRA_SHOW_FRAGMENT_TAB; + + import android.app.Activity; +-import android.content.ComponentName; + import android.content.Intent; + import android.os.Bundle; + import android.provider.Settings; +@@ -51,11 +50,11 @@ public class SearchResultTrampoline extends Activity { + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + +- final ComponentName callingActivity = getCallingActivity(); ++ final String callerPackage = getLaunchedFromPackage(); + // First make sure caller has privilege to launch a search result page. + FeatureFactory.getFactory(this) + .getSearchFeatureProvider() +- .verifyLaunchSearchResultPageCaller(this, callingActivity); ++ .verifyLaunchSearchResultPageCaller(this, callerPackage); + // Didn't crash, proceed and launch the result as a subsetting. + Intent intent = getIntent(); + final String highlightMenuKey = intent.getStringExtra( +@@ -99,7 +98,7 @@ public class SearchResultTrampoline extends Activity { + + if (!ActivityEmbeddingUtils.isEmbeddingActivityEnabled(this)) { + startActivity(intent); +- } else if (isSettingsIntelligence(callingActivity)) { ++ } else if (isSettingsIntelligence(callerPackage)) { + if (FeatureFlagUtils.isEnabled(this, FeatureFlags.SETTINGS_SEARCH_ALWAYS_EXPAND)) { + startActivity(SettingsActivity.getTrampolineIntent(intent, highlightMenuKey) + .setClass(this, DeepLinkHomepageActivityInternal.class) +@@ -132,9 +131,9 @@ public class SearchResultTrampoline extends Activity { + finish(); + } + +- private boolean isSettingsIntelligence(ComponentName callingActivity) { +- return callingActivity != null && TextUtils.equals( +- callingActivity.getPackageName(), ++ private boolean isSettingsIntelligence(String callerPackage) { ++ return TextUtils.equals( ++ callerPackage, + FeatureFactory.getFactory(this).getSearchFeatureProvider() + .getSettingsIntelligencePkgName(this)); + } +diff --git a/tests/robotests/src/com/android/settings/search/SearchFeatureProviderImplTest.java b/tests/robotests/src/com/android/settings/search/SearchFeatureProviderImplTest.java +index f3496001d0..8a7419bb1b 100644 +--- a/tests/robotests/src/com/android/settings/search/SearchFeatureProviderImplTest.java ++++ b/tests/robotests/src/com/android/settings/search/SearchFeatureProviderImplTest.java +@@ -20,7 +20,6 @@ package com.android.settings.search; + import static com.google.common.truth.Truth.assertThat; + + import android.app.settings.SettingsEnums; +-import android.content.ComponentName; + import android.content.Intent; + import android.content.pm.ActivityInfo; + import android.content.pm.ResolveInfo; +@@ -131,20 +130,22 @@ public class SearchFeatureProviderImplTest { + + @Test(expected = SecurityException.class) + public void verifyLaunchSearchResultPageCaller_badCaller_shouldCrash() { +- final ComponentName cn = new ComponentName("pkg", "class"); +- mProvider.verifyLaunchSearchResultPageCaller(mActivity, cn); ++ final String packageName = "pkg"; ++ ++ mProvider.verifyLaunchSearchResultPageCaller(mActivity, packageName); + } + + @Test + public void verifyLaunchSearchResultPageCaller_settingsCaller_shouldNotCrash() { +- final ComponentName cn = new ComponentName(mActivity.getPackageName(), "class"); +- mProvider.verifyLaunchSearchResultPageCaller(mActivity, cn); ++ final String packageName = mActivity.getPackageName(); ++ ++ mProvider.verifyLaunchSearchResultPageCaller(mActivity, packageName); + } + + @Test + public void verifyLaunchSearchResultPageCaller_settingsIntelligenceCaller_shouldNotCrash() { + final String packageName = mProvider.getSettingsIntelligencePkgName(mActivity); +- final ComponentName cn = new ComponentName(packageName, "class"); +- mProvider.verifyLaunchSearchResultPageCaller(mActivity, cn); ++ ++ mProvider.verifyLaunchSearchResultPageCaller(mActivity, packageName); + } + } +-- +2.46.0.rc2.264.g509ed76dc8-goog + diff --git a/aosp_diff/preliminary/packages/apps/Settings/0028-Limit-wifi-item-edit-content-s-max-length-to-500.bulletin.patch b/aosp_diff/preliminary/packages/apps/Settings/0028-Limit-wifi-item-edit-content-s-max-length-to-500.bulletin.patch new file mode 100644 index 0000000000..dd5f022adf --- /dev/null +++ b/aosp_diff/preliminary/packages/apps/Settings/0028-Limit-wifi-item-edit-content-s-max-length-to-500.bulletin.patch @@ -0,0 +1,31 @@ +From ec74247a0568ec1ea3ccff823d458f349b07c1a3 Mon Sep 17 00:00:00 2001 +From: Chaohui Wang +Date: Thu, 2 Nov 2023 11:43:00 +0800 +Subject: [PATCH] Limit wifi item edit content's max length to 500 + +Bug: 293199910 +Test: manual - on "Add network" + +(cherry picked from commit 855053ca4124f2d515b21c469096f8c18bd4829d) +(cherry picked from https://googleplex-android-review.googlesource.com/q/commit:092668676af741719d50ac0f121a8f8461aa21ad) +Merged-In: I303b8c6e0f3c3a1174a047ba98f302042e5db9ae +Change-Id: I303b8c6e0f3c3a1174a047ba98f302042e5db9ae +--- + res/values/styles.xml | 1 + + 1 file changed, 1 insertion(+) + +diff --git a/res/values/styles.xml b/res/values/styles.xml +index f147ce9890..23a0e74773 100644 +--- a/res/values/styles.xml ++++ b/res/values/styles.xml +@@ -148,6 +148,7 @@ + @android:style/TextAppearance.DeviceDefault.Medium + ?android:attr/textColorSecondary + @dimen/min_tap_target_size ++ 500 + + +