diff options
author | Android Build Coastguard Worker <android-build-coastguard-worker@google.com> | 2022-09-13 06:30:55 +0000 |
---|---|---|
committer | Android Build Coastguard Worker <android-build-coastguard-worker@google.com> | 2022-09-13 06:30:55 +0000 |
commit | d79c1d9128f730b0129177a83450c77c9d9c80ec (patch) | |
tree | 63441afd116346827d051498ac8d7d574fabe250 | |
parent | 7fce5cfea1e9467a9c6958ee25bcffe0efec0b70 (diff) | |
parent | 4e62eeff57432944dee31f3228cc7dd866f25ae9 (diff) | |
download | base-d79c1d9128f730b0129177a83450c77c9d9c80ec.tar.gz |
Snap for 9056327 from 4e62eeff57432944dee31f3228cc7dd866f25ae9 to mainline-ipsec-releaseaml_ips_331111030
Change-Id: I695460433be7091117be8d0068e7702396802e46
16 files changed, 176 insertions, 116 deletions
diff --git a/graphics/java/android/graphics/RuntimeShader.java b/graphics/java/android/graphics/RuntimeShader.java index 6abe34b1d675..9c36fc36474c 100644 --- a/graphics/java/android/graphics/RuntimeShader.java +++ b/graphics/java/android/graphics/RuntimeShader.java @@ -214,7 +214,7 @@ import libcore.util.NativeAllocationRegistry; * uniform shader myShader; * vec4 main(vec2 canvas_coordinates) { * // swap the red and blue color channels when sampling from myShader - * return myShader.sample(canvas_coordinates).bgra; + * return myShader.eval(canvas_coordinates).bgra; * }</pre> * * <p>After creating a {@link RuntimeShader} with that program the shader uniform can diff --git a/packages/SettingsLib/src/com/android/settingslib/users/AvatarPhotoController.java b/packages/SettingsLib/src/com/android/settingslib/users/AvatarPhotoController.java index 63a9f0c5c7f4..adfa39e3df80 100644 --- a/packages/SettingsLib/src/com/android/settingslib/users/AvatarPhotoController.java +++ b/packages/SettingsLib/src/com/android/settingslib/users/AvatarPhotoController.java @@ -21,8 +21,6 @@ import android.content.ClipData; import android.content.ContentResolver; import android.content.Context; import android.content.Intent; -import android.content.pm.ActivityInfo; -import android.content.pm.PackageManager; import android.graphics.Bitmap; import android.graphics.BitmapFactory; import android.graphics.Canvas; @@ -59,9 +57,9 @@ class AvatarPhotoController { void startActivityForResult(Intent intent, int resultCode); - boolean startSystemActivityForResult(Intent intent, int resultCode); - int getPhotoSize(); + + boolean canCropPhoto(); } interface ContextInjector { @@ -84,7 +82,6 @@ class AvatarPhotoController { private static final long DELAY_BEFORE_CROP_MILLIS = 150; private static final String IMAGES_DIR = "multi_user"; - private static final String PRE_CROP_PICTURE_FILE_NAME = "PreCropEditUserPhoto.jpg"; private static final String CROP_PICTURE_FILE_NAME = "CropEditUserPhoto.jpg"; private static final String TAKE_PICTURE_FILE_NAME = "TakeEditUserPhoto.jpg"; @@ -94,7 +91,6 @@ class AvatarPhotoController { private final ContextInjector mContextInjector; private final File mImagesDir; - private final Uri mPreCropPictureUri; private final Uri mCropPictureUri; private final Uri mTakePictureUri; @@ -104,8 +100,6 @@ class AvatarPhotoController { mImagesDir = new File(mContextInjector.getCacheDir(), IMAGES_DIR); mImagesDir.mkdir(); - mPreCropPictureUri = mContextInjector - .createTempImageUri(mImagesDir, PRE_CROP_PICTURE_FILE_NAME, !waiting); mCropPictureUri = mContextInjector.createTempImageUri(mImagesDir, CROP_PICTURE_FILE_NAME, !waiting); mTakePictureUri = @@ -137,7 +131,7 @@ class AvatarPhotoController { return true; case REQUEST_CODE_TAKE_PHOTO: if (mTakePictureUri.equals(pictureUri)) { - cropPhoto(pictureUri); + cropPhoto(); } else { copyAndCropPhoto(pictureUri, false); } @@ -166,7 +160,7 @@ class AvatarPhotoController { ThreadUtils.postOnBackgroundThread(() -> { final ContentResolver cr = mContextInjector.getContentResolver(); try (InputStream in = cr.openInputStream(pictureUri); - OutputStream out = cr.openOutputStream(mPreCropPictureUri)) { + OutputStream out = cr.openOutputStream(mTakePictureUri)) { Streams.copy(in, out); } catch (IOException e) { Log.w(TAG, "Failed to copy photo", e); @@ -174,7 +168,7 @@ class AvatarPhotoController { } Runnable cropRunnable = () -> { if (!mAvatarUi.isFinishing()) { - cropPhoto(mPreCropPictureUri); + cropPhoto(); } }; if (delayBeforeCrop) { @@ -189,21 +183,22 @@ class AvatarPhotoController { } } - private void cropPhoto(final Uri pictureUri) { - // TODO: Use a public intent, when there is one. - Intent intent = new Intent("com.android.camera.action.CROP"); - intent.setDataAndType(pictureUri, "image/*"); - appendOutputExtra(intent, mCropPictureUri); - appendCropExtras(intent); - try { - StrictMode.disableDeathOnFileUriExposure(); - if (mAvatarUi.startSystemActivityForResult(intent, REQUEST_CODE_CROP_PHOTO)) { - return; + private void cropPhoto() { + if (mAvatarUi.canCropPhoto()) { + // TODO: Use a public intent, when there is one. + Intent intent = new Intent("com.android.camera.action.CROP"); + intent.setDataAndType(mTakePictureUri, "image/*"); + appendOutputExtra(intent, mCropPictureUri); + appendCropExtras(intent); + try { + StrictMode.disableDeathOnFileUriExposure(); + mAvatarUi.startActivityForResult(intent, REQUEST_CODE_CROP_PHOTO); + } finally { + StrictMode.enableDeathOnFileUriExposure(); } - } finally { - StrictMode.enableDeathOnFileUriExposure(); + } else { + onPhotoNotCropped(mTakePictureUri); } - onPhotoNotCropped(pictureUri); } private void appendOutputExtra(Intent intent, Uri pictureUri) { @@ -325,23 +320,15 @@ class AvatarPhotoController { } @Override - public boolean startSystemActivityForResult(Intent intent, int code) { - ActivityInfo info = intent.resolveActivityInfo(mActivity.getPackageManager(), - PackageManager.MATCH_SYSTEM_ONLY); - if (info == null) { - Log.w(TAG, "No system package activity could be found for code " + code); - return false; - } - intent.setPackage(info.packageName); - mActivity.startActivityForResult(intent, code); - return true; - } - - @Override public int getPhotoSize() { return mActivity.getResources() .getDimensionPixelSize(com.android.internal.R.dimen.user_icon_size); } + + @Override + public boolean canCropPhoto() { + return PhotoCapabilityUtils.canCropPhoto(mActivity); + } } static class ContextInjectorImpl implements ContextInjector { diff --git a/packages/SettingsLib/tests/integ/src/com/android/settingslib/users/AvatarPhotoControllerTest.java b/packages/SettingsLib/tests/integ/src/com/android/settingslib/users/AvatarPhotoControllerTest.java index d988111c29d5..3dc2fabe051a 100644 --- a/packages/SettingsLib/tests/integ/src/com/android/settingslib/users/AvatarPhotoControllerTest.java +++ b/packages/SettingsLib/tests/integ/src/com/android/settingslib/users/AvatarPhotoControllerTest.java @@ -34,7 +34,6 @@ import android.app.Activity; import android.content.Context; import android.content.Intent; import android.graphics.Bitmap; -import android.graphics.BitmapFactory; import android.net.Uri; import android.provider.MediaStore; @@ -52,7 +51,6 @@ import org.mockito.MockitoAnnotations; import java.io.File; import java.io.FileOutputStream; import java.io.IOException; -import java.io.InputStream; import java.io.OutputStream; @RunWith(AndroidJUnit4.class) @@ -75,7 +73,6 @@ public class AvatarPhotoControllerTest { public void setUp() { MockitoAnnotations.initMocks(this); when(mMockAvatarUi.getPhotoSize()).thenReturn(PHOTO_SIZE); - when(mMockAvatarUi.startSystemActivityForResult(any(), anyInt())).thenReturn(true); mImagesDir = new File( InstrumentationRegistry.getTargetContext().getCacheDir(), "multi_user"); @@ -113,7 +110,9 @@ public class AvatarPhotoControllerTest { } @Test - public void takePhotoIsFollowedByCrop() throws IOException { + public void takePhotoIsFollowedByCropWhenSupported() throws IOException { + when(mMockAvatarUi.canCropPhoto()).thenReturn(true); + new File(mImagesDir, "file.txt").createNewFile(); Intent intent = new Intent(); @@ -122,12 +121,14 @@ public class AvatarPhotoControllerTest { mController.onActivityResult( REQUEST_CODE_TAKE_PHOTO, Activity.RESULT_OK, intent); - verifyStartSystemActivityForResult( + verifyStartActivityForResult( "com.android.camera.action.CROP", REQUEST_CODE_CROP_PHOTO); } @Test public void takePhotoIsNotFollowedByCropWhenResultCodeNotOk() throws IOException { + when(mMockAvatarUi.canCropPhoto()).thenReturn(true); + new File(mImagesDir, "file.txt").createNewFile(); Intent intent = new Intent(); @@ -137,11 +138,12 @@ public class AvatarPhotoControllerTest { REQUEST_CODE_TAKE_PHOTO, Activity.RESULT_CANCELED, intent); verify(mMockAvatarUi, never()).startActivityForResult(any(), anyInt()); - verify(mMockAvatarUi, never()).startSystemActivityForResult(any(), anyInt()); } @Test public void takePhotoIsFollowedByCropWhenTakePhotoUriReturned() throws IOException { + when(mMockAvatarUi.canCropPhoto()).thenReturn(true); + new File(mImagesDir, "TakeEditUserPhoto.jpg").createNewFile(); Intent intent = new Intent(); @@ -149,12 +151,14 @@ public class AvatarPhotoControllerTest { mController.onActivityResult( REQUEST_CODE_TAKE_PHOTO, Activity.RESULT_OK, intent); - verifyStartSystemActivityForResult( + verifyStartActivityForResult( "com.android.camera.action.CROP", REQUEST_CODE_CROP_PHOTO); } @Test public void choosePhotoIsFollowedByCrop() throws IOException { + when(mMockAvatarUi.canCropPhoto()).thenReturn(true); + new File(mImagesDir, "file.txt").createNewFile(); Intent intent = new Intent(); @@ -163,12 +167,14 @@ public class AvatarPhotoControllerTest { mController.onActivityResult( REQUEST_CODE_CHOOSE_PHOTO, Activity.RESULT_OK, intent); - verifyStartSystemActivityForResult( + verifyStartActivityForResult( "com.android.camera.action.CROP", REQUEST_CODE_CROP_PHOTO); } @Test public void choosePhotoIsNotFollowedByCropWhenResultCodeNotOk() throws IOException { + when(mMockAvatarUi.canCropPhoto()).thenReturn(true); + new File(mImagesDir, "file.txt").createNewFile(); Intent intent = new Intent(); @@ -178,11 +184,12 @@ public class AvatarPhotoControllerTest { REQUEST_CODE_CHOOSE_PHOTO, Activity.RESULT_CANCELED, intent); verify(mMockAvatarUi, never()).startActivityForResult(any(), anyInt()); - verify(mMockAvatarUi, never()).startSystemActivityForResult(any(), anyInt()); } @Test public void choosePhotoIsFollowedByCropWhenTakePhotoUriReturned() throws IOException { + when(mMockAvatarUi.canCropPhoto()).thenReturn(true); + new File(mImagesDir, "TakeEditUserPhoto.jpg").createNewFile(); Intent intent = new Intent(); @@ -190,11 +197,28 @@ public class AvatarPhotoControllerTest { mController.onActivityResult( REQUEST_CODE_CHOOSE_PHOTO, Activity.RESULT_OK, intent); - verifyStartSystemActivityForResult( + verifyStartActivityForResult( "com.android.camera.action.CROP", REQUEST_CODE_CROP_PHOTO); } @Test + public void choosePhotoIsNotFollowedByCropIntentWhenCropNotSupported() throws IOException { + when(mMockAvatarUi.canCropPhoto()).thenReturn(false); + + File file = new File(mImagesDir, "file.txt"); + saveBitmapToFile(file); + + Intent intent = new Intent(); + intent.setData(Uri.parse( + "content://com.android.settingslib.test/my_cache/multi_user/file.txt")); + mController.onActivityResult( + REQUEST_CODE_CHOOSE_PHOTO, Activity.RESULT_OK, intent); + + verify(mMockAvatarUi, never()).startActivityForResult(any(), anyInt()); + verify(mMockAvatarUi, timeout(TIMEOUT_MILLIS)).returnUriResult(mCropPhotoUri); + } + + @Test public void cropPhotoResultIsReturnedIfResultOkAndContent() { Intent intent = new Intent(); intent.setData(mCropPhotoUri); @@ -218,58 +242,11 @@ public class AvatarPhotoControllerTest { verify(mMockAvatarUi, timeout(TIMEOUT_MILLIS).times(0)).returnUriResult(mCropPhotoUri); } - @Test - public void cropDoesNotUseTakePhotoUri() throws IOException { - new File(mImagesDir, "file.txt").createNewFile(); - - Intent intent = new Intent(); - intent.setData(Uri.parse( - "content://com.android.settingslib.test/my_cache/multi_user/file.txt")); - mController.onActivityResult( - REQUEST_CODE_TAKE_PHOTO, Activity.RESULT_OK, intent); - - Intent startIntent = verifyStartSystemActivityForResult( - "com.android.camera.action.CROP", REQUEST_CODE_CROP_PHOTO); - assertThat(startIntent.getData()).isNotEqualTo(mTakePhotoUri); - } - - @Test - public void internalCropUsedIfNoSystemCropperFound() throws IOException { - when(mMockAvatarUi.startSystemActivityForResult(any(), anyInt())).thenReturn(false); - - File file = new File(mImagesDir, "file.txt"); - saveBitmapToFile(file); - - Intent intent = new Intent(); - intent.setData(Uri.parse( - "content://com.android.settingslib.test/my_cache/multi_user/file.txt")); - mController.onActivityResult( - REQUEST_CODE_TAKE_PHOTO, Activity.RESULT_OK, intent); - - verify(mMockAvatarUi, timeout(TIMEOUT_MILLIS)).returnUriResult(mCropPhotoUri); - - InputStream imageStream = mContext.getContentResolver().openInputStream(mCropPhotoUri); - Bitmap bitmap = BitmapFactory.decodeStream(imageStream); - assertThat(bitmap.getWidth()).isEqualTo(PHOTO_SIZE); - assertThat(bitmap.getHeight()).isEqualTo(PHOTO_SIZE); - } - - private Intent verifyStartActivityForResult(String action, int resultCode) { + private void verifyStartActivityForResult(String action, int resultCode) { ArgumentCaptor<Intent> captor = ArgumentCaptor.forClass(Intent.class); verify(mMockAvatarUi, timeout(TIMEOUT_MILLIS)) .startActivityForResult(captor.capture(), eq(resultCode)); - Intent intent = captor.getValue(); - assertThat(intent.getAction()).isEqualTo(action); - return intent; - } - - private Intent verifyStartSystemActivityForResult(String action, int resultCode) { - ArgumentCaptor<Intent> captor = ArgumentCaptor.forClass(Intent.class); - verify(mMockAvatarUi, timeout(TIMEOUT_MILLIS)) - .startSystemActivityForResult(captor.capture(), eq(resultCode)); - Intent intent = captor.getValue(); - assertThat(intent.getAction()).isEqualTo(action); - return intent; + assertThat(captor.getValue().getAction()).isEqualTo(action); } private void saveBitmapToFile(File file) throws IOException { diff --git a/packages/SystemUI/res/values-as/strings.xml b/packages/SystemUI/res/values-as/strings.xml index 67cb9cab1472..f35dd98d91c8 100644 --- a/packages/SystemUI/res/values-as/strings.xml +++ b/packages/SystemUI/res/values-as/strings.xml @@ -672,7 +672,7 @@ <string name="high_temp_dialog_message" msgid="3793606072661253968">"আপোনাৰ ফ\'নটোৱে নিজে নিজে ঠাণ্ডা হ\'বলৈ স্বয়ংক্ৰিয়ভাৱে চেষ্টা কৰিব। আপুনি ফ\'নটো ব্যৱহাৰ কৰি থাকিব পাৰে কিন্তু ই লাহে লাহে চলিব পাৰে।\n\nফ\'নটো সম্পূৰ্ণভাৱে ঠাণ্ডা হোৱাৰ পিছত ই আগৰ নিচিনাকৈয়েই চলিব।"</string> <string name="high_temp_dialog_help_text" msgid="7380171287943345858">"যত্ন লোৱাৰ পদক্ষেপসমূহ চাওক"</string> <string name="high_temp_alarm_title" msgid="2359958549570161495">"চ্চার্জাৰ আনপ্লাগ কৰক"</string> - <string name="high_temp_alarm_notify_message" msgid="7186272817783835089">"এই ডিভাইচটো চ্চার্জ কৰোঁতে কিবা সমস্যা হৈছে। পাৱাৰ এডাপ্টাৰটো আনপ্লাগ কৰক, কেব’লডাল গৰম হ’ব পাৰে গতিকে সাবধান হ’ব।"</string> + <string name="high_temp_alarm_notify_message" msgid="7186272817783835089">"এই ডিভাইচটো চাৰ্জ কৰোঁতে কিবা সমস্যা হৈছে। পাৱাৰ এডাপ্টাৰটো আনপ্লাগ কৰক আৰু কে’বলডাল গৰম হ’ব পাৰে; গতিকে সাবধান হ’ব।"</string> <string name="high_temp_alarm_help_care_steps" msgid="5017002218341329566">"যত্ন লোৱাৰ পদক্ষেপসমূহ চাওক"</string> <string name="lockscreen_shortcut_left" msgid="1238765178956067599">"বাওঁ শ্বৰ্টকাট"</string> <string name="lockscreen_shortcut_right" msgid="4138414674531853719">"সোঁ শ্বৰ্টকাট"</string> diff --git a/packages/SystemUI/res/values-es-rUS/strings.xml b/packages/SystemUI/res/values-es-rUS/strings.xml index 0caa430b19c4..b24fe007cd01 100644 --- a/packages/SystemUI/res/values-es-rUS/strings.xml +++ b/packages/SystemUI/res/values-es-rUS/strings.xml @@ -203,6 +203,7 @@ <string name="accessibility_clear_all" msgid="970525598287244592">"Eliminar todas las notificaciones"</string> <string name="notification_group_overflow_indicator" msgid="7605120293801012648">"<xliff:g id="NUMBER">%s</xliff:g> más"</string> <plurals name="notification_group_overflow_description" formatted="false" msgid="91483442850649192"> + <item quantity="many"><xliff:g id="NUMBER_1">%s</xliff:g> more notifications inside.</item> <item quantity="other"><xliff:g id="NUMBER_1">%s</xliff:g> notificaciones más en el grupo.</item> <item quantity="one"><xliff:g id="NUMBER_0">%s</xliff:g> notificación más en el grupo.</item> </plurals> @@ -253,6 +254,7 @@ <string name="quick_settings_hotspot_secondary_label_transient" msgid="7585604088079160564">"Activando…"</string> <string name="quick_settings_hotspot_secondary_label_data_saver_enabled" msgid="1280433136266439372">"Ahorro de datos act."</string> <plurals name="quick_settings_hotspot_secondary_label_num_devices" formatted="false" msgid="3142308865165871976"> + <item quantity="many">%d devices</item> <item quantity="other">%d dispositivos</item> <item quantity="one">%d dispositivo</item> </plurals> @@ -347,6 +349,7 @@ <string name="guest_wipe_session_dontwipe" msgid="3211052048269304205">"Sí, continuar"</string> <string name="user_limit_reached_title" msgid="2429229448830346057">"Alcanzaste el límite de usuarios"</string> <plurals name="user_limit_reached_message" formatted="false" msgid="2573535787802908398"> + <item quantity="many">You can add up to <xliff:g id="COUNT">%d</xliff:g> users.</item> <item quantity="other">Puedes agregar hasta <xliff:g id="COUNT">%d</xliff:g> usuarios.</item> <item quantity="one">Solo se puede crear un usuario.</item> </plurals> @@ -536,10 +539,12 @@ <string name="snooze_undo" msgid="2738844148845992103">"Deshacer"</string> <string name="snoozed_for_time" msgid="7586689374860469469">"Posponer <xliff:g id="TIME_AMOUNT">%1$s</xliff:g>"</string> <plurals name="snoozeHourOptions" formatted="false" msgid="2066838694120718170"> + <item quantity="many">%d hours</item> <item quantity="other">%d horas</item> <item quantity="one">%d hora</item> </plurals> <plurals name="snoozeMinuteOptions" formatted="false" msgid="8998483159208055980"> + <item quantity="many">%d minutes</item> <item quantity="other">%d minutos</item> <item quantity="one">%d minuto</item> </plurals> @@ -766,6 +771,7 @@ <string name="quick_controls_title" msgid="6839108006171302273">"Controles de dispositivos"</string> <string name="controls_providers_title" msgid="6879775889857085056">"Elige la app para agregar los controles"</string> <plurals name="controls_number_of_favorites" formatted="false" msgid="1057347832073807380"> + <item quantity="many"><xliff:g id="NUMBER_1">%s</xliff:g> controls added.</item> <item quantity="other">Se agregaron <xliff:g id="NUMBER_1">%s</xliff:g> controles.</item> <item quantity="one">Se agregó <xliff:g id="NUMBER_0">%s</xliff:g> control.</item> </plurals> @@ -926,6 +932,7 @@ <string name="qs_tile_request_dialog_not_add" msgid="4168716573114067296">"No agregar tarjeta"</string> <string name="qs_user_switch_dialog_title" msgid="3045189293587781366">"Seleccionar usuario"</string> <plurals name="fgs_manager_footer_label" formatted="false" msgid="790443735462280164"> + <item quantity="many"><xliff:g id="COUNT_1">%s</xliff:g> apps están activas</item> <item quantity="other"><xliff:g id="COUNT_1">%s</xliff:g> apps están activas</item> <item quantity="one"><xliff:g id="COUNT_0">%s</xliff:g> app está activa</item> </plurals> @@ -956,5 +963,5 @@ <string name="dream_overlay_status_bar_priority_mode" msgid="5428462123314728739">"Modo prioridad"</string> <string name="dream_overlay_status_bar_alarm_set" msgid="566707328356590886">"Se estableció la alarma"</string> <string name="dream_overlay_status_bar_camera_mic_off" msgid="3199425257833773569">"La cámara y el micrófono están apagados"</string> - <string name="dream_overlay_status_bar_notification_indicator" msgid="8091389255691081711">"{count,plural, =1{# notificación}other{# notificaciones}}"</string> + <string name="dream_overlay_status_bar_notification_indicator" msgid="8091389255691081711">"{count,plural, =1{# notificación}many{# notificaciones}other{# notificaciones}}"</string> </resources> diff --git a/packages/SystemUI/res/values-es/strings.xml b/packages/SystemUI/res/values-es/strings.xml index c75fa56e4291..1d0bdd29f0cb 100644 --- a/packages/SystemUI/res/values-es/strings.xml +++ b/packages/SystemUI/res/values-es/strings.xml @@ -203,6 +203,7 @@ <string name="accessibility_clear_all" msgid="970525598287244592">"Borrar todas las notificaciones"</string> <string name="notification_group_overflow_indicator" msgid="7605120293801012648">"<xliff:g id="NUMBER">%s</xliff:g> más"</string> <plurals name="notification_group_overflow_description" formatted="false" msgid="91483442850649192"> + <item quantity="many"><xliff:g id="NUMBER_1">%s</xliff:g> more notifications inside.</item> <item quantity="other"><xliff:g id="NUMBER_1">%s</xliff:g> notificaciones más dentro.</item> <item quantity="one"><xliff:g id="NUMBER_0">%s</xliff:g> notificación más dentro.</item> </plurals> @@ -253,6 +254,7 @@ <string name="quick_settings_hotspot_secondary_label_transient" msgid="7585604088079160564">"Activando…"</string> <string name="quick_settings_hotspot_secondary_label_data_saver_enabled" msgid="1280433136266439372">"Ahorro de datos activado"</string> <plurals name="quick_settings_hotspot_secondary_label_num_devices" formatted="false" msgid="3142308865165871976"> + <item quantity="many">%d devices</item> <item quantity="other">%d dispositivos</item> <item quantity="one">%d dispositivo</item> </plurals> @@ -347,6 +349,7 @@ <string name="guest_wipe_session_dontwipe" msgid="3211052048269304205">"Sí, continuar"</string> <string name="user_limit_reached_title" msgid="2429229448830346057">"Has alcanzado el límite de usuarios"</string> <plurals name="user_limit_reached_message" formatted="false" msgid="2573535787802908398"> + <item quantity="many">You can add up to <xliff:g id="COUNT">%d</xliff:g> users.</item> <item quantity="other">Puedes añadir hasta <xliff:g id="COUNT">%d</xliff:g> usuarios.</item> <item quantity="one">Solo se puede crear un usuario.</item> </plurals> @@ -536,10 +539,12 @@ <string name="snooze_undo" msgid="2738844148845992103">"Deshacer"</string> <string name="snoozed_for_time" msgid="7586689374860469469">"Volverá a mostrarse en <xliff:g id="TIME_AMOUNT">%1$s</xliff:g>"</string> <plurals name="snoozeHourOptions" formatted="false" msgid="2066838694120718170"> + <item quantity="many">%d hours</item> <item quantity="other">%d horas</item> <item quantity="one">%d hora</item> </plurals> <plurals name="snoozeMinuteOptions" formatted="false" msgid="8998483159208055980"> + <item quantity="many">%d minutes</item> <item quantity="other">%d minutos</item> <item quantity="one">%d minuto</item> </plurals> @@ -766,6 +771,7 @@ <string name="quick_controls_title" msgid="6839108006171302273">"Control de dispositivos"</string> <string name="controls_providers_title" msgid="6879775889857085056">"Elige una aplicación para añadir controles"</string> <plurals name="controls_number_of_favorites" formatted="false" msgid="1057347832073807380"> + <item quantity="many"><xliff:g id="NUMBER_1">%s</xliff:g> controls added.</item> <item quantity="other">Se han añadido <xliff:g id="NUMBER_1">%s</xliff:g> controles.</item> <item quantity="one">Se ha añadido <xliff:g id="NUMBER_0">%s</xliff:g> control.</item> </plurals> @@ -926,6 +932,7 @@ <string name="qs_tile_request_dialog_not_add" msgid="4168716573114067296">"No añadir recuadro"</string> <string name="qs_user_switch_dialog_title" msgid="3045189293587781366">"Selecciona un usuario"</string> <plurals name="fgs_manager_footer_label" formatted="false" msgid="790443735462280164"> + <item quantity="many"><xliff:g id="COUNT_1">%s</xliff:g> aplicaciones activas</item> <item quantity="other"><xliff:g id="COUNT_1">%s</xliff:g> aplicaciones activas</item> <item quantity="one"><xliff:g id="COUNT_0">%s</xliff:g> aplicación activa</item> </plurals> @@ -956,5 +963,5 @@ <string name="dream_overlay_status_bar_priority_mode" msgid="5428462123314728739">"Modo prioritario"</string> <string name="dream_overlay_status_bar_alarm_set" msgid="566707328356590886">"Alarma añadida"</string> <string name="dream_overlay_status_bar_camera_mic_off" msgid="3199425257833773569">"La cámara y el micrófono están desactivados"</string> - <string name="dream_overlay_status_bar_notification_indicator" msgid="8091389255691081711">"{count,plural, =1{# notificación}other{# notificaciones}}"</string> + <string name="dream_overlay_status_bar_notification_indicator" msgid="8091389255691081711">"{count,plural, =1{# notificación}many{# notificaciones}other{# notificaciones}}"</string> </resources> diff --git a/packages/SystemUI/res/values-fr-rCA/strings.xml b/packages/SystemUI/res/values-fr-rCA/strings.xml index 69598089c416..c9ee3dbf38ea 100644 --- a/packages/SystemUI/res/values-fr-rCA/strings.xml +++ b/packages/SystemUI/res/values-fr-rCA/strings.xml @@ -204,6 +204,7 @@ <string name="notification_group_overflow_indicator" msgid="7605120293801012648">"+ <xliff:g id="NUMBER">%s</xliff:g>"</string> <plurals name="notification_group_overflow_description" formatted="false" msgid="91483442850649192"> <item quantity="one"><xliff:g id="NUMBER_1">%s</xliff:g> autre notification à l\'intérieur.</item> + <item quantity="many"><xliff:g id="NUMBER_1">%s</xliff:g> more notifications inside.</item> <item quantity="other"><xliff:g id="NUMBER_1">%s</xliff:g> autres notifications à l\'intérieur.</item> </plurals> <string name="accessibility_rotation_lock_on_landscape" msgid="936972553861524360">"L\'écran est verrouillé en mode paysage."</string> @@ -254,6 +255,7 @@ <string name="quick_settings_hotspot_secondary_label_data_saver_enabled" msgid="1280433136266439372">"Écon. données activé"</string> <plurals name="quick_settings_hotspot_secondary_label_num_devices" formatted="false" msgid="3142308865165871976"> <item quantity="one">%d appareil</item> + <item quantity="many">%d devices</item> <item quantity="other">%d appareils</item> </plurals> <string name="quick_settings_flashlight_label" msgid="4904634272006284185">"Lampe de poche"</string> @@ -348,6 +350,7 @@ <string name="user_limit_reached_title" msgid="2429229448830346057">"Limite d\'utilisateurs atteinte"</string> <plurals name="user_limit_reached_message" formatted="false" msgid="2573535787802908398"> <item quantity="one">Vous pouvez ajouter jusqu\'à <xliff:g id="COUNT">%d</xliff:g> utilisateur.</item> + <item quantity="many">You can add up to <xliff:g id="COUNT">%d</xliff:g> users.</item> <item quantity="other">Vous pouvez ajouter jusqu\'à <xliff:g id="COUNT">%d</xliff:g> utilisateurs.</item> </plurals> <string name="user_remove_user_title" msgid="9124124694835811874">"Supprimer l\'utilisateur?"</string> @@ -537,10 +540,12 @@ <string name="snoozed_for_time" msgid="7586689374860469469">"Reporté pour <xliff:g id="TIME_AMOUNT">%1$s</xliff:g>"</string> <plurals name="snoozeHourOptions" formatted="false" msgid="2066838694120718170"> <item quantity="one">%d heure</item> + <item quantity="many">%d hours</item> <item quantity="other">%d heures</item> </plurals> <plurals name="snoozeMinuteOptions" formatted="false" msgid="8998483159208055980"> <item quantity="one">%d minute</item> + <item quantity="many">%d minutes</item> <item quantity="other">%d minutes</item> </plurals> <string name="battery_detail_switch_title" msgid="6940976502957380405">"Économiseur de pile"</string> @@ -767,6 +772,7 @@ <string name="controls_providers_title" msgid="6879775889857085056">"Sélectionnez l\'application pour laquelle ajouter des commandes"</string> <plurals name="controls_number_of_favorites" formatted="false" msgid="1057347832073807380"> <item quantity="one"><xliff:g id="NUMBER_1">%s</xliff:g> commande ajoutée.</item> + <item quantity="many"><xliff:g id="NUMBER_1">%s</xliff:g> controls added.</item> <item quantity="other"><xliff:g id="NUMBER_1">%s</xliff:g> commandes ajoutées.</item> </plurals> <string name="controls_removed" msgid="3731789252222856959">"Supprimé"</string> @@ -927,6 +933,7 @@ <string name="qs_user_switch_dialog_title" msgid="3045189293587781366">"Choisir l\'utilisateur"</string> <plurals name="fgs_manager_footer_label" formatted="false" msgid="790443735462280164"> <item quantity="one"><xliff:g id="COUNT_1">%s</xliff:g> application est active</item> + <item quantity="many"><xliff:g id="COUNT_1">%s</xliff:g> d\'applications sont actives</item> <item quantity="other"><xliff:g id="COUNT_1">%s</xliff:g> applications sont actives</item> </plurals> <string name="fgs_dot_content_description" msgid="2865071539464777240">"Nouvelle information"</string> @@ -956,5 +963,5 @@ <string name="dream_overlay_status_bar_priority_mode" msgid="5428462123314728739">"Mode priorité"</string> <string name="dream_overlay_status_bar_alarm_set" msgid="566707328356590886">"L\'alarme a été réglée"</string> <string name="dream_overlay_status_bar_camera_mic_off" msgid="3199425257833773569">"L\'appareil photo et le micro sont désactivés"</string> - <string name="dream_overlay_status_bar_notification_indicator" msgid="8091389255691081711">"{count,plural, =1{# notification}one{# notification}other{# notifications}}"</string> + <string name="dream_overlay_status_bar_notification_indicator" msgid="8091389255691081711">"{count,plural, =1{# notification}one{# notification}many{# de notifications}other{# notifications}}"</string> </resources> diff --git a/packages/SystemUI/res/values-fr/strings.xml b/packages/SystemUI/res/values-fr/strings.xml index 307d75d06279..554bff39492e 100644 --- a/packages/SystemUI/res/values-fr/strings.xml +++ b/packages/SystemUI/res/values-fr/strings.xml @@ -204,6 +204,7 @@ <string name="notification_group_overflow_indicator" msgid="7605120293801012648">"<xliff:g id="NUMBER">%s</xliff:g> autres"</string> <plurals name="notification_group_overflow_description" formatted="false" msgid="91483442850649192"> <item quantity="one"><xliff:g id="NUMBER_1">%s</xliff:g> autre notification à l\'intérieur.</item> + <item quantity="many"><xliff:g id="NUMBER_1">%s</xliff:g> more notifications inside.</item> <item quantity="other"><xliff:g id="NUMBER_1">%s</xliff:g> autres notifications à l\'intérieur.</item> </plurals> <string name="accessibility_rotation_lock_on_landscape" msgid="936972553861524360">"L\'écran est verrouillé en mode paysage."</string> @@ -254,6 +255,7 @@ <string name="quick_settings_hotspot_secondary_label_data_saver_enabled" msgid="1280433136266439372">"Écon. données activé"</string> <plurals name="quick_settings_hotspot_secondary_label_num_devices" formatted="false" msgid="3142308865165871976"> <item quantity="one">%d appareil</item> + <item quantity="many">%d devices</item> <item quantity="other">%d appareils</item> </plurals> <string name="quick_settings_flashlight_label" msgid="4904634272006284185">"Lampe de poche"</string> @@ -348,6 +350,7 @@ <string name="user_limit_reached_title" msgid="2429229448830346057">"Limite nombre utilisateurs atteinte"</string> <plurals name="user_limit_reached_message" formatted="false" msgid="2573535787802908398"> <item quantity="one">Vous pouvez ajouter <xliff:g id="COUNT">%d</xliff:g> profil utilisateur.</item> + <item quantity="many">You can add up to <xliff:g id="COUNT">%d</xliff:g> users.</item> <item quantity="other">Vous pouvez ajouter jusqu\'à <xliff:g id="COUNT">%d</xliff:g> profils utilisateur.</item> </plurals> <string name="user_remove_user_title" msgid="9124124694835811874">"Supprimer l\'utilisateur ?"</string> @@ -537,10 +540,12 @@ <string name="snoozed_for_time" msgid="7586689374860469469">"Répétée après <xliff:g id="TIME_AMOUNT">%1$s</xliff:g>"</string> <plurals name="snoozeHourOptions" formatted="false" msgid="2066838694120718170"> <item quantity="one">%d heure</item> + <item quantity="many">%d hours</item> <item quantity="other">%d heures</item> </plurals> <plurals name="snoozeMinuteOptions" formatted="false" msgid="8998483159208055980"> <item quantity="one">%d minute</item> + <item quantity="many">%d minutes</item> <item quantity="other">%d minutes</item> </plurals> <string name="battery_detail_switch_title" msgid="6940976502957380405">"Économiseur de batterie"</string> @@ -767,6 +772,7 @@ <string name="controls_providers_title" msgid="6879775889857085056">"Sélectionnez l\'appli pour laquelle ajouter des commandes"</string> <plurals name="controls_number_of_favorites" formatted="false" msgid="1057347832073807380"> <item quantity="one"><xliff:g id="NUMBER_1">%s</xliff:g> commande ajoutée.</item> + <item quantity="many"><xliff:g id="NUMBER_1">%s</xliff:g> controls added.</item> <item quantity="other"><xliff:g id="NUMBER_1">%s</xliff:g> commandes ajoutées.</item> </plurals> <string name="controls_removed" msgid="3731789252222856959">"Supprimé"</string> @@ -927,6 +933,7 @@ <string name="qs_user_switch_dialog_title" msgid="3045189293587781366">"Choisir l\'utilisateur"</string> <plurals name="fgs_manager_footer_label" formatted="false" msgid="790443735462280164"> <item quantity="one"><xliff:g id="COUNT_1">%s</xliff:g> appli est active</item> + <item quantity="many"><xliff:g id="COUNT_1">%s</xliff:g> applis sont actives</item> <item quantity="other"><xliff:g id="COUNT_1">%s</xliff:g> applis sont actives</item> </plurals> <string name="fgs_dot_content_description" msgid="2865071539464777240">"Nouvelles informations"</string> @@ -956,5 +963,5 @@ <string name="dream_overlay_status_bar_priority_mode" msgid="5428462123314728739">"Mode Prioritaire"</string> <string name="dream_overlay_status_bar_alarm_set" msgid="566707328356590886">"Alarme réglée"</string> <string name="dream_overlay_status_bar_camera_mic_off" msgid="3199425257833773569">"Appareil photo et micro désactivés"</string> - <string name="dream_overlay_status_bar_notification_indicator" msgid="8091389255691081711">"{count,plural, =1{# notification}one{# notification}other{# notifications}}"</string> + <string name="dream_overlay_status_bar_notification_indicator" msgid="8091389255691081711">"{count,plural, =1{# notification}one{# notification}many{# notifications}other{# notifications}}"</string> </resources> diff --git a/packages/SystemUI/res/values-it/strings.xml b/packages/SystemUI/res/values-it/strings.xml index fff7abe0ea2c..1d87916753b8 100644 --- a/packages/SystemUI/res/values-it/strings.xml +++ b/packages/SystemUI/res/values-it/strings.xml @@ -203,6 +203,7 @@ <string name="accessibility_clear_all" msgid="970525598287244592">"Cancella tutte le notifiche."</string> <string name="notification_group_overflow_indicator" msgid="7605120293801012648">"+ <xliff:g id="NUMBER">%s</xliff:g>"</string> <plurals name="notification_group_overflow_description" formatted="false" msgid="91483442850649192"> + <item quantity="many"><xliff:g id="NUMBER_1">%s</xliff:g> more notifications inside.</item> <item quantity="other">Altre <xliff:g id="NUMBER_1">%s</xliff:g> notifiche nel gruppo.</item> <item quantity="one"><xliff:g id="NUMBER_0">%s</xliff:g> altra notifica nel gruppo.</item> </plurals> @@ -253,6 +254,7 @@ <string name="quick_settings_hotspot_secondary_label_transient" msgid="7585604088079160564">"Attivazione…"</string> <string name="quick_settings_hotspot_secondary_label_data_saver_enabled" msgid="1280433136266439372">"Risp. dati attivo"</string> <plurals name="quick_settings_hotspot_secondary_label_num_devices" formatted="false" msgid="3142308865165871976"> + <item quantity="many">%d devices</item> <item quantity="other">%d dispositivi</item> <item quantity="one">%d dispositivo</item> </plurals> @@ -347,6 +349,7 @@ <string name="guest_wipe_session_dontwipe" msgid="3211052048269304205">"Sì, continua"</string> <string name="user_limit_reached_title" msgid="2429229448830346057">"Limite di utenti raggiunto"</string> <plurals name="user_limit_reached_message" formatted="false" msgid="2573535787802908398"> + <item quantity="many">You can add up to <xliff:g id="COUNT">%d</xliff:g> users.</item> <item quantity="other">Puoi aggiungere fino a <xliff:g id="COUNT">%d</xliff:g> utenti.</item> <item quantity="one">È possibile creare un solo utente.</item> </plurals> @@ -536,10 +539,12 @@ <string name="snooze_undo" msgid="2738844148845992103">"Annulla"</string> <string name="snoozed_for_time" msgid="7586689374860469469">"Posticipato di <xliff:g id="TIME_AMOUNT">%1$s</xliff:g>"</string> <plurals name="snoozeHourOptions" formatted="false" msgid="2066838694120718170"> + <item quantity="many">%d hours</item> <item quantity="other">%d ore</item> <item quantity="one">%d ora</item> </plurals> <plurals name="snoozeMinuteOptions" formatted="false" msgid="8998483159208055980"> + <item quantity="many">%d minutes</item> <item quantity="other">%d minuti</item> <item quantity="one">%d minuto</item> </plurals> @@ -766,6 +771,7 @@ <string name="quick_controls_title" msgid="6839108006171302273">"Controllo dispositivi"</string> <string name="controls_providers_title" msgid="6879775889857085056">"Scegli un\'app per aggiungere controlli"</string> <plurals name="controls_number_of_favorites" formatted="false" msgid="1057347832073807380"> + <item quantity="many"><xliff:g id="NUMBER_1">%s</xliff:g> controls added.</item> <item quantity="other"><xliff:g id="NUMBER_1">%s</xliff:g> controlli aggiunti.</item> <item quantity="one"><xliff:g id="NUMBER_0">%s</xliff:g> controllo aggiunto.</item> </plurals> @@ -926,6 +932,7 @@ <string name="qs_tile_request_dialog_not_add" msgid="4168716573114067296">"Non aggiungerlo"</string> <string name="qs_user_switch_dialog_title" msgid="3045189293587781366">"Seleziona utente"</string> <plurals name="fgs_manager_footer_label" formatted="false" msgid="790443735462280164"> + <item quantity="many"><xliff:g id="COUNT_1">%s</xliff:g> app attive</item> <item quantity="other"><xliff:g id="COUNT_1">%s</xliff:g> app attive</item> <item quantity="one"><xliff:g id="COUNT_0">%s</xliff:g> app attiva</item> </plurals> @@ -956,5 +963,5 @@ <string name="dream_overlay_status_bar_priority_mode" msgid="5428462123314728739">"Modalità Priorità"</string> <string name="dream_overlay_status_bar_alarm_set" msgid="566707328356590886">"Sveglia impostata"</string> <string name="dream_overlay_status_bar_camera_mic_off" msgid="3199425257833773569">"Fotocamera e microfono non attivi"</string> - <string name="dream_overlay_status_bar_notification_indicator" msgid="8091389255691081711">"{count,plural, =1{# notifica}other{# notifiche}}"</string> + <string name="dream_overlay_status_bar_notification_indicator" msgid="8091389255691081711">"{count,plural, =1{# notifica}many{# notifiche}other{# notifiche}}"</string> </resources> diff --git a/packages/SystemUI/res/values-ko/strings.xml b/packages/SystemUI/res/values-ko/strings.xml index 2591498e459c..0fc7511693e2 100644 --- a/packages/SystemUI/res/values-ko/strings.xml +++ b/packages/SystemUI/res/values-ko/strings.xml @@ -286,7 +286,7 @@ <string name="quick_settings_screen_record_start" msgid="1574725369331638985">"시작"</string> <string name="quick_settings_screen_record_stop" msgid="8087348522976412119">"중지"</string> <string name="quick_settings_onehanded_label" msgid="2416537930246274991">"한 손 사용 모드"</string> - <string name="sensor_privacy_start_use_mic_dialog_title" msgid="563796653825944944">"기기 마이크를 차단 해제하시겠습니까?"</string> + <string name="sensor_privacy_start_use_mic_dialog_title" msgid="563796653825944944">"기기 마이크를 &#173;차단 해제하시겠습니까?"</string> <string name="sensor_privacy_start_use_camera_dialog_title" msgid="8807639852654305227">"기기 카메라를 차단 해제하시겠습니까?"</string> <string name="sensor_privacy_start_use_mic_camera_dialog_title" msgid="4316471859905020023">"기기 카메라 및 마이크를 차단 해제하시겠습니까?"</string> <string name="sensor_privacy_start_use_mic_dialog_content" msgid="1624701280680913717">"마이크를 사용할 수 있는 모든 앱 및 서비스에 대해 액세스가 차단 해제됩니다."</string> diff --git a/packages/SystemUI/res/values-pt-rBR/strings.xml b/packages/SystemUI/res/values-pt-rBR/strings.xml index 9322ae2fece1..22c5be686796 100644 --- a/packages/SystemUI/res/values-pt-rBR/strings.xml +++ b/packages/SystemUI/res/values-pt-rBR/strings.xml @@ -204,6 +204,7 @@ <string name="notification_group_overflow_indicator" msgid="7605120293801012648">"Mais <xliff:g id="NUMBER">%s</xliff:g>"</string> <plurals name="notification_group_overflow_description" formatted="false" msgid="91483442850649192"> <item quantity="one">Mais <xliff:g id="NUMBER_1">%s</xliff:g> notificações no grupo.</item> + <item quantity="many"><xliff:g id="NUMBER_1">%s</xliff:g> more notifications inside.</item> <item quantity="other">Mais <xliff:g id="NUMBER_1">%s</xliff:g> notificações no grupo.</item> </plurals> <string name="accessibility_rotation_lock_on_landscape" msgid="936972553861524360">"A tela está bloqueada na orientação paisagem."</string> @@ -254,6 +255,7 @@ <string name="quick_settings_hotspot_secondary_label_data_saver_enabled" msgid="1280433136266439372">"Economia de dados ativada"</string> <plurals name="quick_settings_hotspot_secondary_label_num_devices" formatted="false" msgid="3142308865165871976"> <item quantity="one">%d dispositivo</item> + <item quantity="many">%d devices</item> <item quantity="other">%d dispositivos</item> </plurals> <string name="quick_settings_flashlight_label" msgid="4904634272006284185">"Lanterna"</string> @@ -348,6 +350,7 @@ <string name="user_limit_reached_title" msgid="2429229448830346057">"Limite de usuários atingido"</string> <plurals name="user_limit_reached_message" formatted="false" msgid="2573535787802908398"> <item quantity="one">É possível adicionar até <xliff:g id="COUNT">%d</xliff:g> usuário.</item> + <item quantity="many">You can add up to <xliff:g id="COUNT">%d</xliff:g> users.</item> <item quantity="other">É possível adicionar até <xliff:g id="COUNT">%d</xliff:g> usuários.</item> </plurals> <string name="user_remove_user_title" msgid="9124124694835811874">"Remover usuário?"</string> @@ -537,10 +540,12 @@ <string name="snoozed_for_time" msgid="7586689374860469469">"Adiada para <xliff:g id="TIME_AMOUNT">%1$s</xliff:g>"</string> <plurals name="snoozeHourOptions" formatted="false" msgid="2066838694120718170"> <item quantity="one">%d hora</item> + <item quantity="many">%d hours</item> <item quantity="other">%d horas</item> </plurals> <plurals name="snoozeMinuteOptions" formatted="false" msgid="8998483159208055980"> <item quantity="one">%d minuto</item> + <item quantity="many">%d minutes</item> <item quantity="other">%d minutos</item> </plurals> <string name="battery_detail_switch_title" msgid="6940976502957380405">"Economia de bateria"</string> @@ -767,6 +772,7 @@ <string name="controls_providers_title" msgid="6879775889857085056">"Escolha um app para adicionar controles"</string> <plurals name="controls_number_of_favorites" formatted="false" msgid="1057347832073807380"> <item quantity="one"><xliff:g id="NUMBER_1">%s</xliff:g> controle adicionado.</item> + <item quantity="many"><xliff:g id="NUMBER_1">%s</xliff:g> controls added.</item> <item quantity="other"><xliff:g id="NUMBER_1">%s</xliff:g> controles adicionados.</item> </plurals> <string name="controls_removed" msgid="3731789252222856959">"Removido"</string> @@ -927,6 +933,7 @@ <string name="qs_user_switch_dialog_title" msgid="3045189293587781366">"Selecionar usuário"</string> <plurals name="fgs_manager_footer_label" formatted="false" msgid="790443735462280164"> <item quantity="one"><xliff:g id="COUNT_1">%s</xliff:g> app está ativo</item> + <item quantity="many"><xliff:g id="COUNT_1">%s</xliff:g> apps are active</item> <item quantity="other"><xliff:g id="COUNT_1">%s</xliff:g> apps estão ativos</item> </plurals> <string name="fgs_dot_content_description" msgid="2865071539464777240">"Nova informação"</string> @@ -956,5 +963,5 @@ <string name="dream_overlay_status_bar_priority_mode" msgid="5428462123314728739">"Modo de prioridade"</string> <string name="dream_overlay_status_bar_alarm_set" msgid="566707328356590886">"Alarme definido"</string> <string name="dream_overlay_status_bar_camera_mic_off" msgid="3199425257833773569">"A câmera e o microfone estão desativados"</string> - <string name="dream_overlay_status_bar_notification_indicator" msgid="8091389255691081711">"{count,plural, =1{# notificação}one{# notificação}other{# notificações}}"</string> + <string name="dream_overlay_status_bar_notification_indicator" msgid="8091389255691081711">"{count,plural, =1{# notificação}one{# notificação}many{# notificações}other{# notificações}}"</string> </resources> diff --git a/packages/SystemUI/res/values-pt-rPT/strings.xml b/packages/SystemUI/res/values-pt-rPT/strings.xml index f38b45144fdc..cb94df96a8da 100644 --- a/packages/SystemUI/res/values-pt-rPT/strings.xml +++ b/packages/SystemUI/res/values-pt-rPT/strings.xml @@ -203,6 +203,7 @@ <string name="accessibility_clear_all" msgid="970525598287244592">"Limpar todas as notificações."</string> <string name="notification_group_overflow_indicator" msgid="7605120293801012648">"+ <xliff:g id="NUMBER">%s</xliff:g>"</string> <plurals name="notification_group_overflow_description" formatted="false" msgid="91483442850649192"> + <item quantity="many"><xliff:g id="NUMBER_1">%s</xliff:g> more notifications inside.</item> <item quantity="other">Mais <xliff:g id="NUMBER_1">%s</xliff:g> notificações no grupo.</item> <item quantity="one">Mais <xliff:g id="NUMBER_0">%s</xliff:g> notificação no grupo.</item> </plurals> @@ -253,6 +254,7 @@ <string name="quick_settings_hotspot_secondary_label_transient" msgid="7585604088079160564">"A ativar..."</string> <string name="quick_settings_hotspot_secondary_label_data_saver_enabled" msgid="1280433136266439372">"Poup. dados ativada"</string> <plurals name="quick_settings_hotspot_secondary_label_num_devices" formatted="false" msgid="3142308865165871976"> + <item quantity="many">%d devices</item> <item quantity="other">%d dispositivos</item> <item quantity="one">%d dispositivo</item> </plurals> @@ -347,6 +349,7 @@ <string name="guest_wipe_session_dontwipe" msgid="3211052048269304205">"Sim, continuar"</string> <string name="user_limit_reached_title" msgid="2429229448830346057">"Limite de utilizadores alcançado"</string> <plurals name="user_limit_reached_message" formatted="false" msgid="2573535787802908398"> + <item quantity="many">You can add up to <xliff:g id="COUNT">%d</xliff:g> users.</item> <item quantity="other">Pode adicionar até <xliff:g id="COUNT">%d</xliff:g> utilizadores.</item> <item quantity="one">Apenas é possível criar um utilizador.</item> </plurals> @@ -536,10 +539,12 @@ <string name="snooze_undo" msgid="2738844148845992103">"Anular"</string> <string name="snoozed_for_time" msgid="7586689374860469469">"Suspensa por <xliff:g id="TIME_AMOUNT">%1$s</xliff:g>"</string> <plurals name="snoozeHourOptions" formatted="false" msgid="2066838694120718170"> + <item quantity="many">%d hours</item> <item quantity="other">%d horas</item> <item quantity="one">%d hora</item> </plurals> <plurals name="snoozeMinuteOptions" formatted="false" msgid="8998483159208055980"> + <item quantity="many">%d minutes</item> <item quantity="other">%d minutos</item> <item quantity="one">%d minuto</item> </plurals> @@ -766,6 +771,7 @@ <string name="quick_controls_title" msgid="6839108006171302273">"Controlos de dispositivos"</string> <string name="controls_providers_title" msgid="6879775889857085056">"Escolha uma app para adicionar controlos"</string> <plurals name="controls_number_of_favorites" formatted="false" msgid="1057347832073807380"> + <item quantity="many"><xliff:g id="NUMBER_1">%s</xliff:g> controls added.</item> <item quantity="other"><xliff:g id="NUMBER_1">%s</xliff:g> controlos adicionados.</item> <item quantity="one"><xliff:g id="NUMBER_0">%s</xliff:g> controlo adicionado.</item> </plurals> @@ -926,6 +932,7 @@ <string name="qs_tile_request_dialog_not_add" msgid="4168716573114067296">"Não adicion. mosaico"</string> <string name="qs_user_switch_dialog_title" msgid="3045189293587781366">"Selecione utilizador"</string> <plurals name="fgs_manager_footer_label" formatted="false" msgid="790443735462280164"> + <item quantity="many"><xliff:g id="COUNT_1">%s</xliff:g> apps estão ativas</item> <item quantity="other"><xliff:g id="COUNT_1">%s</xliff:g> apps estão ativas</item> <item quantity="one"><xliff:g id="COUNT_0">%s</xliff:g> app está ativa</item> </plurals> @@ -956,5 +963,5 @@ <string name="dream_overlay_status_bar_priority_mode" msgid="5428462123314728739">"Modo Prioridade"</string> <string name="dream_overlay_status_bar_alarm_set" msgid="566707328356590886">"Alarme definido"</string> <string name="dream_overlay_status_bar_camera_mic_off" msgid="3199425257833773569">"A câmara e o microfone estão desativados"</string> - <string name="dream_overlay_status_bar_notification_indicator" msgid="8091389255691081711">"{count,plural, =1{# notificação}other{# notificações}}"</string> + <string name="dream_overlay_status_bar_notification_indicator" msgid="8091389255691081711">"{count,plural, =1{# notificação}many{# notificações}other{# notificações}}"</string> </resources> diff --git a/packages/SystemUI/res/values-pt/strings.xml b/packages/SystemUI/res/values-pt/strings.xml index 9322ae2fece1..22c5be686796 100644 --- a/packages/SystemUI/res/values-pt/strings.xml +++ b/packages/SystemUI/res/values-pt/strings.xml @@ -204,6 +204,7 @@ <string name="notification_group_overflow_indicator" msgid="7605120293801012648">"Mais <xliff:g id="NUMBER">%s</xliff:g>"</string> <plurals name="notification_group_overflow_description" formatted="false" msgid="91483442850649192"> <item quantity="one">Mais <xliff:g id="NUMBER_1">%s</xliff:g> notificações no grupo.</item> + <item quantity="many"><xliff:g id="NUMBER_1">%s</xliff:g> more notifications inside.</item> <item quantity="other">Mais <xliff:g id="NUMBER_1">%s</xliff:g> notificações no grupo.</item> </plurals> <string name="accessibility_rotation_lock_on_landscape" msgid="936972553861524360">"A tela está bloqueada na orientação paisagem."</string> @@ -254,6 +255,7 @@ <string name="quick_settings_hotspot_secondary_label_data_saver_enabled" msgid="1280433136266439372">"Economia de dados ativada"</string> <plurals name="quick_settings_hotspot_secondary_label_num_devices" formatted="false" msgid="3142308865165871976"> <item quantity="one">%d dispositivo</item> + <item quantity="many">%d devices</item> <item quantity="other">%d dispositivos</item> </plurals> <string name="quick_settings_flashlight_label" msgid="4904634272006284185">"Lanterna"</string> @@ -348,6 +350,7 @@ <string name="user_limit_reached_title" msgid="2429229448830346057">"Limite de usuários atingido"</string> <plurals name="user_limit_reached_message" formatted="false" msgid="2573535787802908398"> <item quantity="one">É possível adicionar até <xliff:g id="COUNT">%d</xliff:g> usuário.</item> + <item quantity="many">You can add up to <xliff:g id="COUNT">%d</xliff:g> users.</item> <item quantity="other">É possível adicionar até <xliff:g id="COUNT">%d</xliff:g> usuários.</item> </plurals> <string name="user_remove_user_title" msgid="9124124694835811874">"Remover usuário?"</string> @@ -537,10 +540,12 @@ <string name="snoozed_for_time" msgid="7586689374860469469">"Adiada para <xliff:g id="TIME_AMOUNT">%1$s</xliff:g>"</string> <plurals name="snoozeHourOptions" formatted="false" msgid="2066838694120718170"> <item quantity="one">%d hora</item> + <item quantity="many">%d hours</item> <item quantity="other">%d horas</item> </plurals> <plurals name="snoozeMinuteOptions" formatted="false" msgid="8998483159208055980"> <item quantity="one">%d minuto</item> + <item quantity="many">%d minutes</item> <item quantity="other">%d minutos</item> </plurals> <string name="battery_detail_switch_title" msgid="6940976502957380405">"Economia de bateria"</string> @@ -767,6 +772,7 @@ <string name="controls_providers_title" msgid="6879775889857085056">"Escolha um app para adicionar controles"</string> <plurals name="controls_number_of_favorites" formatted="false" msgid="1057347832073807380"> <item quantity="one"><xliff:g id="NUMBER_1">%s</xliff:g> controle adicionado.</item> + <item quantity="many"><xliff:g id="NUMBER_1">%s</xliff:g> controls added.</item> <item quantity="other"><xliff:g id="NUMBER_1">%s</xliff:g> controles adicionados.</item> </plurals> <string name="controls_removed" msgid="3731789252222856959">"Removido"</string> @@ -927,6 +933,7 @@ <string name="qs_user_switch_dialog_title" msgid="3045189293587781366">"Selecionar usuário"</string> <plurals name="fgs_manager_footer_label" formatted="false" msgid="790443735462280164"> <item quantity="one"><xliff:g id="COUNT_1">%s</xliff:g> app está ativo</item> + <item quantity="many"><xliff:g id="COUNT_1">%s</xliff:g> apps are active</item> <item quantity="other"><xliff:g id="COUNT_1">%s</xliff:g> apps estão ativos</item> </plurals> <string name="fgs_dot_content_description" msgid="2865071539464777240">"Nova informação"</string> @@ -956,5 +963,5 @@ <string name="dream_overlay_status_bar_priority_mode" msgid="5428462123314728739">"Modo de prioridade"</string> <string name="dream_overlay_status_bar_alarm_set" msgid="566707328356590886">"Alarme definido"</string> <string name="dream_overlay_status_bar_camera_mic_off" msgid="3199425257833773569">"A câmera e o microfone estão desativados"</string> - <string name="dream_overlay_status_bar_notification_indicator" msgid="8091389255691081711">"{count,plural, =1{# notificação}one{# notificação}other{# notificações}}"</string> + <string name="dream_overlay_status_bar_notification_indicator" msgid="8091389255691081711">"{count,plural, =1{# notificação}one{# notificação}many{# notificações}other{# notificações}}"</string> </resources> diff --git a/services/core/java/com/android/server/StorageManagerService.java b/services/core/java/com/android/server/StorageManagerService.java index 5eec6e58e925..e54665eb2593 100644 --- a/services/core/java/com/android/server/StorageManagerService.java +++ b/services/core/java/com/android/server/StorageManagerService.java @@ -19,12 +19,10 @@ package com.android.server; import static android.Manifest.permission.ACCESS_MTP; import static android.Manifest.permission.INSTALL_PACKAGES; import static android.Manifest.permission.MANAGE_EXTERNAL_STORAGE; -import static android.Manifest.permission.WRITE_EXTERNAL_STORAGE; import static android.app.AppOpsManager.MODE_ALLOWED; import static android.app.AppOpsManager.OP_LEGACY_STORAGE; import static android.app.AppOpsManager.OP_MANAGE_EXTERNAL_STORAGE; import static android.app.AppOpsManager.OP_REQUEST_INSTALL_PACKAGES; -import static android.app.AppOpsManager.OP_WRITE_EXTERNAL_STORAGE; import static android.app.PendingIntent.FLAG_CANCEL_CURRENT; import static android.app.PendingIntent.FLAG_IMMUTABLE; import static android.app.PendingIntent.FLAG_ONE_SHOT; @@ -4512,11 +4510,7 @@ class StorageManagerService extends IStorageManager.Stub } } - // Determine if caller is holding runtime permission - final boolean hasWrite = StorageManager.checkPermissionAndCheckOp(mContext, false, 0, - uid, packageName, WRITE_EXTERNAL_STORAGE, OP_WRITE_EXTERNAL_STORAGE); - - // We're only willing to give out installer access if they also hold + // We're only willing to give out installer access if they hold // runtime permission; this is a firm CDD requirement final boolean hasInstall = mIPackageManager.checkUidPermission(INSTALL_PACKAGES, uid) == PERMISSION_GRANTED; @@ -4532,7 +4526,7 @@ class StorageManagerService extends IStorageManager.Stub break; } } - if ((hasInstall || hasInstallOp) && hasWrite) { + if (hasInstall || hasInstallOp) { return StorageManager.MOUNT_MODE_EXTERNAL_INSTALLER; } return StorageManager.MOUNT_MODE_EXTERNAL_DEFAULT; diff --git a/services/core/java/com/android/server/notification/NotificationManagerService.java b/services/core/java/com/android/server/notification/NotificationManagerService.java index 4c48a3690211..f43f2484811f 100755 --- a/services/core/java/com/android/server/notification/NotificationManagerService.java +++ b/services/core/java/com/android/server/notification/NotificationManagerService.java @@ -4927,7 +4927,16 @@ public class NotificationManagerService extends SystemService { } enforcePolicyAccess(Binder.getCallingUid(), "addAutomaticZenRule"); - return mZenModeHelper.addAutomaticZenRule(pkg, automaticZenRule, + // If the caller is system, take the package name from the rule's owner rather than + // from the caller's package. + String rulePkg = pkg; + if (isCallingUidSystem()) { + if (automaticZenRule.getOwner() != null) { + rulePkg = automaticZenRule.getOwner().getPackageName(); + } + } + + return mZenModeHelper.addAutomaticZenRule(rulePkg, automaticZenRule, "addAutomaticZenRule"); } diff --git a/services/tests/uiservicestests/src/com/android/server/notification/NotificationManagerServiceTest.java b/services/tests/uiservicestests/src/com/android/server/notification/NotificationManagerServiceTest.java index 22721a1bcc92..abd8fc842fc2 100755 --- a/services/tests/uiservicestests/src/com/android/server/notification/NotificationManagerServiceTest.java +++ b/services/tests/uiservicestests/src/com/android/server/notification/NotificationManagerServiceTest.java @@ -7388,6 +7388,43 @@ public class NotificationManagerServiceTest extends UiServiceTestCase { } @Test + public void testAddAutomaticZenRule_systemCallTakesPackageFromOwner() throws Exception { + mService.isSystemUid = true; + ZenModeHelper mockZenModeHelper = mock(ZenModeHelper.class); + when(mConditionProviders.isPackageOrComponentAllowed(anyString(), anyInt())) + .thenReturn(true); + mService.setZenHelper(mockZenModeHelper); + ComponentName owner = new ComponentName("android", "ProviderName"); + ZenPolicy zenPolicy = new ZenPolicy.Builder().allowAlarms(true).build(); + boolean isEnabled = true; + AutomaticZenRule rule = new AutomaticZenRule("test", owner, owner, mock(Uri.class), + zenPolicy, NotificationManager.INTERRUPTION_FILTER_PRIORITY, isEnabled); + mBinderService.addAutomaticZenRule(rule, "com.android.settings"); + + // verify that zen mode helper gets passed in a package name of "android" + verify(mockZenModeHelper).addAutomaticZenRule(eq("android"), eq(rule), anyString()); + } + + @Test + public void testAddAutomaticZenRule_nonSystemCallTakesPackageFromArg() throws Exception { + mService.isSystemUid = false; + ZenModeHelper mockZenModeHelper = mock(ZenModeHelper.class); + when(mConditionProviders.isPackageOrComponentAllowed(anyString(), anyInt())) + .thenReturn(true); + mService.setZenHelper(mockZenModeHelper); + ComponentName owner = new ComponentName("android", "ProviderName"); + ZenPolicy zenPolicy = new ZenPolicy.Builder().allowAlarms(true).build(); + boolean isEnabled = true; + AutomaticZenRule rule = new AutomaticZenRule("test", owner, owner, mock(Uri.class), + zenPolicy, NotificationManager.INTERRUPTION_FILTER_PRIORITY, isEnabled); + mBinderService.addAutomaticZenRule(rule, "another.package"); + + // verify that zen mode helper gets passed in the package name from the arg, not the owner + verify(mockZenModeHelper).addAutomaticZenRule( + eq("another.package"), eq(rule), anyString()); + } + + @Test public void testAreNotificationsEnabledForPackage() throws Exception { mBinderService.areNotificationsEnabledForPackage(mContext.getPackageName(), mUid); |