Loading core/java/android/app/Notification.java +11 −0 Original line number Original line Diff line number Diff line Loading @@ -2533,6 +2533,17 @@ public class Notification implements Parcelable if (person != null && person.getIconUri() != null) { if (person != null && person.getIconUri() != null) { visitor.accept(person.getIconUri()); visitor.accept(person.getIconUri()); } } final RemoteInputHistoryItem[] history = getParcelableArrayFromBundle(extras, Notification.EXTRA_REMOTE_INPUT_HISTORY_ITEMS, RemoteInputHistoryItem.class); if (history != null) { for (int i = 0; i < history.length; i++) { RemoteInputHistoryItem item = history[i]; if (item.getUri() != null) { visitor.accept(item.getUri()); } } } } } if (MessagingStyle.class.equals(getNotificationStyle()) && extras != null) { if (MessagingStyle.class.equals(getNotificationStyle()) && extras != null) { Loading core/java/android/database/DatabaseUtils.java +23 −9 Original line number Original line Diff line number Diff line Loading @@ -511,17 +511,31 @@ public class DatabaseUtils { */ */ public static void appendEscapedSQLString(StringBuilder sb, String sqlString) { public static void appendEscapedSQLString(StringBuilder sb, String sqlString) { sb.append('\''); sb.append('\''); if (sqlString.indexOf('\'') != -1) { int length = sqlString.length(); int length = sqlString.length(); for (int i = 0; i < length; i++) { for (int i = 0; i < length; i++) { char c = sqlString.charAt(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; } } if (Character.isLowSurrogate(c)) { continue; } if (c == '\'') { if (c == '\'') { sb.append('\''); sb.append('\''); } } sb.append(c); sb.append(c); } } } else sb.append(sqlString); sb.append('\''); sb.append('\''); } } Loading core/jni/android_view_InputDevice.cpp +11 −2 Original line number Original line Diff line number Diff line Loading @@ -14,6 +14,7 @@ * limitations under the License. * limitations under the License. */ */ #include <binder/Parcel.h> #include <input/Input.h> #include <input/Input.h> #include <android_runtime/AndroidRuntime.h> #include <android_runtime/AndroidRuntime.h> Loading Loading @@ -48,9 +49,17 @@ jobject android_view_InputDevice_create(JNIEnv* env, const InputDeviceInfo& devi return NULL; return NULL; } } sp<KeyCharacterMap> map = deviceInfo.getKeyCharacterMap(); if (map != nullptr) { Parcel parcel; map->writeToParcel(&parcel); parcel.setDataPosition(0); map = map->readFromParcel(&parcel); } ScopedLocalRef<jobject> kcmObj(env, ScopedLocalRef<jobject> kcmObj(env, android_view_KeyCharacterMap_create(env, deviceInfo.getId(), android_view_KeyCharacterMap_create(env, deviceInfo.getId(), deviceInfo.getKeyCharacterMap())); map)); if (!kcmObj.get()) { if (!kcmObj.get()) { return NULL; return NULL; } } Loading media/java/android/media/RingtoneManager.java +17 −2 Original line number Original line Diff line number Diff line Loading @@ -825,6 +825,21 @@ public class RingtoneManager { if(!isInternalRingtoneUri(ringtoneUri)) { if(!isInternalRingtoneUri(ringtoneUri)) { ringtoneUri = ContentProvider.maybeAddUserId(ringtoneUri, context.getUserId()); 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, Settings.System.putStringForUser(resolver, setting, ringtoneUri != null ? ringtoneUri.toString() : null, context.getUserId()); ringtoneUri != null ? ringtoneUri.toString() : null, context.getUserId()); Loading packages/SettingsProvider/src/com/android/providers/settings/SettingsProvider.java +13 −4 Original line number Original line Diff line number Diff line Loading @@ -2955,6 +2955,15 @@ public class SettingsProvider extends ContentProvider { return settingsState.getSettingLocked(name); 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, public void resetSettingsLocked(int type, int userId, String packageName, int mode, String tag) { String tag) { resetSettingsLocked(type, userId, packageName, mode, tag, /*prefix=*/ resetSettingsLocked(type, userId, packageName, mode, tag, /*prefix=*/ Loading @@ -2977,7 +2986,7 @@ public class SettingsProvider extends ContentProvider { Setting setting = settingsState.getSettingLocked(name); Setting setting = settingsState.getSettingLocked(name); if (packageName.equals(setting.getPackageName())) { if (packageName.equals(setting.getPackageName())) { if ((tag != null && !tag.equals(setting.getTag())) if ((tag != null && !tag.equals(setting.getTag())) || (prefix != null && !setting.getName().startsWith(prefix))) { || shouldExcludeSettingFromReset(setting, prefix)) { continue; continue; } } if (settingsState.resetSettingLocked(name)) { if (settingsState.resetSettingLocked(name)) { Loading @@ -2997,7 +3006,7 @@ public class SettingsProvider extends ContentProvider { Setting setting = settingsState.getSettingLocked(name); Setting setting = settingsState.getSettingLocked(name); if (!SettingsState.isSystemPackage(getContext(), if (!SettingsState.isSystemPackage(getContext(), setting.getPackageName(), INVALID_UID, userId)) { setting.getPackageName(), INVALID_UID, userId)) { if (prefix != null && !setting.getName().startsWith(prefix)) { if (shouldExcludeSettingFromReset(setting, prefix)) { continue; continue; } } if (settingsState.resetSettingLocked(name)) { if (settingsState.resetSettingLocked(name)) { Loading @@ -3017,7 +3026,7 @@ public class SettingsProvider extends ContentProvider { Setting setting = settingsState.getSettingLocked(name); Setting setting = settingsState.getSettingLocked(name); if (!SettingsState.isSystemPackage(getContext(), if (!SettingsState.isSystemPackage(getContext(), setting.getPackageName(), INVALID_UID, userId)) { setting.getPackageName(), INVALID_UID, userId)) { if (prefix != null && !setting.getName().startsWith(prefix)) { if (shouldExcludeSettingFromReset(setting, prefix)) { continue; continue; } } if (setting.isDefaultFromSystem()) { if (setting.isDefaultFromSystem()) { Loading @@ -3040,7 +3049,7 @@ public class SettingsProvider extends ContentProvider { for (String name : settingsState.getSettingNamesLocked()) { for (String name : settingsState.getSettingNamesLocked()) { Setting setting = settingsState.getSettingLocked(name); Setting setting = settingsState.getSettingLocked(name); boolean someSettingChanged = false; boolean someSettingChanged = false; if (prefix != null && !setting.getName().startsWith(prefix)) { if (shouldExcludeSettingFromReset(setting, prefix)) { continue; continue; } } if (setting.isDefaultFromSystem()) { if (setting.isDefaultFromSystem()) { Loading Loading
core/java/android/app/Notification.java +11 −0 Original line number Original line Diff line number Diff line Loading @@ -2533,6 +2533,17 @@ public class Notification implements Parcelable if (person != null && person.getIconUri() != null) { if (person != null && person.getIconUri() != null) { visitor.accept(person.getIconUri()); visitor.accept(person.getIconUri()); } } final RemoteInputHistoryItem[] history = getParcelableArrayFromBundle(extras, Notification.EXTRA_REMOTE_INPUT_HISTORY_ITEMS, RemoteInputHistoryItem.class); if (history != null) { for (int i = 0; i < history.length; i++) { RemoteInputHistoryItem item = history[i]; if (item.getUri() != null) { visitor.accept(item.getUri()); } } } } } if (MessagingStyle.class.equals(getNotificationStyle()) && extras != null) { if (MessagingStyle.class.equals(getNotificationStyle()) && extras != null) { Loading
core/java/android/database/DatabaseUtils.java +23 −9 Original line number Original line Diff line number Diff line Loading @@ -511,17 +511,31 @@ public class DatabaseUtils { */ */ public static void appendEscapedSQLString(StringBuilder sb, String sqlString) { public static void appendEscapedSQLString(StringBuilder sb, String sqlString) { sb.append('\''); sb.append('\''); if (sqlString.indexOf('\'') != -1) { int length = sqlString.length(); int length = sqlString.length(); for (int i = 0; i < length; i++) { for (int i = 0; i < length; i++) { char c = sqlString.charAt(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; } } if (Character.isLowSurrogate(c)) { continue; } if (c == '\'') { if (c == '\'') { sb.append('\''); sb.append('\''); } } sb.append(c); sb.append(c); } } } else sb.append(sqlString); sb.append('\''); sb.append('\''); } } Loading
core/jni/android_view_InputDevice.cpp +11 −2 Original line number Original line Diff line number Diff line Loading @@ -14,6 +14,7 @@ * limitations under the License. * limitations under the License. */ */ #include <binder/Parcel.h> #include <input/Input.h> #include <input/Input.h> #include <android_runtime/AndroidRuntime.h> #include <android_runtime/AndroidRuntime.h> Loading Loading @@ -48,9 +49,17 @@ jobject android_view_InputDevice_create(JNIEnv* env, const InputDeviceInfo& devi return NULL; return NULL; } } sp<KeyCharacterMap> map = deviceInfo.getKeyCharacterMap(); if (map != nullptr) { Parcel parcel; map->writeToParcel(&parcel); parcel.setDataPosition(0); map = map->readFromParcel(&parcel); } ScopedLocalRef<jobject> kcmObj(env, ScopedLocalRef<jobject> kcmObj(env, android_view_KeyCharacterMap_create(env, deviceInfo.getId(), android_view_KeyCharacterMap_create(env, deviceInfo.getId(), deviceInfo.getKeyCharacterMap())); map)); if (!kcmObj.get()) { if (!kcmObj.get()) { return NULL; return NULL; } } Loading
media/java/android/media/RingtoneManager.java +17 −2 Original line number Original line Diff line number Diff line Loading @@ -825,6 +825,21 @@ public class RingtoneManager { if(!isInternalRingtoneUri(ringtoneUri)) { if(!isInternalRingtoneUri(ringtoneUri)) { ringtoneUri = ContentProvider.maybeAddUserId(ringtoneUri, context.getUserId()); 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, Settings.System.putStringForUser(resolver, setting, ringtoneUri != null ? ringtoneUri.toString() : null, context.getUserId()); ringtoneUri != null ? ringtoneUri.toString() : null, context.getUserId()); Loading
packages/SettingsProvider/src/com/android/providers/settings/SettingsProvider.java +13 −4 Original line number Original line Diff line number Diff line Loading @@ -2955,6 +2955,15 @@ public class SettingsProvider extends ContentProvider { return settingsState.getSettingLocked(name); 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, public void resetSettingsLocked(int type, int userId, String packageName, int mode, String tag) { String tag) { resetSettingsLocked(type, userId, packageName, mode, tag, /*prefix=*/ resetSettingsLocked(type, userId, packageName, mode, tag, /*prefix=*/ Loading @@ -2977,7 +2986,7 @@ public class SettingsProvider extends ContentProvider { Setting setting = settingsState.getSettingLocked(name); Setting setting = settingsState.getSettingLocked(name); if (packageName.equals(setting.getPackageName())) { if (packageName.equals(setting.getPackageName())) { if ((tag != null && !tag.equals(setting.getTag())) if ((tag != null && !tag.equals(setting.getTag())) || (prefix != null && !setting.getName().startsWith(prefix))) { || shouldExcludeSettingFromReset(setting, prefix)) { continue; continue; } } if (settingsState.resetSettingLocked(name)) { if (settingsState.resetSettingLocked(name)) { Loading @@ -2997,7 +3006,7 @@ public class SettingsProvider extends ContentProvider { Setting setting = settingsState.getSettingLocked(name); Setting setting = settingsState.getSettingLocked(name); if (!SettingsState.isSystemPackage(getContext(), if (!SettingsState.isSystemPackage(getContext(), setting.getPackageName(), INVALID_UID, userId)) { setting.getPackageName(), INVALID_UID, userId)) { if (prefix != null && !setting.getName().startsWith(prefix)) { if (shouldExcludeSettingFromReset(setting, prefix)) { continue; continue; } } if (settingsState.resetSettingLocked(name)) { if (settingsState.resetSettingLocked(name)) { Loading @@ -3017,7 +3026,7 @@ public class SettingsProvider extends ContentProvider { Setting setting = settingsState.getSettingLocked(name); Setting setting = settingsState.getSettingLocked(name); if (!SettingsState.isSystemPackage(getContext(), if (!SettingsState.isSystemPackage(getContext(), setting.getPackageName(), INVALID_UID, userId)) { setting.getPackageName(), INVALID_UID, userId)) { if (prefix != null && !setting.getName().startsWith(prefix)) { if (shouldExcludeSettingFromReset(setting, prefix)) { continue; continue; } } if (setting.isDefaultFromSystem()) { if (setting.isDefaultFromSystem()) { Loading @@ -3040,7 +3049,7 @@ public class SettingsProvider extends ContentProvider { for (String name : settingsState.getSettingNamesLocked()) { for (String name : settingsState.getSettingNamesLocked()) { Setting setting = settingsState.getSettingLocked(name); Setting setting = settingsState.getSettingLocked(name); boolean someSettingChanged = false; boolean someSettingChanged = false; if (prefix != null && !setting.getName().startsWith(prefix)) { if (shouldExcludeSettingFromReset(setting, prefix)) { continue; continue; } } if (setting.isDefaultFromSystem()) { if (setting.isDefaultFromSystem()) { Loading