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 c718e8c2cf..20b5b9c682 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 @@ -3,7 +3,7 @@ From: svenate Date: Tue, 31 Aug 2021 07:08:21 +0530 Subject: [PATCH] Update security_patch_level string -Update security_patch_level as the oct ASB +Update security_patch_level as the ASB pacthes are integrated Signed-off-by: svenate @@ -20,7 +20,7 @@ index 13b85c0663..084f400e67 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 := 2021-07-05 -+ PLATFORM_SECURITY_PATCH := 2022-01-01 ++ PLATFORM_SECURITY_PATCH := 2022-02-01 endif .KATI_READONLY := PLATFORM_SECURITY_PATCH diff --git a/aosp_diff/preliminary/external/libavc/03_0003-Move-slice-increments-after-completing-header-parsin.patch b/aosp_diff/preliminary/external/libavc/03_0003-Move-slice-increments-after-completing-header-parsin.patch new file mode 100644 index 0000000000..98577f3e18 --- /dev/null +++ b/aosp_diff/preliminary/external/libavc/03_0003-Move-slice-increments-after-completing-header-parsin.patch @@ -0,0 +1,80 @@ +From efa5dae72378f89ba5a72b0a40722296b40a04ea Mon Sep 17 00:00:00 2001 +From: Harish Mahendrakar +Date: Tue, 5 Oct 2021 15:35:31 -0700 +Subject: [PATCH] Move slice increments after completing header parsing + +Slice increments are now done after completing header parse. +Earlier this was done before validating mmco related parameters +and calculating poc. In case there were errors that were detected +at this stage, slice increments were incorrect. + +Bug: 199536974 +Bug: 199733300 +Bug: 205702093 +Bug: oss-fuzz#38387 +Bug: oss-fuzz#38482 +Bug: oss-fuzz#40851 +Test: ossfuzz generated poc in bug + +Change-Id: I8569e9369e4ab6f6c69c81b937f111c299b7a134 +(cherry picked from commit cd0385dc074c6ba119dffbcd3df669a9b9ca1790) +(cherry picked from commit dc110841d6a3fb2f9c9f1af04b3b71da40fbd392) +Merged-In:I8569e9369e4ab6f6c69c81b937f111c299b7a134 +--- + decoder/ih264d_parse_slice.c | 33 ++++++++++++++++----------------- + 1 file changed, 16 insertions(+), 17 deletions(-) + +diff --git a/decoder/ih264d_parse_slice.c b/decoder/ih264d_parse_slice.c +index f922cfe..a7312c4 100644 +--- a/decoder/ih264d_parse_slice.c ++++ b/decoder/ih264d_parse_slice.c +@@ -1435,23 +1435,6 @@ WORD32 ih264d_parse_decode_slice(UWORD8 u1_is_idr_slice, + i1_is_end_of_poc = 0; + } + +- /* Increment only if the current slice has atleast 1 more MB */ +- if (ps_dec->u4_first_slice_in_pic == 0 && +- (ps_dec->ps_parse_cur_slice->u4_first_mb_in_slice < +- (UWORD32)(ps_dec->u2_total_mbs_coded >> ps_dec->ps_cur_slice->u1_mbaff_frame_flag))) +- { +- ps_dec->ps_parse_cur_slice++; +- ps_dec->u2_cur_slice_num++; +- // in the case of single core increment ps_decode_cur_slice +- if(ps_dec->u1_separate_parse == 0) +- { +- ps_dec->ps_decode_cur_slice++; +- } +- } +- +- ps_dec->u1_slice_header_done = 0; +- +- + if(u1_field_pic_flag) + { + ps_dec->u2_prv_frame_num = u2_frame_num; +@@ -1509,6 +1492,22 @@ WORD32 ih264d_parse_decode_slice(UWORD8 u1_is_idr_slice, + } + } + ++ /* Increment only if the current slice has atleast 1 more MB */ ++ if (ps_dec->u4_first_slice_in_pic == 0 && ++ (ps_dec->ps_parse_cur_slice->u4_first_mb_in_slice < ++ (UWORD32)(ps_dec->u2_total_mbs_coded >> ps_dec->ps_cur_slice->u1_mbaff_frame_flag))) ++ { ++ ps_dec->ps_parse_cur_slice++; ++ ps_dec->u2_cur_slice_num++; ++ // in the case of single core increment ps_decode_cur_slice ++ if(ps_dec->u1_separate_parse == 0) ++ { ++ ps_dec->ps_decode_cur_slice++; ++ } ++ } ++ ++ ps_dec->u1_slice_header_done = 0; ++ + /*--------------------------------------------------------------------*/ + /* Copy the values read from the bitstream to the slice header and then*/ + /* If the slice is first slice in picture, then do Start of Picture */ +-- +2.17.1 + diff --git a/aosp_diff/preliminary/external/libexif/01_0001-Fix-MakerNote-tag-size-overflow-issues-at-read-time.patch b/aosp_diff/preliminary/external/libexif/01_0001-Fix-MakerNote-tag-size-overflow-issues-at-read-time.patch new file mode 100644 index 0000000000..9e565c6a8a --- /dev/null +++ b/aosp_diff/preliminary/external/libexif/01_0001-Fix-MakerNote-tag-size-overflow-issues-at-read-time.patch @@ -0,0 +1,308 @@ +From e1c97dd442a42fbaa02a8d561d4bdcdeca95aae6 Mon Sep 17 00:00:00 2001 +From: Jayant Chowdhary +Date: Tue, 24 Aug 2021 18:04:56 +0000 +Subject: [PATCH] Fix MakerNote tag size overflow issues at read time. + +This is a cherry-pick of +https://github.com/libexif/libexif/commit/435e21f05001fb03f9f186fa7cbc69454afd00d1 +for CVE-2020-13112 + +Bug: 194342672 + +Test: sts-tradefed run sts-engbuild-no-spl-lock -m StsHostTestCases + --test android.security.sts.CVE_2020_13112#testPocBug_194342672 + +Change-Id: Ibdf388bc768213833f8fef9740b3527d46a14a2a +Merged-In: Id106e79e829329145d27a93273241b58878bfac3 +Signed-off-by: Jayant Chowdhary +(cherry picked from commit fd5f7bab830858e57a2baf9d4dd47e5820337b56) +Merged-In:Ibdf388bc768213833f8fef9740b3527d46a14a2a +--- + libexif/canon/exif-mnote-data-canon.c | 20 ++++++++++++++--- + libexif/fuji/exif-mnote-data-fuji.c | 22 +++++++++++++----- + libexif/olympus/exif-mnote-data-olympus.c | 27 ++++++++++++++++++----- + libexif/pentax/exif-mnote-data-pentax.c | 19 ++++++++++++---- + 4 files changed, 69 insertions(+), 19 deletions(-) + +diff --git a/libexif/canon/exif-mnote-data-canon.c b/libexif/canon/exif-mnote-data-canon.c +index acf88ab..4396c53 100644 +--- a/libexif/canon/exif-mnote-data-canon.c ++++ b/libexif/canon/exif-mnote-data-canon.c +@@ -32,6 +32,8 @@ + + #define DEBUG + ++#define CHECKOVERFLOW(offset,datasize,structsize) (( offset >= datasize) || (structsize > datasize) || (offset > datasize - structsize )) ++ + static void + exif_mnote_data_canon_clear (ExifMnoteDataCanon *n) + { +@@ -209,7 +211,8 @@ exif_mnote_data_canon_load (ExifMnoteData *ne, + return; + } + datao = 6 + n->offset; +- if ((datao + 2 < datao) || (datao + 2 < 2) || (datao + 2 > buf_size)) { ++ ++ if (CHECKOVERFLOW(datao, buf_size, 2)) { + exif_log (ne->log, EXIF_LOG_CODE_CORRUPT_DATA, + "ExifMnoteCanon", "Short MakerNote"); + return; +@@ -233,7 +236,7 @@ exif_mnote_data_canon_load (ExifMnoteData *ne, + tcount = 0; + for (i = c, o = datao; i; --i, o += 12) { + size_t s; +- if ((o + 12 < o) || (o + 12 < 12) || (o + 12 > buf_size)) { ++ if (CHECKOVERFLOW(o,buf_size,12)) { + exif_log (ne->log, EXIF_LOG_CODE_CORRUPT_DATA, + "ExifMnoteCanon", "Short MakerNote"); + break; +@@ -248,6 +251,16 @@ exif_mnote_data_canon_load (ExifMnoteData *ne, + "Loading entry 0x%x ('%s')...", n->entries[tcount].tag, + mnote_canon_tag_get_name (n->entries[tcount].tag)); + ++ /* Check if we overflow the multiplication. Use buf_size as the max size for integer overflow detection, ++ * we will check the buffer sizes closer later. */ ++ if ( exif_format_get_size (n->entries[tcount].format) && ++ buf_size / exif_format_get_size (n->entries[tcount].format) < n->entries[tcount].components ++ ) { ++ exif_log (ne->log, EXIF_LOG_CODE_CORRUPT_DATA, ++ "ExifMnoteCanon", "Tag size overflow detected (%u * %lu)", exif_format_get_size (n->entries[tcount].format), n->entries[tcount].components); ++ continue; ++ } ++ + /* + * Size? If bigger than 4 bytes, the actual data is not + * in the entry but somewhere else (offset). +@@ -264,7 +277,8 @@ exif_mnote_data_canon_load (ExifMnoteData *ne, + } else { + size_t dataofs = o + 8; + if (s > 4) dataofs = exif_get_long (buf + dataofs, n->order) + 6; +- if ((dataofs + s < s) || (dataofs + s < dataofs) || (dataofs + s > buf_size)) { ++ ++ if (CHECKOVERFLOW(dataofs, buf_size, s)) { + exif_log (ne->log, EXIF_LOG_CODE_DEBUG, + "ExifMnoteCanon", + "Tag data past end of buffer (%zu > %u)", +diff --git a/libexif/fuji/exif-mnote-data-fuji.c b/libexif/fuji/exif-mnote-data-fuji.c +index a9949e1..11ff8c3 100644 +--- a/libexif/fuji/exif-mnote-data-fuji.c ++++ b/libexif/fuji/exif-mnote-data-fuji.c +@@ -28,6 +28,8 @@ + + #include "exif-mnote-data-fuji.h" + ++#define CHECKOVERFLOW(offset,datasize,structsize) (( offset >= datasize) || (structsize > datasize) || (offset > datasize - structsize )) ++ + struct _MNoteFujiDataPrivate { + ExifByteOrder order; + }; +@@ -162,7 +164,7 @@ exif_mnote_data_fuji_load (ExifMnoteData *en, + return; + } + datao = 6 + n->offset; +- if ((datao + 12 < datao) || (datao + 12 < 12) || (datao + 12 > buf_size)) { ++ if (CHECKOVERFLOW(datao, buf_size, 12)) { + exif_log (en->log, EXIF_LOG_CODE_CORRUPT_DATA, + "ExifMnoteDataFuji", "Short MakerNote"); + return; +@@ -170,8 +172,7 @@ exif_mnote_data_fuji_load (ExifMnoteData *en, + + n->order = EXIF_BYTE_ORDER_INTEL; + datao += exif_get_long (buf + datao + 8, EXIF_BYTE_ORDER_INTEL); +- if ((datao + 2 < datao) || (datao + 2 < 2) || +- (datao + 2 > buf_size)) { ++ if (CHECKOVERFLOW(datao, buf_size, 2)) { + exif_log (en->log, EXIF_LOG_CODE_CORRUPT_DATA, + "ExifMnoteDataFuji", "Short MakerNote"); + return; +@@ -195,7 +196,7 @@ exif_mnote_data_fuji_load (ExifMnoteData *en, + tcount = 0; + for (i = c, o = datao; i; --i, o += 12) { + size_t s; +- if ((o + 12 < o) || (o + 12 < 12) || (o + 12 > buf_size)) { ++ if (CHECKOVERFLOW(o, buf_size, 12)) { + exif_log (en->log, EXIF_LOG_CODE_CORRUPT_DATA, + "ExifMnoteDataFuji", "Short MakerNote"); + break; +@@ -210,6 +211,16 @@ exif_mnote_data_fuji_load (ExifMnoteData *en, + "Loading entry 0x%x ('%s')...", n->entries[tcount].tag, + mnote_fuji_tag_get_name (n->entries[tcount].tag)); + ++ /* Check if we overflow the multiplication. Use buf_size as the max size for integer overflow detection, ++ * we will check the buffer sizes closer later. */ ++ if ( exif_format_get_size (n->entries[tcount].format) && ++ buf_size / exif_format_get_size (n->entries[tcount].format) < n->entries[tcount].components ++ ) { ++ exif_log (en->log, EXIF_LOG_CODE_CORRUPT_DATA, ++ "ExifMnoteDataFuji", "Tag size overflow detected (%u * %lu)", exif_format_get_size (n->entries[tcount].format), n->entries[tcount].components); ++ continue; ++ } ++ + /* + * Size? If bigger than 4 bytes, the actual data is not + * in the entry but somewhere else (offset). +@@ -221,8 +232,7 @@ exif_mnote_data_fuji_load (ExifMnoteData *en, + if (s > 4) + /* The data in this case is merely a pointer */ + dataofs = exif_get_long (buf + dataofs, n->order) + 6 + n->offset; +- if ((dataofs + s < dataofs) || (dataofs + s < s) || +- (dataofs + s >= buf_size)) { ++ if (CHECKOVERFLOW(dataofs, buf_size, s)) { + exif_log (en->log, EXIF_LOG_CODE_CORRUPT_DATA, + "ExifMnoteDataFuji", "Tag data past end of " + "buffer (%zu >= %u)", dataofs + s, buf_size); +diff --git a/libexif/olympus/exif-mnote-data-olympus.c b/libexif/olympus/exif-mnote-data-olympus.c +index f4ccbb0..e7bf984 100644 +--- a/libexif/olympus/exif-mnote-data-olympus.c ++++ b/libexif/olympus/exif-mnote-data-olympus.c +@@ -37,6 +37,8 @@ + */ + /*#define EXIF_OVERCOME_SANYO_OFFSET_BUG */ + ++#define CHECKOVERFLOW(offset,datasize,structsize) (( offset >= datasize) || (structsize > datasize) || (offset > datasize - structsize )) ++ + static enum OlympusVersion + exif_mnote_data_olympus_identify_variant (const unsigned char *buf, + unsigned int buf_size); +@@ -247,7 +249,8 @@ exif_mnote_data_olympus_load (ExifMnoteData *en, + return; + } + o2 = 6 + n->offset; /* Start of interesting data */ +- if ((o2 + 10 < o2) || (o2 + 10 < 10) || (o2 + 10 > buf_size)) { ++ ++ if (CHECKOVERFLOW(o2,buf_size,10)) { + exif_log (en->log, EXIF_LOG_CODE_CORRUPT_DATA, + "ExifMnoteDataOlympus", "Short MakerNote"); + return; +@@ -303,6 +306,8 @@ exif_mnote_data_olympus_load (ExifMnoteData *en, + /* Olympus S760, S770 */ + datao = o2; + o2 += 8; ++ ++ if (CHECKOVERFLOW(o2,buf_size,4)) return; + exif_log (en->log, EXIF_LOG_CODE_DEBUG, "ExifMnoteDataOlympus", + "Parsing Olympus maker note v2 (0x%02x, %02x, %02x, %02x)...", + buf[o2], buf[o2 + 1], buf[o2 + 2], buf[o2 + 3]); +@@ -347,6 +352,7 @@ exif_mnote_data_olympus_load (ExifMnoteData *en, + case nikonV2: + o2 += 6; + if (o2 >= buf_size) return; ++ if (CHECKOVERFLOW(o2,buf_size,12)) return; + exif_log (en->log, EXIF_LOG_CODE_DEBUG, "ExifMnoteDataOlympus", + "Parsing Nikon maker note v2 (0x%02x, %02x, %02x, " + "%02x, %02x, %02x, %02x, %02x)...", +@@ -406,7 +412,8 @@ exif_mnote_data_olympus_load (ExifMnoteData *en, + } + + /* Sanity check the offset */ +- if ((o2 + 2 < o2) || (o2 + 2 < 2) || (o2 + 2 > buf_size)) { ++ ++ if (CHECKOVERFLOW(o2,buf_size,2)) { + exif_log (en->log, EXIF_LOG_CODE_CORRUPT_DATA, + "ExifMnoteOlympus", "Short MakerNote"); + return; +@@ -430,7 +437,7 @@ exif_mnote_data_olympus_load (ExifMnoteData *en, + tcount = 0; + for (i = c, o = o2; i; --i, o += 12) { + size_t s; +- if ((o + 12 < o) || (o + 12 < 12) || (o + 12 > buf_size)) { ++ if (CHECKOVERFLOW(o, buf_size, 12)) { + exif_log (en->log, EXIF_LOG_CODE_CORRUPT_DATA, + "ExifMnoteOlympus", "Short MakerNote"); + break; +@@ -451,6 +458,15 @@ exif_mnote_data_olympus_load (ExifMnoteData *en, + n->entries[tcount].components, + (int)exif_format_get_size(n->entries[tcount].format)); */ + ++ /* Check if we overflow the multiplication. Use buf_size as the max size for integer overflow detection, ++ * we will check the buffer sizes closer later. */ ++ if (exif_format_get_size (n->entries[tcount].format) && ++ buf_size / exif_format_get_size (n->entries[tcount].format) < n->entries[tcount].components ++ ) { ++ exif_log (en->log, EXIF_LOG_CODE_CORRUPT_DATA, "ExifMnoteOlympus", "Tag size overflow detected (%u * %lu)", exif_format_get_size (n->entries[tcount].format), n->entries[tcount].components); ++ continue; ++ } ++ + /* + * Size? If bigger than 4 bytes, the actual data is not + * in the entry but somewhere else (offset). +@@ -469,7 +485,7 @@ exif_mnote_data_olympus_load (ExifMnoteData *en, + * tag in its MakerNote. The offset is actually the absolute + * position in the file instead of the position within the IFD. + */ +- if (dataofs + s > buf_size && n->version == sanyoV1) { ++ if (dataofs > (buf_size - s) && n->version == sanyoV1) { + /* fix pointer */ + dataofs -= datao + 6; + exif_log (en->log, EXIF_LOG_CODE_DEBUG, +@@ -478,8 +494,7 @@ exif_mnote_data_olympus_load (ExifMnoteData *en, + } + #endif + } +- if ((dataofs + s < dataofs) || (dataofs + s < s) || +- (dataofs + s > buf_size)) { ++ if (CHECKOVERFLOW(dataofs, buf_size, s)) { + exif_log (en->log, EXIF_LOG_CODE_DEBUG, + "ExifMnoteOlympus", + "Tag data past end of buffer (%zu > %u)", +diff --git a/libexif/pentax/exif-mnote-data-pentax.c b/libexif/pentax/exif-mnote-data-pentax.c +index 38fbf64..f9eb69c 100644 +--- a/libexif/pentax/exif-mnote-data-pentax.c ++++ b/libexif/pentax/exif-mnote-data-pentax.c +@@ -28,6 +28,8 @@ + #include + #include + ++#define CHECKOVERFLOW(offset,datasize,structsize) (( offset >= datasize) || (structsize > datasize) || (offset > datasize - structsize )) ++ + static void + exif_mnote_data_pentax_clear (ExifMnoteDataPentax *n) + { +@@ -224,7 +226,7 @@ exif_mnote_data_pentax_load (ExifMnoteData *en, + return; + } + datao = 6 + n->offset; +- if ((datao + 8 < datao) || (datao + 8 < 8) || (datao + 8 > buf_size)) { ++ if (CHECKOVERFLOW(datao, buf_size, 8)) { + exif_log (en->log, EXIF_LOG_CODE_CORRUPT_DATA, + "ExifMnoteDataPentax", "Short MakerNote"); + return; +@@ -277,7 +279,7 @@ exif_mnote_data_pentax_load (ExifMnoteData *en, + tcount = 0; + for (i = c, o = datao; i; --i, o += 12) { + size_t s; +- if ((o + 12 < o) || (o + 12 < 12) || (o + 12 > buf_size)) { ++ if (CHECKOVERFLOW(o,buf_size,12)) { + exif_log (en->log, EXIF_LOG_CODE_CORRUPT_DATA, + "ExifMnoteDataPentax", "Short MakerNote"); + break; +@@ -292,6 +294,16 @@ exif_mnote_data_pentax_load (ExifMnoteData *en, + "Loading entry 0x%x ('%s')...", n->entries[tcount].tag, + mnote_pentax_tag_get_name (n->entries[tcount].tag)); + ++ /* Check if we overflow the multiplication. Use buf_size as the max size for integer overflow detection, ++ * we will check the buffer sizes closer later. */ ++ if ( exif_format_get_size (n->entries[tcount].format) && ++ buf_size / exif_format_get_size (n->entries[tcount].format) < n->entries[tcount].components ++ ) { ++ exif_log (en->log, EXIF_LOG_CODE_CORRUPT_DATA, ++ "ExifMnoteDataPentax", "Tag size overflow detected (%u * %lu)", exif_format_get_size (n->entries[tcount].format), n->entries[tcount].components); ++ break; ++ } ++ + /* + * Size? If bigger than 4 bytes, the actual data is not + * in the entry but somewhere else (offset). +@@ -304,8 +316,7 @@ exif_mnote_data_pentax_load (ExifMnoteData *en, + if (s > 4) + /* The data in this case is merely a pointer */ + dataofs = exif_get_long (buf + dataofs, n->order) + 6; +- if ((dataofs + s < dataofs) || (dataofs + s < s) || +- (dataofs + s > buf_size)) { ++ if (CHECKOVERFLOW(dataofs, buf_size, s)) { + exif_log (en->log, EXIF_LOG_CODE_DEBUG, + "ExifMnoteDataPentax", "Tag data past end " + "of buffer (%zu > %u)", dataofs + s, buf_size); +-- +2.17.1 + diff --git a/aosp_diff/preliminary/external/libexif/02_0002-Ensure-MakeNote-data-pointers-are-initialized-with-N.patch b/aosp_diff/preliminary/external/libexif/02_0002-Ensure-MakeNote-data-pointers-are-initialized-with-N.patch new file mode 100644 index 0000000000..938d9c18c3 --- /dev/null +++ b/aosp_diff/preliminary/external/libexif/02_0002-Ensure-MakeNote-data-pointers-are-initialized-with-N.patch @@ -0,0 +1,80 @@ +From ac7500723767265479cb43df5ce0465ccfeda900 Mon Sep 17 00:00:00 2001 +From: Jayant Chowdhary +Date: Mon, 30 Aug 2021 22:12:01 +0000 +Subject: [PATCH] Ensure MakeNote data pointers are initialized with NULL. + +This is a cherry-pick of +https://github.com/libexif/libexif/commit/ec412aa4583ad71ecabb967d3c77162760169d1f + +Bug: 196085005 + +Test: sts-tradefed run sts-engbuild-no-spl-lock -m StsHostTestCases + --test android.security.sts.CVE_2020_13113#testPocBug_196085005 + +Change-Id: Iaed1a1161e4c026bee24337a0ef5f34d2efdb3cf +Merged-In: Id106e79e829329145d27a93273241b58878bfac3 +Signed-off-by: Jayant Chowdhary +(cherry picked from commit 4ceb535b530fd8d0504c9df65c99045a71e12232) +Merged-In:Iaed1a1161e4c026bee24337a0ef5f34d2efdb3cf +--- + libexif/canon/exif-mnote-data-canon.c | 2 ++ + libexif/fuji/exif-mnote-data-fuji.c | 2 ++ + libexif/olympus/exif-mnote-data-olympus.c | 2 ++ + libexif/pentax/exif-mnote-data-pentax.c | 2 ++ + 4 files changed, 8 insertions(+) + +diff --git a/libexif/canon/exif-mnote-data-canon.c b/libexif/canon/exif-mnote-data-canon.c +index 4396c53..6d97930 100644 +--- a/libexif/canon/exif-mnote-data-canon.c ++++ b/libexif/canon/exif-mnote-data-canon.c +@@ -236,6 +236,8 @@ exif_mnote_data_canon_load (ExifMnoteData *ne, + tcount = 0; + for (i = c, o = datao; i; --i, o += 12) { + size_t s; ++ ++ memset(&n->entries[tcount], 0, sizeof(MnoteCanonEntry)); + if (CHECKOVERFLOW(o,buf_size,12)) { + exif_log (ne->log, EXIF_LOG_CODE_CORRUPT_DATA, + "ExifMnoteCanon", "Short MakerNote"); +diff --git a/libexif/fuji/exif-mnote-data-fuji.c b/libexif/fuji/exif-mnote-data-fuji.c +index 11ff8c3..3f3091b 100644 +--- a/libexif/fuji/exif-mnote-data-fuji.c ++++ b/libexif/fuji/exif-mnote-data-fuji.c +@@ -196,6 +196,8 @@ exif_mnote_data_fuji_load (ExifMnoteData *en, + tcount = 0; + for (i = c, o = datao; i; --i, o += 12) { + size_t s; ++ ++ memset(&n->entries[tcount], 0, sizeof(MnoteFujiEntry)); + if (CHECKOVERFLOW(o, buf_size, 12)) { + exif_log (en->log, EXIF_LOG_CODE_CORRUPT_DATA, + "ExifMnoteDataFuji", "Short MakerNote"); +diff --git a/libexif/olympus/exif-mnote-data-olympus.c b/libexif/olympus/exif-mnote-data-olympus.c +index e7bf984..493463b 100644 +--- a/libexif/olympus/exif-mnote-data-olympus.c ++++ b/libexif/olympus/exif-mnote-data-olympus.c +@@ -437,6 +437,8 @@ exif_mnote_data_olympus_load (ExifMnoteData *en, + tcount = 0; + for (i = c, o = o2; i; --i, o += 12) { + size_t s; ++ ++ memset(&n->entries[tcount], 0, sizeof(MnoteOlympusEntry)); + if (CHECKOVERFLOW(o, buf_size, 12)) { + exif_log (en->log, EXIF_LOG_CODE_CORRUPT_DATA, + "ExifMnoteOlympus", "Short MakerNote"); +diff --git a/libexif/pentax/exif-mnote-data-pentax.c b/libexif/pentax/exif-mnote-data-pentax.c +index f9eb69c..b4722d6 100644 +--- a/libexif/pentax/exif-mnote-data-pentax.c ++++ b/libexif/pentax/exif-mnote-data-pentax.c +@@ -279,6 +279,8 @@ exif_mnote_data_pentax_load (ExifMnoteData *en, + tcount = 0; + for (i = c, o = datao; i; --i, o += 12) { + size_t s; ++ ++ memset(&n->entries[tcount], 0, sizeof(MnotePentaxEntry)); + if (CHECKOVERFLOW(o,buf_size,12)) { + exif_log (en->log, EXIF_LOG_CODE_CORRUPT_DATA, + "ExifMnoteDataPentax", "Short MakerNote"); +-- +2.17.1 + diff --git a/aosp_diff/preliminary/external/libexif/03_0003-Zero-initialize-ExifMnoteData-vendor-during-construc.patch b/aosp_diff/preliminary/external/libexif/03_0003-Zero-initialize-ExifMnoteData-vendor-during-construc.patch new file mode 100644 index 0000000000..780d453ffe --- /dev/null +++ b/aosp_diff/preliminary/external/libexif/03_0003-Zero-initialize-ExifMnoteData-vendor-during-construc.patch @@ -0,0 +1,83 @@ +From b7b665ac497935c2bedc69e6593c8aaf32b4556a Mon Sep 17 00:00:00 2001 +From: Jayant Chowdhary +Date: Fri, 12 Nov 2021 18:22:59 +0000 +Subject: [PATCH] Zero initialize ExifMnoteData during construction + with exif_mnote_data__new. + +This is in order to not have an uninitialized 'mem' pointer in parent +ExifMnoteData after construction, when a non default ExifMem is used. + +Bug: 205915333 +Bug: 196085005 + +Test: create exif_mnote_data__new with non default exif mem using + malloc debug; use exif_mem pointer from previously created + ExifMnoteData, client app doesn't crash. + +Change-Id: I35a393cdfb03755109aaa8f725b0792aef359dc6 +Merged-In: Id106e79e829329145d27a93273241b58878bfac3 +Signed-off-by: Jayant Chowdhary +(cherry picked from commit c9da78d8d9f302c767b366ef256e24fa32f8784f) +Merged-In:I35a393cdfb03755109aaa8f725b0792aef359dc6 +--- + libexif/canon/exif-mnote-data-canon.c | 2 ++ + libexif/fuji/exif-mnote-data-fuji.c | 2 ++ + libexif/olympus/exif-mnote-data-olympus.c | 2 ++ + libexif/pentax/exif-mnote-data-pentax.c | 2 ++ + 4 files changed, 8 insertions(+) + +diff --git a/libexif/canon/exif-mnote-data-canon.c b/libexif/canon/exif-mnote-data-canon.c +index 6d97930..3a0778c 100644 +--- a/libexif/canon/exif-mnote-data-canon.c ++++ b/libexif/canon/exif-mnote-data-canon.c +@@ -384,6 +384,8 @@ exif_mnote_data_canon_new (ExifMem *mem, ExifDataOption o) + if (!d) + return NULL; + ++ memset(d, 0, sizeof(ExifMnoteDataCanon)); ++ + exif_mnote_data_construct (d, mem); + + /* Set up function pointers */ +diff --git a/libexif/fuji/exif-mnote-data-fuji.c b/libexif/fuji/exif-mnote-data-fuji.c +index 3f3091b..ce70bb6 100644 +--- a/libexif/fuji/exif-mnote-data-fuji.c ++++ b/libexif/fuji/exif-mnote-data-fuji.c +@@ -342,6 +342,8 @@ exif_mnote_data_fuji_new (ExifMem *mem) + d = exif_mem_alloc (mem, sizeof (ExifMnoteDataFuji)); + if (!d) return NULL; + ++ memset(d, 0, sizeof(ExifMnoteDataFuji)); ++ + exif_mnote_data_construct (d, mem); + + /* Set up function pointers */ +diff --git a/libexif/olympus/exif-mnote-data-olympus.c b/libexif/olympus/exif-mnote-data-olympus.c +index 493463b..f11616c 100644 +--- a/libexif/olympus/exif-mnote-data-olympus.c ++++ b/libexif/olympus/exif-mnote-data-olympus.c +@@ -657,6 +657,8 @@ exif_mnote_data_olympus_new (ExifMem *mem) + d = exif_mem_alloc (mem, sizeof (ExifMnoteDataOlympus)); + if (!d) return NULL; + ++ memset(d, 0, sizeof(ExifMnoteDataOlympus)); ++ + exif_mnote_data_construct (d, mem); + + /* Set up function pointers */ +diff --git a/libexif/pentax/exif-mnote-data-pentax.c b/libexif/pentax/exif-mnote-data-pentax.c +index b4722d6..3676563 100644 +--- a/libexif/pentax/exif-mnote-data-pentax.c ++++ b/libexif/pentax/exif-mnote-data-pentax.c +@@ -443,6 +443,8 @@ exif_mnote_data_pentax_new (ExifMem *mem) + d = exif_mem_alloc (mem, sizeof (ExifMnoteDataPentax)); + if (!d) return NULL; + ++ memset(d, 0, sizeof(ExifMnoteDataPentax)); ++ + exif_mnote_data_construct (d, mem); + + /* Set up function pointers */ +-- +2.17.1 + diff --git a/aosp_diff/preliminary/frameworks/av/11_0011-Better-buffer-overrun-prevention.patch b/aosp_diff/preliminary/frameworks/av/11_0011-Better-buffer-overrun-prevention.patch new file mode 100644 index 0000000000..8d6f0ea377 --- /dev/null +++ b/aosp_diff/preliminary/frameworks/av/11_0011-Better-buffer-overrun-prevention.patch @@ -0,0 +1,45 @@ +From 3c5482deef1131482061aacb34a094107f241b92 Mon Sep 17 00:00:00 2001 +From: Ray Essick +Date: Tue, 9 Nov 2021 16:14:41 -0800 +Subject: [PATCH] Better buffer-overrun prevention + +fixes end-of-buffer detection. Adds buffer-was-empty detection. + +Bug: 204445255 +Test: ran poc from bug +Change-Id: I42117ce1455d1cac2bd43f16d67d77ec436b0fe2 +(cherry picked from commit b51ed962d5186b68f883540e557894e881a8272d) +(cherry picked from commit 190e90959f3c34781c5276d50a5ee561c438db09) +Merged-In:I42117ce1455d1cac2bd43f16d67d77ec436b0fe2 +--- + media/libmediametrics/include/media/MediaMetricsItem.h | 9 ++++----- + 1 file changed, 4 insertions(+), 5 deletions(-) + +diff --git a/media/libmediametrics/include/media/MediaMetricsItem.h b/media/libmediametrics/include/media/MediaMetricsItem.h +index 303343f91c..e36f0a0f39 100644 +--- a/media/libmediametrics/include/media/MediaMetricsItem.h ++++ b/media/libmediametrics/include/media/MediaMetricsItem.h +@@ -466,16 +466,15 @@ protected: + template <> // static + status_t extract(std::string *val, const char **bufferpptr, const char *bufferptrmax) { + const char *ptr = *bufferpptr; +- while (*ptr != 0) { ++ do { + if (ptr >= bufferptrmax) { + ALOGE("%s: buffer exceeded", __func__); + return BAD_VALUE; + } +- ++ptr; +- } +- const size_t size = (ptr - *bufferpptr) + 1; ++ } while (*ptr++ != 0); ++ // ptr is terminator+1, == bufferptrmax if we finished entire buffer + *val = *bufferpptr; +- *bufferpptr += size; ++ *bufferpptr = ptr; + return NO_ERROR; + } + template <> // static +-- +2.17.1 + diff --git a/aosp_diff/preliminary/frameworks/av/12_0012-Safetynet-logging-for-b-204445255.patch b/aosp_diff/preliminary/frameworks/av/12_0012-Safetynet-logging-for-b-204445255.patch new file mode 100644 index 0000000000..af72f2a554 --- /dev/null +++ b/aosp_diff/preliminary/frameworks/av/12_0012-Safetynet-logging-for-b-204445255.patch @@ -0,0 +1,37 @@ +From 3382ea2d44d7de34096fac58ff11865f9303ab2a Mon Sep 17 00:00:00 2001 +From: Ray Essick +Date: Mon, 6 Dec 2021 10:22:33 -0800 +Subject: [PATCH] Safetynet logging for b/204445255 + +Bug: 204445255 +Test: poc from original bug +Change-Id: I569477d0771e1c03318df9ef271cf3201d472c99 +(cherry picked from commit 94e58d6b2497d2e0f7e86e2c979e7f6958c84590) +Merged-In:I569477d0771e1c03318df9ef271cf3201d472c99 +--- + media/libmediametrics/include/media/MediaMetricsItem.h | 2 ++ + 1 file changed, 2 insertions(+) + +diff --git a/media/libmediametrics/include/media/MediaMetricsItem.h b/media/libmediametrics/include/media/MediaMetricsItem.h +index e36f0a0f39..7ce75ed4f7 100644 +--- a/media/libmediametrics/include/media/MediaMetricsItem.h ++++ b/media/libmediametrics/include/media/MediaMetricsItem.h +@@ -27,6 +27,7 @@ + #include + + #include ++#include + #include + #include // nsecs_t + +@@ -469,6 +470,7 @@ protected: + do { + if (ptr >= bufferptrmax) { + ALOGE("%s: buffer exceeded", __func__); ++ android_errorWriteLog(0x534e4554, "204445255"); + return BAD_VALUE; + } + } while (*ptr++ != 0); +-- +2.17.1 + diff --git a/aosp_diff/preliminary/frameworks/base/49_0049-Update-deletion-conditions-for-a-package-s-UsageStat.patch b/aosp_diff/preliminary/frameworks/base/49_0049-Update-deletion-conditions-for-a-package-s-UsageStat.patch new file mode 100644 index 0000000000..5935195601 --- /dev/null +++ b/aosp_diff/preliminary/frameworks/base/49_0049-Update-deletion-conditions-for-a-package-s-UsageStat.patch @@ -0,0 +1,177 @@ +From 7bae5100b2342de899b17a1dbb1e0f63e237bac3 Mon Sep 17 00:00:00 2001 +From: Varun Shah +Date: Mon, 8 Nov 2021 17:27:32 -0800 +Subject: [PATCH] Update deletion conditions for a package's UsageStats. + +If a profile owner is defined for a specific user, do not delete usage +stats for a package on package deletion. + +Bug: 197399948 +Test: atest UsageStatsTest [all] +Change-Id: I94a8e3dfca8ef4c7616f77944d61726e06043b85 +Merged-In: I94a8e3dfca8ef4c7616f77944d61726e06043b85 +(cherry picked from commit d95ce6779da8410c5835385cb5785fb5b3a51d83) +Merged-In:I94a8e3dfca8ef4c7616f77944d61726e06043b85 +--- + .../admin/DevicePolicyManagerInternal.java | 8 ++++++ + .../DevicePolicyManagerService.java | 7 +++++ + .../server/usage/UsageStatsService.java | 26 +++++++++++++++---- + .../server/usage/UserUsageStatsService.java | 10 ++++--- + 4 files changed, 42 insertions(+), 9 deletions(-) + +diff --git a/core/java/android/app/admin/DevicePolicyManagerInternal.java b/core/java/android/app/admin/DevicePolicyManagerInternal.java +index d24694faff93..60cb563cca3d 100644 +--- a/core/java/android/app/admin/DevicePolicyManagerInternal.java ++++ b/core/java/android/app/admin/DevicePolicyManagerInternal.java +@@ -16,6 +16,7 @@ + + package android.app.admin; + ++import android.annotation.NonNull; + import android.annotation.Nullable; + import android.annotation.UserIdInt; + import android.content.ComponentName; +@@ -76,6 +77,13 @@ public abstract class DevicePolicyManagerInternal { + public abstract void addOnCrossProfileWidgetProvidersChangeListener( + OnCrossProfileWidgetProvidersChangeListener listener); + ++ /** ++ * @param userHandle the handle of the user whose profile owner is being fetched. ++ * @return the configured supervision app if it exists and is the device owner or policy owner. ++ */ ++ public abstract @Nullable ComponentName getProfileOwnerOrDeviceOwnerSupervisionComponent( ++ @NonNull UserHandle userHandle); ++ + /** + * Checks if an app with given uid is an active device admin of its user and has the policy + * specified. +diff --git a/services/devicepolicy/java/com/android/server/devicepolicy/DevicePolicyManagerService.java b/services/devicepolicy/java/com/android/server/devicepolicy/DevicePolicyManagerService.java +index ae354a953eec..2550f0282c4f 100644 +--- a/services/devicepolicy/java/com/android/server/devicepolicy/DevicePolicyManagerService.java ++++ b/services/devicepolicy/java/com/android/server/devicepolicy/DevicePolicyManagerService.java +@@ -12481,6 +12481,13 @@ public class DevicePolicyManagerService extends BaseIDevicePolicyManager { + } + } + ++ @Override ++ public @Nullable ComponentName getProfileOwnerOrDeviceOwnerSupervisionComponent( ++ @NonNull UserHandle userHandle) { ++ return DevicePolicyManagerService.this.getProfileOwnerOrDeviceOwnerSupervisionComponent( ++ userHandle); ++ } ++ + @Override + public boolean isActiveAdminWithPolicy(int uid, int reqPolicy) { + synchronized (getLockObject()) { +diff --git a/services/usage/java/com/android/server/usage/UsageStatsService.java b/services/usage/java/com/android/server/usage/UsageStatsService.java +index a5b676012ea9..a54f263c32ae 100644 +--- a/services/usage/java/com/android/server/usage/UsageStatsService.java ++++ b/services/usage/java/com/android/server/usage/UsageStatsService.java +@@ -339,6 +339,7 @@ public class UsageStatsService extends SystemService implements + if (userId == UserHandle.USER_SYSTEM) { + UsageStatsIdleService.scheduleUpdateMappingsJob(getContext()); + } ++ final boolean deleteObsoleteData = shouldDeleteObsoleteData(UserHandle.of(userId)); + synchronized (mLock) { + // Create a user unlocked event to report + final Event unlockEvent = new Event(USER_UNLOCKED, SystemClock.elapsedRealtime()); +@@ -356,7 +357,7 @@ public class UsageStatsService extends SystemService implements + boolean needToFlush = !pendingEvents.isEmpty(); + + initializeUserUsageStatsServiceLocked(userId, System.currentTimeMillis(), +- installedPackages); ++ installedPackages, deleteObsoleteData); + mUserUnlockedStates.put(userId, true); + final UserUsageStatsService userService = getUserUsageStatsServiceLocked(userId); + if (userService == null) { +@@ -551,13 +552,13 @@ public class UsageStatsService extends SystemService implements + * when the user is initially unlocked. + */ + private void initializeUserUsageStatsServiceLocked(int userId, long currentTimeMillis, +- HashMap installedPackages) { ++ HashMap installedPackages, boolean deleteObsoleteData) { + final File usageStatsDir = new File(Environment.getDataSystemCeDirectory(userId), + "usagestats"); + final UserUsageStatsService service = new UserUsageStatsService(getContext(), userId, + usageStatsDir, this); + try { +- service.init(currentTimeMillis, installedPackages); ++ service.init(currentTimeMillis, installedPackages, deleteObsoleteData); + mUserState.put(userId, service); + } catch (Exception e) { + if (mUserManager.isUserUnlocked(userId)) { +@@ -1029,6 +1030,10 @@ public class UsageStatsService extends SystemService implements + * Called by the Binder stub. + */ + private boolean updatePackageMappingsData() { ++ // don't update the mappings if a profile user is defined ++ if (!shouldDeleteObsoleteData(UserHandle.SYSTEM)) { ++ return true; // return true so job scheduler doesn't reschedule the job ++ } + // fetch the installed packages outside the lock so it doesn't block package manager. + final HashMap installedPkgs = getInstalledPackages(UserHandle.USER_SYSTEM); + synchronized (mLock) { +@@ -1154,6 +1159,13 @@ public class UsageStatsService extends SystemService implements + } + } + ++ private boolean shouldDeleteObsoleteData(UserHandle userHandle) { ++ final DevicePolicyManagerInternal dpmInternal = getDpmInternal(); ++ // If a profile owner is not defined for the given user, obsolete data should be deleted ++ return dpmInternal == null ++ || dpmInternal.getProfileOwnerOrDeviceOwnerSupervisionComponent(userHandle) == null; ++ } ++ + private String buildFullToken(String packageName, String token) { + final StringBuilder sb = new StringBuilder(packageName.length() + token.length() + 1); + sb.append(packageName); +@@ -2324,8 +2336,12 @@ public class UsageStatsService extends SystemService implements + private class MyPackageMonitor extends PackageMonitor { + @Override + public void onPackageRemoved(String packageName, int uid) { +- mHandler.obtainMessage(MSG_PACKAGE_REMOVED, getChangingUserId(), 0, packageName) +- .sendToTarget(); ++ final int changingUserId = getChangingUserId(); ++ // Only remove the package's data if a profile owner is not defined for the user ++ if (shouldDeleteObsoleteData(UserHandle.of(changingUserId))) { ++ mHandler.obtainMessage(MSG_PACKAGE_REMOVED, changingUserId, 0, packageName) ++ .sendToTarget(); ++ } + super.onPackageRemoved(packageName, uid); + } + } +diff --git a/services/usage/java/com/android/server/usage/UserUsageStatsService.java b/services/usage/java/com/android/server/usage/UserUsageStatsService.java +index 26de11af6f4e..0a5adc8e61d4 100644 +--- a/services/usage/java/com/android/server/usage/UserUsageStatsService.java ++++ b/services/usage/java/com/android/server/usage/UserUsageStatsService.java +@@ -115,8 +115,9 @@ class UserUsageStatsService { + mSystemTimeSnapshot = System.currentTimeMillis(); + } + +- void init(final long currentTimeMillis, HashMap installedPackages) { +- readPackageMappingsLocked(installedPackages); ++ void init(final long currentTimeMillis, HashMap installedPackages, ++ boolean deleteObsoleteData) { ++ readPackageMappingsLocked(installedPackages, deleteObsoleteData); + mDatabase.init(currentTimeMillis); + if (mDatabase.wasUpgradePerformed()) { + mDatabase.prunePackagesDataOnUpgrade(installedPackages); +@@ -180,12 +181,13 @@ class UserUsageStatsService { + return mDatabase.onPackageRemoved(packageName, timeRemoved); + } + +- private void readPackageMappingsLocked(HashMap installedPackages) { ++ private void readPackageMappingsLocked(HashMap installedPackages, ++ boolean deleteObsoleteData) { + mDatabase.readMappingsLocked(); + // Package mappings for the system user are updated after 24 hours via a job scheduled by + // UsageStatsIdleService to ensure restored data is not lost on first boot. Additionally, + // this makes user service initialization a little quicker on subsequent boots. +- if (mUserId != UserHandle.USER_SYSTEM) { ++ if (mUserId != UserHandle.USER_SYSTEM && deleteObsoleteData) { + updatePackageMappingsLocked(installedPackages); + } + } +-- +2.17.1 + diff --git a/aosp_diff/preliminary/frameworks/base/50_0050-RESTRICT-AUTOMERGE-Remove-line-of-code-that-was-mist.patch b/aosp_diff/preliminary/frameworks/base/50_0050-RESTRICT-AUTOMERGE-Remove-line-of-code-that-was-mist.patch new file mode 100644 index 0000000000..88d69d164d --- /dev/null +++ b/aosp_diff/preliminary/frameworks/base/50_0050-RESTRICT-AUTOMERGE-Remove-line-of-code-that-was-mist.patch @@ -0,0 +1,33 @@ +From 440b79ecdf43b4362baccb15274e6fd052eb9896 Mon Sep 17 00:00:00 2001 +From: Dave Mankoff +Date: Mon, 15 Nov 2021 19:21:44 +0000 +Subject: [PATCH] RESTRICT AUTOMERGE Remove line of code that was mistakently + left in. + +This line was removed in O, S, & P, but somehow survived in the Q and R branches. + +Bug: 193444889 + +Merged-In: I56589865427b10e2eab68e1ed2e7c290572a9edc +Change-Id: I56589865427b10e2eab68e1ed2e7c290572a9edc +(cherry picked from commit 1b13bc873c7682847cdfa904f754ebc327eb180b) +Merged-In:I56589865427b10e2eab68e1ed2e7c290572a9edc +--- + .../com/android/systemui/shared/plugins/PluginManagerImpl.java | 1 - + 1 file changed, 1 deletion(-) + +diff --git a/packages/SystemUI/shared/src/com/android/systemui/shared/plugins/PluginManagerImpl.java b/packages/SystemUI/shared/src/com/android/systemui/shared/plugins/PluginManagerImpl.java +index a687bb89fd75..5c742f25209e 100644 +--- a/packages/SystemUI/shared/src/com/android/systemui/shared/plugins/PluginManagerImpl.java ++++ b/packages/SystemUI/shared/src/com/android/systemui/shared/plugins/PluginManagerImpl.java +@@ -201,7 +201,6 @@ public class PluginManagerImpl extends BroadcastReceiver implements PluginManage + filter.addAction(DISABLE_PLUGIN); + filter.addDataScheme("package"); + mContext.registerReceiver(this, filter, PluginInstanceManager.PLUGIN_PERMISSION, null); +- mContext.registerReceiver(this, filter); + filter = new IntentFilter(Intent.ACTION_USER_UNLOCKED); + mContext.registerReceiver(this, filter); + } +-- +2.17.1 + diff --git a/aosp_diff/preliminary/frameworks/base/51_0051-Controls-Do-not-recreate-intent.patch b/aosp_diff/preliminary/frameworks/base/51_0051-Controls-Do-not-recreate-intent.patch new file mode 100644 index 0000000000..b292feffcf --- /dev/null +++ b/aosp_diff/preliminary/frameworks/base/51_0051-Controls-Do-not-recreate-intent.patch @@ -0,0 +1,244 @@ +From df2779c76a3dc0a344316749fb369b457e05a231 Mon Sep 17 00:00:00 2001 +From: Matt Pietal +Date: Mon, 4 Oct 2021 15:33:14 -0400 +Subject: [PATCH] Controls - Do not recreate intent + +Recreating the control's intent in SystemUI can be exploited to launch +Intent's with SystemUI's privileges, rather than what is limited to +the application. Use the fillInIntent parameter to supply additional +parameters to the application. + +Bug: 193445603 +Test: Follow directions in bug to retest +Change-Id: Ib2b0342af85679c0514fb4d88530376b58e6e12a +Merged-In: +(cherry picked from commit 0e120a5d4f8998e343f3c8106081037017613082) +(cherry picked from commit d7b16dd2a56035b2feec9f39d6d461fd551317eb) +Merged-In:Ib2b0342af85679c0514fb4d88530376b58e6e12a +--- + .../ui/ControlActionCoordinatorImpl.kt | 13 ++-- + .../systemui/controls/ui/DetailDialog.kt | 32 +++++--- + .../systemui/controls/ui/DetailDialogTest.kt | 74 +++++++++++++++++++ + 3 files changed, 102 insertions(+), 17 deletions(-) + create mode 100644 packages/SystemUI/tests/src/com/android/systemui/controls/ui/DetailDialogTest.kt + +diff --git a/packages/SystemUI/src/com/android/systemui/controls/ui/ControlActionCoordinatorImpl.kt b/packages/SystemUI/src/com/android/systemui/controls/ui/ControlActionCoordinatorImpl.kt +index e15380b42a78..f6b420ba57f3 100644 +--- a/packages/SystemUI/src/com/android/systemui/controls/ui/ControlActionCoordinatorImpl.kt ++++ b/packages/SystemUI/src/com/android/systemui/controls/ui/ControlActionCoordinatorImpl.kt +@@ -17,6 +17,7 @@ + package com.android.systemui.controls.ui + + import android.app.Dialog ++import android.app.PendingIntent + import android.content.Context + import android.content.Intent + import android.content.pm.PackageManager +@@ -74,7 +75,7 @@ class ControlActionCoordinatorImpl @Inject constructor( + bouncerOrRun(Action(cvh.cws.ci.controlId, { + cvh.layout.performHapticFeedback(HapticFeedbackConstants.CONTEXT_CLICK) + if (cvh.usePanel()) { +- showDialog(cvh, control.getAppIntent().getIntent()) ++ showDetail(cvh, control.getAppIntent()) + } else { + cvh.action(CommandAction(templateId)) + } +@@ -100,7 +101,7 @@ class ControlActionCoordinatorImpl @Inject constructor( + // Long press snould only be called when there is valid control state, otherwise ignore + cvh.cws.control?.let { + cvh.layout.performHapticFeedback(HapticFeedbackConstants.LONG_PRESS) +- showDialog(cvh, it.getAppIntent().getIntent()) ++ showDetail(cvh, it.getAppIntent()) + } + }, false /* blockable */)) + } +@@ -155,17 +156,17 @@ class ControlActionCoordinatorImpl @Inject constructor( + bgExecutor.execute { vibrator.vibrate(effect) } + } + +- private fun showDialog(cvh: ControlViewHolder, intent: Intent) { ++ private fun showDetail(cvh: ControlViewHolder, pendingIntent: PendingIntent) { + bgExecutor.execute { +- val activities: List = cvh.context.packageManager.queryIntentActivities( +- intent, ++ val activities: List = context.packageManager.queryIntentActivities( ++ pendingIntent.getIntent(), + PackageManager.MATCH_DEFAULT_ONLY + ) + + uiExecutor.execute { + // make sure the intent is valid before attempting to open the dialog + if (activities.isNotEmpty()) { +- dialog = DetailDialog(cvh, intent).also { ++ dialog = DetailDialog(cvh, pendingIntent).also { + it.setOnDismissListener { _ -> dialog = null } + it.show() + } +diff --git a/packages/SystemUI/src/com/android/systemui/controls/ui/DetailDialog.kt b/packages/SystemUI/src/com/android/systemui/controls/ui/DetailDialog.kt +index 9ec14523a809..a7f7eb7ffb44 100644 +--- a/packages/SystemUI/src/com/android/systemui/controls/ui/DetailDialog.kt ++++ b/packages/SystemUI/src/com/android/systemui/controls/ui/DetailDialog.kt +@@ -16,8 +16,11 @@ + + package com.android.systemui.controls.ui + ++import android.app.ActivityOptions + import android.app.ActivityView ++import android.app.PendingIntent + import android.app.Dialog ++import android.content.ComponentName + import android.content.Intent + import android.provider.Settings + import android.view.View +@@ -37,9 +40,8 @@ import com.android.systemui.R + */ + class DetailDialog( + val cvh: ControlViewHolder, +- val intent: Intent ++ val pendingIntent: PendingIntent + ) : Dialog(cvh.context, R.style.Theme_SystemUI_Dialog_Control_DetailPanel) { +- + companion object { + private const val PANEL_TOP_OFFSET = "systemui.controls_panel_top_offset" + /* +@@ -49,18 +51,19 @@ class DetailDialog( + private const val EXTRA_USE_PANEL = "controls.DISPLAY_IN_PANEL" + } + ++ private val fillInIntent = Intent().apply { ++ putExtra(EXTRA_USE_PANEL, true) ++ ++ // Apply flags to make behaviour match documentLaunchMode=always. ++ addFlags(Intent.FLAG_ACTIVITY_NEW_DOCUMENT) ++ addFlags(Intent.FLAG_ACTIVITY_MULTIPLE_TASK) ++ } ++ + var activityView = ActivityView(context, null, 0, false) + + val stateCallback: ActivityView.StateCallback = object : ActivityView.StateCallback() { + override fun onActivityViewReady(view: ActivityView) { +- val launchIntent = Intent(intent) +- launchIntent.putExtra(EXTRA_USE_PANEL, true) +- +- // Apply flags to make behaviour match documentLaunchMode=always. +- launchIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_DOCUMENT) +- launchIntent.addFlags(Intent.FLAG_ACTIVITY_MULTIPLE_TASK) +- +- view.startActivity(launchIntent) ++ view.startActivity(pendingIntent, fillInIntent, ActivityOptions.makeBasic()) + } + + override fun onActivityViewDestroyed(view: ActivityView) {} +@@ -68,6 +71,12 @@ class DetailDialog( + override fun onTaskRemovalStarted(taskId: Int) { + dismiss() + } ++ ++ override fun onTaskCreated(taskId: Int, name: ComponentName?) { ++ requireViewById(R.id.controls_activity_view).apply { ++ setAlpha(1f) ++ } ++ } + } + + init { +@@ -76,6 +85,7 @@ class DetailDialog( + + requireViewById(R.id.controls_activity_view).apply { + addView(activityView) ++ setAlpha(0f) + } + + requireViewById(R.id.control_detail_close).apply { +@@ -86,7 +96,7 @@ class DetailDialog( + setOnClickListener { v: View -> + dismiss() + context.sendBroadcast(Intent(Intent.ACTION_CLOSE_SYSTEM_DIALOGS)) +- v.context.startActivity(intent) ++ pendingIntent.send() + } + } + +diff --git a/packages/SystemUI/tests/src/com/android/systemui/controls/ui/DetailDialogTest.kt b/packages/SystemUI/tests/src/com/android/systemui/controls/ui/DetailDialogTest.kt +new file mode 100644 +index 000000000000..0ad03d2b41b3 +--- /dev/null ++++ b/packages/SystemUI/tests/src/com/android/systemui/controls/ui/DetailDialogTest.kt +@@ -0,0 +1,74 @@ ++/* ++ * Copyright (C) 2021 The Android Open Source Project ++ * ++ * Licensed under the Apache License, Version 2.0 (the "License"); ++ * you may not use this file except in compliance with the License. ++ * You may obtain a copy of the License at ++ * ++ * http://www.apache.org/licenses/LICENSE-2.0 ++ * ++ * Unless required by applicable law or agreed to in writing, software ++ * distributed under the License is distributed on an "AS IS" BASIS, ++ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. ++ * See the License for the specific language governing permissions and ++ * limitations under the License. ++ */ ++ ++package com.android.systemui.controls.ui ++ ++import android.app.ActivityView ++import android.app.PendingIntent ++import android.testing.AndroidTestingRunner ++import android.testing.TestableLooper ++import androidx.test.filters.SmallTest ++import com.android.systemui.SysuiTestCase ++import com.android.systemui.util.mockito.capture ++import org.junit.Before ++import org.junit.Test ++import org.junit.runner.RunWith ++import org.mockito.ArgumentCaptor ++import org.mockito.ArgumentMatchers.eq ++import org.mockito.Captor ++import org.mockito.Mock ++import org.mockito.Mockito.any ++import org.mockito.Mockito.verify ++import org.mockito.MockitoAnnotations ++ ++@SmallTest ++@RunWith(AndroidTestingRunner::class) ++@TestableLooper.RunWithLooper ++class DetailDialogTest : SysuiTestCase() { ++ ++ @Mock ++ private lateinit var activityView: ActivityView ++ @Mock ++ private lateinit var controlViewHolder: ControlViewHolder ++ @Mock ++ private lateinit var pendingIntent: PendingIntent ++ @Captor ++ private lateinit var viewCaptor: ArgumentCaptor ++ ++ @Before ++ fun setUp() { ++ MockitoAnnotations.initMocks(this) ++ } ++ ++ @Test ++ fun testPendingIntentIsUnModified() { ++ // GIVEN the dialog is created with a PendingIntent ++ val dialog = createDialog(pendingIntent) ++ ++ // WHEN the ActivityView is initialized ++ dialog.stateCallback.onActivityViewReady(capture(viewCaptor)) ++ ++ // THEN the PendingIntent used to call startActivity is unmodified by systemui ++ verify(viewCaptor.value).startActivity(eq(pendingIntent), any(), any()) ++ } ++ ++ private fun createDialog(pendingIntent: PendingIntent): DetailDialog { ++ return DetailDialog( ++ controlViewHolder, ++ pendingIntent ++ ) ++ } ++} +-- +2.17.1 + diff --git a/aosp_diff/preliminary/frameworks/base/52_0052-DO-NOT-MERGE-Re-implement-reading-writing-Throwables.patch b/aosp_diff/preliminary/frameworks/base/52_0052-DO-NOT-MERGE-Re-implement-reading-writing-Throwables.patch new file mode 100644 index 0000000000..2f37b96757 --- /dev/null +++ b/aosp_diff/preliminary/frameworks/base/52_0052-DO-NOT-MERGE-Re-implement-reading-writing-Throwables.patch @@ -0,0 +1,344 @@ +From 0075dfa8ff5e16819794c47f74df9603824610f6 Mon Sep 17 00:00:00 2001 +From: Hai Zhang +Date: Wed, 30 Dec 2020 18:30:25 -0800 +Subject: [PATCH] DO NOT MERGE Re-implement reading/writing Throwables from/to + Parcel, without Parcel private APIs. + +Bug:197228210 +Test: atest CtsSecurityTestCases:android.security.cts.AndroidFutureTest +(cherry picked from I577da5a3bc4ed537123b7eceaa5addf8f7bb0d92 and +Icc5ce702f0cd84e9136dee3c65f63619df697358) + +Change-Id: I1d488c475f2f7af835a67496535cecdd6987c0cf +(cherry picked from commit 562f1bd91f2845788ab907d687de6800ee49c6f8) +Merged-In:I1d488c475f2f7af835a67496535cecdd6987c0cf +--- + .../android/internal/infra/AndroidFuture.java | 116 ++++++++++++------ + .../internal/infra/ServiceConnector.java | 28 ++--- + 2 files changed, 86 insertions(+), 58 deletions(-) + +diff --git a/core/java/com/android/internal/infra/AndroidFuture.java b/core/java/com/android/internal/infra/AndroidFuture.java +index 9f15d8991fa7..84391c169941 100644 +--- a/core/java/com/android/internal/infra/AndroidFuture.java ++++ b/core/java/com/android/internal/infra/AndroidFuture.java +@@ -16,23 +16,21 @@ + + package com.android.internal.infra; + +-import static com.android.internal.util.ConcurrentUtils.DIRECT_EXECUTOR; +- + import android.annotation.CallSuper; + import android.annotation.NonNull; + import android.annotation.Nullable; + import android.os.Handler; +-import android.os.Message; ++import android.os.Looper; + import android.os.Parcel; + import android.os.Parcelable; + import android.os.RemoteException; +-import android.util.ExceptionUtils; ++import android.util.EventLog; + import android.util.Log; + + import com.android.internal.annotations.GuardedBy; + import com.android.internal.util.Preconditions; +-import com.android.internal.util.function.pooled.PooledLambda; + ++import java.lang.reflect.Constructor; + import java.util.concurrent.CancellationException; + import java.util.concurrent.CompletableFuture; + import java.util.concurrent.CompletionStage; +@@ -75,14 +73,16 @@ public class AndroidFuture extends CompletableFuture implements Parcelable + + private static final boolean DEBUG = false; + private static final String LOG_TAG = AndroidFuture.class.getSimpleName(); ++ private static final Executor DIRECT_EXECUTOR = Runnable::run; + private static final StackTraceElement[] EMPTY_STACK_TRACE = new StackTraceElement[0]; ++ private static @Nullable Handler sMainHandler; + + private final @NonNull Object mLock = new Object(); + @GuardedBy("mLock") + private @Nullable BiConsumer mListener; + @GuardedBy("mLock") + private @Nullable Executor mListenerExecutor = DIRECT_EXECUTOR; +- private @NonNull Handler mTimeoutHandler = Handler.getMain(); ++ private @NonNull Handler mTimeoutHandler = getMainHandler(); + private final @Nullable IAndroidFuture mRemoteOrigin; + + public AndroidFuture() { +@@ -96,7 +96,7 @@ public class AndroidFuture extends CompletableFuture implements Parcelable + // Done + if (in.readBoolean()) { + // Failed +- completeExceptionally(unparcelException(in)); ++ completeExceptionally(readThrowable(in)); + } else { + // Success + complete((T) in.readValue(null)); +@@ -108,6 +108,15 @@ public class AndroidFuture extends CompletableFuture implements Parcelable + } + } + ++ @NonNull ++ private static Handler getMainHandler() { ++ // This isn't thread-safe but we are okay with it. ++ if (sMainHandler == null) { ++ sMainHandler = new Handler(Looper.getMainLooper()); ++ } ++ return sMainHandler; ++ } ++ + /** + * Create a completed future with the given value. + * +@@ -236,9 +245,7 @@ public class AndroidFuture extends CompletableFuture implements Parcelable + if (mListenerExecutor == DIRECT_EXECUTOR) { + callListener(listener, res, err); + } else { +- mListenerExecutor.execute(PooledLambda +- .obtainRunnable(AndroidFuture::callListener, listener, res, err) +- .recycleOnUse()); ++ mListenerExecutor.execute(() -> callListener(listener, res, err)); + } + } + +@@ -260,7 +267,8 @@ public class AndroidFuture extends CompletableFuture implements Parcelable + } else { + // listener exception-case threw + // give up on listener but preserve the original exception when throwing up +- throw ExceptionUtils.appendCause(t, err); ++ t.addSuppressed(err); ++ throw t; + } + } + } catch (Throwable t2) { +@@ -272,9 +280,7 @@ public class AndroidFuture extends CompletableFuture implements Parcelable + /** @inheritDoc */ + //@Override //TODO uncomment once java 9 APIs are exposed to frameworks + public AndroidFuture orTimeout(long timeout, @NonNull TimeUnit unit) { +- Message msg = PooledLambda.obtainMessage(AndroidFuture::triggerTimeout, this); +- msg.obj = this; +- mTimeoutHandler.sendMessageDelayed(msg, unit.toMillis(timeout)); ++ mTimeoutHandler.postDelayed(this::triggerTimeout, this, unit.toMillis(timeout)); + return this; + } + +@@ -507,7 +513,7 @@ public class AndroidFuture extends CompletableFuture implements Parcelable + result = get(); + } catch (Throwable t) { + dest.writeBoolean(true); +- parcelException(dest, unwrapExecutionException(t)); ++ writeThrowable(dest, unwrapExecutionException(t)); + return; + } + dest.writeBoolean(false); +@@ -545,45 +551,75 @@ public class AndroidFuture extends CompletableFuture implements Parcelable + * Alternative to {@link Parcel#writeException} that stores the stack trace, in a + * way consistent with the binder IPC exception propagation behavior. + */ +- private static void parcelException(Parcel p, @Nullable Throwable t) { +- p.writeBoolean(t == null); +- if (t == null) { ++ private static void writeThrowable(@NonNull Parcel parcel, @Nullable Throwable throwable) { ++ boolean hasThrowable = throwable != null; ++ parcel.writeBoolean(hasThrowable); ++ if (!hasThrowable) { ++ return; ++ } ++ ++ boolean isFrameworkParcelable = throwable instanceof Parcelable ++ && throwable.getClass().getClassLoader() == Parcelable.class.getClassLoader(); ++ parcel.writeBoolean(isFrameworkParcelable); ++ if (isFrameworkParcelable) { ++ parcel.writeParcelable((Parcelable) throwable, ++ Parcelable.PARCELABLE_WRITE_RETURN_VALUE); + return; + } + +- p.writeInt(Parcel.getExceptionCode(t)); +- p.writeString(t.getClass().getName()); +- p.writeString(t.getMessage()); +- p.writeStackTrace(t); +- parcelException(p, t.getCause()); ++ parcel.writeString(throwable.getClass().getName()); ++ parcel.writeString(throwable.getMessage()); ++ StackTraceElement[] stackTrace = throwable.getStackTrace(); ++ StringBuilder stackTraceBuilder = new StringBuilder(); ++ int truncatedStackTraceLength = Math.min(stackTrace != null ? stackTrace.length : 0, 5); ++ for (int i = 0; i < truncatedStackTraceLength; i++) { ++ if (i > 0) { ++ stackTraceBuilder.append('\n'); ++ } ++ stackTraceBuilder.append("\tat ").append(stackTrace[i]); ++ } ++ parcel.writeString(stackTraceBuilder.toString()); ++ writeThrowable(parcel, throwable.getCause()); + } + + /** +- * @see #parcelException ++ * @see #writeThrowable + */ +- private static @Nullable Throwable unparcelException(Parcel p) { +- if (p.readBoolean()) { ++ private static @Nullable Throwable readThrowable(@NonNull Parcel parcel) { ++ final boolean hasThrowable = parcel.readBoolean(); ++ if (!hasThrowable) { + return null; + } + +- int exCode = p.readInt(); +- String cls = p.readString(); +- String msg = p.readString(); +- String stackTrace = p.readInt() > 0 ? p.readString() : "\t"; +- msg += "\n" + stackTrace; +- +- Exception ex = p.createExceptionOrNull(exCode, msg); +- if (ex == null) { +- ex = new RuntimeException(cls + ": " + msg); ++ boolean isFrameworkParcelable = parcel.readBoolean(); ++ if (isFrameworkParcelable) { ++ return parcel.readParcelable(Parcelable.class.getClassLoader()); + } +- ex.setStackTrace(EMPTY_STACK_TRACE); + +- Throwable cause = unparcelException(p); ++ String className = parcel.readString(); ++ String message = parcel.readString(); ++ String stackTrace = parcel.readString(); ++ String messageWithStackTrace = message + '\n' + stackTrace; ++ Throwable throwable; ++ try { ++ Class clazz = Class.forName(className, true, Parcelable.class.getClassLoader()); ++ if (Throwable.class.isAssignableFrom(clazz)) { ++ Constructor constructor = clazz.getConstructor(String.class); ++ throwable = (Throwable) constructor.newInstance(messageWithStackTrace); ++ } else { ++ android.util.EventLog.writeEvent(0x534e4554, "186530450", -1, ""); ++ throwable = new RuntimeException(className + ": " + messageWithStackTrace); ++ } ++ } catch (Throwable t) { ++ throwable = new RuntimeException(className + ": " + messageWithStackTrace); ++ throwable.addSuppressed(t); ++ } ++ throwable.setStackTrace(EMPTY_STACK_TRACE); ++ Throwable cause = readThrowable(parcel); + if (cause != null) { +- ex.initCause(ex); ++ throwable.initCause(cause); + } +- +- return ex; ++ return throwable; + } + + @Override +diff --git a/core/java/com/android/internal/infra/ServiceConnector.java b/core/java/com/android/internal/infra/ServiceConnector.java +index 167d128a76f8..89869389cb59 100644 +--- a/core/java/com/android/internal/infra/ServiceConnector.java ++++ b/core/java/com/android/internal/infra/ServiceConnector.java +@@ -26,14 +26,11 @@ import android.content.ServiceConnection; + import android.os.Handler; + import android.os.IBinder; + import android.os.IInterface; ++import android.os.Looper; + import android.os.RemoteException; + import android.os.UserHandle; +-import android.text.TextUtils; +-import android.util.DebugUtils; + import android.util.Log; + +-import com.android.internal.util.function.pooled.PooledLambda; +- + import java.io.PrintWriter; + import java.util.ArrayDeque; + import java.util.ArrayList; +@@ -47,7 +44,6 @@ import java.util.concurrent.TimeUnit; + import java.util.function.BiConsumer; + import java.util.function.Function; + +- + /** + * Takes care of managing a {@link ServiceConnection} and auto-disconnecting from the service upon + * a certain timeout. +@@ -220,6 +216,7 @@ public interface ServiceConnector { + private final @NonNull Queue> mQueue = this; + private final @NonNull List> mUnfinishedJobs = new ArrayList<>(); + ++ private final @NonNull Handler mMainHandler = new Handler(Looper.getMainLooper()); + private final @NonNull ServiceConnection mServiceConnection = this; + private final @NonNull Runnable mTimeoutDisconnect = this; + +@@ -250,9 +247,8 @@ public interface ServiceConnector { + * {@link IInterface}. + * Typically this is {@code IMyInterface.Stub::asInterface} + */ +- public Impl(@NonNull Context context, @NonNull Intent intent, +- @Context.BindServiceFlags int bindingFlags, @UserIdInt int userId, +- @Nullable Function binderAsInterface) { ++ public Impl(@NonNull Context context, @NonNull Intent intent, int bindingFlags, ++ @UserIdInt int userId, @Nullable Function binderAsInterface) { + mContext = context; + mIntent = intent; + mBindingFlags = bindingFlags; +@@ -264,7 +260,7 @@ public interface ServiceConnector { + * {@link Handler} on which {@link Job}s will be called + */ + protected Handler getJobHandler() { +- return Handler.getMain(); ++ return mMainHandler; + } + + /** +@@ -391,8 +387,7 @@ public interface ServiceConnector { + + private boolean enqueue(@NonNull Job job) { + cancelTimeout(); +- return getJobHandler().sendMessage(PooledLambda.obtainMessage( +- ServiceConnector.Impl::enqueueJobThread, this, job)); ++ return getJobHandler().post(() -> enqueueJobThread(job)); + } + + void enqueueJobThread(@NonNull Job job) { +@@ -422,7 +417,7 @@ public interface ServiceConnector { + if (DEBUG) { + logTrace(); + } +- Handler.getMain().removeCallbacks(mTimeoutDisconnect); ++ mMainHandler.removeCallbacks(mTimeoutDisconnect); + } + + void completeExceptionally(@NonNull Job job, @NonNull Throwable ex) { +@@ -486,7 +481,7 @@ public interface ServiceConnector { + } + long timeout = getAutoDisconnectTimeoutMs(); + if (timeout > 0) { +- Handler.getMain().postDelayed(mTimeoutDisconnect, timeout); ++ mMainHandler.postDelayed(mTimeoutDisconnect, timeout); + } else if (DEBUG) { + Log.i(LOG_TAG, "Not scheduling unbind for permanently bound " + this); + } +@@ -502,7 +497,7 @@ public interface ServiceConnector { + logTrace(); + } + mUnbinding = true; +- getJobHandler().sendMessage(PooledLambda.obtainMessage(Impl::unbindJobThread, this)); ++ getJobHandler().post(this::unbindJobThread); + } + + void unbindJobThread() { +@@ -659,10 +654,7 @@ public interface ServiceConnector { + } + + private void logTrace() { +- Log.i(LOG_TAG, +- TextUtils.join(" -> ", +- DebugUtils.callersWithin(ServiceConnector.class, /* offset= */ 1)) +- + "(" + this + ")"); ++ Log.i(LOG_TAG, "See stacktrace", new Throwable()); + } + + /** +-- +2.17.1 + diff --git a/aosp_diff/preliminary/frameworks/base/53_0053-Don-t-crash-if-default-supervision-profile-owner-is-.patch b/aosp_diff/preliminary/frameworks/base/53_0053-Don-t-crash-if-default-supervision-profile-owner-is-.patch new file mode 100644 index 0000000000..3e5164c263 --- /dev/null +++ b/aosp_diff/preliminary/frameworks/base/53_0053-Don-t-crash-if-default-supervision-profile-owner-is-.patch @@ -0,0 +1,36 @@ +From 013dd3fe0f7350936de36725753f64fb934a8b48 Mon Sep 17 00:00:00 2001 +From: Tomasz Wasilczyk +Date: Tue, 26 Jan 2021 08:46:31 -0800 +Subject: [PATCH] Don't crash if default supervision profile owner is not set + +Bug: 175430552 +Bug: 197399948 +Test: build, flash, watch logcat + +Change-Id: If441946fa278c04ae88122f6243f5a7dedd96ebc +Merged-In: If441946fa278c04ae88122f6243f5a7dedd96ebc +(cherry picked from commit bd27c365915f824824d865668c63a2119c4700fb) +(cherry picked from commit bcb5ee6f43ea24fb74649f164ca3c3032a7be3b5) +(cherry picked from commit b5fa0a6c5e96c420c1f6d808be603c4579f9a1ba) +Merged-In:If441946fa278c04ae88122f6243f5a7dedd96ebc +--- + .../server/devicepolicy/DevicePolicyManagerService.java | 3 +++ + 1 file changed, 3 insertions(+) + +diff --git a/services/devicepolicy/java/com/android/server/devicepolicy/DevicePolicyManagerService.java b/services/devicepolicy/java/com/android/server/devicepolicy/DevicePolicyManagerService.java +index 2550f0282c4f..27d07abfc255 100644 +--- a/services/devicepolicy/java/com/android/server/devicepolicy/DevicePolicyManagerService.java ++++ b/services/devicepolicy/java/com/android/server/devicepolicy/DevicePolicyManagerService.java +@@ -9396,6 +9396,9 @@ public class DevicePolicyManagerService extends BaseIDevicePolicyManager { + final ComponentName doComponent = mOwners.getDeviceOwnerComponent(); + final ComponentName poComponent = + mOwners.getProfileOwnerComponent(userHandle.getIdentifier()); ++ if (supervisorComponent == null) { ++ return null; ++ } + if (supervisorComponent.equals(doComponent) || supervisorComponent.equals( + poComponent)) { + return supervisorComponent; +-- +2.17.1 + diff --git a/aosp_diff/preliminary/packages/apps/ManagedProvisioning/03_0003-Fix-Managed-Provisioning-crash-on-OTA.patch b/aosp_diff/preliminary/packages/apps/ManagedProvisioning/03_0003-Fix-Managed-Provisioning-crash-on-OTA.patch new file mode 100644 index 0000000000..64e435fb2b --- /dev/null +++ b/aosp_diff/preliminary/packages/apps/ManagedProvisioning/03_0003-Fix-Managed-Provisioning-crash-on-OTA.patch @@ -0,0 +1,70 @@ +From 8f1bb957dd7b4c1d194913784b3f613425190f8b Mon Sep 17 00:00:00 2001 +From: kholoud mohamed +Date: Mon, 29 Nov 2021 18:12:43 +0000 +Subject: [PATCH] Fix Managed Provisioning crash on OTA + +Fixed a crash that happened on OTA for devices that have other profile +types where ManagedProvisioning is not installed. + +Bug: 207335612 +Bug: 207573077 +Fixes: 205276569 +Bug: 195630721 +Test: manual testing +Change-Id: I716b4aded965af7730860804646317eae7321d7b +Merged-In: I716b4aded965af7730860804646317eae7321d7b +(cherry picked from commit a01c0d7fa435694a76850b446c3efa03cd7a7677) +(cherry picked from commit e3027e5be5286b9d7c2e614759f7303126c80017) +(cherry picked from commit e0df0d82b3fea40b31aa7c71a63632f86366f741) +Merged-In:I716b4aded965af7730860804646317eae7321d7b +--- + .../UpdateInteractAcrossProfilesAppOpTask.java | 18 +++++++++++++++--- + 1 file changed, 15 insertions(+), 3 deletions(-) + +diff --git a/src/com/android/managedprovisioning/task/UpdateInteractAcrossProfilesAppOpTask.java b/src/com/android/managedprovisioning/task/UpdateInteractAcrossProfilesAppOpTask.java +index 25ad0b59..abb72da8 100644 +--- a/src/com/android/managedprovisioning/task/UpdateInteractAcrossProfilesAppOpTask.java ++++ b/src/com/android/managedprovisioning/task/UpdateInteractAcrossProfilesAppOpTask.java +@@ -48,6 +48,7 @@ public class UpdateInteractAcrossProfilesAppOpTask extends AbstractProvisioningT + private final DevicePolicyManager mDevicePolicyManager; + private final AppOpsManager mAppOpsManager; + private final PackageManager mPackageManager; ++ private final UserManager mUserManager; + + public UpdateInteractAcrossProfilesAppOpTask(Context context, + ProvisioningParams provisioningParams, +@@ -59,6 +60,7 @@ public class UpdateInteractAcrossProfilesAppOpTask extends AbstractProvisioningT + mDevicePolicyManager = context.getSystemService(DevicePolicyManager.class); + mAppOpsManager = context.getSystemService(AppOpsManager.class); + mPackageManager = context.getPackageManager(); ++ mUserManager = context.getSystemService(UserManager.class); + } + + @Override +@@ -133,10 +135,20 @@ public class UpdateInteractAcrossProfilesAppOpTask extends AbstractProvisioningT + + private Set getAllInstalledApps() { + final Set apps = new HashSet<>(); +- List profiles = mContext.getSystemService(UserManager.class).getAllProfiles(); ++ List profiles = mUserManager.getAllProfiles(); + for (UserHandle profile : profiles) { +- apps.addAll(mContext.createContextAsUser(profile, /* flags= */ 0).getPackageManager() +- .getInstalledApplications(/* flags= */ 0)); ++ if (profile.getIdentifier() != mContext.getUserId() ++ && !mUserManager.isManagedProfile(profile.getIdentifier())) { ++ continue; ++ } ++ try { ++ apps.addAll( ++ mContext.createPackageContextAsUser( ++ /* packageName= */ "android", /* flags= */ 0, profile) ++ .getPackageManager().getInstalledApplications(/* flags= */ 0)); ++ } catch (PackageManager.NameNotFoundException ignored) { ++ // Should never happen. ++ } + } + return apps; + } +-- +2.17.1 + diff --git a/aosp_diff/preliminary/packages/apps/Settings/13_0013-Rephrase-dialog-message-of-clear-storage-dialog-for-.patch b/aosp_diff/preliminary/packages/apps/Settings/13_0013-Rephrase-dialog-message-of-clear-storage-dialog-for-.patch new file mode 100644 index 0000000000..152f5ec066 --- /dev/null +++ b/aosp_diff/preliminary/packages/apps/Settings/13_0013-Rephrase-dialog-message-of-clear-storage-dialog-for-.patch @@ -0,0 +1,32 @@ +From b2b9f9cedd104d179a1c0983f701ed9290d3a728 Mon Sep 17 00:00:00 2001 +From: Yanting Yang +Date: Thu, 14 Oct 2021 15:06:33 +0000 +Subject: [PATCH] Rephrase dialog message of clear storage dialog for security + concern + +Bug: 193890833 +Test: visual +Change-Id: I8f0b066de710169ee8b922c44b6519ca21b9c7ef +(cherry picked from commit 0c359da620498d536d81cb97d5ae48048201c226) +(cherry picked from commit 6024ea553a5f662f4693bd203aedbbcce049a15e) +Merged-In:I8f0b066de710169ee8b922c44b6519ca21b9c7ef +--- + res/values/strings.xml | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/res/values/strings.xml b/res/values/strings.xml +index b7722883e2..f80e8c5203 100644 +--- a/res/values/strings.xml ++++ b/res/values/strings.xml +@@ -4479,7 +4479,7 @@ + + Delete app data? + +- All this app\u2019s data will be deleted permanently. This includes all files, settings, accounts, databases, etc. ++ This app\u2019s data will be permanently deleted. This includes files, settings, databases, and other app data. + + OK + +-- +2.17.1 + diff --git a/aosp_diff/preliminary/packages/apps/Settings/14_0014-Add-non-system-overlay-flag-to-InstallCaCertificateW.patch b/aosp_diff/preliminary/packages/apps/Settings/14_0014-Add-non-system-overlay-flag-to-InstallCaCertificateW.patch new file mode 100644 index 0000000000..f62208b3f4 --- /dev/null +++ b/aosp_diff/preliminary/packages/apps/Settings/14_0014-Add-non-system-overlay-flag-to-InstallCaCertificateW.patch @@ -0,0 +1,57 @@ +From 073f4d44e50b501afa03e6fdcda6c179f2cbb4ae Mon Sep 17 00:00:00 2001 +From: Alex Johnston +Date: Mon, 29 Nov 2021 16:06:38 +0000 +Subject: [PATCH] Add non system overlay flag to InstallCaCertificateWarning + +Bug: 196969991 +Test: Manual testing with Settings +Change-Id: Ia9dc251c853526b2ce66c9f8ff595d496b7f1bc4 +Merged-In: Ia9dc251c853526b2ce66c9f8ff595d496b7f1bc4 +(cherry picked from commit 2f193c81576e2e86cf64470aeb312cab1e76d40d) +(cherry picked from commit fca5cb37486fb1072d6233670b2fd66e555b07c1) +Merged-In:Ia9dc251c853526b2ce66c9f8ff595d496b7f1bc4 +--- + .../settings/security/InstallCaCertificateWarning.java | 6 ++++++ + 1 file changed, 6 insertions(+) + +diff --git a/src/com/android/settings/security/InstallCaCertificateWarning.java b/src/com/android/settings/security/InstallCaCertificateWarning.java +index 91faae1f6a..b5cc6b35c7 100644 +--- a/src/com/android/settings/security/InstallCaCertificateWarning.java ++++ b/src/com/android/settings/security/InstallCaCertificateWarning.java +@@ -16,6 +16,8 @@ + + package com.android.settings.security; + ++import static android.view.WindowManager.LayoutParams.SYSTEM_FLAG_HIDE_NON_SYSTEM_OVERLAY_WINDOWS; ++ + import android.annotation.Nullable; + import android.app.Activity; + import android.content.Intent; +@@ -41,6 +43,8 @@ public class InstallCaCertificateWarning extends Activity { + super.onCreate(savedInstanceState); + + setContentView(R.layout.ca_certificate_warning_dialog); ++ getWindow().addSystemFlags(SYSTEM_FLAG_HIDE_NON_SYSTEM_OVERLAY_WINDOWS); ++ + final GlifLayout layout = findViewById(R.id.setup_wizard_layout); + + final FooterBarMixin mixin = layout.getMixin(FooterBarMixin.class); +@@ -52,6 +56,7 @@ public class InstallCaCertificateWarning extends Activity { + .setTheme(R.style.SudGlifButton_Secondary) + .build() + ); ++ mixin.getSecondaryButtonView().setFilterTouchesWhenObscured(true); + + mixin.setPrimaryButton( + new FooterButton.Builder(this) +@@ -61,6 +66,7 @@ public class InstallCaCertificateWarning extends Activity { + .setTheme(R.style.SudGlifButton_Primary) + .build() + ); ++ mixin.getPrimaryButtonView().setFilterTouchesWhenObscured(true); + } + + private View.OnClickListener installCaCertificate() { +-- +2.17.1 + diff --git a/aosp_diff/preliminary/packages/apps/Settings/15_0015-Import-translations.-DO-NOT-MERGE-ANYWHERE.patch b/aosp_diff/preliminary/packages/apps/Settings/15_0015-Import-translations.-DO-NOT-MERGE-ANYWHERE.patch new file mode 100644 index 0000000000..83b22eef24 --- /dev/null +++ b/aosp_diff/preliminary/packages/apps/Settings/15_0015-Import-translations.-DO-NOT-MERGE-ANYWHERE.patch @@ -0,0 +1,1207 @@ +From 67a0c4bcea7a7a288d9ff638719e581a5fc6e3aa Mon Sep 17 00:00:00 2001 +From: Bill Yi +Date: Wed, 3 Nov 2021 17:46:32 -0700 +Subject: [PATCH] Import translations. DO NOT MERGE ANYWHERE + +Auto-generated-cl: translation import + +Merged-In: I5b0f9ac74627cc5ab75cc34e47a4292e6a9543b0 +Change-Id: I64fda49900da659363eb4e792cf5b87a9c68202d +(cherry picked from commit 6cd48383a10f4d513fbbeffc31309f5ee4a7f381) +Merged-In:I64fda49900da659363eb4e792cf5b87a9c68202d +--- + res/values-af/strings.xml | 2 +- + res/values-am/strings.xml | 2 +- + res/values-ar/strings.xml | 2 +- + res/values-as/strings.xml | 2 +- + res/values-az/strings.xml | 2 +- + res/values-b+sr+Latn/strings.xml | 2 +- + res/values-be/strings.xml | 2 +- + res/values-bg/strings.xml | 2 +- + res/values-bn/strings.xml | 2 +- + res/values-bs/strings.xml | 2 +- + res/values-ca/strings.xml | 2 +- + res/values-cs/strings.xml | 2 +- + res/values-da/strings.xml | 2 +- + res/values-de/strings.xml | 2 +- + res/values-el/strings.xml | 2 +- + res/values-en-rAU/strings.xml | 2 +- + res/values-en-rCA/strings.xml | 2 +- + res/values-en-rGB/strings.xml | 2 +- + res/values-en-rIN/strings.xml | 2 +- + res/values-en-rXC/strings.xml | 2 +- + res/values-es-rUS/strings.xml | 2 +- + res/values-es/strings.xml | 2 +- + res/values-et/strings.xml | 2 +- + res/values-eu/strings.xml | 2 +- + res/values-fa/strings.xml | 2 +- + res/values-fi/strings.xml | 2 +- + res/values-fr-rCA/strings.xml | 2 +- + res/values-fr/strings.xml | 2 +- + res/values-gl/strings.xml | 2 +- + res/values-gu/strings.xml | 2 +- + res/values-hi/strings.xml | 2 +- + res/values-hr/strings.xml | 2 +- + res/values-hu/strings.xml | 2 +- + res/values-hy/strings.xml | 2 +- + res/values-in/strings.xml | 2 +- + res/values-is/strings.xml | 2 +- + res/values-it/strings.xml | 2 +- + res/values-iw/strings.xml | 2 +- + res/values-ja/strings.xml | 2 +- + res/values-ka/strings.xml | 2 +- + res/values-kk/strings.xml | 2 +- + res/values-km/strings.xml | 2 +- + res/values-kn/strings.xml | 2 +- + res/values-ko/strings.xml | 2 +- + res/values-ky/strings.xml | 2 +- + res/values-lo/strings.xml | 2 +- + res/values-lt/strings.xml | 2 +- + res/values-lv/strings.xml | 2 +- + res/values-mk/strings.xml | 2 +- + res/values-ml/strings.xml | 2 +- + res/values-mn/strings.xml | 2 +- + res/values-mr/strings.xml | 2 +- + res/values-ms/strings.xml | 2 +- + res/values-my/strings.xml | 2 +- + res/values-nb/strings.xml | 2 +- + res/values-ne/strings.xml | 2 +- + res/values-nl/strings.xml | 2 +- + res/values-or/strings.xml | 2 +- + res/values-pa/strings.xml | 2 +- + res/values-pl/strings.xml | 2 +- + res/values-pt-rBR/strings.xml | 2 +- + res/values-pt-rPT/strings.xml | 2 +- + res/values-pt/strings.xml | 2 +- + res/values-ro/strings.xml | 2 +- + res/values-ru/strings.xml | 2 +- + res/values-si/strings.xml | 2 +- + res/values-sk/strings.xml | 2 +- + res/values-sl/strings.xml | 2 +- + res/values-sq/strings.xml | 2 +- + res/values-sr/strings.xml | 2 +- + res/values-sv/strings.xml | 2 +- + res/values-sw/strings.xml | 2 +- + res/values-ta/strings.xml | 2 +- + res/values-te/strings.xml | 2 +- + res/values-th/strings.xml | 2 +- + res/values-tl/strings.xml | 2 +- + res/values-tr/strings.xml | 2 +- + res/values-uk/strings.xml | 2 +- + res/values-ur/strings.xml | 2 +- + res/values-uz/strings.xml | 2 +- + res/values-vi/strings.xml | 2 +- + res/values-zh-rCN/strings.xml | 2 +- + res/values-zh-rHK/strings.xml | 2 +- + res/values-zh-rTW/strings.xml | 2 +- + res/values-zu/strings.xml | 2 +- + 85 files changed, 85 insertions(+), 85 deletions(-) + +diff --git a/res/values-af/strings.xml b/res/values-af/strings.xml +index be47707ea8..dc47934449 100644 +--- a/res/values-af/strings.xml ++++ b/res/values-af/strings.xml +@@ -1930,7 +1930,7 @@ + "Interne berging" + "Herbereken tans grootte…" + "Vee programdata uit?" +- "Alle data van hierdie program sal permanent uitgevee word. Dit sluit alle lêers, instellings, rekeninge, databasisse ens. in." ++ "Hierdie program se data sal permanent uitgevee word. Dit sluit lêers, instellings, databasisse en ander programdata in." + "OK" + "Kanselleer" + +diff --git a/res/values-am/strings.xml b/res/values-am/strings.xml +index 13a9ec292f..78e15b0ba1 100644 +--- a/res/values-am/strings.xml ++++ b/res/values-am/strings.xml +@@ -1930,7 +1930,7 @@ + "የውስጥ ማከማቻ" + "መጠን ድጋሚ በማስላት ላይ..." + "መተግበሪያ ውሂብ ሰርዝ?" +- "የዚህ መተግበሪያ ውሂቦች ሁሉ በቋሚነት ይሰረዛሉ።እነዚህም ፋይሎችን፣ ቅንብሮችን፣ መለያዎችን፣ የውሂብ ጎታዎች እና የመሳሰሉትን ያካትታሉ።" ++ "የዚህ መተግበሪያ ውሂብ እስከመጨረሻው ይሰረዛል። ይህ ፋይሎችን፣ ቅንብሮችን፣ የውሂብ ጎታን እና ሌላ የመተግበሪያ ውሂብን ያካትታል።" + "እሺ" + "ይቅር" + +diff --git a/res/values-ar/strings.xml b/res/values-ar/strings.xml +index 609e001fb8..16c9b46421 100644 +--- a/res/values-ar/strings.xml ++++ b/res/values-ar/strings.xml +@@ -2026,7 +2026,7 @@ + "وحدة التخزين الداخلية" + "جارٍ إعادة حساب الحجم..." + "هل تريد حذف بيانات التطبيق؟" +- "سيتم حذف جميع بيانات هذا التطبيق نهائيًا. ويشمل ذلك جميع الملفات والإعدادات والحسابات وقواعد البيانات وما إلى ذلك." ++ "سيتم حذف بيانات هذا التطبيق نهائيًا، بما في ذلك الملفات والإعدادات وقواعد البيانات وبيانات التطبيق الأخرى." + "حسنًا" + "إلغاء" + +diff --git a/res/values-as/strings.xml b/res/values-as/strings.xml +index 5559d5f73d..37637b6a30 100644 +--- a/res/values-as/strings.xml ++++ b/res/values-as/strings.xml +@@ -1930,7 +1930,7 @@ + "আভ্যন্তৰীণ সঞ্চয়াগাৰ" + "এপৰ আকাৰ পুনঃগণনা কৰা হৈছে…" + "এপ্ ডেটা মচিবনে?" +- "এই এপটোৰ সকলো ডেটা চিৰদিনৰ বাবে মচা হ\'ব। সেই ডেটাসমূহৰ ভিতৰত ফাইল ছেটিং, একাউণ্ট, ডেটাবেইছ আদিসমূহ অন্তৰ্ভুক্ত।" ++ "এই এপৰ ডেটাখিনি স্থায়ীভাৱে মচা হ’ব। ইয়াত ফাইল, ছেটিং, ডেটাবে’ছ আৰু অন্য এপৰ ডেটা অন্তৰ্ভুক্ত।" + "ঠিক" + "বাতিল কৰক" + +diff --git a/res/values-az/strings.xml b/res/values-az/strings.xml +index eb007c65f3..8f8fa22a27 100644 +--- a/res/values-az/strings.xml ++++ b/res/values-az/strings.xml +@@ -1930,7 +1930,7 @@ + "Daxili yaddaş" + "Ölçünü yenidən hesablayır..." + "Tətbiq məlumatları silinsin?" +- "Bu tətbiq datası həmişəlik silinəcək. Buraya bütün fayllar, ayarlar, hesablar, verilənlər bazası və sairləri aiddir." ++ "Bu tətbiq datası həmişəlik silinəcək. Buraya fayllar, ayarlar, data bazaları və digər tətbiq datası daxildir." + "OK" + "Ləğv et" + +diff --git a/res/values-b+sr+Latn/strings.xml b/res/values-b+sr+Latn/strings.xml +index c60387a40e..7ad937c4d4 100644 +--- a/res/values-b+sr+Latn/strings.xml ++++ b/res/values-b+sr+Latn/strings.xml +@@ -1954,7 +1954,7 @@ + "Interno skladište" + "Ponovno izračunavanje veličine..." + "Želite li da izbrišete podatke o aplikaciji?" +- "Svi podaci ove aplikacije biće trajno izbrisani. To obuhvata sve datoteke, podešavanja, naloge, baze podataka itd." ++ "Podaci ove aplikacije će se trajno izbrisati. To obuhvata fajlove, podešavanja, baze podataka i druge podatke aplikacija." + "Potvrdi" + "Otkaži" + +diff --git a/res/values-be/strings.xml b/res/values-be/strings.xml +index 616c7ed60c..e09df8b628 100644 +--- a/res/values-be/strings.xml ++++ b/res/values-be/strings.xml +@@ -1978,7 +1978,7 @@ + "Унутраная памяць" + "Пераразлік памеру..." + "Выдаліць даныя праграмы?" +- "Усе даныя гэтай праграмы будуць назаўсёды выдаленыя. Гэта датычыцца ўсiх файлаў, налад, уліковых запісаў, баз даных і г. д." ++ "Даныя гэтай праграмы (файлы, налады, базы даных і г. д.) будуць выдалены назаўсёды." + "ОК" + "Скасаваць" + +diff --git a/res/values-bg/strings.xml b/res/values-bg/strings.xml +index b0fa521fa4..99352930e5 100644 +--- a/res/values-bg/strings.xml ++++ b/res/values-bg/strings.xml +@@ -1930,7 +1930,7 @@ + "Вътр. хранилище" + "Размерът се преизчислява..." + "Да се изтрият ли данните от приложенията?" +- "Всички данни на това приложение ще бъдат изтрити за постоянно. Това включва всички файлове, настройки, профили и т.н." ++ "Данните на приложението ще бъдат изтрити за постоянно. Това включва файловете, настройките, базите от данни и други данни от приложението." + "OK" + "Отказ" + +diff --git a/res/values-bn/strings.xml b/res/values-bn/strings.xml +index 7d2423d3fb..170b141f90 100644 +--- a/res/values-bn/strings.xml ++++ b/res/values-bn/strings.xml +@@ -1930,7 +1930,7 @@ + "ইন্টারনাল স্টোরেজ" + "আকার আবার গণনা করা হচ্ছে..." + "অ্যাপ ডেটা মুছবেন?" +- "এই অ্যাপের সমস্ত ডেটা স্থায়ীভাবে মুছে যাবে। সমস্ত ফাইল, সেটিংস, অ্যাকাউন্ট, ডেটাবেস ইত্যাদি সবই।" ++ "এই অ্যাপের ডেটা স্থায়ীভাবে মুছে ফেলা হবে। এর মধ্যে ফাইল, সেটিংস, ডেটাবেস এবং অন্য অ্যাপ ডেটা আছে।" + "ঠিক আছে" + "বাতিল" + +diff --git a/res/values-bs/strings.xml b/res/values-bs/strings.xml +index 290d8070ce..738632a097 100644 +--- a/res/values-bs/strings.xml ++++ b/res/values-bs/strings.xml +@@ -1954,7 +1954,7 @@ + "Unutrašnja pohrana" + "Ponovno izračunavanje veličine…" + "Izbrisati podatke aplikacija?" +- "Svi podaci ove aplikacije će biti trajno izbrisani. To uključuje sve fajlove, postavke, račune, baze podataka itd." ++ "Ovi podaci aplikacije će se trajno izbrisati. To obuhvata fajlove, postavke, baze podataka i ostale podatke aplikacije." + "Uredu" + "Otkaži" + +diff --git a/res/values-ca/strings.xml b/res/values-ca/strings.xml +index 9b3663ad8b..999532e6ec 100644 +--- a/res/values-ca/strings.xml ++++ b/res/values-ca/strings.xml +@@ -1930,7 +1930,7 @@ + "Emmagatzematge intern" + "S\'està tornant a calcular la mida..." + "Vols suprimir les dades de l\'aplicació?" +- "Se suprimiran totes les dades d\'aquesta aplicació permanentment. Això inclou tots els fitxers, la configuració, els comptes, les bases de dades, etc." ++ "Les dades d'aquesta aplicació se suprimiran permanentment. Això inclou fitxers, opcions de configuració, bases de dades i altres dades de l'aplicació." + "D\'acord" + "Cancel·la" + +diff --git a/res/values-cs/strings.xml b/res/values-cs/strings.xml +index 748f71c5a7..ac1dcd732a 100644 +--- a/res/values-cs/strings.xml ++++ b/res/values-cs/strings.xml +@@ -1978,7 +1978,7 @@ + "Interní úložiště" + "Přepočítávání velikosti..." + "Vymazat data aplikace?" +- "Veškerá data (všechny soubory, nastavení, účty, databáze apod.) této aplikace budou trvale vymazána." ++ "Data této aplikace budou trvale smazána. To zahrnuje soubory, nastavení, databáze a další data aplikace." + "OK" + "Zrušit" + +diff --git a/res/values-da/strings.xml b/res/values-da/strings.xml +index 299605380e..b447040dee 100644 +--- a/res/values-da/strings.xml ++++ b/res/values-da/strings.xml +@@ -1930,7 +1930,7 @@ + "Intern lagerplads" + "Beregner størrelse igen..." + "Vil du slette appdata?" +- "Alle data i denne app slettes permanent. Det omfatter alle filer, indstillinger, konti, databaser osv." ++ "Denne apps data slettes permanent. Det omfatter filer, indstillinger, databaser og andre appdata." + "OK" + "Annuller" + +diff --git a/res/values-de/strings.xml b/res/values-de/strings.xml +index c05cc7e0f1..a0b776ac5a 100644 +--- a/res/values-de/strings.xml ++++ b/res/values-de/strings.xml +@@ -1931,7 +1931,7 @@ + "Interner Speicher" + "Größe wird neu berechnet..." + "App-Daten löschen?" +- "Alle Daten dieser App werden endgültig gelöscht. Dazu zählen alle Dateien, Einstellungen, Konten, Datenbanken usw." ++ "Die Daten dieser App werden endgültig gelöscht. Dazu gehören Dateien, Einstellungen, Datenbanken und sonstige App-Daten." + "Ok" + "Abbrechen" + +diff --git a/res/values-el/strings.xml b/res/values-el/strings.xml +index 9cfe81227c..46a2e5dd4c 100644 +--- a/res/values-el/strings.xml ++++ b/res/values-el/strings.xml +@@ -1930,7 +1930,7 @@ + "Εσ. αποθ. χώρος" + "Εκ νέου υπολογισμός μεγέθους..." + "Διαγραφή δεδομένων εφαρμογής;" +- "Όλα τα δεδομένα της εφαρμογής θα διαγραφούν μόνιμα. Αυτό περιλαμβάνει όλα τα αρχεία, τις ρυθμίσεις, τους λογαριασμούς, τις βάσεις δεδομένων κ.λπ." ++ "Τα δεδομένα αυτής της εφαρμογής θα διαγραφούν οριστικά. Σε αυτά περιλαμβάνονται αρχεία, ρυθμίσεις, βάσεις δεδομένων και άλλα δεδομένα εφαρμογών." + "OK" + "Ακύρωση" + +diff --git a/res/values-en-rAU/strings.xml b/res/values-en-rAU/strings.xml +index 06da966909..f767c55a0c 100644 +--- a/res/values-en-rAU/strings.xml ++++ b/res/values-en-rAU/strings.xml +@@ -1930,7 +1930,7 @@ + "Internal storage" + "Recomputing size…" + "Delete app data?" +- "All of this app\'s data will be deleted permanently. This includes all files, settings, accounts, databases, etc." ++ "This app’s data will be permanently deleted. This includes files, settings, databases and other app data." + "OK" + "Cancel" + +diff --git a/res/values-en-rCA/strings.xml b/res/values-en-rCA/strings.xml +index 0d4b4a1bd2..e3bdb7ab69 100644 +--- a/res/values-en-rCA/strings.xml ++++ b/res/values-en-rCA/strings.xml +@@ -1930,7 +1930,7 @@ + "Internal storage" + "Recomputing size…" + "Delete app data?" +- "All of this app\'s data will be deleted permanently. This includes all files, settings, accounts, databases, etc." ++ "This app’s data will be permanently deleted. This includes files, settings, databases and other app data." + "OK" + "Cancel" + +diff --git a/res/values-en-rGB/strings.xml b/res/values-en-rGB/strings.xml +index 381f85b9ae..7417b36fb5 100644 +--- a/res/values-en-rGB/strings.xml ++++ b/res/values-en-rGB/strings.xml +@@ -1930,7 +1930,7 @@ + "Internal storage" + "Recomputing size…" + "Delete app data?" +- "All of this app\'s data will be deleted permanently. This includes all files, settings, accounts, databases, etc." ++ "This app’s data will be permanently deleted. This includes files, settings, databases and other app data." + "OK" + "Cancel" + +diff --git a/res/values-en-rIN/strings.xml b/res/values-en-rIN/strings.xml +index 0d01718e40..bd33cb5235 100644 +--- a/res/values-en-rIN/strings.xml ++++ b/res/values-en-rIN/strings.xml +@@ -1930,7 +1930,7 @@ + "Internal storage" + "Recomputing size…" + "Delete app data?" +- "All of this app\'s data will be deleted permanently. This includes all files, settings, accounts, databases, etc." ++ "This app’s data will be permanently deleted. This includes files, settings, databases and other app data." + "OK" + "Cancel" + +diff --git a/res/values-en-rXC/strings.xml b/res/values-en-rXC/strings.xml +index 515e97200b..1c8cb1f039 100644 +--- a/res/values-en-rXC/strings.xml ++++ b/res/values-en-rXC/strings.xml +@@ -1930,7 +1930,7 @@ + "‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‎‎‏‏‎‏‏‏‎‏‏‏‏‎‏‏‏‎‏‏‎‏‎‎‎‏‎‏‏‏‎‎‏‏‏‏‏‏‎‏‎‎‎‏‏‎‏‎‎‏‎‎‎‏‎‎‏‎‏‎‎‏‎Internal storage‎‏‎‎‏‎" + "‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‎‎‏‏‏‏‎‎‏‏‏‏‎‏‎‎‏‏‎‏‎‎‎‎‏‎‎‏‏‏‎‏‏‏‏‏‏‎‎‎‎‎‎‏‏‎‏‎‎‏‎‏‏‏‎‏‎‏‏‎‎‎‎Recomputing size…‎‏‎‎‏‎" + "‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‎‏‎‏‎‏‎‎‎‎‎‎‏‎‎‎‏‎‎‏‏‏‎‎‎‏‏‏‏‏‎‏‎‎‏‎‏‎‎‏‎‏‎‎‏‎‏‎‏‏‎‏‎‏‎‏‏‏‎‏‎‎Delete app data?‎‏‎‎‏‎" +- "‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‏‏‏‎‏‏‎‏‎‎‏‏‏‎‏‎‎‏‏‎‏‏‎‏‏‎‏‏‏‎‏‎‏‏‎‏‏‏‎‏‎‎‎‏‎‎‏‎‏‎‎‏‎‏‎‏‎‏‎‏‏‏‎‎‎All this app’s data will be deleted permanently. This includes all files, settings, accounts, databases, etc.‎‏‎‎‏‎" ++ "‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‎‎‏‏‏‏‎‏‎‏‏‏‏‏‎‎‎‎‎‏‏‎‎‏‎‎‏‏‎‎‏‏‎‏‎‎‎‎‎‎‏‏‏‏‎‏‎‏‏‎‏‏‎‎‏‏‎‏‏‏‏‎‎This app’s data will be permanently deleted. This includes files, settings, databases, and other app data.‎‏‎‎‏‎" + "‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‎‏‏‎‎‏‏‏‎‏‏‏‎‎‏‏‎‏‎‎‏‏‎‏‎‏‎‎‎‎‏‎‎‎‎‎‎‎‏‏‎‎‎‏‎‏‏‎‏‏‎‏‎‎‎‎‎‏‎‎‏‎‏‎OK‎‏‎‎‏‎" + "‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‏‏‎‎‎‏‏‏‏‎‏‎‏‏‎‎‏‎‏‏‎‏‏‏‏‏‏‎‎‎‏‏‏‏‎‎‎‎‏‎‎‎‏‏‎‏‎‎‎‎‏‎‏‏‎‏‎‏‏‏‎‎‏‏‎Cancel‎‏‎‎‏‎" + +diff --git a/res/values-es-rUS/strings.xml b/res/values-es-rUS/strings.xml +index e38dd418cf..f82ac55c69 100644 +--- a/res/values-es-rUS/strings.xml ++++ b/res/values-es-rUS/strings.xml +@@ -1930,7 +1930,7 @@ + "Almacenamiento interno" + "Recalculando el tamaño…" + "¿Borrar los datos de la app?" +- "Se eliminarán de forma permanente todos los datos de esta aplicación, incluidos archivos, ajustes, cuentas, bases de datos, etc." ++ "Se borrarán de forma permanente los datos de esta app. Se incluyen archivos, parámetros de configuración, bases de datos y otros datos de app." + "Aceptar" + "Cancelar" + +diff --git a/res/values-es/strings.xml b/res/values-es/strings.xml +index a76726c7ca..0a0f595eea 100644 +--- a/res/values-es/strings.xml ++++ b/res/values-es/strings.xml +@@ -1930,7 +1930,7 @@ + "Almacenamiento interno" + "Recalculando tamaño…" + "¿Eliminar datos de la aplicación?" +- "Todos los datos de esta aplicación se eliminarán de forma permanente. Esto incluye todos los archivos, ajustes, cuentas, bases de datos, etc." ++ "Los datos de esta aplicación se eliminarán de forma permanente, incluidos los archivos, ajustes, bases de datos y otros datos relacionados con ella." + "Aceptar" + "Cancelar" + +diff --git a/res/values-et/strings.xml b/res/values-et/strings.xml +index 15dea28096..818572b5f9 100644 +--- a/res/values-et/strings.xml ++++ b/res/values-et/strings.xml +@@ -1930,7 +1930,7 @@ + "Sisemälu" + "Suuruse ümberarvutamine ..." + "Kas kustutada rakenduse andmed?" +- "Rakenduse kõik andmed kustutatakse lõplikult. See hõlmab kõiki faile, seadeid, kontosid, andmebaase jne." ++ "Selle rakenduse andmed kustutatakse jäädavalt. See hõlmab faile, seadeid, andmebaase ja muid rakenduse andmeid." + "OK" + "Tühista" + +diff --git a/res/values-eu/strings.xml b/res/values-eu/strings.xml +index c2dc752c12..827a4f80e7 100644 +--- a/res/values-eu/strings.xml ++++ b/res/values-eu/strings.xml +@@ -1930,7 +1930,7 @@ + "Barneko memoria" + "Tamaina berriro kalkulatzen…" + "Aplikazioetako datuak ezabatu?" +- "Aplikazio honetako datu guztiak betiko ezabatuko dira; besteak beste, fitxategi, ezarpen, kontu, datu-base eta abar guztiak." ++ "Aplikazio honen datuak betiko ezabatuko dira; besteak beste, fitxategiak, ezarpenak, datu-baseak eta aplikazioko beste batu batzuk." + "Ados" + "Utzi" + +diff --git a/res/values-fa/strings.xml b/res/values-fa/strings.xml +index 4a5f33637e..981866e6ea 100644 +--- a/res/values-fa/strings.xml ++++ b/res/values-fa/strings.xml +@@ -1930,7 +1930,7 @@ + "فضای ذخیره‌سازی داخلی" + "محاسبه مجدد اندازه…" + "داده‌های برنامه حذف شود؟" +- "همه داده‌های این برنامه به صورت دائمی حذف می‌شود. این شامل تمام فایل‌ها، تنظیمات، حساب‌ها، پایگاه‌های داده و دیگر موارد می‌شود." ++ "داده‌های این برنامه به‌طور دائم حذف خواهد شد. این شامل فایل‌ها، تنظیمات، پایگاه‌های داده، و دیگر داده‌های برنامه می‌شود." + "تأیید" + "لغو" + +diff --git a/res/values-fi/strings.xml b/res/values-fi/strings.xml +index cc3338b5e2..03c5729fdc 100644 +--- a/res/values-fi/strings.xml ++++ b/res/values-fi/strings.xml +@@ -1930,7 +1930,7 @@ + "Sisäinen tallennustila" + "Lasketaan kokoa uudelleen..." + "Poistetaanko sovelluksen tiedot?" +- "Kaikki tämän sovelluksen tiedot poistetaan pysyvästi. Tähän sisältyvät kaikki tiedostot, asetukset, tilit, tietokannat jne." ++ "Sovelluksen data poistetaan pysyvästi. Tämä koskee tiedostoja, asetuksia, tietokantoja ja muuta sovellusdataa." + "OK" + "Peruuta" + +diff --git a/res/values-fr-rCA/strings.xml b/res/values-fr-rCA/strings.xml +index 65cf5f309f..29fb953eaf 100644 +--- a/res/values-fr-rCA/strings.xml ++++ b/res/values-fr-rCA/strings.xml +@@ -1930,7 +1930,7 @@ + "Mémoire de stockage interne" + "Calcul de la taille..." + "Supprimer les données de l\'application?" +- "Toutes les données de cette application seront supprimées définitivement, y compris tous les fichiers, les paramètres, les comptes, les bases de données, etc." ++ "Les données de cette application seront définitivement supprimées. Cela inclut les fichiers, les paramètres, les bases de données et d'autres données de l'application." + "OK" + "Annuler" + +diff --git a/res/values-fr/strings.xml b/res/values-fr/strings.xml +index 5e1685ad11..0ced020fe4 100644 +--- a/res/values-fr/strings.xml ++++ b/res/values-fr/strings.xml +@@ -1930,7 +1930,7 @@ + "Stockage interne" + "Calcul de la taille..." + "Supprimer les données de l\'application ?" +- "Toutes les données de cette application (fichiers, paramètres, comptes, bases de données, etc.) seront définitivement supprimées." ++ "Les données de cette application (fichiers, paramètres, comptes, bases de données, etc.) seront définitivement supprimées." + "OK" + "Annuler" + +diff --git a/res/values-gl/strings.xml b/res/values-gl/strings.xml +index 4ea697f710..8629168b0a 100644 +--- a/res/values-gl/strings.xml ++++ b/res/values-gl/strings.xml +@@ -1930,7 +1930,7 @@ + "Almacenamento interno" + "Recalculando o tamaño…" + "Eliminar os datos da aplicación?" +- "Eliminaranse todos os datos desta aplicación permanentemente. Entre estes inclúense todos os ficheiros, opcións de configuracións, contas, bases de datos etc." ++ "Os datos desta aplicación (como os ficheiros, a configuración e as bases de datos) eliminaranse de forma permanente." + "Aceptar" + "Cancelar" + +diff --git a/res/values-gu/strings.xml b/res/values-gu/strings.xml +index 6ca805579b..7f6a7ef005 100644 +--- a/res/values-gu/strings.xml ++++ b/res/values-gu/strings.xml +@@ -1930,7 +1930,7 @@ + "આંતરિક સ્ટોરેજ" + "કદની ફરીથી ગણના કરી રહ્યું છે…" + "ઍપ્લિકેશન ડેટા કાઢી નાખીએ?" +- "આ તમામ એપ્લિકેશનનો ડેટા કાયમી રીતે કાઢી નાંખવામાં આવશે. આમાં તમામ ફાઇલો, સેટિંગ્સ, એકાઉન્ટ્સ, ડેટાબેસેસ વગેરે શામેલ છે." ++ "આ ઍપના ડેટાને કાયમી રીતે કાઢી નાખવામાં આવશે. આમાં ફાઇલો, સેટિંગ, ડેટાબેઝ અને અન્ય ઍપ ડેટા પણ શામેલ હોય છે." + "ઓકે" + "રદ કરો" + +diff --git a/res/values-hi/strings.xml b/res/values-hi/strings.xml +index 6562965a30..91f9586c1a 100644 +--- a/res/values-hi/strings.xml ++++ b/res/values-hi/strings.xml +@@ -1930,7 +1930,7 @@ + "मोबाइल मेमोरी" + "आकार फिर से परिकलित कर रहा है…" + "ऐप्‍लिकेशन डेटा हटाएं?" +- "इस ऐप्लिकेशन का सारा डेटा स्‍थायी रूप से हटा दिया जाएगा. इसमें सभी फ़ाइलें, सेटिंग, खाते, डेटाबेस वगैरह शामिल हैं." ++ "इस ऐप्लिकेशन का डेटा हमेशा के लिए मिटा दिया जाएगा. इसमें फ़ाइलें, सेटिंग, डेटाबेस, और ऐप्लिकेशन का दूसरा डेटा शामिल है." + "ठीक है" + "रद्द करें" + +diff --git a/res/values-hr/strings.xml b/res/values-hr/strings.xml +index 8763a4a9d3..9a73e62e13 100644 +--- a/res/values-hr/strings.xml ++++ b/res/values-hr/strings.xml +@@ -1954,7 +1954,7 @@ + "Unutarnja pohrana" + "Ponovni izračun veličine…" + "Izbrisati podatke aplikacije?" +- "Svi podaci ove aplikacije bit će trajno izbrisani. To uključuje sve datoteke, postavke, račune, baze podataka itd." ++ "Podaci aplikacije trajno će se izbrisati. To uključuje datoteke, postavke, baze podataka i druge podatke aplikacije." + "U redu" + "Odustani" + +diff --git a/res/values-hu/strings.xml b/res/values-hu/strings.xml +index fd49a9dd2a..4c90427611 100644 +--- a/res/values-hu/strings.xml ++++ b/res/values-hu/strings.xml +@@ -1930,7 +1930,7 @@ + "Belső tárhely" + "Méret újraszámítása..." + "Törli az alkalmazás adatait?" +- "Az alkalmazás minden adatát véglegesen törölni fogja. Ez magában foglalja az összes fájlt, beállítást, fiókot, adatbázist stb." ++ "Az alkalmazás adatai véglegesen törlődnek. Így törlődni fognak a fájlok, a beállítások, az adatbázisok és az egyéb alkalmazásadatok is." + "OK" + "Mégse" + +diff --git a/res/values-hy/strings.xml b/res/values-hy/strings.xml +index d7203c9b0f..8148dbe64f 100644 +--- a/res/values-hy/strings.xml ++++ b/res/values-hy/strings.xml +@@ -1930,7 +1930,7 @@ + "Ներքին պահոց" + "Չափի վերահաշվարկում…" + "Ջնջե՞լ հավելվածի տվյալները" +- "Այս հավելվածի բոլոր տվյալներն ընդմիշտ կջնջվեն: Այն կներառի բոլոր ֆայլերը, կարգավորումները, հաշիվները, տվյալների շտեմարանները և այլն:" ++ "Այս հավելվածի տվյալներն ընդմիշտ կջնջվեն։Դա վերաբերում է ֆայլերին, կարգավորումներին, տվյալների շտեմարաններին և հավելվածի այլ տվյալներին։" + "Հաստատել" + "Չեղարկել" + +diff --git a/res/values-in/strings.xml b/res/values-in/strings.xml +index f00ec88e59..2a471d5af9 100644 +--- a/res/values-in/strings.xml ++++ b/res/values-in/strings.xml +@@ -1930,7 +1930,7 @@ + "Penyimpanan internal" + "Menghitung ulang ukuran..." + "Hapus data aplikasi?" +- "Semua data aplikasi ini akan dihapus secara permanen, termasuk semua file, setelan, akun, basis data, dll." ++ "Data aplikasi ini akan dihapus secara permanen. Data ini termasuk file, setelan, database, dan data aplikasi lainnya." + "Oke" + "Batal" + +diff --git a/res/values-is/strings.xml b/res/values-is/strings.xml +index 4b96f2251b..3744182275 100644 +--- a/res/values-is/strings.xml ++++ b/res/values-is/strings.xml +@@ -1930,7 +1930,7 @@ + "Innbyggð geymsla" + "Endurreiknar stærð…" + "Eyða forritsgögnum?" +- "Öllum gögnum þessa forrits verður eytt fyrir fullt og allt. Í þessu felast allar skrár, stillingar, reikningar, gagnagrunnar o.s.frv." ++ "Gögnum þessa forrits verður eytt fyrir fullt og allt. Þetta á við um skrár, stillingar, gagnagrunna og önnur forritsgögn." + "Í lagi" + "Hætta við" + +diff --git a/res/values-it/strings.xml b/res/values-it/strings.xml +index 39719d82e9..e4a24b79f1 100644 +--- a/res/values-it/strings.xml ++++ b/res/values-it/strings.xml +@@ -1930,7 +1930,7 @@ + "Memoria interna" + "Ricalcolo dimensioni…" + "Eliminare i dati dell\'app?" +- "Tutti i dati dell\'app verranno eliminati definitivamente, inclusi tutti i file, le impostazioni, gli account, i database e così via." ++ "I dati di questa app verranno eliminati definitivamente, inclusi file, impostazioni, database e altri dati dell'app." + "OK" + "Annulla" + +diff --git a/res/values-iw/strings.xml b/res/values-iw/strings.xml +index 8a3a85c9dd..0c278c160f 100644 +--- a/res/values-iw/strings.xml ++++ b/res/values-iw/strings.xml +@@ -1978,7 +1978,7 @@ + "אחסון פנימי" + "הגודל מחושב מחדש..." + "למחוק את נתוני האפליקציה?" +- "כל נתוני האפליקציה יימחקו לתמיד. נתונים אלה כוללים את כל הקבצים, ההגדרות, החשבונות, מסדי הנתונים וכדומה." ++ "נתוני האפליקציה יימחקו באופן סופי. לרבות קבצים, הגדרות, מסדי נתונים ונתונים אחרים מהאפליקציה." + "אישור" + "ביטול" + +diff --git a/res/values-ja/strings.xml b/res/values-ja/strings.xml +index ece3070ac9..5270356b46 100644 +--- a/res/values-ja/strings.xml ++++ b/res/values-ja/strings.xml +@@ -1930,7 +1930,7 @@ + "内部ストレージ" + "サイズを再計算中..." + "アプリのデータを削除しますか?" +- "このアプリのすべてのデータ(ファイル、設定、アカウント、データベースを含む)が完全に削除されます。" ++ "このアプリのデータが完全に削除されます。ファイル、設定、データベース、その他のアプリデータが対象になります。" + "OK" + "キャンセル" + +diff --git a/res/values-ka/strings.xml b/res/values-ka/strings.xml +index 7dac86bba3..a3db9b72c2 100644 +--- a/res/values-ka/strings.xml ++++ b/res/values-ka/strings.xml +@@ -1930,7 +1930,7 @@ + "შიდა მეხსიერება" + "ზომის გადათვლა…" + "წაიშალოს აპის მონაცემები?" +- "აპის მონაცემები, მათ შორის ყველა ფაილი, პარამეტრი, ანგარიში, მონაცემთა ბაზა და ა.შ. სამუდამოდ წაიშლება." ++ "ამ აპის მონაცემები სამუდამოდ წაიშლება. ეს ეხება ფაილებს, პარამეტრებს, მონაცემთა ბაზებსა და აპის სხვა მონაცემებს." + "კარგი" + "გაუქმება" + +diff --git a/res/values-kk/strings.xml b/res/values-kk/strings.xml +index 1128625142..febef7f141 100644 +--- a/res/values-kk/strings.xml ++++ b/res/values-kk/strings.xml +@@ -1930,7 +1930,7 @@ + "Ішкі жад" + "Өлшемін қайта есептеуде…" + "Қолданба деректері жойылсын ба?" +- "Бұл қолданбаның барлық деректері мүлдем өшіріледі. Бұған барлық файлдар, параметрлер, есептік жазбалар, дерекқорлар және т.б. кіреді." ++ "Бұл қолданбаның дерегі біржола жойылады. Оған файлдар, параметрлер, дерекқорлар және тағы басқа қолданба дерегі кіреді." + "Жарайды" + "Бас тарту" + +diff --git a/res/values-km/strings.xml b/res/values-km/strings.xml +index 27adb1cdc0..aa9a6c676b 100644 +--- a/res/values-km/strings.xml ++++ b/res/values-km/strings.xml +@@ -1930,7 +1930,7 @@ + "ឧបករណ៍​ខាង​ក្នុង" + "កំពុង​គណនា​ទំហំ​ឡើងវិញ…" + "លុប​ទិន្នន័យ​កម្មវិធី?" +- "ទិន្នន័យ​របស់​កម្មវិធី​នេះ​ទាំងអស់​នឹង​ត្រូវ​បាន​លុប​ជា​អចិន្ត្រៃយ៍។ ទិន្នន័យទាំងនេះរួមមាន ឯកសារ​ទាំងអស់ ការ​កំណត់ គណនី មូលដ្ឋាន​ទិន្នន័យ ។ល។" ++ "ទិន្នន័យ​របស់កម្មវិធីនេះ​នឹងត្រូវបានលុប​ជាអចិន្ត្រៃយ៍។ ទិន្នន័យនេះ​រួមមាន​ឯកសារ ការកំណត់ មូលដ្ឋាន​ទិន្នន័យ និង​ទិន្នន័យកម្មវិធី​ផ្សេងទៀត។" + "យល់​ព្រម​" + "បោះ​បង់​" + +diff --git a/res/values-kn/strings.xml b/res/values-kn/strings.xml +index 8d0540dc88..ed08b004f3 100644 +--- a/res/values-kn/strings.xml ++++ b/res/values-kn/strings.xml +@@ -1930,7 +1930,7 @@ + "ಆಂತರಿಕ ಸಂಗ್ರಹಣೆ" + "ಗಾತ್ರವನ್ನು ಮರುಗಣನೆ ಮಾಡಲಾಗುತ್ತಿದೆ…" + "ಅಪ್ಲಿಕೇಶನ್ ಡೇಟಾ ಅಳಿಸುವುದೇ?" +- "ಈ ಆ್ಯಪ್‍‍ನ ಎಲ್ಲಾ ಡೇಟಾವನ್ನು ಶಾಶ್ವತವಾಗಿ ಅಳಿಸಲಾಗುತ್ತದೆ. ಇದರಲ್ಲಿ ಎಲ್ಲಾ ಫೈಲ್‌ಗಳು, ಸೆಟ್ಟಿಂಗ್‌ಗಳು, ಖಾತೆಗಳು, ಡೇಟಾಬೇಸ್‌ಗಳು, ಇತ್ಯಾದಿಗಳು ಸೇರಿರುತ್ತವೆ." ++ "ಈ ಆ್ಯಪ್‌ನ ಡೇಟಾವನ್ನು ಶಾಶ್ವತವಾಗಿ ಅಳಿಸಲಾಗುವುದು. ಇದು ಫೈಲ್‌ಗಳು, ಸೆಟ್ಟಿಂಗ್‌ಗಳು, ಡೇಟಾಬೇಸ್‌ಗಳು ಮತ್ತು ಇತರ ಆ್ಯಪ್ ಡೇಟಾ ಒಳಗೊಂಡಿದೆ." + "ಸರಿ" + "ರದ್ದುಮಾಡಿ" + +diff --git a/res/values-ko/strings.xml b/res/values-ko/strings.xml +index b7ba87b7dd..b813da4fa3 100644 +--- a/res/values-ko/strings.xml ++++ b/res/values-ko/strings.xml +@@ -1930,7 +1930,7 @@ + "내부 저장소" + "크기 다시 계산 중..." + "앱 데이터를 삭제하시겠습니까?" +- "앱의 전체 데이터가 영구적으로 삭제됩니다. 여기에는 모든 파일, 설정, 계정, 데이터베이스 등이 포함됩니다." ++ "이 앱 데이터가 영구적으로 삭제됩니다. 삭제 대상에는 파일, 설정, 데이터베이스, 기타 앱 데이터가 포함됩니다." + "확인" + "취소" + +diff --git a/res/values-ky/strings.xml b/res/values-ky/strings.xml +index aeb596ebf7..09d0da4e21 100644 +--- a/res/values-ky/strings.xml ++++ b/res/values-ky/strings.xml +@@ -1930,7 +1930,7 @@ + "Ички эстутум" + "Өлчөмү кайра эсептелүүдө…" + "Колдонмонун дайындарын өчүрөсүзбү?" +- "Бул колдонмодогу файлдар, жөндөөлөр, аккаунттар жана маалымат базасы сыяктуу бардык нерселер биротоло өчүрүлөт." ++ "Бул колдонмодогу маалымат биротоло жок кылынат. Ага файлдар, жөндөөлөр, дайындар базалары жана колдонмонун башка дайындары кирет." + "Жарайт" + "Жок" + +diff --git a/res/values-lo/strings.xml b/res/values-lo/strings.xml +index 0f56d6cabc..65a7277a26 100644 +--- a/res/values-lo/strings.xml ++++ b/res/values-lo/strings.xml +@@ -1930,7 +1930,7 @@ + "ພື້ນທີ່ຈັດເກັບຂໍ້ມູນພາຍໃນ" + "ກຳລັງຄຳນວນຂະໜາດຄືນໃໝ່..." + "ລຶບຂໍ້ມູນແອັບບໍ່?" +- "ຂໍ້ມູນທັງໝົດຂອງແອັບນີ້ຈະຖືກລຶບອອກຖາວອນ ເຊິ່ງຮວມເຖິງໄຟລ໌, ການຕັ້ງຄ່າ, ບັນຊີ, ຖານຂໍ້ມູນ ແລະ ອື່ນໆທັງໝົດນຳ." ++ "ຂໍ້ມູນຂອງແອັບນີ້ຈະຖືກລຶບອອກຖາວອນ. ນີ້ຮວມເຖິງໄຟລ໌, ການຕັ້ງຄ່າ, ຖານຂໍ້ມູນ ແລະ ຂໍ້ມູນແອັບອື່ນໆນຳ" + "ຕົກລົງ" + "ຍົກເລີກ" + +diff --git a/res/values-lt/strings.xml b/res/values-lt/strings.xml +index f61f66486f..7016158479 100644 +--- a/res/values-lt/strings.xml ++++ b/res/values-lt/strings.xml +@@ -1978,7 +1978,7 @@ + "Vidinė atmint." + "Iš naujo apskaičiuojamas dydis..." + "Ištrinti programos duomenis?" +- "Visi šios programos duomenys bus visam laikui ištrinti. Tai taikoma visiems failams, nustatymams, paskyroms, duomenims ir kt." ++ "Šios programos duomenys bus visam laikui ištrinti. Įtraukiami failai, nustatymai, duomenų bazės ir kiti programos duomenys." + "Gerai" + "Atšaukti" + +diff --git a/res/values-lv/strings.xml b/res/values-lv/strings.xml +index 68dcdc8198..a7a4a3e86a 100644 +--- a/res/values-lv/strings.xml ++++ b/res/values-lv/strings.xml +@@ -1954,7 +1954,7 @@ + "Iekšējā krātuve" + "Notiek izmēra pārrēķināšana..." + "Vai dzēst lietotnes datus?" +- "Tiks neatgriezeniski dzēsti visi šīs lietotnes dati, tostarp visi faili, iestatījumi, konti, datu bāzes un citi vienumi." ++ "Tiks neatgriezeniski dzēsti šīs lietotnes dati, tostarp faili, iestatījumi, datu bāzes un citi lietotnes dati." + "Labi" + "Atcelt" + +diff --git a/res/values-mk/strings.xml b/res/values-mk/strings.xml +index 8d7d36d622..28fbbebde6 100644 +--- a/res/values-mk/strings.xml ++++ b/res/values-mk/strings.xml +@@ -1930,7 +1930,7 @@ + "Внатрешен капацитет" + "Повторно пресметување големина..." + "Да се избришат податоците на апликацијата?" +- "Сите податоци на оваа апликација ќе бидат трајно избришани. Ова ги опфаќа сите датотеки, поставки, сметки, бази на податоци итн." ++ "Податоците од апликацијава трајно ќе се избришат. Ова вклучува датотеки, поставки, бази на податоци и други податоци од апликацијата." + "Во ред" + "Откажи" + +diff --git a/res/values-ml/strings.xml b/res/values-ml/strings.xml +index 9a1cebb0ca..6690498dca 100644 +--- a/res/values-ml/strings.xml ++++ b/res/values-ml/strings.xml +@@ -1930,7 +1930,7 @@ + "ആന്തരിക സ്റ്റോറേജ്" + "വലുപ്പം വീണ്ടും കണക്കാക്കുന്നു..." + "ആപ്പ് ഡാറ്റ ഇല്ലാതാക്കണോ?" +- "ഈ ആപ്പിന്‍റെ എല്ലാ ഡാറ്റയും ശാശ്വതമായി ഇല്ലാതാക്കും. ഫയലുകൾ, ക്രമീകരണങ്ങൾ, അക്കൗണ്ടുകൾ, ഡാറ്റാബേസുകൾ തുടങ്ങിയവയെല്ലാം ഇതിൽ ഉൾപ്പെടും." ++ "ഈ ആപ്പിന്റെ ഡാറ്റ ശാശ്വതമായി ഇല്ലാതാക്കും. ഇതിൽ ഫയലുകളും ക്രമീകരണവും ഡാറ്റാബേസുകളും മറ്റ് ആപ്പ് ഡാറ്റയും ഉൾപ്പെടുന്നു." + "ശരി" + "റദ്ദാക്കുക" + +diff --git a/res/values-mn/strings.xml b/res/values-mn/strings.xml +index de0df50370..f33a58a778 100644 +--- a/res/values-mn/strings.xml ++++ b/res/values-mn/strings.xml +@@ -1930,7 +1930,7 @@ + "Дотоод сан" + "Хэмжээг дахин тооцоолж байна…" + "Апп өгөгдлийг устгах уу?" +- "Энэ апп-н бүх өгөгдөл бүрмөсөн устах болно. Үүнд бүх файл, тохиргоо, бүртгэл, өгөгдөл гэх мэт орно." ++ "Энэ аппын өгөгдлийг бүрмөсөн устгана. Үүнд файл, тохиргоо, өгөгдлийн бааз болон бусад аппын өгөгдөл багтана." + "OK" + "Цуцлах" + +diff --git a/res/values-mr/strings.xml b/res/values-mr/strings.xml +index 87ee91557b..c653d21557 100644 +--- a/res/values-mr/strings.xml ++++ b/res/values-mr/strings.xml +@@ -1931,7 +1931,7 @@ + "अंतर्गत स्टोरेज" + "आकाराचे पुनर्संगणन करत आहे…" + "अ‍ॅप डेटा हटवायचा?" +- "या अ‍ॅपचा सर्व डेटा कायमचा हटवला जाईल. यात सर्व फाइल, सेटिंग्ज, खाती, डेटाबेस इ. समाविष्ट असेल." ++ "या ॲपचा डेटा कायमचा हटवला जाईल. यामध्ये फाइल, सेटिंग्ज, डेटाबेस आणि इतर अ‍ॅप डेटा यांचा समावेश आहे." + "ठीक" + "रद्द करा" + +diff --git a/res/values-ms/strings.xml b/res/values-ms/strings.xml +index d41f267e40..97011aadd6 100644 +--- a/res/values-ms/strings.xml ++++ b/res/values-ms/strings.xml +@@ -1930,7 +1930,7 @@ + "Storan dalaman" + "Mengira semula saiz..." + "Padamkan data aplikasi?" +- "Semua data aplikasi ini akan dipadamkan secara kekal. Ini termasuk semua fail, tetapan, akaun, pangkalan data, dll." ++ "Data apl ini akan dipadamkan secara kekal. Kandungan ini termasuk fail, tetapan, pangkalan data dan data apl yang lain." + "OK" + "Batal" + +diff --git a/res/values-my/strings.xml b/res/values-my/strings.xml +index 9ecd77a33a..94672ba8cd 100644 +--- a/res/values-my/strings.xml ++++ b/res/values-my/strings.xml +@@ -1930,7 +1930,7 @@ + "စက်တွင်း သိုလှောင်ထားမှု" + "အရွယ်အစားကို ပြန်လည်တွက်ချက်နေသည်" + "အက်ပ်ဒေတာ ဖျက်မလား။" +- "ဤအက်ပ်၏ ဒေတာအားလုံးကို အပြီးဖျက်ပါမည်။ ဖိုင်၊ ဆက်တင်၊ အကောင့်၊ ဒေတာဘေ့စ်စသည်တို့ အားလုံးပါဝင်သည်။" ++ "ဤအက်ပ်၏ ဒေတာကို အပြီးဖျက်ပါမည်။ ၎င်းတွင် ဖိုင်၊ ဆက်တင်၊ ဒေတာဘေ့စ်နှင့် အခြားအက်ပ် ဒေတာများ ပါဝင်သည်။" + "OK" + "မလုပ်တော့" + +diff --git a/res/values-nb/strings.xml b/res/values-nb/strings.xml +index 4fe8d6bd77..c1595ca808 100644 +--- a/res/values-nb/strings.xml ++++ b/res/values-nb/strings.xml +@@ -1930,7 +1930,7 @@ + "Intern lagring" + "Beregner størrelse på nytt…" + "Vil du slette appdataene?" +- "Alle data i appen slettes permanent. Dette omfatter alle filer, innstillinger, kontoer, databaser osv." ++ "Dataene i denne appen slettes permanent. Dette inkluderer filer, innstillinger, databaser og andre appdata." + "OK" + "Avbryt" + +diff --git a/res/values-ne/strings.xml b/res/values-ne/strings.xml +index f2cc6c809a..5fb4889809 100644 +--- a/res/values-ne/strings.xml ++++ b/res/values-ne/strings.xml +@@ -1930,7 +1930,7 @@ + "आन्तरिक भण्डारण" + "आकार पुनःगणना गर्दै ..." + "एप डेटा मेटाउन चाहनुहुन्छ?" +- "यस एपका सम्पूर्ण डेटाहरू स्थायी रूपमा मेटाइने छ। यसमा सम्पूर्ण फाइल, सेटिङ, खाताहरू, डेटाबेस आदि पर्दछन्।" ++ "यो एपका डेटा सदाका लागि मेटाइने छ। यसमा फाइल, सेटिङ, डेटाबेस र एपका अन्य डेटा पर्छन्।" + "ठिक छ" + "रद्द गर्नुहोस्" + +diff --git a/res/values-nl/strings.xml b/res/values-nl/strings.xml +index 761150db3a..13947fc3bc 100644 +--- a/res/values-nl/strings.xml ++++ b/res/values-nl/strings.xml +@@ -1930,7 +1930,7 @@ + "Interne opslag" + "Grootte opnieuw berekenen..." + "Gegevens van app verwijderen?" +- "Alle gegevens van deze app worden permanent verwijderd. Dit omvat alle bestanden, instellingen, accounts, databases, enzovoort." ++ "De gegevens van deze app worden definitief verwijderd. Dit omvat bestanden, instellingen, databases en andere app-gegevens." + "OK" + "Annuleren" + +diff --git a/res/values-or/strings.xml b/res/values-or/strings.xml +index 855ee06516..3c52498c92 100644 +--- a/res/values-or/strings.xml ++++ b/res/values-or/strings.xml +@@ -1930,7 +1930,7 @@ + "ଇଣ୍ଟର୍ନଲ୍‌ ଷ୍ଟୋରେଜ୍‌" + "ଆକାରକୁ ପୁଣି ଗଣୁଛି…" + "ଆପ୍‌ର ଡାଟା ଡିଲିଟ୍‌ କରିବେ?" +- "ଏହି ଆପ୍‌ର ସମସ୍ତ ଡାଟା ସ୍ଥାୟୀ ଭାବେ ଡିଲିଟ୍‌ ହୋଇଯିବ। ଏଥିରେ ରହିଛି, ସମସ୍ତ ଫାଇଲ୍‌, ସେଟିଙ୍ଗ, ଆକାଉଣ୍ଟ, ଡାଟାବେସ୍‌ ଆଦି" ++ "ଏହି ଆପର ଡାଟା ସ୍ଥାୟୀ ଭାବେ ଡିଲିଟ ହୋଇଯିବ। ଏଥିରେ ଫାଇଲ, ସେଟିଂସ, ଡାଟାବେସ ଏବଂ ଅନ୍ୟ ଆପ ଡାଟା ଅନ୍ତର୍ଭୁକ୍ତ।" + "ଠିକ୍‌ ଅଛି" + "ବାତିଲ କରନ୍ତୁ" + +diff --git a/res/values-pa/strings.xml b/res/values-pa/strings.xml +index 13bbe313cc..9250e8883f 100644 +--- a/res/values-pa/strings.xml ++++ b/res/values-pa/strings.xml +@@ -1930,7 +1930,7 @@ + "ਅੰਦਰੂਨੀ ਸਟੋਰੇਜ" + "ਅਕਾਰ ਰੀਕੰਪਿਊਟ ਕਰ ਰਿਹਾ ਹੈ..." + "ਕੀ ਐਪ ਡਾਟਾ ਮਿਟਾਉਣਾ ਹੈ?" +- "ਇਸ ਐਪ ਦਾ ਸਾਰਾ ਡਾਟਾ ਸਥਾਈ ਤੌਰ ਤੇ ਮਿਟਾਇਆ ਜਾਏਗਾ। ਇਸ ਵਿੱਚ ਸਾਰੀਆਂ ਫ਼ਾਈਲਾਂ, ਸੈਟਿੰਗਾਂ, ਖਾਤੇ, ਡਾਟਾਬੇਸ ਆਦਿ ਸ਼ਾਮਲ ਹਨ।" ++ "ਇਸ ਐਪ ਦਾ ਡਾਟਾ ਪੱਕੇ ਤੌਰ 'ਤੇ ਮਿਟਾ ਦਿੱਤਾ ਜਾਵੇਗਾ। ਇਸ ਵਿੱਚ ਫ਼ਾਈਲਾਂ, ਸੈਟਿੰਗਾਂ, ਡਾਟਾਬੇਸ ਅਤੇ ਹੋਰ ਐਪ ਡਾਟਾ ਸ਼ਾਮਲ ਹੈ।" + "ਠੀਕ" + "ਰੱਦ ਕਰੋ" + +diff --git a/res/values-pl/strings.xml b/res/values-pl/strings.xml +index 4ff7d91759..e83121ee66 100644 +--- a/res/values-pl/strings.xml ++++ b/res/values-pl/strings.xml +@@ -1978,7 +1978,7 @@ + "Pamięć wewnętrzna" + "Przeliczanie rozmiaru..." + "Usunąć dane aplikacji?" +- "Wszystkie dane tej aplikacji zostaną trwale usunięte. Dotyczy to wszystkich plików, ustawień, kont, baz danych itd." ++ "Dane tej aplikacji zostaną trwale usunięte. Dotyczy to plików, ustawień, baz danych i innych danych aplikacji." + "OK" + "Anuluj" + +diff --git a/res/values-pt-rBR/strings.xml b/res/values-pt-rBR/strings.xml +index cc382508d4..7ef67ba076 100644 +--- a/res/values-pt-rBR/strings.xml ++++ b/res/values-pt-rBR/strings.xml +@@ -1930,7 +1930,7 @@ + "Espaço interno" + "Recalculando o tamanho…" + "Excluir os dados do app?" +- "Todos os dados deste app serão excluídos permanentemente. Isso inclui todos os arquivos, configurações, contas, bancos de dados e outros." ++ "Os dados do app serão excluídos permanentemente, incluindo arquivos, configurações, bancos de dados, entre outros." + "OK" + "Cancelar" + +diff --git a/res/values-pt-rPT/strings.xml b/res/values-pt-rPT/strings.xml +index e51af8ce05..56d7ccc59e 100644 +--- a/res/values-pt-rPT/strings.xml ++++ b/res/values-pt-rPT/strings.xml +@@ -1930,7 +1930,7 @@ + "Armaz. interno" + "A recalcular tamanho..." + "Eliminar dados da aplicação?" +- "Todos os dados desta aplicação serão eliminados permanentemente. Isto inclui todos os ficheiros, definições, contas, bases de dados, etc." ++ "Os dados desta app serão permanentemente eliminados. Estão incluídos ficheiros, definições, bases de dados e outros dados de apps." + "OK" + "Cancelar" + +diff --git a/res/values-pt/strings.xml b/res/values-pt/strings.xml +index cc382508d4..7ef67ba076 100644 +--- a/res/values-pt/strings.xml ++++ b/res/values-pt/strings.xml +@@ -1930,7 +1930,7 @@ + "Espaço interno" + "Recalculando o tamanho…" + "Excluir os dados do app?" +- "Todos os dados deste app serão excluídos permanentemente. Isso inclui todos os arquivos, configurações, contas, bancos de dados e outros." ++ "Os dados do app serão excluídos permanentemente, incluindo arquivos, configurações, bancos de dados, entre outros." + "OK" + "Cancelar" + +diff --git a/res/values-ro/strings.xml b/res/values-ro/strings.xml +index 341c23683e..5d3b54d2d4 100644 +--- a/res/values-ro/strings.xml ++++ b/res/values-ro/strings.xml +@@ -1954,7 +1954,7 @@ + "Stocare internă" + "Se recalculează dimensiunea..." + "Ștergeți datele aplicației?" +- "Toate datele acestei aplicații vor fi șterse definitiv. Aici sunt incluse toate fișierele, setările, conturile, bazele de date etc." ++ "Datele acestei aplicații vor fi șterse definitiv. Aici sunt incluse fișierele, setările, bazele de date și alte date ale aplicației." + "OK" + "Anulați" + +diff --git a/res/values-ru/strings.xml b/res/values-ru/strings.xml +index 8d73ce0378..173606726e 100644 +--- a/res/values-ru/strings.xml ++++ b/res/values-ru/strings.xml +@@ -1978,7 +1978,7 @@ + "Внутр. накопитель" + "Повторное вычисление размера..." + "Удалить данные приложения?" +- "Все данные этого приложения будут удалены без возможности восстановления, включая все файлы, базы данных, настройки, аккаунты и т. д." ++ "Данные этого приложения (включая файлы, базы данных, настройки и т. д.) будут удалены без возможности восстановления." + "ОК" + "Отмена" + +diff --git a/res/values-si/strings.xml b/res/values-si/strings.xml +index 55b34baa87..b13aa5d8f6 100644 +--- a/res/values-si/strings.xml ++++ b/res/values-si/strings.xml +@@ -1930,7 +1930,7 @@ + "අභ්‍යන්තර ආචයනය" + "විශාලත්වය නැවත ගණනය කරමින්…" + "යෙදුම් දත්ත මකන්නද?" +- "මෙම යෙදුමේ සියලු දත්ත ස්ථිරව මකා දමනු ඇත. මෙයට සියලු ගොනු, සැකසීම්, ගිණුම්, දත්ත සමූහ සහ තවත් අඩංගුය." ++ "මෙම යෙදුමේ දත්ත ස්ථිරවම මකනු ඇත. මෙයට ගොනු, සැකසීම්, දත්ත සමුදායන් සහ වෙනත් යෙදුම් දත්ත ඇතුළත් වේ." + "හරි" + "අවලංගු කරන්න" + +diff --git a/res/values-sk/strings.xml b/res/values-sk/strings.xml +index dac9eadff2..356f83521a 100644 +--- a/res/values-sk/strings.xml ++++ b/res/values-sk/strings.xml +@@ -1978,7 +1978,7 @@ + "Interný ukl. priestor" + "Prebieha prepočítanie veľkosti..." + "Odstrániť dáta aplikácie?" +- "Všetky dáta tejto aplikácie vrátane súborov, nastavení, účtov, databáz atď. budú navždy odstránené." ++ "Dáta tejto aplikácie budú natrvalo odstránené. Zahrnujú súbory, nastavenia, databázy a ďalšie dáta aplikácie." + "OK" + "Zrušiť" + +diff --git a/res/values-sl/strings.xml b/res/values-sl/strings.xml +index d493271dbf..538406ede9 100644 +--- a/res/values-sl/strings.xml ++++ b/res/values-sl/strings.xml +@@ -1978,7 +1978,7 @@ + "Notranja shramba" + "Preračunavanje velikosti ..." + "Želite izbrisati podatke aplikacije?" +- "Vsi podatki te aplikacije bodo trajno izbrisani. To med drugim vključuje vse datoteke, nastavitve, račune in podatkovne zbirke." ++ "Podatki te aplikacije bodo trajno izbrisani. To vključuje datoteke, nastavitve, zbirke podatkov in druge podatke aplikacije." + "V redu" + "Prekliči" + +diff --git a/res/values-sq/strings.xml b/res/values-sq/strings.xml +index adb9c87b4d..4552312358 100644 +--- a/res/values-sq/strings.xml ++++ b/res/values-sq/strings.xml +@@ -1930,7 +1930,7 @@ + "Hapësira e brendshme ruajtëse" + "Po llogarit përsëri madhësinë…" + "Të fshihen të dhënat e aplikacionit?" +- "Të gjitha të dhënat e këtij aplikacioni do të fshihen përgjithmonë. Kjo përfshin të gjithë skedarët, cilësimet, llogaritë, bazat e të dhënave etj." ++ "Të dhënat e këtij aplikacioni do të fshihen përgjithmonë. Këtu përfshihen skedarët, cilësimet, bazat e të dhënave dhe të dhëna të tjera të aplikacionit." + "Në rregull" + "Anulo" + +diff --git a/res/values-sr/strings.xml b/res/values-sr/strings.xml +index bb5b8c7a25..15e0553bb3 100644 +--- a/res/values-sr/strings.xml ++++ b/res/values-sr/strings.xml +@@ -1954,7 +1954,7 @@ + "Интерно складиште" + "Поновно израчунавање величине..." + "Желите ли да избришете податке о апликацији?" +- "Сви подаци ове апликације биће трајно избрисани. То обухвата све датотеке, подешавања, налоге, базе података итд." ++ "Подаци ове апликације ће се трајно избрисати. То обухвата фајлове, подешавања, базе података и друге податке апликација." + "Потврди" + "Откажи" + +diff --git a/res/values-sv/strings.xml b/res/values-sv/strings.xml +index ba56cc25e3..4f1478b3ac 100644 +--- a/res/values-sv/strings.xml ++++ b/res/values-sv/strings.xml +@@ -1930,7 +1930,7 @@ + "Intern lagring" + "Räknar om storlek…" + "Vill du ta bort appdata?" +- "Appens samtliga data tas bort permanent. Det inkluderar alla filer, inställningar, konton, databaser och så vidare." ++ "Appens data raderas permanent. Detta omfattar filer, inställningar, databaser och annan appdata." + "OK" + "Avbryt" + +diff --git a/res/values-sw/strings.xml b/res/values-sw/strings.xml +index 8d02f49082..02915cbec2 100644 +--- a/res/values-sw/strings.xml ++++ b/res/values-sw/strings.xml +@@ -1930,7 +1930,7 @@ + "Hifadhi ya ndani" + "Kiwango cha kukadiria upya" + "Ungependa kufuta data ya programu?" +- "Data yote ya programu hii itafutwa kabisa. Hii inajumuisha faili, mipangilio, akaunti, hifadhidata zote na mengineyo." ++ "Data iliyo kwenye programu hii itafutwa kabisa. Hii ni pamoja na faili, mipangilio, hifadhidata na data nyingine ya programu." + "Sawa" + "Ghairi" + +diff --git a/res/values-ta/strings.xml b/res/values-ta/strings.xml +index c3c4408cb8..69a18e4443 100644 +--- a/res/values-ta/strings.xml ++++ b/res/values-ta/strings.xml +@@ -1930,7 +1930,7 @@ + "அகச் சேமிப்பிடம்" + "அளவை மீண்டும் கணக்கிடுகிறது…" + "ஆப்ஸ் டேட்டாவை நீக்கவா?" +- "ஆப்ஸின் எல்லா தகவலும் நிரந்தரமாக நீக்கப்படும். இதில் எல்லா ஃபைல்களும், அமைப்புகளும், கணக்குகளும், தரவுத்தளங்களும், மேலும் பலவும் அடங்கும்." ++ "இந்த ஆப்ஸின் தரவு நிரந்தரமாக நீக்கப்படும். ஃபைல்கள், அமைப்புகள், தரவுத்தளங்கள், பிற ஆப்ஸ் தரவு ஆகியவை இதிலடங்கும்." + "சரி" + "ரத்துசெய்" + +diff --git a/res/values-te/strings.xml b/res/values-te/strings.xml +index 810ab34618..7631f53a0c 100644 +--- a/res/values-te/strings.xml ++++ b/res/values-te/strings.xml +@@ -1930,7 +1930,7 @@ + "అంతర్గత నిల్వ" + "పరిమాణాన్ని మళ్లీ గణిస్తోంది…" + "యాప్ డేటాను తొలగించాలా?" +- "ఈ యాప్ డేటా మొత్తం శాశ్వతంగా తొలగించబడుతుంది. ఇందులో అన్ని ఫైల్‌లు, సెట్టింగ్‌లు, ఖాతాలు, డేటాబేస్‌లు మొ. ఉన్నాయి." ++ "ఈ యాప్ డేటా శాశ్వతంగా తొలగించబడుతుంది. ఇందులో ఫైల్స్, సెట్టింగ్‌లు, డేటాబేస్‌లు, ఇతర యాప్ డేటా ఉంటాయి." + "సరే" + "రద్దు చేయి" + +diff --git a/res/values-th/strings.xml b/res/values-th/strings.xml +index a7e496370c..339e6ae976 100644 +--- a/res/values-th/strings.xml ++++ b/res/values-th/strings.xml +@@ -1930,7 +1930,7 @@ + "ที่เก็บข้อมูลภายใน" + "กำลังคำนวณขนาดใหม่..." + "ลบข้อมูลในแอปหรือไม่" +- "ข้อมูลทั้งหมดของแอปนี้จะถูกลบอย่างถาวร ซึ่งรวมถึงไฟล์ การตั้งค่า บัญชี และฐานข้อมูล" ++ "ระบบจะลบข้อมูลของแอปนี้อย่างถาวร ซึ่งรวมถึงไฟล์ การตั้งค่า ฐานข้อมูล และข้อมูลแอปอื่นๆ" + "ตกลง" + "ยกเลิก" + +diff --git a/res/values-tl/strings.xml b/res/values-tl/strings.xml +index 885cbae25b..7cb104697e 100644 +--- a/res/values-tl/strings.xml ++++ b/res/values-tl/strings.xml +@@ -1930,7 +1930,7 @@ + "Panloob na storage" + "Muling kino-compute ang laki…" + "I-delete ang data ng app?" +- "Permanenteng made-delete ang lahat ng data ng app na ito. Kabilang dito ang lahat ng file, setting, account, database, atbp." ++ "Permanenteng made-delete ang data ng app na ito. Kasama rito ang mga file, setting, database, at iba pang data ng app." + "OK" + "Kanselahin" + +diff --git a/res/values-tr/strings.xml b/res/values-tr/strings.xml +index f699e8dec0..2e69234f1a 100644 +--- a/res/values-tr/strings.xml ++++ b/res/values-tr/strings.xml +@@ -1930,7 +1930,7 @@ + "Dahili Bellek" + "Boyut yeniden hesaplanıyor…" + "Uygulama verileri silinsin mi?" +- "Bu uygulamanın tüm verileri kalıcı olarak silinecek. Bu veriler arasında tüm dosyalar, ayarlar, hesaplar, veritabanları vb. yer alıyor." ++ "Bu uygulamanın verileri kalıcı olarak silinecek. Buna dosyalar, ayarlar, veritabanları ve diğer uygulama verileri de dahildir." + "Tamam" + "İptal" + +diff --git a/res/values-uk/strings.xml b/res/values-uk/strings.xml +index 70379dca6e..46cb491617 100644 +--- a/res/values-uk/strings.xml ++++ b/res/values-uk/strings.xml +@@ -1978,7 +1978,7 @@ + "Внутр. пам\'ять" + "Повт. обчисл. розм…" + "Видалити дані додатка?" +- "Усі дані цього додатка буде видалено назавжди: файли, налаштування, облікові записи, бази даних тощо." ++ "Дані цього додатка буде назавжди видалено. До них належать файли, налаштування, бази даних тощо." + "OK" + "Скасувати" + +diff --git a/res/values-ur/strings.xml b/res/values-ur/strings.xml +index e7aa37c1a4..35285dc0a2 100644 +--- a/res/values-ur/strings.xml ++++ b/res/values-ur/strings.xml +@@ -1930,7 +1930,7 @@ + "داخلی اسٹوریج" + "سائز کو دوبارہ شمار کر رہا ہے…" + "ایپ کا ڈیٹا حذف کریں؟" +- "اس ایپ کا سبھی ڈیٹا مستقل طور پر حذف ہو جائے گا۔ اس میں سبھی فائلیں، ترتیبات، اکاؤنٹس، ڈیٹا بیسز وغیرہ شامل ہیں۔" ++ "اس ایپ کا ڈیٹا مستقل طور پر حذف کر دیا جائے گا۔ اس میں فائلز، ترتیبات، ڈیٹا بیس اور دیگر ایپ کا ڈیٹا شامل ہے۔" + "ٹھیک ہے" + "منسوخ کریں" + +diff --git a/res/values-uz/strings.xml b/res/values-uz/strings.xml +index c39a125edf..ce25c3e6fa 100644 +--- a/res/values-uz/strings.xml ++++ b/res/values-uz/strings.xml +@@ -1930,7 +1930,7 @@ + "Ichki xotira" + "Xajm qayta hisoblanmoqda…" + "Bu ilova maʼlumotlari oʻchirilsinmi?" +- "Ushbu ilovaning barcha ma’lumotlari, jumladan, fayllar, ma’lumotlar bazalari, sozlamalar, hisoblar va boshqa narsalar o‘chirib tashlanadi. Keyin ularni qayta tiklab bo‘lmaydi." ++ "Bu ilova maʼlumotlari butunlay oʻchirib tashlanadi. Unga fayllar, sozlamalar, ma’lumotlar bazalari va boshqa ilovaga tegishli maʼlumotlar kiradi" + "OK" + "Bekor qilish" + +diff --git a/res/values-vi/strings.xml b/res/values-vi/strings.xml +index b9b089954b..98d0396be5 100644 +--- a/res/values-vi/strings.xml ++++ b/res/values-vi/strings.xml +@@ -1930,7 +1930,7 @@ + "Bộ nhớ trong" + "Đang tính toán lại kích thước…" + "Xóa dữ liệu ứng dụng?" +- "Tất cả dữ liệu của ứng dụng này sẽ bị xóa vĩnh viễn, bao gồm tất cả các tệp, các tùy chọn cài đặt, tài khoản, cơ sở dữ liệu, v.v." ++ "Dữ liệu của ứng dụng này sẽ bị xóa vĩnh viễn. Dữ liệu này bao gồm các tệp, chế độ cài đặt, cơ sở dữ liệu và dữ liệu ứng dụng khác." + "OK" + "Hủy" + +diff --git a/res/values-zh-rCN/strings.xml b/res/values-zh-rCN/strings.xml +index 049e4683a3..a1b3ec5608 100644 +--- a/res/values-zh-rCN/strings.xml ++++ b/res/values-zh-rCN/strings.xml +@@ -1930,7 +1930,7 @@ + "内部存储空间" + "正在重新计算大小..." + "要删除应用数据吗?" +- "系统会永久删除此应用的所有数据。删除的内容包括所有文件、设置、帐号、数据库等。" ++ "系统将永久删除此应用的数据,其中包括文件、设置、数据库和其他应用数据。" + "确定" + "取消" + +diff --git a/res/values-zh-rHK/strings.xml b/res/values-zh-rHK/strings.xml +index e7050fbe41..450f866953 100644 +--- a/res/values-zh-rHK/strings.xml ++++ b/res/values-zh-rHK/strings.xml +@@ -1931,7 +1931,7 @@ + "內部儲存空間" + "正在重新計算大小..." + "您要刪除應用程式資料嗎?" +- "這個應用程式的所有資料都將被永久刪除,包含所有檔案、設定、帳戶、資料庫等。" ++ "系統會永久刪除此應用程式的資料,包括檔案、設定、資料庫和其他應用程式資料。" + "確定" + "取消" + +diff --git a/res/values-zh-rTW/strings.xml b/res/values-zh-rTW/strings.xml +index 51b8af0cef..3ad6cb1a89 100644 +--- a/res/values-zh-rTW/strings.xml ++++ b/res/values-zh-rTW/strings.xml +@@ -1930,7 +1930,7 @@ + "內部儲存空間" + "重新計算大小…" + "你要刪除應用程式資料嗎?" +- "系統會永久刪除這個應用程式的所有資料,包含所有檔案、設定、帳戶、資料庫等。" ++ "系統將永久刪除這個應用程式的資料,包括檔案、設定、資料庫和應用程式的其他資料。" + "確定" + "取消" + +diff --git a/res/values-zu/strings.xml b/res/values-zu/strings.xml +index 34e86ca977..db062a1522 100644 +--- a/res/values-zu/strings.xml ++++ b/res/values-zu/strings.xml +@@ -1931,7 +1931,7 @@ + "Isitoreji sangaphakathi" + "Ilungisa kabusha usayizi..." + "Ngabe ususa yonke imininingo yohlelo lokusebenza?" +- "Yonke le datha yohlelo lokusebenza izosuswa ngokuphelele. Lokhu kuhlanganisa wonke amafayela, izilungiselelo, ama-akhawunti, izizinda zemininingwane nokunye." ++ "Idatha yale app izosuswa unomphela. Lokhu kuhlanganisa amafayela, amasethingi, isizindalwazi, nenye idatha ye-app." + "KULUNGILE" + "Khansela" + +-- +2.17.1 + diff --git a/aosp_diff/preliminary/packages/providers/MediaProvider/02_0002-Avoid-apps-to-get-global-access-with-table-uri.patch b/aosp_diff/preliminary/packages/providers/MediaProvider/02_0002-Avoid-apps-to-get-global-access-with-table-uri.patch new file mode 100644 index 0000000000..02a3602b78 --- /dev/null +++ b/aosp_diff/preliminary/packages/providers/MediaProvider/02_0002-Avoid-apps-to-get-global-access-with-table-uri.patch @@ -0,0 +1,53 @@ +From dac4b0bf946e2b1189ab6fc15d5ae59cc1c67150 Mon Sep 17 00:00:00 2001 +From: Ivan Chiang +Date: Tue, 16 Nov 2021 08:56:59 +0000 +Subject: [PATCH] Avoid apps to get global access with table uri + +If the app is granted the read UriPerimssion on the uri without id, +don't allow the app to get global access. Then, the app gets the same +query result of the uri without read UriPermission. + +Test: atest --test-mapping packages/providers/MediaProvider +Bug: 197302116 +Change-Id: Id6349b7b49cf682c6703333bc96f1b7046b7700e +Merged-In: Id6349b7b49cf682c6703333bc96f1b7046b7700e +(cherry picked from commit a728dfa19c2601b576a718fd9f79916bccd07c0e) +Merged-In:Id6349b7b49cf682c6703333bc96f1b7046b7700e +--- + .../providers/media/MediaProvider.java | 20 +++++++++++++++++++ + 1 file changed, 20 insertions(+) + +diff --git a/src/com/android/providers/media/MediaProvider.java b/src/com/android/providers/media/MediaProvider.java +index 626bbb8e..40a4e258 100644 +--- a/src/com/android/providers/media/MediaProvider.java ++++ b/src/com/android/providers/media/MediaProvider.java +@@ -7050,6 +7050,26 @@ public class MediaProvider extends ContentProvider { + if (mCallingIdentity.get().isOwned(id)) { + return true; + } ++ break; ++ default: ++ // continue below ++ } ++ ++ // Check whether the uri is a specific table or not. Don't allow the global access to these ++ // table uris ++ switch (table) { ++ case AUDIO_MEDIA: ++ case IMAGES_MEDIA: ++ case VIDEO_MEDIA: ++ case DOWNLOADS: ++ case FILES: ++ case AUDIO_ALBUMS: ++ case AUDIO_ARTISTS: ++ case AUDIO_GENRES: ++ case AUDIO_PLAYLISTS: ++ return false; ++ default: ++ // continue below + } + + // Outstanding grant means they get access +-- +2.17.1 + diff --git a/aosp_diff/preliminary/system/bt/05_0005-security-Use-After-Free-in-btm_sec_-dis-connected.patch b/aosp_diff/preliminary/system/bt/05_0005-security-Use-After-Free-in-btm_sec_-dis-connected.patch new file mode 100644 index 0000000000..a1f1483846 --- /dev/null +++ b/aosp_diff/preliminary/system/bt/05_0005-security-Use-After-Free-in-btm_sec_-dis-connected.patch @@ -0,0 +1,56 @@ +From 13ba00a49d845480b86663007a96f128c20efed7 Mon Sep 17 00:00:00 2001 +From: Chris Manton +Date: Mon, 8 Nov 2021 16:45:42 -0800 +Subject: [PATCH] security: Use-After-Free in btm_sec_[dis]connected + +Bug: 201083442 +Tag: #security +Test: gd/cert/run +Ignore-AOSP-First: Security + +Change-Id: I69c362d1eb644a3b7fd967cd526a8a58c3b4d975 +(cherry picked from commit c08175b5f15b161a6ba1444e1071e92b03552915) +Merged-In:I69c362d1eb644a3b7fd967cd526a8a58c3b4d975 +--- + stack/btm/btm_sec.cc | 4 ++-- + 1 file changed, 2 insertions(+), 2 deletions(-) + +diff --git a/stack/btm/btm_sec.cc b/stack/btm/btm_sec.cc +index bdda174ac..eecbed5ea 100644 +--- a/stack/btm/btm_sec.cc ++++ b/stack/btm/btm_sec.cc +@@ -3913,7 +3913,6 @@ static void btm_sec_connect_after_reject_timeout(UNUSED_ATTR void* data) { + ******************************************************************************/ + void btm_sec_connected(const RawAddress& bda, uint16_t handle, uint8_t status, + uint8_t enc_mode) { +- tBTM_SEC_DEV_REC* p_dev_rec = btm_find_dev(bda); + uint8_t res; + bool is_pairing_device = false; + bool addr_matched; +@@ -3922,6 +3921,7 @@ void btm_sec_connected(const RawAddress& bda, uint16_t handle, uint8_t status, + + btm_acl_resubmit_page(); + ++ tBTM_SEC_DEV_REC* p_dev_rec = btm_find_dev(bda); + if (p_dev_rec) { + VLOG(2) << __func__ << ": Security Manager: in state: " + << btm_pair_state_descr(btm_cb.pairing_state) +@@ -4258,7 +4258,6 @@ tBTM_STATUS btm_sec_disconnect(uint16_t handle, uint8_t reason) { + * + ******************************************************************************/ + void btm_sec_disconnected(uint16_t handle, uint8_t reason) { +- tBTM_SEC_DEV_REC* p_dev_rec = btm_find_dev_by_handle(handle); + uint8_t old_pairing_flags = btm_cb.pairing_flags; + int result = HCI_ERR_AUTH_FAILURE; + tBTM_SEC_CALLBACK* p_callback = NULL; +@@ -4269,6 +4268,7 @@ void btm_sec_disconnected(uint16_t handle, uint8_t reason) { + + btm_acl_resubmit_page(); + ++ tBTM_SEC_DEV_REC* p_dev_rec = btm_find_dev_by_handle(handle); + if (!p_dev_rec) return; + + transport = +-- +2.17.1 + diff --git a/aosp_diff/preliminary/system/bt/06_0006-Reset-the-IRK-after-all-devices-are-unpaired.patch b/aosp_diff/preliminary/system/bt/06_0006-Reset-the-IRK-after-all-devices-are-unpaired.patch new file mode 100644 index 0000000000..08a7acdc4a --- /dev/null +++ b/aosp_diff/preliminary/system/bt/06_0006-Reset-the-IRK-after-all-devices-are-unpaired.patch @@ -0,0 +1,53 @@ +From c512b1e433c1e9f06b74abc39f6be0308c01d2f4 Mon Sep 17 00:00:00 2001 +From: Martin Brabham +Date: Fri, 29 Oct 2021 21:27:27 +0000 +Subject: [PATCH] Reset the IRK after all devices are unpaired + +Bug: 204355134 +Bug: 195410559 +Test: Check IRK, pair devices, unpair all devices, Check IRK +Tag: #security +Change-Id: I8e44f010a72dcdec595d81293a05f49ccc054065 +Merged-In: I8e44f010a72dcdec595d81293a05f49ccc054065 +(cherry picked from commit d6d753d733cdefad3c9edfda5cb2e857b0fdf5f4) +Merged-In:I8e44f010a72dcdec595d81293a05f49ccc054065 +--- + bta/dm/bta_dm_act.cc | 8 ++++++++ + 1 file changed, 8 insertions(+) + +diff --git a/bta/dm/bta_dm_act.cc b/bta/dm/bta_dm_act.cc +index 776f085b7..542ba4e8f 100644 +--- a/bta/dm/bta_dm_act.cc ++++ b/bta/dm/bta_dm_act.cc +@@ -39,6 +39,7 @@ + #include "bta_dm_int.h" + #include "bta_sys.h" + #include "btif_storage.h" ++#include "btif_config.h" + #include "btm_api.h" + #include "btm_int.h" + #include "btu.h" +@@ -48,6 +49,7 @@ + #include "osi/include/log.h" + #include "osi/include/osi.h" + #include "sdp_api.h" ++#include "stack/btm/btm_ble_int.h" + #include "stack/gatt/connection_manager.h" + #include "stack/include/gatt_api.h" + #include "utl.h" +@@ -705,6 +707,12 @@ void bta_dm_remove_device(const RawAddress& bd_addr) { + if (!other_address_connected && !other_address.IsEmpty()) { + bta_dm_process_remove_device(other_address); + } ++ ++ /* Check the length of the paired devices, and if 0 then reset IRK */ ++ if (btif_storage_get_num_bonded_devices() < 1) { ++ LOG(INFO) << "Last paired device removed, resetting IRK"; ++ btm_ble_reset_id(); ++ } + } + + /******************************************************************************* +-- +2.17.1 +