diff options
671 files changed, 8273 insertions, 4493 deletions
diff --git a/AconfigFlags.bp b/AconfigFlags.bp index d3e80aea6fed..873e952dd364 100644 --- a/AconfigFlags.bp +++ b/AconfigFlags.bp @@ -92,6 +92,7 @@ aconfig_declarations_group { "com.android.window.flags.window-aconfig-java", "device_policy_aconfig_flags_lib", "display_flags_lib", + "dropbox_flags_lib", "framework-jobscheduler-job.flags-aconfig-java", "framework_graphics_flags_java_lib", "hwui_flags_java_lib", @@ -160,6 +161,7 @@ cc_aconfig_library { aconfig_declarations { name: "com.android.window.flags.window-aconfig", package: "com.android.window.flags", + container: "system", srcs: ["core/java/android/window/flags/*.aconfig"], } @@ -174,6 +176,7 @@ aconfig_declarations { name: "android.hardware.devicestate.feature.flags-aconfig", exportable: true, package: "android.hardware.devicestate.feature.flags", + container: "system", srcs: ["core/java/android/hardware/devicestate/feature/*.aconfig"], } @@ -188,6 +191,7 @@ aconfig_declarations { name: "com.android.hardware.input.input-aconfig", exportable: true, package: "com.android.hardware.input", + container: "system", srcs: ["core/java/android/hardware/input/*.aconfig"], } @@ -207,6 +211,7 @@ java_aconfig_library { aconfig_declarations { name: "com.android.text.flags-aconfig", package: "com.android.text.flags", + container: "system", srcs: ["core/java/android/text/flags/*.aconfig"], } @@ -225,6 +230,7 @@ cc_aconfig_library { aconfig_declarations { name: "android.location.flags-aconfig", package: "android.location.flags", + container: "system", srcs: [ "location/java/android/location/flags/*.aconfig", ], @@ -246,6 +252,7 @@ java_aconfig_library { aconfig_declarations { name: "android.nfc.flags-aconfig", package: "android.nfc", + container: "system", srcs: ["nfc/java/android/nfc/*.aconfig"], } @@ -276,6 +283,7 @@ java_aconfig_library { aconfig_declarations { name: "android.security.flags-aconfig", package: "android.security", + container: "system", srcs: ["core/java/android/security/*.aconfig"], } @@ -296,6 +304,7 @@ java_aconfig_library { aconfig_declarations { name: "android.app.usage.flags-aconfig", package: "android.app.usage", + container: "system", srcs: ["core/java/android/app/usage/*.aconfig"], } @@ -379,6 +388,7 @@ java_aconfig_library { aconfig_declarations { name: "android.companion.virtualdevice.flags-aconfig", package: "android.companion.virtualdevice.flags", + container: "system", srcs: ["core/java/android/companion/virtual/flags/*.aconfig"], } @@ -391,6 +401,7 @@ java_aconfig_library { aconfig_declarations { name: "android.companion.virtual.flags-aconfig", package: "android.companion.virtual.flags", + container: "system", srcs: ["core/java/android/companion/virtual/*.aconfig"], } @@ -398,6 +409,7 @@ aconfig_declarations { aconfig_declarations { name: "android.view.inputmethod.flags-aconfig", package: "android.view.inputmethod", + container: "system", srcs: ["core/java/android/view/inputmethod/flags.aconfig"], } @@ -411,6 +423,7 @@ java_aconfig_library { aconfig_declarations { name: "android.os.vibrator.flags-aconfig", package: "android.os.vibrator", + container: "system", srcs: ["core/java/android/os/vibrator/*.aconfig"], } @@ -424,6 +437,7 @@ java_aconfig_library { aconfig_declarations { name: "android.view.flags-aconfig", package: "android.view.flags", + container: "system", srcs: ["core/java/android/view/flags/*.aconfig"], } @@ -442,6 +456,7 @@ cc_aconfig_library { aconfig_declarations { name: "android.view.accessibility.flags-aconfig", package: "android.view.accessibility", + container: "system", srcs: ["core/java/android/view/accessibility/flags/*.aconfig"], } @@ -461,6 +476,7 @@ aconfig_declarations { name: "android.hardware.flags-aconfig", exportable: true, package: "android.hardware.flags", + container: "system", srcs: ["core/java/android/hardware/flags/*.aconfig"], } @@ -474,6 +490,7 @@ java_aconfig_library { aconfig_declarations { name: "android.widget.flags-aconfig", package: "android.widget.flags", + container: "system", srcs: ["core/java/android/widget/flags/*.aconfig"], } @@ -493,6 +510,7 @@ rust_aconfig_library { aconfig_declarations { name: "android.content.pm.flags-aconfig", package: "android.content.pm", + container: "system", srcs: ["core/java/android/content/pm/flags.aconfig"], } @@ -513,6 +531,7 @@ java_aconfig_library { aconfig_declarations { name: "android.content.res.flags-aconfig", package: "android.content.res", + container: "system", srcs: ["core/java/android/content/res/*.aconfig"], } @@ -533,6 +552,7 @@ java_aconfig_library { aconfig_declarations { name: "com.android.media.flags.bettertogether-aconfig", package: "com.android.media.flags", + container: "system", srcs: ["media/java/android/media/flags/media_better_together.aconfig"], } @@ -554,6 +574,7 @@ aconfig_declarations { name: "com.android.media.flags.editing-aconfig", exportable: true, package: "com.android.media.editing.flags", + container: "system", srcs: [ "media/java/android/media/flags/editing.aconfig", ], @@ -569,6 +590,7 @@ java_aconfig_library { aconfig_declarations { name: "com.android.media.flags.projection-aconfig", package: "com.android.media.projection.flags", + container: "system", srcs: [ "media/java/android/media/flags/projection.aconfig", ], @@ -600,6 +622,7 @@ aconfig_declarations { name: "android.media.tv.flags-aconfig", exportable: true, package: "android.media.tv.flags", + container: "system", srcs: ["media/java/android/media/tv/flags/media_tv.aconfig"], } @@ -614,6 +637,7 @@ aconfig_declarations { name: "android.app.ondeviceintelligence-aconfig", exportable: true, package: "android.app.ondeviceintelligence.flags", + container: "system", srcs: ["core/java/android/app/ondeviceintelligence/flags/ondevice_intelligence.aconfig"], } @@ -627,6 +651,7 @@ java_aconfig_library { aconfig_declarations { name: "android.permission.flags-aconfig", package: "android.permission.flags", + container: "system", srcs: ["core/java/android/permission/flags.aconfig"], } @@ -659,6 +684,7 @@ java_aconfig_library { aconfig_declarations { name: "android.database.sqlite-aconfig", package: "android.database.sqlite", + container: "system", srcs: ["core/java/android/database/sqlite/*.aconfig"], } @@ -679,6 +705,7 @@ aconfig_declarations { name: "android.hardware.biometrics.flags-aconfig", exportable: true, package: "android.hardware.biometrics", + container: "system", srcs: ["core/java/android/hardware/biometrics/flags.aconfig"], } @@ -730,6 +757,7 @@ java_aconfig_library { aconfig_declarations { name: "android.multiuser.flags-aconfig", package: "android.multiuser", + container: "system", srcs: ["core/java/android/content/pm/multiuser.aconfig"], } @@ -743,6 +771,7 @@ java_aconfig_library { aconfig_declarations { name: "android.app.flags-aconfig", package: "android.app", + container: "system", srcs: ["core/java/android/app/*.aconfig"], } @@ -757,6 +786,7 @@ aconfig_declarations { name: "android.hardware.radio.flags-aconfig", exportable: true, package: "android.hardware.radio", + container: "system", srcs: ["core/java/android/hardware/radio/*.aconfig"], } @@ -770,6 +800,7 @@ java_aconfig_library { aconfig_declarations { name: "android.credentials.flags-aconfig", package: "android.credentials.flags", + container: "system", srcs: ["core/java/android/credentials/flags.aconfig"], exportable: true, } @@ -792,6 +823,7 @@ aconfig_declarations { name: "android.view.contentprotection.flags-aconfig", exportable: true, package: "android.view.contentprotection.flags", + container: "system", srcs: ["core/java/android/view/contentprotection/flags/*.aconfig"], } @@ -805,6 +837,7 @@ java_aconfig_library { aconfig_declarations { name: "com.android.server.flags.services-aconfig", package: "com.android.server.flags", + container: "system", srcs: ["services/core/java/com/android/server/flags/*.aconfig"], } @@ -819,6 +852,7 @@ aconfig_declarations { name: "android.service.appprediction.flags-aconfig", exportable: true, package: "android.service.appprediction.flags", + container: "system", srcs: ["core/java/android/service/appprediction/flags/*.aconfig"], } @@ -833,6 +867,7 @@ aconfig_declarations { name: "android.service.controls.flags-aconfig", exportable: true, package: "android.service.controls.flags", + container: "system", srcs: ["core/java/android/service/controls/flags/*.aconfig"], } @@ -847,6 +882,7 @@ aconfig_declarations { name: "android.service.voice.flags-aconfig", exportable: true, package: "android.service.voice.flags", + container: "system", srcs: ["core/java/android/service/voice/flags/*.aconfig"], } @@ -860,6 +896,7 @@ java_aconfig_library { aconfig_declarations { name: "android.service.autofill.flags-aconfig", package: "android.service.autofill", + container: "system", srcs: [ "services/autofill/bugfixes.aconfig", "services/autofill/features.aconfig", @@ -877,6 +914,7 @@ aconfig_declarations { name: "android.companion.flags-aconfig", exportable: true, package: "android.companion", + container: "system", srcs: ["core/java/android/companion/*.aconfig"], } @@ -891,6 +929,7 @@ aconfig_declarations { name: "android.net.platform.flags-aconfig", exportable: true, package: "android.net.platform.flags", + container: "system", srcs: ["core/java/android/net/flags.aconfig"], visibility: [":__subpackages__"], } @@ -900,6 +939,7 @@ aconfig_declarations { name: "com.android.net.thread.platform.flags-aconfig", exportable: true, package: "com.android.net.thread.platform.flags", + container: "system", srcs: ["core/java/android/net/thread/flags.aconfig"], } @@ -920,6 +960,7 @@ java_aconfig_library { aconfig_declarations { name: "android.media.playback.flags-aconfig", package: "com.android.media.playback.flags", + container: "system", srcs: ["media/jni/playback_flags.aconfig"], } @@ -938,6 +979,7 @@ java_aconfig_library { aconfig_declarations { name: "android.net.vcn.flags-aconfig", package: "android.net.vcn", + container: "system", srcs: ["core/java/android/net/vcn/*.aconfig"], } @@ -951,6 +993,7 @@ java_aconfig_library { aconfig_declarations { name: "device_policy_aconfig_flags", package: "android.app.admin.flags", + container: "system", srcs: [ "core/java/android/app/admin/flags/flags.aconfig", ], @@ -978,6 +1021,7 @@ cc_aconfig_library { aconfig_declarations { name: "android.service.chooser.flags-aconfig", package: "android.service.chooser", + container: "system", srcs: ["core/java/android/service/chooser/flags.aconfig"], } @@ -996,6 +1040,7 @@ java_aconfig_library { aconfig_declarations { name: "framework-jobscheduler-job.flags-aconfig", package: "android.app.job", + container: "system", exportable: true, srcs: ["apex/jobscheduler/framework/aconfig/job.aconfig"], } @@ -1010,6 +1055,7 @@ java_aconfig_library { aconfig_declarations { name: "android.service.dreams.flags-aconfig", package: "android.service.dreams", + container: "system", srcs: ["core/java/android/service/dreams/flags.aconfig"], } @@ -1050,6 +1096,7 @@ java_aconfig_library { aconfig_declarations { name: "android.app.contextualsearch.flags-aconfig", package: "android.app.contextualsearch.flags", + container: "system", srcs: ["core/java/android/app/contextualsearch/flags.aconfig"], } @@ -1064,6 +1111,7 @@ aconfig_declarations { name: "android.app.smartspace.flags-aconfig", exportable: true, package: "android.app.smartspace.flags", + container: "system", srcs: ["core/java/android/app/smartspace/flags.aconfig"], } @@ -1084,6 +1132,7 @@ java_aconfig_library { aconfig_declarations { name: "android.view.contentcapture.flags-aconfig", package: "android.view.contentcapture.flags", + container: "system", srcs: ["core/java/android/view/contentcapture/flags/*.aconfig"], } @@ -1098,6 +1147,7 @@ aconfig_declarations { name: "android.hardware.usb.flags-aconfig", exportable: true, package: "android.hardware.usb.flags", + container: "system", srcs: ["core/java/android/hardware/usb/flags/*.aconfig"], } @@ -1118,6 +1168,7 @@ java_aconfig_library { aconfig_declarations { name: "android.tracing.flags-aconfig", package: "android.tracing", + container: "system", srcs: ["core/java/android/tracing/flags.aconfig"], } @@ -1136,6 +1187,7 @@ cc_aconfig_library { aconfig_declarations { name: "android.appwidget.flags-aconfig", package: "android.appwidget.flags", + container: "system", srcs: ["core/java/android/appwidget/flags.aconfig"], } @@ -1149,6 +1201,7 @@ java_aconfig_library { aconfig_declarations { name: "android.server.app.flags-aconfig", package: "android.server.app", + container: "system", srcs: ["services/core/java/com/android/server/app/flags.aconfig"], } @@ -1162,6 +1215,7 @@ java_aconfig_library { aconfig_declarations { name: "android.webkit.flags-aconfig", package: "android.webkit", + container: "system", srcs: [ "core/java/android/webkit/*.aconfig", "services/core/java/com/android/server/webkit/*.aconfig", @@ -1179,6 +1233,7 @@ aconfig_declarations { name: "android.provider.flags-aconfig", exportable: true, package: "android.provider", + container: "system", srcs: ["core/java/android/provider/*.aconfig"], } @@ -1200,6 +1255,7 @@ aconfig_declarations { name: "android.speech.flags-aconfig", exportable: true, package: "android.speech.flags", + container: "system", srcs: ["core/java/android/speech/flags/*.aconfig"], } @@ -1221,6 +1277,7 @@ aconfig_declarations { name: "android.content.flags-aconfig", exportable: true, package: "android.content.flags", + container: "system", srcs: ["core/java/android/content/flags/flags.aconfig"], } @@ -1234,6 +1291,7 @@ java_aconfig_library { aconfig_declarations { name: "android.adaptiveauth.flags-aconfig", package: "android.adaptiveauth", + container: "system", srcs: ["core/java/android/adaptiveauth/*.aconfig"], } @@ -1248,6 +1306,7 @@ aconfig_declarations { name: "android.crashrecovery.flags-aconfig", exportable: true, package: "android.crashrecovery.flags", + container: "system", srcs: ["packages/CrashRecovery/aconfig/flags.aconfig"], } @@ -1275,6 +1334,7 @@ java_aconfig_library { aconfig_declarations { name: "android.net.wifi.flags-aconfig", package: "android.net.wifi.flags", + container: "system", srcs: ["wifi/*.aconfig"], } @@ -1294,6 +1354,7 @@ aconfig_declarations { name: "android.app.wearable.flags-aconfig", exportable: true, package: "android.app.wearable", + container: "system", srcs: ["core/java/android/app/wearable/*.aconfig"], } @@ -1306,6 +1367,7 @@ java_aconfig_library { aconfig_declarations { name: "com.android.internal.pm.pkg.component.flags-aconfig", package: "com.android.internal.pm.pkg.component.flags", + container: "system", srcs: ["core/java/com/android/internal/pm/pkg/component/flags/flags.aconfig"], } @@ -1326,6 +1388,7 @@ java_aconfig_library { aconfig_declarations { name: "android.systemserver.flags-aconfig", package: "android.server", + container: "system", srcs: ["services/java/com/android/server/flags.aconfig"], } @@ -1351,3 +1414,19 @@ java_aconfig_library { aconfig_declarations: "backstage_power_flags", defaults: ["framework-minus-apex-aconfig-java-defaults"], } + +// Dropbox data +aconfig_declarations { + name: "dropbox_flags", + package: "com.android.server.feature.flags", + container: "system", + srcs: [ + "services/core/java/com/android/server/feature/dropbox_flags.aconfig", + ], +} + +java_aconfig_library { + name: "dropbox_flags_lib", + aconfig_declarations: "dropbox_flags", + defaults: ["framework-minus-apex-aconfig-java-defaults"], +} diff --git a/apex/jobscheduler/framework/aconfig/job.aconfig b/apex/jobscheduler/framework/aconfig/job.aconfig index 2c1a8532568c..80db264d0f44 100644 --- a/apex/jobscheduler/framework/aconfig/job.aconfig +++ b/apex/jobscheduler/framework/aconfig/job.aconfig @@ -1,4 +1,5 @@ package: "android.app.job" +container: "system" flag { name: "enforce_minimum_time_windows" diff --git a/apex/jobscheduler/framework/java/com/android/server/job/JobSchedulerInternal.java b/apex/jobscheduler/framework/java/com/android/server/job/JobSchedulerInternal.java index ae98fe14fbe6..6c8af39015f5 100644 --- a/apex/jobscheduler/framework/java/com/android/server/job/JobSchedulerInternal.java +++ b/apex/jobscheduler/framework/java/com/android/server/job/JobSchedulerInternal.java @@ -77,12 +77,6 @@ public interface JobSchedulerInternal { @NonNull String notificationChannel, int userId, @NonNull String packageName); /** - * @return {@code true} if the given package holds the - * {@link android.Manifest.permission.RUN_BACKUP_JOBS} permission. - */ - boolean hasRunBackupJobsPermission(@NonNull String packageName, int packageUid); - - /** * Report a snapshot of sync-related jobs back to the sync manager */ JobStorePersistStats getPersistStats(); diff --git a/apex/jobscheduler/service/java/com/android/server/job/JobSchedulerService.java b/apex/jobscheduler/service/java/com/android/server/job/JobSchedulerService.java index 10162fd070bb..5d1433c815d6 100644 --- a/apex/jobscheduler/service/java/com/android/server/job/JobSchedulerService.java +++ b/apex/jobscheduler/service/java/com/android/server/job/JobSchedulerService.java @@ -4560,11 +4560,6 @@ public class JobSchedulerService extends com.android.server.SystemService } @Override - public boolean hasRunBackupJobsPermission(@NonNull String packageName, int packageUid) { - return JobSchedulerService.this.hasRunBackupJobsPermission(packageName, packageUid); - } - - @Override public JobStorePersistStats getPersistStats() { synchronized (mLock) { return new JobStorePersistStats(mJobs.getPersistStats()); @@ -4727,27 +4722,6 @@ public class JobSchedulerService extends com.android.server.SystemService } /** - * Returns whether the app holds the {@link Manifest.permission.RUN_BACKUP_JOBS} permission. - */ - private boolean hasRunBackupJobsPermission(@NonNull String packageName, int packageUid) { - // This permission is currently hidden so always return false for now (see b/331272951) - return false; - - /** - if (packageName == null) { - Slog.wtfStack(TAG, - "Expected a non-null package name when calling hasRunBackupJobsPermission"); - return false; - } - - return PermissionChecker.checkPermissionForPreflight(getTestableContext(), - android.Manifest.permission.RUN_BACKUP_JOBS, - PermissionChecker.PID_UNKNOWN, packageUid, packageName) - == PermissionChecker.PERMISSION_GRANTED; - */ - } - - /** * Binder stub trampoline implementation */ final class JobSchedulerStub extends IJobScheduler.Stub { diff --git a/apex/jobscheduler/service/java/com/android/server/job/controllers/JobStatus.java b/apex/jobscheduler/service/java/com/android/server/job/controllers/JobStatus.java index 998554324da1..7fca867356af 100644 --- a/apex/jobscheduler/service/java/com/android/server/job/controllers/JobStatus.java +++ b/apex/jobscheduler/service/java/com/android/server/job/controllers/JobStatus.java @@ -1203,14 +1203,9 @@ public final class JobStatus { return ACTIVE_INDEX; } - final boolean isEligibleAsBackupJob = false // this exemption is being disabled for now. - && job.getTriggerContentUris() != null - && job.getRequiredNetwork() != null - && !job.hasLateConstraint() - && mJobSchedulerInternal.hasRunBackupJobsPermission(sourcePackageName, sourceUid); - final boolean isBackupExempt = mHasMediaBackupExemption || isEligibleAsBackupJob; final int bucketWithBackupExemption; - if (actualBucket != RESTRICTED_INDEX && actualBucket != NEVER_INDEX && isBackupExempt) { + if (actualBucket != RESTRICTED_INDEX && actualBucket != NEVER_INDEX + && mHasMediaBackupExemption) { // Treat it as if it's at most WORKING_INDEX (lower index grants higher quota) since // media backup jobs are important to the user, and the source package may not have // been used directly in a while. diff --git a/core/api/test-current.txt b/core/api/test-current.txt index 1383096e0941..443a6c0e91e6 100644 --- a/core/api/test-current.txt +++ b/core/api/test-current.txt @@ -1769,16 +1769,14 @@ package android.hardware.input { } public final class InputManager { - method @FlaggedApi("com.android.input.flags.device_associations") @RequiresPermission("android.permission.ASSOCIATE_INPUT_DEVICE_TO_DISPLAY") public void addUniqueIdAssociationByDescriptor(@NonNull String, @NonNull String); - method @FlaggedApi("com.android.input.flags.device_associations") @RequiresPermission("android.permission.ASSOCIATE_INPUT_DEVICE_TO_DISPLAY") public void addUniqueIdAssociationByPort(@NonNull String, @NonNull String); + method public void addUniqueIdAssociation(@NonNull String, @NonNull String); method @RequiresPermission(android.Manifest.permission.REMAP_MODIFIER_KEYS) public void clearAllModifierKeyRemappings(); method @NonNull public java.util.List<java.lang.String> getKeyboardLayoutDescriptors(); method @NonNull public String getKeyboardLayoutTypeForLayoutDescriptor(@NonNull String); method @NonNull @RequiresPermission(android.Manifest.permission.REMAP_MODIFIER_KEYS) public java.util.Map<java.lang.Integer,java.lang.Integer> getModifierKeyRemapping(); method public int getMousePointerSpeed(); method @RequiresPermission(android.Manifest.permission.REMAP_MODIFIER_KEYS) public void remapModifierKey(int, int); - method @FlaggedApi("com.android.input.flags.device_associations") @RequiresPermission("android.permission.ASSOCIATE_INPUT_DEVICE_TO_DISPLAY") public void removeUniqueIdAssociationByDescriptor(@NonNull String); - method @FlaggedApi("com.android.input.flags.device_associations") @RequiresPermission("android.permission.ASSOCIATE_INPUT_DEVICE_TO_DISPLAY") public void removeUniqueIdAssociationByPort(@NonNull String); + method public void removeUniqueIdAssociation(@NonNull String); field public static final long BLOCK_UNTRUSTED_TOUCHES = 158002302L; // 0x96aec7eL } diff --git a/core/api/test-lint-baseline.txt b/core/api/test-lint-baseline.txt index e6265ae90e6c..685ea63cb432 100644 --- a/core/api/test-lint-baseline.txt +++ b/core/api/test-lint-baseline.txt @@ -977,16 +977,8 @@ RequiresPermission: android.hardware.hdmi.HdmiControlManager#setHdmiCecVersion(i Method 'setHdmiCecVersion' documentation mentions permissions already declared by @RequiresPermission RequiresPermission: android.hardware.input.InputManager#addUniqueIdAssociation(String, String): Method 'addUniqueIdAssociation' documentation mentions permissions without declaring @RequiresPermission -RequiresPermission: android.hardware.input.InputManager#addUniqueIdAssociationByDescriptor(String, String): - Method 'addUniqueIdAssociationByDescriptor' documentation mentions permissions already declared by @RequiresPermission -RequiresPermission: android.hardware.input.InputManager#addUniqueIdAssociationByPort(String, String): - Method 'addUniqueIdAssociationByPort' documentation mentions permissions already declared by @RequiresPermission RequiresPermission: android.hardware.input.InputManager#removeUniqueIdAssociation(String): Method 'removeUniqueIdAssociation' documentation mentions permissions without declaring @RequiresPermission -RequiresPermission: android.hardware.input.InputManager#removeUniqueIdAssociationByDescriptor(String): - Method 'removeUniqueIdAssociationByDescriptor' documentation mentions permissions already declared by @RequiresPermission -RequiresPermission: android.hardware.input.InputManager#removeUniqueIdAssociationByPort(String): - Method 'removeUniqueIdAssociationByPort' documentation mentions permissions already declared by @RequiresPermission RequiresPermission: android.hardware.location.GeofenceHardware#addGeofence(int, int, android.hardware.location.GeofenceHardwareRequest, android.hardware.location.GeofenceHardwareCallback): Method 'addGeofence' documentation mentions permissions without declaring @RequiresPermission RequiresPermission: android.hardware.location.GeofenceHardware#getMonitoringTypes(): diff --git a/core/java/android/adaptiveauth/flags.aconfig b/core/java/android/adaptiveauth/flags.aconfig index de4e607b50f1..b9cf29cc13dd 100644 --- a/core/java/android/adaptiveauth/flags.aconfig +++ b/core/java/android/adaptiveauth/flags.aconfig @@ -1,4 +1,5 @@ package: "android.adaptiveauth" +container: "system" flag { name: "enable_adaptive_auth" diff --git a/core/java/android/app/AppCompatTaskInfo.java b/core/java/android/app/AppCompatTaskInfo.java index 0bae5e67b87b..7724c2369954 100644 --- a/core/java/android/app/AppCompatTaskInfo.java +++ b/core/java/android/app/AppCompatTaskInfo.java @@ -16,60 +16,16 @@ package android.app; -import android.annotation.IntDef; import android.annotation.NonNull; import android.annotation.Nullable; import android.os.Parcel; import android.os.Parcelable; -import java.lang.annotation.Retention; -import java.lang.annotation.RetentionPolicy; - /** * Stores App Compat information about a particular Task. * @hide */ public class AppCompatTaskInfo implements Parcelable { - - /** - * Camera compat control isn't shown because it's not requested by heuristics. - */ - public static final int CAMERA_COMPAT_CONTROL_HIDDEN = 0; - - /** - * Camera compat control is shown with the treatment suggested. - */ - public static final int CAMERA_COMPAT_CONTROL_TREATMENT_SUGGESTED = 1; - - /** - * Camera compat control is shown to allow reverting the applied treatment. - */ - public static final int CAMERA_COMPAT_CONTROL_TREATMENT_APPLIED = 2; - - /** - * Camera compat control is dismissed by user. - */ - public static final int CAMERA_COMPAT_CONTROL_DISMISSED = 3; - - /** - * Enum for the Camera app compat control states. - */ - @Retention(RetentionPolicy.SOURCE) - @IntDef(prefix = { "CAMERA_COMPAT_CONTROL_" }, value = { - CAMERA_COMPAT_CONTROL_HIDDEN, - CAMERA_COMPAT_CONTROL_TREATMENT_SUGGESTED, - CAMERA_COMPAT_CONTROL_TREATMENT_APPLIED, - CAMERA_COMPAT_CONTROL_DISMISSED, - }) - public @interface CameraCompatControlState {}; - - /** - * State of the Camera app compat control which is used to correct stretched viewfinder - * in apps that don't handle all possible configurations and changes between them correctly. - */ - @CameraCompatControlState - public int cameraCompatControlState = CAMERA_COMPAT_CONTROL_HIDDEN; - /** * Whether the direct top activity is eligible for letterbox education. */ @@ -135,6 +91,11 @@ public class AppCompatTaskInfo implements Parcelable { */ public int topActivityLetterboxHeight; + /** + * Stores camera-related app compat information about a particular Task. + */ + public CameraCompatTaskInfo cameraCompatTaskInfo = CameraCompatTaskInfo.create(); + private AppCompatTaskInfo() { // Do nothing } @@ -167,18 +128,10 @@ public class AppCompatTaskInfo implements Parcelable { }; /** - * @return {@value true} if the task has camera compat controls. - */ - public boolean hasCameraCompatControl() { - return cameraCompatControlState != CAMERA_COMPAT_CONTROL_HIDDEN - && cameraCompatControlState != CAMERA_COMPAT_CONTROL_DISMISSED; - } - - /** * @return {@value true} if the task has some compat ui. */ public boolean hasCompatUI() { - return hasCameraCompatControl() || topActivityInSizeCompat + return cameraCompatTaskInfo.hasCameraCompatUI() || topActivityInSizeCompat || topActivityEligibleForLetterboxEducation || isLetterboxDoubleTapEnabled || topActivityEligibleForUserAspectRatioButton; @@ -208,7 +161,8 @@ public class AppCompatTaskInfo implements Parcelable { && topActivityLetterboxHorizontalPosition == that.topActivityLetterboxHorizontalPosition && isUserFullscreenOverrideEnabled == that.isUserFullscreenOverrideEnabled - && isSystemFullscreenOverrideEnabled == that.isSystemFullscreenOverrideEnabled; + && isSystemFullscreenOverrideEnabled == that.isSystemFullscreenOverrideEnabled + && cameraCompatTaskInfo.equalsForTaskOrganizer(that.cameraCompatTaskInfo); } /** @@ -229,18 +183,17 @@ public class AppCompatTaskInfo implements Parcelable { == that.topActivityLetterboxHorizontalPosition && topActivityLetterboxWidth == that.topActivityLetterboxWidth && topActivityLetterboxHeight == that.topActivityLetterboxHeight - && cameraCompatControlState == that.cameraCompatControlState && isUserFullscreenOverrideEnabled == that.isUserFullscreenOverrideEnabled - && isSystemFullscreenOverrideEnabled == that.isSystemFullscreenOverrideEnabled; + && isSystemFullscreenOverrideEnabled == that.isSystemFullscreenOverrideEnabled + && cameraCompatTaskInfo.equalsForCompatUi(that.cameraCompatTaskInfo); } /** - * Reads the TaskInfo from a parcel. + * Reads the AppCompatTaskInfo from a parcel. */ void readFromParcel(Parcel source) { topActivityInSizeCompat = source.readBoolean(); topActivityEligibleForLetterboxEducation = source.readBoolean(); - cameraCompatControlState = source.readInt(); isLetterboxDoubleTapEnabled = source.readBoolean(); topActivityEligibleForUserAspectRatioButton = source.readBoolean(); topActivityBoundsLetterboxed = source.readBoolean(); @@ -251,16 +204,16 @@ public class AppCompatTaskInfo implements Parcelable { topActivityLetterboxHeight = source.readInt(); isUserFullscreenOverrideEnabled = source.readBoolean(); isSystemFullscreenOverrideEnabled = source.readBoolean(); + cameraCompatTaskInfo = source.readTypedObject(CameraCompatTaskInfo.CREATOR); } /** - * Writes the TaskInfo to a parcel. + * Writes the AppCompatTaskInfo to a parcel. */ @Override public void writeToParcel(Parcel dest, int flags) { dest.writeBoolean(topActivityInSizeCompat); dest.writeBoolean(topActivityEligibleForLetterboxEducation); - dest.writeInt(cameraCompatControlState); dest.writeBoolean(isLetterboxDoubleTapEnabled); dest.writeBoolean(topActivityEligibleForUserAspectRatioButton); dest.writeBoolean(topActivityBoundsLetterboxed); @@ -271,6 +224,7 @@ public class AppCompatTaskInfo implements Parcelable { dest.writeInt(topActivityLetterboxHeight); dest.writeBoolean(isUserFullscreenOverrideEnabled); dest.writeBoolean(isSystemFullscreenOverrideEnabled); + dest.writeTypedObject(cameraCompatTaskInfo, flags); } @Override @@ -290,23 +244,7 @@ public class AppCompatTaskInfo implements Parcelable { + " topActivityLetterboxHeight=" + topActivityLetterboxHeight + " isUserFullscreenOverrideEnabled=" + isUserFullscreenOverrideEnabled + " isSystemFullscreenOverrideEnabled=" + isSystemFullscreenOverrideEnabled - + " cameraCompatControlState=" - + cameraCompatControlStateToString(cameraCompatControlState) + + " cameraCompatTaskInfo=" + cameraCompatTaskInfo.toString() + "}"; } - - /** Human readable version of the camera control state. */ - @NonNull - public static String cameraCompatControlStateToString( - @CameraCompatControlState int cameraCompatControlState) { - switch (cameraCompatControlState) { - case CAMERA_COMPAT_CONTROL_HIDDEN: return "hidden"; - case CAMERA_COMPAT_CONTROL_TREATMENT_SUGGESTED: return "treatment-suggested"; - case CAMERA_COMPAT_CONTROL_TREATMENT_APPLIED: return "treatment-applied"; - case CAMERA_COMPAT_CONTROL_DISMISSED: return "dismissed"; - default: - throw new AssertionError( - "Unexpected camera compat control state: " + cameraCompatControlState); - } - } } diff --git a/core/java/android/app/AppOpsManager.java b/core/java/android/app/AppOpsManager.java index 7ae514ac2491..f4d1304c7f25 100644 --- a/core/java/android/app/AppOpsManager.java +++ b/core/java/android/app/AppOpsManager.java @@ -1554,11 +1554,11 @@ public class AppOpsManager { AppProtoEnums.APP_OP_READ_SYSTEM_GRAMMATICAL_GENDER; /** - * Allows an app with a major use case of backing-up or syncing content to run longer jobs. + * This app has been removed.. * * @hide */ - public static final int OP_RUN_BACKUP_JOBS = AppProtoEnums.APP_OP_RUN_BACKUP_JOBS; + private static final int OP_DEPRECATED_4 = AppProtoEnums.APP_OP_RUN_BACKUP_JOBS; /** * Whether the app has enabled to receive the icon overlay for fetching archived apps. @@ -1738,7 +1738,6 @@ public class AppOpsManager { OPSTR_ENABLE_MOBILE_DATA_BY_USER, OPSTR_RESERVED_FOR_TESTING, OPSTR_RAPID_CLEAR_NOTIFICATIONS_BY_LISTENER, - OPSTR_RUN_BACKUP_JOBS, OPSTR_ARCHIVE_ICON_OVERLAY, OPSTR_UNARCHIVAL_CONFIRMATION, OPSTR_EMERGENCY_LOCATION, @@ -2447,11 +2446,11 @@ public class AppOpsManager { "android:read_system_grammatical_gender"; /** - * Allows an app whose primary use case is to backup or sync content to run longer jobs. + * App op has been removed. * * @hide */ - public static final String OPSTR_RUN_BACKUP_JOBS = "android:run_backup_jobs"; + public static final String OPSTR_DEPRECATED_4 = "android:deprecated_4"; /** * Allows an app to access location without the traditional location permissions and while the @@ -2578,7 +2577,6 @@ public class AppOpsManager { OP_RECEIVE_SANDBOX_TRIGGER_AUDIO, OP_MEDIA_ROUTING_CONTROL, OP_READ_SYSTEM_GRAMMATICAL_GENDER, - OP_RUN_BACKUP_JOBS, OP_ARCHIVE_ICON_OVERLAY, OP_UNARCHIVAL_CONFIRMATION, }; @@ -3036,8 +3034,8 @@ public class AppOpsManager { // will make it an app-op permission in the future. // .setPermission(Manifest.permission.READ_SYSTEM_GRAMMATICAL_GENDER) .build(), - new AppOpInfo.Builder(OP_RUN_BACKUP_JOBS, OPSTR_RUN_BACKUP_JOBS, "RUN_BACKUP_JOBS") - .setPermission(Manifest.permission.RUN_BACKUP_JOBS).build(), + new AppOpInfo.Builder(OP_DEPRECATED_4, OPSTR_DEPRECATED_4, "DEPRECATED_4") + .setDefaultMode(AppOpsManager.MODE_IGNORED).build(), new AppOpInfo.Builder(OP_ARCHIVE_ICON_OVERLAY, OPSTR_ARCHIVE_ICON_OVERLAY, "ARCHIVE_ICON_OVERLAY") .setDefaultMode(MODE_ALLOWED).build(), diff --git a/core/java/android/app/CameraCompatTaskInfo.java b/core/java/android/app/CameraCompatTaskInfo.java new file mode 100644 index 000000000000..1e116b7a759c --- /dev/null +++ b/core/java/android/app/CameraCompatTaskInfo.java @@ -0,0 +1,225 @@ +/* + * Copyright (C) 2024 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 android.app; + +import android.annotation.IntDef; +import android.annotation.NonNull; +import android.annotation.Nullable; +import android.os.Parcel; +import android.os.Parcelable; + +import java.lang.annotation.Retention; +import java.lang.annotation.RetentionPolicy; + +/** + * Stores Camera Compat information about a particular Task. + * @hide + */ +public class CameraCompatTaskInfo implements Parcelable { + /** + * Camera compat control isn't shown because it's not requested by heuristics. + */ + public static final int CAMERA_COMPAT_CONTROL_HIDDEN = 0; + + /** + * Camera compat control is shown with the treatment suggested. + */ + public static final int CAMERA_COMPAT_CONTROL_TREATMENT_SUGGESTED = 1; + + /** + * Camera compat control is shown to allow reverting the applied treatment. + */ + public static final int CAMERA_COMPAT_CONTROL_TREATMENT_APPLIED = 2; + + /** + * Camera compat control is dismissed by user. + */ + public static final int CAMERA_COMPAT_CONTROL_DISMISSED = 3; + + /** + * Enum for the Camera app compat control states. + */ + @Retention(RetentionPolicy.SOURCE) + @IntDef(prefix = { "CAMERA_COMPAT_CONTROL_" }, value = { + CAMERA_COMPAT_CONTROL_HIDDEN, + CAMERA_COMPAT_CONTROL_TREATMENT_SUGGESTED, + CAMERA_COMPAT_CONTROL_TREATMENT_APPLIED, + CAMERA_COMPAT_CONTROL_DISMISSED, + }) + public @interface CameraCompatControlState {} + + /** + * State of the Camera app compat control which is used to correct stretched viewfinder + * in apps that don't handle all possible configurations and changes between them correctly. + */ + @CameraCompatControlState + public int cameraCompatControlState = CAMERA_COMPAT_CONTROL_HIDDEN; + + /** + * The value to use when no camera compat treatment should be applied to a windowed task. + */ + public static final int CAMERA_COMPAT_FREEFORM_NONE = 0; + + /** + * The value to use when portrait camera compat treatment should be applied to a windowed task. + */ + public static final int CAMERA_COMPAT_FREEFORM_PORTRAIT = 1; + + /** + * The value to use when landscape camera compat treatment should be applied to a windowed task. + */ + public static final int CAMERA_COMPAT_FREEFORM_LANDSCAPE = 2; + + @Retention(RetentionPolicy.SOURCE) + @IntDef(prefix = { "CAMERA_COMPAT_FREEFORM_" }, value = { + CAMERA_COMPAT_FREEFORM_NONE, + CAMERA_COMPAT_FREEFORM_PORTRAIT, + CAMERA_COMPAT_FREEFORM_LANDSCAPE, + }) + public @interface FreeformCameraCompatMode {} + + /** + * Whether the camera activity is letterboxed in freeform windowing mode to emulate expected + * aspect ratio for fixed-orientation apps. + * + * <p>This field is used by the WM and the camera framework, to coordinate camera compat mode + * setup. + */ + @FreeformCameraCompatMode + public int freeformCameraCompatMode; + + private CameraCompatTaskInfo() { + // Do nothing + } + + @NonNull + static CameraCompatTaskInfo create() { + return new CameraCompatTaskInfo(); + } + + private CameraCompatTaskInfo(Parcel source) { + readFromParcel(source); + } + + @Override + public int describeContents() { + return 0; + } + + public static final Creator<CameraCompatTaskInfo> CREATOR = + new Creator<>() { + @Override + public CameraCompatTaskInfo createFromParcel(Parcel in) { + return new CameraCompatTaskInfo(in); + } + + @Override + public CameraCompatTaskInfo[] newArray(int size) { + return new CameraCompatTaskInfo[size]; + } + }; + + /** + * Reads the CameraCompatTaskInfo from a parcel. + */ + void readFromParcel(Parcel source) { + cameraCompatControlState = source.readInt(); + freeformCameraCompatMode = source.readInt(); + } + + /** + * Writes the CameraCompatTaskInfo to a parcel. + */ + @Override + public void writeToParcel(Parcel dest, int flags) { + dest.writeInt(cameraCompatControlState); + dest.writeInt(freeformCameraCompatMode); + } + + /** + * @return {@value true} if the task has camera compat controls. + */ + public boolean hasCameraCompatControl() { + return cameraCompatControlState != CAMERA_COMPAT_CONTROL_HIDDEN + && cameraCompatControlState != CAMERA_COMPAT_CONTROL_DISMISSED; + } + + /** + * @return {@value true} if the task has some compat ui. + */ + public boolean hasCameraCompatUI() { + return hasCameraCompatControl(); + } + + /** + * @return {@code true} if the camera compat parameters that are important for task organizers + * are equal. + */ + public boolean equalsForTaskOrganizer(@Nullable CameraCompatTaskInfo that) { + if (that == null) { + return false; + } + return freeformCameraCompatMode == that.freeformCameraCompatMode; + } + + /** + * @return {@code true} if parameters that are important for size compat have changed. + */ + public boolean equalsForCompatUi(@Nullable CameraCompatTaskInfo that) { + if (that == null) { + return false; + } + return cameraCompatControlState == that.cameraCompatControlState + && freeformCameraCompatMode == that.freeformCameraCompatMode; + } + + @Override + public String toString() { + return "CameraCompatTaskInfo { cameraCompatControlState=" + + cameraCompatControlStateToString(cameraCompatControlState) + + " freeformCameraCompatMode=" + + freeformCameraCompatModeToString(freeformCameraCompatMode) + + "}"; + } + + /** Human readable version of the camera control state. */ + @NonNull + public static String cameraCompatControlStateToString( + @CameraCompatControlState int cameraCompatControlState) { + return switch (cameraCompatControlState) { + case CAMERA_COMPAT_CONTROL_HIDDEN -> "hidden"; + case CAMERA_COMPAT_CONTROL_TREATMENT_SUGGESTED -> "treatment-suggested"; + case CAMERA_COMPAT_CONTROL_TREATMENT_APPLIED -> "treatment-applied"; + case CAMERA_COMPAT_CONTROL_DISMISSED -> "dismissed"; + default -> throw new AssertionError( + "Unexpected camera compat control state: " + cameraCompatControlState); + }; + } + + /** Human readable version of the freeform camera compat mode. */ + @NonNull + public static String freeformCameraCompatModeToString( + @FreeformCameraCompatMode int freeformCameraCompatMode) { + return switch (freeformCameraCompatMode) { + case CAMERA_COMPAT_FREEFORM_NONE -> "inactive"; + case CAMERA_COMPAT_FREEFORM_PORTRAIT -> "portrait"; + case CAMERA_COMPAT_FREEFORM_LANDSCAPE -> "landscape"; + default -> throw new AssertionError( + "Unexpected camera compat mode: " + freeformCameraCompatMode); + }; + } +} diff --git a/core/java/android/app/Notification.java b/core/java/android/app/Notification.java index 6ff1bfc5291c..f7e0e9f6a416 100644 --- a/core/java/android/app/Notification.java +++ b/core/java/android/app/Notification.java @@ -17,15 +17,14 @@ package android.app; import static android.annotation.Dimension.DP; +import static android.app.Flags.evenlyDividedCallStyleActionLayout; +import static android.app.Flags.updateRankingTime; import static android.app.admin.DevicePolicyResources.Drawables.Source.NOTIFICATION; import static android.app.admin.DevicePolicyResources.Drawables.Style.SOLID_COLORED; import static android.app.admin.DevicePolicyResources.Drawables.WORK_PROFILE_ICON; import static android.app.admin.DevicePolicyResources.UNDEFINED; import static android.graphics.drawable.Icon.TYPE_URI; import static android.graphics.drawable.Icon.TYPE_URI_ADAPTIVE_BITMAP; -import static android.app.Flags.cleanUpSpansAndNewLines; -import static android.app.Flags.evenlyDividedCallStyleActionLayout; -import static android.app.Flags.updateRankingTime; import static java.util.Objects.requireNonNull; @@ -3090,6 +3089,25 @@ public class Notification implements Parcelable } /** + * @hide + */ + public int loadHeaderAppIconRes(Context context) { + ApplicationInfo info = null; + if (extras.containsKey(EXTRA_BUILDER_APPLICATION_INFO)) { + info = extras.getParcelable( + EXTRA_BUILDER_APPLICATION_INFO, + ApplicationInfo.class); + } + if (info == null) { + info = context.getApplicationInfo(); + } + if (info != null) { + return info.icon; + } + return 0; + } + + /** * Removes heavyweight parts of the Notification object for archival or for sending to * listeners when the full contents are not necessary. * @hide @@ -5963,12 +5981,21 @@ public class Notification implements Parcelable } private void bindSmallIcon(RemoteViews contentView, StandardTemplateParams p) { - if (mN.mSmallIcon == null && mN.icon != 0) { + if (Flags.notificationsUseAppIcon()) { + // Override small icon with app icon + mN.mSmallIcon = Icon.createWithResource(mContext, + mN.loadHeaderAppIconRes(mContext)); + } else if (mN.mSmallIcon == null && mN.icon != 0) { mN.mSmallIcon = Icon.createWithResource(mContext, mN.icon); } + contentView.setImageViewIcon(R.id.icon, mN.mSmallIcon); contentView.setInt(R.id.icon, "setImageLevel", mN.iconLevel); - processSmallIconColor(mN.mSmallIcon, contentView, p); + + // Don't change color if we're using the app icon. + if (!Flags.notificationsUseAppIcon()) { + processSmallIconColor(mN.mSmallIcon, contentView, p); + } } /** @@ -6804,7 +6831,8 @@ public class Notification implements Parcelable */ private void processSmallIconColor(Icon smallIcon, RemoteViews contentView, StandardTemplateParams p) { - boolean colorable = !isLegacy() || getColorUtil().isGrayscaleIcon(mContext, smallIcon); + boolean colorable = !isLegacy() || getColorUtil().isGrayscaleIcon(mContext, + smallIcon); int color = getSmallIconColor(p); contentView.setInt(R.id.icon, "setBackgroundColor", getBackgroundColor(p)); diff --git a/core/java/android/app/WindowConfiguration.java b/core/java/android/app/WindowConfiguration.java index aa3b71a28eba..a12faca71bf6 100644 --- a/core/java/android/app/WindowConfiguration.java +++ b/core/java/android/app/WindowConfiguration.java @@ -100,9 +100,6 @@ public class WindowConfiguration implements Parcelable, Comparable<WindowConfigu /** The current windowing mode of the configuration. */ private @WindowingMode int mWindowingMode; - /** The display windowing mode of the configuration */ - private @WindowingMode int mDisplayWindowingMode; - /** Windowing mode is currently not defined. */ public static final int WINDOWING_MODE_UNDEFINED = 0; /** Occupies the full area of the screen or the parent container. */ @@ -193,12 +190,9 @@ public class WindowConfiguration implements Parcelable, Comparable<WindowConfigu /** Bit that indicates that the {@link #mRotation} changed. * @hide */ public static final int WINDOW_CONFIG_ROTATION = 1 << 6; - /** Bit that indicates that the {@link #mDisplayWindowingMode} changed. - * @hide */ - public static final int WINDOW_CONFIG_DISPLAY_WINDOWING_MODE = 1 << 7; /** Bit that indicates that the apparent-display changed. * @hide */ - public static final int WINDOW_CONFIG_DISPLAY_ROTATION = 1 << 8; + public static final int WINDOW_CONFIG_DISPLAY_ROTATION = 1 << 7; /** @hide */ @IntDef(flag = true, prefix = { "WINDOW_CONFIG_" }, value = { @@ -209,7 +203,6 @@ public class WindowConfiguration implements Parcelable, Comparable<WindowConfigu WINDOW_CONFIG_ACTIVITY_TYPE, WINDOW_CONFIG_ALWAYS_ON_TOP, WINDOW_CONFIG_ROTATION, - WINDOW_CONFIG_DISPLAY_WINDOWING_MODE, WINDOW_CONFIG_DISPLAY_ROTATION, }) public @interface WindowConfig {} @@ -237,7 +230,6 @@ public class WindowConfiguration implements Parcelable, Comparable<WindowConfigu dest.writeInt(mActivityType); dest.writeInt(mAlwaysOnTop); dest.writeInt(mRotation); - dest.writeInt(mDisplayWindowingMode); dest.writeInt(mDisplayRotation); } @@ -250,7 +242,6 @@ public class WindowConfiguration implements Parcelable, Comparable<WindowConfigu mActivityType = source.readInt(); mAlwaysOnTop = source.readInt(); mRotation = source.readInt(); - mDisplayWindowingMode = source.readInt(); mDisplayRotation = source.readInt(); } @@ -411,17 +402,6 @@ public class WindowConfiguration implements Parcelable, Comparable<WindowConfigu return mWindowingMode; } - /** @hide */ - public void setDisplayWindowingMode(@WindowingMode int windowingMode) { - mDisplayWindowingMode = windowingMode; - } - - /** @hide */ - @WindowingMode - public int getDisplayWindowingMode() { - return mDisplayWindowingMode; - } - public void setActivityType(@ActivityType int activityType) { if (mActivityType == activityType) { return; @@ -453,7 +433,6 @@ public class WindowConfiguration implements Parcelable, Comparable<WindowConfigu setActivityType(other.mActivityType); setAlwaysOnTop(other.mAlwaysOnTop); setRotation(other.mRotation); - setDisplayWindowingMode(other.mDisplayWindowingMode); } /** Set this object to completely undefined. @@ -472,7 +451,6 @@ public class WindowConfiguration implements Parcelable, Comparable<WindowConfigu setActivityType(ACTIVITY_TYPE_UNDEFINED); setAlwaysOnTop(ALWAYS_ON_TOP_UNDEFINED); setRotation(ROTATION_UNDEFINED); - setDisplayWindowingMode(WINDOWING_MODE_UNDEFINED); } /** @hide */ @@ -543,11 +521,6 @@ public class WindowConfiguration implements Parcelable, Comparable<WindowConfigu changed |= WINDOW_CONFIG_ROTATION; setRotation(delta.mRotation); } - if (delta.mDisplayWindowingMode != WINDOWING_MODE_UNDEFINED - && mDisplayWindowingMode != delta.mDisplayWindowingMode) { - changed |= WINDOW_CONFIG_DISPLAY_WINDOWING_MODE; - setDisplayWindowingMode(delta.mDisplayWindowingMode); - } if (delta.mDisplayRotation != ROTATION_UNDEFINED && delta.mDisplayRotation != mDisplayRotation) { changed |= WINDOW_CONFIG_DISPLAY_ROTATION; @@ -582,9 +555,6 @@ public class WindowConfiguration implements Parcelable, Comparable<WindowConfigu if ((mask & WINDOW_CONFIG_ROTATION) != 0) { setRotation(delta.mRotation); } - if ((mask & WINDOW_CONFIG_DISPLAY_WINDOWING_MODE) != 0) { - setDisplayWindowingMode(delta.mDisplayWindowingMode); - } if ((mask & WINDOW_CONFIG_DISPLAY_ROTATION) != 0) { setDisplayRotation(delta.mDisplayRotation); } @@ -639,11 +609,6 @@ public class WindowConfiguration implements Parcelable, Comparable<WindowConfigu changes |= WINDOW_CONFIG_ROTATION; } - if ((compareUndefined || other.mDisplayWindowingMode != WINDOWING_MODE_UNDEFINED) - && mDisplayWindowingMode != other.mDisplayWindowingMode) { - changes |= WINDOW_CONFIG_DISPLAY_WINDOWING_MODE; - } - if ((compareUndefined || other.mDisplayRotation != ROTATION_UNDEFINED) && mDisplayRotation != other.mDisplayRotation) { changes |= WINDOW_CONFIG_DISPLAY_ROTATION; @@ -697,8 +662,6 @@ public class WindowConfiguration implements Parcelable, Comparable<WindowConfigu n = mRotation - that.mRotation; if (n != 0) return n; - n = mDisplayWindowingMode - that.mDisplayWindowingMode; - if (n != 0) return n; n = mDisplayRotation - that.mDisplayRotation; if (n != 0) return n; @@ -728,7 +691,6 @@ public class WindowConfiguration implements Parcelable, Comparable<WindowConfigu result = 31 * result + mActivityType; result = 31 * result + mAlwaysOnTop; result = 31 * result + mRotation; - result = 31 * result + mDisplayWindowingMode; result = 31 * result + mDisplayRotation; return result; } @@ -742,7 +704,6 @@ public class WindowConfiguration implements Parcelable, Comparable<WindowConfigu + " mDisplayRotation=" + (mRotation == ROTATION_UNDEFINED ? "undefined" : rotationToString(mDisplayRotation)) + " mWindowingMode=" + windowingModeToString(mWindowingMode) - + " mDisplayWindowingMode=" + windowingModeToString(mDisplayWindowingMode) + " mActivityType=" + activityTypeToString(mActivityType) + " mAlwaysOnTop=" + alwaysOnTopToString(mAlwaysOnTop) + " mRotation=" + (mRotation == ROTATION_UNDEFINED @@ -818,16 +779,6 @@ public class WindowConfiguration implements Parcelable, Comparable<WindowConfigu } /** - * Returns true if the activities associated with this window configuration display a decor - * view. - * @hide - */ - public boolean hasWindowDecorCaption() { - return mActivityType == ACTIVITY_TYPE_STANDARD && (mWindowingMode == WINDOWING_MODE_FREEFORM - || mDisplayWindowingMode == WINDOWING_MODE_FREEFORM); - } - - /** * Returns true if the tasks associated with this window configuration can be resized * independently of their parent container. * @hide diff --git a/core/java/android/app/activity_manager.aconfig b/core/java/android/app/activity_manager.aconfig index e751bd28cff1..e4425ca1e8a5 100644 --- a/core/java/android/app/activity_manager.aconfig +++ b/core/java/android/app/activity_manager.aconfig @@ -1,4 +1,5 @@ package: "android.app" +container: "system" flag { namespace: "system_performance" diff --git a/core/java/android/app/admin/flags/flags.aconfig b/core/java/android/app/admin/flags/flags.aconfig index ac843cbfbfac..31c9a258da56 100644 --- a/core/java/android/app/admin/flags/flags.aconfig +++ b/core/java/android/app/admin/flags/flags.aconfig @@ -2,6 +2,7 @@ # proto-message: flag_declarations package: "android.app.admin.flags" +container: "system" flag { name: "policy_engine_migration_v2_enabled" @@ -282,3 +283,13 @@ flag { purpose: PURPOSE_BUGFIX } } + +flag { + name: "headless_single_user_fixes" + namespace: "enterprise" + description: "Various fixes for headless single user mode" + bug: "289515470" + metadata { + purpose: PURPOSE_BUGFIX + } +} diff --git a/core/java/android/app/background_install_control_manager.aconfig b/core/java/android/app/background_install_control_manager.aconfig index 5f3bb0745b08..d29c5b58092d 100644 --- a/core/java/android/app/background_install_control_manager.aconfig +++ b/core/java/android/app/background_install_control_manager.aconfig @@ -1,4 +1,5 @@ package: "android.app" +container: "system" flag { namespace: "preload_safety" diff --git a/core/java/android/app/contextualsearch/flags.aconfig b/core/java/android/app/contextualsearch/flags.aconfig index 5ab07620bc81..3385b2b42074 100644 --- a/core/java/android/app/contextualsearch/flags.aconfig +++ b/core/java/android/app/contextualsearch/flags.aconfig @@ -1,4 +1,5 @@ package: "android.app.contextualsearch.flags" +container: "system" flag { name: "enable_service" diff --git a/core/java/android/app/grammatical_inflection_manager.aconfig b/core/java/android/app/grammatical_inflection_manager.aconfig index 0d7bf65215a0..ea494f45c48c 100644 --- a/core/java/android/app/grammatical_inflection_manager.aconfig +++ b/core/java/android/app/grammatical_inflection_manager.aconfig @@ -1,4 +1,5 @@ package: "android.app" +container: "system" flag { name: "system_terms_of_address_enabled" diff --git a/core/java/android/app/multitasking.aconfig b/core/java/android/app/multitasking.aconfig index dbf3173a4ee6..9a645192a155 100644 --- a/core/java/android/app/multitasking.aconfig +++ b/core/java/android/app/multitasking.aconfig @@ -1,4 +1,5 @@ package: "android.app" +container: "system" flag { name: "enable_pip_ui_state_callback_on_entering" diff --git a/core/java/android/app/network-policy.aconfig b/core/java/android/app/network-policy.aconfig index 88f386f6025d..e7b02a76ef68 100644 --- a/core/java/android/app/network-policy.aconfig +++ b/core/java/android/app/network-policy.aconfig @@ -1,4 +1,5 @@ package: "android.app" +container: "system" flag { namespace: "backstage_power" diff --git a/core/java/android/app/notification.aconfig b/core/java/android/app/notification.aconfig index 250953e61137..e694ccca2b05 100644 --- a/core/java/android/app/notification.aconfig +++ b/core/java/android/app/notification.aconfig @@ -1,4 +1,9 @@ package: "android.app" +container: "system" + +# Note: When adding a new flag here, consider including the word "notification(s)" in the flag name +# when appropriate, as it's not currently part of the namespace so it may not be obvious what the +# flag relates to. flag { name: "modes_api" @@ -41,6 +46,13 @@ flag { } flag { + name: "notifications_use_app_icon" + namespace: "systemui" + description: "Experiment to replace the small icon in a notification with the app icon." + bug: "335211019" +} + +flag { name: "keyguard_private_notifications" namespace: "systemui" description: "Fixes the behavior of KeyguardManager#setPrivateNotificationsAllowed()" diff --git a/core/java/android/app/ondeviceintelligence/Feature.java b/core/java/android/app/ondeviceintelligence/Feature.java index fd0379a046cc..bcc56073e51c 100644 --- a/core/java/android/app/ondeviceintelligence/Feature.java +++ b/core/java/android/app/ondeviceintelligence/Feature.java @@ -137,8 +137,8 @@ public final class Feature implements Parcelable { if (mModelName != null) flg |= 0x4; dest.writeByte(flg); dest.writeInt(mId); - if (mName != null) dest.writeString8(mName); - if (mModelName != null) dest.writeString8(mModelName); + if (mName != null) dest.writeString(mName); + if (mModelName != null) dest.writeString(mModelName); dest.writeInt(mType); dest.writeInt(mVariant); dest.writeTypedObject(mFeatureParams, flags); diff --git a/core/java/android/app/ondeviceintelligence/flags/ondevice_intelligence.aconfig b/core/java/android/app/ondeviceintelligence/flags/ondevice_intelligence.aconfig index dd9210faa10c..8b6441ae5a7c 100644 --- a/core/java/android/app/ondeviceintelligence/flags/ondevice_intelligence.aconfig +++ b/core/java/android/app/ondeviceintelligence/flags/ondevice_intelligence.aconfig @@ -1,4 +1,5 @@ package: "android.app.ondeviceintelligence.flags" +container: "system" flag { name: "enable_on_device_intelligence" diff --git a/core/java/android/app/pinner-client.aconfig b/core/java/android/app/pinner-client.aconfig index 0f7fa14d9b6a..696fd3859184 100644 --- a/core/java/android/app/pinner-client.aconfig +++ b/core/java/android/app/pinner-client.aconfig @@ -1,4 +1,5 @@ package: "android.app" +container: "system" flag { namespace: "system_performance" diff --git a/core/java/android/app/smartspace/flags.aconfig b/core/java/android/app/smartspace/flags.aconfig index e90ba67fe6dd..df7192426934 100644 --- a/core/java/android/app/smartspace/flags.aconfig +++ b/core/java/android/app/smartspace/flags.aconfig @@ -1,4 +1,5 @@ package: "android.app.smartspace.flags" +container: "system" flag { name: "remote_views" diff --git a/core/java/android/app/ui_mode_manager.aconfig b/core/java/android/app/ui_mode_manager.aconfig index 27a38cc2bfd6..9f44a4d5ee01 100644 --- a/core/java/android/app/ui_mode_manager.aconfig +++ b/core/java/android/app/ui_mode_manager.aconfig @@ -1,4 +1,5 @@ package: "android.app" +container: "system" flag { namespace: "systemui" diff --git a/core/java/android/app/usage/flags.aconfig b/core/java/android/app/usage/flags.aconfig index 9a2d2e5d8319..c7b168aaf81d 100644 --- a/core/java/android/app/usage/flags.aconfig +++ b/core/java/android/app/usage/flags.aconfig @@ -1,4 +1,5 @@ package: "android.app.usage" +container: "system" flag { name: "user_interaction_type_api" diff --git a/core/java/android/app/wearable/flags.aconfig b/core/java/android/app/wearable/flags.aconfig index d1d7b5d85e2d..b68bafe279bf 100644 --- a/core/java/android/app/wearable/flags.aconfig +++ b/core/java/android/app/wearable/flags.aconfig @@ -1,4 +1,5 @@ package: "android.app.wearable" +container: "system" flag { name: "enable_unsupported_operation_status_code" diff --git a/core/java/android/appwidget/flags.aconfig b/core/java/android/appwidget/flags.aconfig index 765c802c2df3..374be6fd2272 100644 --- a/core/java/android/appwidget/flags.aconfig +++ b/core/java/android/appwidget/flags.aconfig @@ -1,4 +1,5 @@ package: "android.appwidget.flags" +container: "system" flag { name: "generated_previews" diff --git a/core/java/android/companion/flags.aconfig b/core/java/android/companion/flags.aconfig index ecc5e1bd194f..84588577b6d6 100644 --- a/core/java/android/companion/flags.aconfig +++ b/core/java/android/companion/flags.aconfig @@ -1,4 +1,5 @@ package: "android.companion" +container: "system" flag { name: "new_association_builder" diff --git a/core/java/android/companion/virtual/flags.aconfig b/core/java/android/companion/virtual/flags.aconfig index e6649df26158..3e23762a4f70 100644 --- a/core/java/android/companion/virtual/flags.aconfig +++ b/core/java/android/companion/virtual/flags.aconfig @@ -8,6 +8,7 @@ # instead. package: "android.companion.virtual.flags" +container: "system" flag { name: "enable_native_vdm" diff --git a/core/java/android/companion/virtual/flags/flags.aconfig b/core/java/android/companion/virtual/flags/flags.aconfig index 2904e7c989e8..006226eb8c31 100644 --- a/core/java/android/companion/virtual/flags/flags.aconfig +++ b/core/java/android/companion/virtual/flags/flags.aconfig @@ -14,6 +14,7 @@ # limitations under the License. package: "android.companion.virtualdevice.flags" +container: "system" flag { namespace: "virtual_devices" diff --git a/core/java/android/content/IntentFilter.java b/core/java/android/content/IntentFilter.java index e2907224d66e..86d061cecb88 100644 --- a/core/java/android/content/IntentFilter.java +++ b/core/java/android/content/IntentFilter.java @@ -21,6 +21,9 @@ import android.annotation.IntDef; import android.annotation.NonNull; import android.annotation.Nullable; import android.annotation.SystemApi; +import android.compat.annotation.ChangeId; +import android.compat.annotation.Disabled; +import android.compat.annotation.Overridable; import android.compat.annotation.UnsupportedAppUsage; import android.content.pm.Flags; import android.net.Uri; @@ -186,6 +189,18 @@ public class IntentFilter implements Parcelable { private static final boolean[] EMPTY_BOOLEAN_ARRAY = new boolean[0]; /** + * An intent with action set as null used to always pass the action test during intent + * filter matching. This causes a lot of confusion and unexpected intent matches. + * Null action intents should be blocked when the intent sender application targets V or higher. + * + * @hide + */ + @ChangeId + @Disabled + @Overridable + public static final long BLOCK_NULL_ACTION_INTENTS = 293560872; + + /** * The filter {@link #setPriority} value at which system high-priority * receivers are placed; that is, receivers that should execute before * application code. Applications should never use filters with this or diff --git a/core/java/android/content/flags/flags.aconfig b/core/java/android/content/flags/flags.aconfig index 27bce5bb83dd..aac04b3a9d15 100644 --- a/core/java/android/content/flags/flags.aconfig +++ b/core/java/android/content/flags/flags.aconfig @@ -1,4 +1,5 @@ package: "android.content.flags" +container: "system" flag { name: "enable_bind_package_isolated_process" diff --git a/core/java/android/content/pm/PackageManager.java b/core/java/android/content/pm/PackageManager.java index 4c0da7c98488..f5bff9dc1d0e 100644 --- a/core/java/android/content/pm/PackageManager.java +++ b/core/java/android/content/pm/PackageManager.java @@ -4844,6 +4844,16 @@ public abstract class PackageManager { public static final String FEATURE_ROTARY_ENCODER_LOW_RES = "android.hardware.rotaryencoder.lowres"; + /** + * Feature for {@link #getSystemAvailableFeatures} and {@link #hasSystemFeature}: The device has + * support for contextual search helper. + * + * @hide + */ + @SdkConstant(SdkConstantType.FEATURE) + public static final String FEATURE_CONTEXTUAL_SEARCH_HELPER = + "android.software.contextualsearch"; + /** @hide */ public static final boolean APP_ENUMERATION_ENABLED_BY_DEFAULT = true; diff --git a/core/java/android/content/pm/flags.aconfig b/core/java/android/content/pm/flags.aconfig index cde565b3f66e..6158917cc7df 100644 --- a/core/java/android/content/pm/flags.aconfig +++ b/core/java/android/content/pm/flags.aconfig @@ -1,4 +1,5 @@ package: "android.content.pm" +container: "system" flag { name: "quarantined_enabled" diff --git a/core/java/android/content/pm/multiuser.aconfig b/core/java/android/content/pm/multiuser.aconfig index 321e539816b2..6d3a56dcf14a 100644 --- a/core/java/android/content/pm/multiuser.aconfig +++ b/core/java/android/content/pm/multiuser.aconfig @@ -1,4 +1,5 @@ package: "android.multiuser" +container: "system" flag { name: "save_global_and_guest_restrictions_on_system_user_xml" diff --git a/core/java/android/content/res/flags.aconfig b/core/java/android/content/res/flags.aconfig index 8f5c912d8c03..a475cc85e921 100644 --- a/core/java/android/content/res/flags.aconfig +++ b/core/java/android/content/res/flags.aconfig @@ -1,4 +1,5 @@ package: "android.content.res" +container: "system" flag { name: "default_locale" diff --git a/core/java/android/credentials/flags.aconfig b/core/java/android/credentials/flags.aconfig index d0773297a4a0..d2435757756c 100644 --- a/core/java/android/credentials/flags.aconfig +++ b/core/java/android/credentials/flags.aconfig @@ -1,4 +1,5 @@ package: "android.credentials.flags" +container: "system" flag { namespace: "credential_manager" diff --git a/core/java/android/database/sqlite/flags.aconfig b/core/java/android/database/sqlite/flags.aconfig index 7ecffaf01549..3073e25d45b4 100644 --- a/core/java/android/database/sqlite/flags.aconfig +++ b/core/java/android/database/sqlite/flags.aconfig @@ -1,4 +1,5 @@ package: "android.database.sqlite" +container: "system" flag { name: "sqlite_apis_35" diff --git a/core/java/android/hardware/biometrics/flags.aconfig b/core/java/android/hardware/biometrics/flags.aconfig index 9836eece19fe..4284ad09e251 100644 --- a/core/java/android/hardware/biometrics/flags.aconfig +++ b/core/java/android/hardware/biometrics/flags.aconfig @@ -1,4 +1,5 @@ package: "android.hardware.biometrics" +container: "system" flag { name: "last_authentication_time" diff --git a/core/java/android/hardware/devicestate/feature/flags.aconfig b/core/java/android/hardware/devicestate/feature/flags.aconfig index e474603f2b03..12d3f94ec982 100644 --- a/core/java/android/hardware/devicestate/feature/flags.aconfig +++ b/core/java/android/hardware/devicestate/feature/flags.aconfig @@ -1,4 +1,5 @@ package: "android.hardware.devicestate.feature.flags" +container: "system" flag { name: "device_state_property_api" diff --git a/core/java/android/hardware/flags/overlayproperties_flags.aconfig b/core/java/android/hardware/flags/overlayproperties_flags.aconfig index 1165e650f469..6c86108c4034 100644 --- a/core/java/android/hardware/flags/overlayproperties_flags.aconfig +++ b/core/java/android/hardware/flags/overlayproperties_flags.aconfig @@ -1,4 +1,5 @@ package: "android.hardware.flags" +container: "system" flag { name: "overlayproperties_class_api" diff --git a/core/java/android/hardware/input/IInputManager.aidl b/core/java/android/hardware/input/IInputManager.aidl index 2d474d6345e2..1c37aa25af5f 100644 --- a/core/java/android/hardware/input/IInputManager.aidl +++ b/core/java/android/hardware/input/IInputManager.aidl @@ -165,17 +165,10 @@ interface IInputManager { // static association for the cleared input port will be restored. void removePortAssociation(in String inputPort); - // Add a runtime association between the input device and display, using device's descriptor. - void addUniqueIdAssociationByDescriptor(in String inputDeviceDescriptor, - in String displayUniqueId); - // Remove the runtime association between the input device and display, using device's - // descriptor. - void removeUniqueIdAssociationByDescriptor(in String inputDeviceDescriptor); - - // Add a runtime association between the input device and display, using device's port. - void addUniqueIdAssociationByPort(in String inputPort, in String displayUniqueId); - // Remove the runtime association between the input device and display, using device's port. - void removeUniqueIdAssociationByPort(in String inputPort); + // Add a runtime association between the input device and display. + void addUniqueIdAssociation(in String inputPort, in String displayUniqueId); + // Remove the runtime association between the input device and display. + void removeUniqueIdAssociation(in String inputPort); InputSensorInfo[] getSensorList(int deviceId); diff --git a/core/java/android/hardware/input/InputManager.java b/core/java/android/hardware/input/InputManager.java index 4dda2c7c9805..f94915876a2f 100644 --- a/core/java/android/hardware/input/InputManager.java +++ b/core/java/android/hardware/input/InputManager.java @@ -17,7 +17,6 @@ package android.hardware.input; import static com.android.input.flags.Flags.FLAG_INPUT_DEVICE_VIEW_BEHAVIOR_API; -import static com.android.input.flags.Flags.FLAG_DEVICE_ASSOCIATIONS; import static com.android.hardware.input.Flags.keyboardLayoutPreviewFlag; import android.Manifest; @@ -1055,14 +1054,13 @@ public final class InputManager { /** * Add a runtime association between the input port and the display port. This overrides any * static associations. - * @param inputPort the port of the input device - * @param displayPort the physical port of the associated display + * @param inputPort The port of the input device. + * @param displayPort The physical port of the associated display. * <p> * Requires {@link android.Manifest.permission#ASSOCIATE_INPUT_DEVICE_TO_DISPLAY}. * </p> * @hide */ - @RequiresPermission(android.Manifest.permission.ASSOCIATE_INPUT_DEVICE_TO_DISPLAY) public void addPortAssociation(@NonNull String inputPort, int displayPort) { try { mIm.addPortAssociation(inputPort, displayPort); @@ -1074,13 +1072,12 @@ public final class InputManager { /** * Remove the runtime association between the input port and the display port. Any existing * static association for the cleared input port will be restored. - * @param inputPort the port of the input device to be cleared + * @param inputPort The port of the input device to be cleared. * <p> * Requires {@link android.Manifest.permission#ASSOCIATE_INPUT_DEVICE_TO_DISPLAY}. * </p> * @hide */ - @RequiresPermission(android.Manifest.permission.ASSOCIATE_INPUT_DEVICE_TO_DISPLAY) public void removePortAssociation(@NonNull String inputPort) { try { mIm.removePortAssociation(inputPort); @@ -1092,74 +1089,30 @@ public final class InputManager { /** * Add a runtime association between the input port and display, by unique id. Input ports are * expected to be unique. - * @param inputPort the port of the input device - * @param displayUniqueId the unique id of the associated display + * @param inputPort The port of the input device. + * @param displayUniqueId The unique id of the associated display. * <p> * Requires {@link android.Manifest.permission#ASSOCIATE_INPUT_DEVICE_TO_DISPLAY}. * </p> * @hide */ - @FlaggedApi(FLAG_DEVICE_ASSOCIATIONS) - @RequiresPermission(android.Manifest.permission.ASSOCIATE_INPUT_DEVICE_TO_DISPLAY) @TestApi - public void addUniqueIdAssociationByPort(@NonNull String inputPort, + public void addUniqueIdAssociation(@NonNull String inputPort, @NonNull String displayUniqueId) { - mGlobal.addUniqueIdAssociationByPort(inputPort, displayUniqueId); + mGlobal.addUniqueIdAssociation(inputPort, displayUniqueId); } /** * Removes a runtime association between the input device and display. - * @param inputPort the port of the input device + * @param inputPort The port of the input device. * <p> * Requires {@link android.Manifest.permission#ASSOCIATE_INPUT_DEVICE_TO_DISPLAY}. * </p> * @hide */ - @FlaggedApi(FLAG_DEVICE_ASSOCIATIONS) - @RequiresPermission(android.Manifest.permission.ASSOCIATE_INPUT_DEVICE_TO_DISPLAY) @TestApi - public void removeUniqueIdAssociationByPort(@NonNull String inputPort) { - mGlobal.removeUniqueIdAssociationByPort(inputPort); - } - - /** - * Add a runtime association between the input device name and display, by descriptor. Input - * device descriptors are expected to be unique per physical device, though one physical - * device can have multiple virtual input devices that possess the same descriptor. - * E.g. a keyboard with built in trackpad will be 2 different input devices with the same - * descriptor. - * @param inputDeviceDescriptor the descriptor of the input device - * @param displayUniqueId the unique id of the associated display - * <p> - * Requires {@link android.Manifest.permissions.ASSOCIATE_INPUT_DEVICE_TO_DISPLAY}. - * </p> - * @hide - */ - @FlaggedApi(FLAG_DEVICE_ASSOCIATIONS) - @RequiresPermission(android.Manifest.permission.ASSOCIATE_INPUT_DEVICE_TO_DISPLAY) - @TestApi - public void addUniqueIdAssociationByDescriptor(@NonNull String inputDeviceDescriptor, - @NonNull String displayUniqueId) { - mGlobal.addUniqueIdAssociationByDescriptor(inputDeviceDescriptor, displayUniqueId); - } - - /** - * Removes a runtime association between the input device and display. - } - - /** - * Removes a runtime association between the input device and display. - * @param inputDeviceDescriptor the descriptor of the input device - * <p> - * Requires {@link android.Manifest.permissions.ASSOCIATE_INPUT_DEVICE_TO_DISPLAY}. - * </p> - * @hide - */ - @FlaggedApi(FLAG_DEVICE_ASSOCIATIONS) - @RequiresPermission(android.Manifest.permission.ASSOCIATE_INPUT_DEVICE_TO_DISPLAY) - @TestApi - public void removeUniqueIdAssociationByDescriptor(@NonNull String inputDeviceDescriptor) { - mGlobal.removeUniqueIdAssociationByDescriptor(inputDeviceDescriptor); + public void removeUniqueIdAssociation(@NonNull String inputPort) { + mGlobal.removeUniqueIdAssociation(inputPort); } /** diff --git a/core/java/android/hardware/input/InputManagerGlobal.java b/core/java/android/hardware/input/InputManagerGlobal.java index 1d253d989ec0..7b29666d9a96 100644 --- a/core/java/android/hardware/input/InputManagerGlobal.java +++ b/core/java/android/hardware/input/InputManagerGlobal.java @@ -1467,46 +1467,22 @@ public final class InputManagerGlobal { } /** - * @see InputManager#addUniqueIdAssociationByPort(String, String) + * @see InputManager#addUniqueIdAssociation(String, String) */ - public void addUniqueIdAssociationByPort(@NonNull String inputPort, - @NonNull String displayUniqueId) { + public void addUniqueIdAssociation(@NonNull String inputPort, @NonNull String displayUniqueId) { try { - mIm.addUniqueIdAssociationByPort(inputPort, displayUniqueId); + mIm.addUniqueIdAssociation(inputPort, displayUniqueId); } catch (RemoteException e) { throw e.rethrowFromSystemServer(); } } /** - * @see InputManager#removeUniqueIdAssociationByPort(String) + * @see InputManager#removeUniqueIdAssociation(String) */ - public void removeUniqueIdAssociationByPort(@NonNull String inputPort) { + public void removeUniqueIdAssociation(@NonNull String inputPort) { try { - mIm.removeUniqueIdAssociationByPort(inputPort); - } catch (RemoteException e) { - throw e.rethrowFromSystemServer(); - } - } - - /** - * @see InputManager#addUniqueIdAssociationByDescriptor(String, String) - */ - public void addUniqueIdAssociationByDescriptor(@NonNull String inputDeviceDescriptor, - @NonNull String displayUniqueId) { - try { - mIm.addUniqueIdAssociationByDescriptor(inputDeviceDescriptor, displayUniqueId); - } catch (RemoteException e) { - throw e.rethrowFromSystemServer(); - } - } - - /** - * @see InputManager#removeUniqueIdAssociationByDescriptor(String) - */ - public void removeUniqueIdAssociationByDescriptor(@NonNull String inputDeviceDescriptor) { - try { - mIm.removeUniqueIdAssociationByDescriptor(inputDeviceDescriptor); + mIm.removeUniqueIdAssociation(inputPort); } catch (RemoteException e) { throw e.rethrowFromSystemServer(); } diff --git a/core/java/android/hardware/input/input_framework.aconfig b/core/java/android/hardware/input/input_framework.aconfig index 9684e6498bfa..ed536cee7274 100644 --- a/core/java/android/hardware/input/input_framework.aconfig +++ b/core/java/android/hardware/input/input_framework.aconfig @@ -1,4 +1,5 @@ package: "com.android.hardware.input" +container: "system" # Project link: https://gantry.corp.google.com/projects/android_platform_input_native/changes diff --git a/core/java/android/hardware/radio/flags.aconfig b/core/java/android/hardware/radio/flags.aconfig index d0d10c17ee38..c9ab62ddc27f 100644 --- a/core/java/android/hardware/radio/flags.aconfig +++ b/core/java/android/hardware/radio/flags.aconfig @@ -1,4 +1,5 @@ package: "android.hardware.radio" +container: "system" flag { name: "hd_radio_improved" diff --git a/core/java/android/hardware/usb/flags/system_sw_usb_flags.aconfig b/core/java/android/hardware/usb/flags/system_sw_usb_flags.aconfig index fac02ce652b2..967fc42e8783 100644 --- a/core/java/android/hardware/usb/flags/system_sw_usb_flags.aconfig +++ b/core/java/android/hardware/usb/flags/system_sw_usb_flags.aconfig @@ -1,4 +1,5 @@ package: "android.hardware.usb.flags" +container: "system" flag { name: "enable_usb_data_compliance_warning" diff --git a/core/java/android/hardware/usb/flags/usb_framework_flags.aconfig b/core/java/android/hardware/usb/flags/usb_framework_flags.aconfig index 3dd746c5fad3..94df16030cdb 100644 --- a/core/java/android/hardware/usb/flags/usb_framework_flags.aconfig +++ b/core/java/android/hardware/usb/flags/usb_framework_flags.aconfig @@ -1,4 +1,5 @@ package: "android.hardware.usb.flags" +container: "system" flag { name: "enable_is_pd_compliant_api" diff --git a/core/java/android/inputmethodservice/InputMethodService.java b/core/java/android/inputmethodservice/InputMethodService.java index cbfc5d1e5050..278e8631622c 100644 --- a/core/java/android/inputmethodservice/InputMethodService.java +++ b/core/java/android/inputmethodservice/InputMethodService.java @@ -765,6 +765,7 @@ public class InputMethodService extends AbstractInputMethodService { private boolean mSystemCallingShowSoftInput; private boolean mSystemCallingHideSoftInput; + private boolean mSimultaneousStylusAndTouchEnabled; /** * {@inheritDoc} @@ -1129,9 +1130,11 @@ public class InputMethodService extends AbstractInputMethodService { mShowInputRequested = false; mInkWindow.show(); + mSimultaneousStylusAndTouchEnabled = + com.android.input.flags.Flags.enableMultiDeviceInput(); // deliver previous @param stylusEvents - stylusEvents.forEach(InputMethodService.this::onStylusHandwritingMotionEvent); + stylusEvents.forEach(this::deliverStylusHandwritingMotionEvent); // create receiver for channel mHandwritingEventReceiver = new InputEventReceiver(channel, Looper.getMainLooper()) { @@ -1139,10 +1142,15 @@ public class InputMethodService extends AbstractInputMethodService { public void onInputEvent(InputEvent event) { boolean handled = false; try { - if (!(event instanceof MotionEvent)) { + if (!(event instanceof MotionEvent motionEvent)) { return; } - onStylusHandwritingMotionEvent((MotionEvent) event); + if (!motionEvent.isStylusPointer()) { + // Handwriting surface is touchable, we don't want these touch events + // to get to the IME. + return; + } + deliverStylusHandwritingMotionEvent(motionEvent); scheduleHandwritingSessionTimeout(); handled = true; } finally { @@ -1153,6 +1161,27 @@ public class InputMethodService extends AbstractInputMethodService { scheduleHandwritingSessionTimeout(); } + private void deliverStylusHandwritingMotionEvent(MotionEvent motionEvent) { + onStylusHandwritingMotionEvent(motionEvent); + if (!mSimultaneousStylusAndTouchEnabled) { + return; + } + switch (motionEvent.getAction()) { + case MotionEvent.ACTION_DOWN: + // Consume and ignore all touches while stylus is down to prevent + // accidental touches from going to the app while writing. + mPrivOps.setHandwritingSurfaceNotTouchable(false); + break; + case MotionEvent.ACTION_UP: + case MotionEvent.ACTION_CANCEL: + // Go back to only consuming stylus events so that the user + // can continue to interact with the app using touch + // when the stylus is not down. + mPrivOps.setHandwritingSurfaceNotTouchable(true); + break; + } + } + /** * {@inheritDoc} * @hide diff --git a/core/java/android/net/flags.aconfig b/core/java/android/net/flags.aconfig index 3544a691cce4..048c50eb0a19 100644 --- a/core/java/android/net/flags.aconfig +++ b/core/java/android/net/flags.aconfig @@ -1,4 +1,5 @@ package: "android.net.platform.flags" +container: "system" # This file contains aconfig flags used from platform code # Flags used for module APIs must be in aconfig files under each modules diff --git a/core/java/android/net/thread/flags.aconfig b/core/java/android/net/thread/flags.aconfig index ef798ad46d2d..afb982ba64ca 100644 --- a/core/java/android/net/thread/flags.aconfig +++ b/core/java/android/net/thread/flags.aconfig @@ -1,4 +1,5 @@ package: "com.android.net.thread.platform.flags" +container: "system" # This file contains aconfig flags used from platform code # Flags used for module APIs must be in aconfig files under each modules diff --git a/core/java/android/net/vcn/flags.aconfig b/core/java/android/net/vcn/flags.aconfig index 6fde39852844..fea2c253e743 100644 --- a/core/java/android/net/vcn/flags.aconfig +++ b/core/java/android/net/vcn/flags.aconfig @@ -1,4 +1,5 @@ package: "android.net.vcn" +container: "system" flag { name: "safe_mode_config" diff --git a/core/java/android/os/IHintManager.aidl b/core/java/android/os/IHintManager.aidl index d97ea541f73d..e057a8536fab 100644 --- a/core/java/android/os/IHintManager.aidl +++ b/core/java/android/os/IHintManager.aidl @@ -18,16 +18,21 @@ package android.os; import android.os.IHintSession; +import android.hardware.power.SessionConfig; +import android.hardware.power.SessionTag; /** {@hide} */ interface IHintManager { /** * Creates a {@link Session} for the given set of threads and associates to a binder token. + * Returns a config if creation is not supported, and HMS had to use the + * legacy creation method. */ - IHintSession createHintSession(in IBinder token, in int[] tids, long durationNanos); + IHintSession createHintSessionWithConfig(in IBinder token, in int[] threadIds, + in long durationNanos, in SessionTag tag, out @nullable SessionConfig config); /** - * Get preferred rate limit in nano second. + * Get preferred rate limit in nanoseconds. */ long getHintSessionPreferredRate(); diff --git a/core/java/android/os/flags.aconfig b/core/java/android/os/flags.aconfig index f26a797f0c12..fd955e21c38b 100644 --- a/core/java/android/os/flags.aconfig +++ b/core/java/android/os/flags.aconfig @@ -1,5 +1,6 @@ package: "android.os" container: "system" +container: "system" flag { name: "android_os_build_vanilla_ice_cream" diff --git a/core/java/android/os/vibrator/flags.aconfig b/core/java/android/os/vibrator/flags.aconfig index 229d1195f6b7..eda755c05509 100644 --- a/core/java/android/os/vibrator/flags.aconfig +++ b/core/java/android/os/vibrator/flags.aconfig @@ -1,4 +1,5 @@ package: "android.os.vibrator" +container: "system" flag { namespace: "haptics" diff --git a/core/java/android/permission/flags.aconfig b/core/java/android/permission/flags.aconfig index abb4917024ce..6b5e17d8563d 100644 --- a/core/java/android/permission/flags.aconfig +++ b/core/java/android/permission/flags.aconfig @@ -1,4 +1,5 @@ package: "android.permission.flags" +container: "system" flag { name: "device_aware_permission_apis_enabled" diff --git a/core/java/android/provider/Settings.java b/core/java/android/provider/Settings.java index 6ad7422cfff0..16649e852c4a 100644 --- a/core/java/android/provider/Settings.java +++ b/core/java/android/provider/Settings.java @@ -686,25 +686,6 @@ public final class Settings { "android.settings.MANAGE_APP_LONG_RUNNING_JOBS"; /** - * Activity Action: Show settings to allow configuration of - * {@link Manifest.permission#RUN_BACKUP_JOBS} permission. - * - * Input: Optionally, the Intent's data URI can specify the application package name to - * directly invoke the management GUI specific to the package name. For example - * "package:com.my.app". - * <p> - * Output: When a package data uri is passed as input, the activity result is set to - * {@link android.app.Activity#RESULT_OK} if the permission was granted to the app. Otherwise, - * the result is set to {@link android.app.Activity#RESULT_CANCELED}. - * - * @hide - */ - @FlaggedApi(Flags.FLAG_BACKUP_TASKS_SETTINGS_SCREEN) - @SdkConstant(SdkConstantType.ACTIVITY_INTENT_ACTION) - public static final String ACTION_REQUEST_RUN_BACKUP_JOBS = - "android.settings.REQUEST_RUN_BACKUP_JOBS"; - - /** * Activity Action: Show settings to allow configuration of cross-profile access for apps * * Input: Optionally, the Intent's data URI can specify the application package name to diff --git a/core/java/android/provider/flags.aconfig b/core/java/android/provider/flags.aconfig index d0cef83390b9..77353c282b86 100644 --- a/core/java/android/provider/flags.aconfig +++ b/core/java/android/provider/flags.aconfig @@ -1,4 +1,5 @@ package: "android.provider" +container: "system" flag { name: "a11y_standalone_fab_enabled" diff --git a/core/java/android/security/flags.aconfig b/core/java/android/security/flags.aconfig index 7f5b550c830a..02e787b5256c 100644 --- a/core/java/android/security/flags.aconfig +++ b/core/java/android/security/flags.aconfig @@ -1,4 +1,5 @@ package: "android.security" +container: "system" flag { name: "certificate_transparency_configuration" diff --git a/core/java/android/security/responsible_apis_flags.aconfig b/core/java/android/security/responsible_apis_flags.aconfig index 548f8aa8113a..c7d951b99cce 100644 --- a/core/java/android/security/responsible_apis_flags.aconfig +++ b/core/java/android/security/responsible_apis_flags.aconfig @@ -1,4 +1,5 @@ package: "android.security" +container: "system" flag { name: "extend_ecm_to_all_settings" diff --git a/core/java/android/service/appprediction/flags/flags.aconfig b/core/java/android/service/appprediction/flags/flags.aconfig index 7f9764e82c5d..953bc44de523 100644 --- a/core/java/android/service/appprediction/flags/flags.aconfig +++ b/core/java/android/service/appprediction/flags/flags.aconfig @@ -1,4 +1,5 @@ package: "android.service.appprediction.flags" +container: "system" flag { name: "service_features_api" diff --git a/core/java/android/service/autofill/AutofillService.java b/core/java/android/service/autofill/AutofillService.java index e6a84df16c27..269839b61bef 100644 --- a/core/java/android/service/autofill/AutofillService.java +++ b/core/java/android/service/autofill/AutofillService.java @@ -37,7 +37,6 @@ import android.view.ViewStructure; import android.view.autofill.AutofillId; import android.view.autofill.AutofillManager; import android.view.autofill.AutofillValue; -import android.view.autofill.IAutoFillManagerClient; import com.android.internal.os.IResultReceiver; @@ -642,7 +641,7 @@ public abstract class AutofillService extends Service { @Override public void onFillCredentialRequest(FillRequest request, IFillCallback callback, - IAutoFillManagerClient autofillClientCallback) { + IBinder autofillClientCallback) { ICancellationSignal transport = CancellationSignal.createTransport(); try { callback.onCancellable(transport); @@ -724,7 +723,7 @@ public abstract class AutofillService extends Service { */ public void onFillCredentialRequest(@NonNull FillRequest request, @NonNull CancellationSignal cancellationSignal, @NonNull FillCallback callback, - @NonNull IAutoFillManagerClient autofillClientCallback) {} + @NonNull IBinder autofillClientCallback) {} /** * Called by the Android system to convert a credential manager response to a dataset diff --git a/core/java/android/service/autofill/IAutoFillService.aidl b/core/java/android/service/autofill/IAutoFillService.aidl index 2c2feae7aeea..3b64b8a0ec5e 100644 --- a/core/java/android/service/autofill/IAutoFillService.aidl +++ b/core/java/android/service/autofill/IAutoFillService.aidl @@ -16,13 +16,13 @@ package android.service.autofill; +import android.os.IBinder; import android.service.autofill.ConvertCredentialRequest; import android.service.autofill.IConvertCredentialCallback; import android.service.autofill.FillRequest; import android.service.autofill.IFillCallback; import android.service.autofill.ISaveCallback; import android.service.autofill.SaveRequest; -import android.view.autofill.IAutoFillManagerClient; import com.android.internal.os.IResultReceiver; /** @@ -34,7 +34,7 @@ oneway interface IAutoFillService { void onConnectedStateChanged(boolean connected); void onFillRequest(in FillRequest request, in IFillCallback callback); void onFillCredentialRequest(in FillRequest request, in IFillCallback callback, - in IAutoFillManagerClient client); + in IBinder client); void onSaveRequest(in SaveRequest request, in ISaveCallback callback); void onSavedPasswordCountRequest(in IResultReceiver receiver); void onConvertCredentialRequest(in ConvertCredentialRequest convertCredentialRequest, in IConvertCredentialCallback convertCredentialCallback); diff --git a/core/java/android/service/chooser/flags.aconfig b/core/java/android/service/chooser/flags.aconfig index a3eff3becd49..d6425c397bbb 100644 --- a/core/java/android/service/chooser/flags.aconfig +++ b/core/java/android/service/chooser/flags.aconfig @@ -1,4 +1,5 @@ package: "android.service.chooser" +container: "system" flag { name: "chooser_album_text" diff --git a/core/java/android/service/controls/flags/flags.aconfig b/core/java/android/service/controls/flags/flags.aconfig index 197f1bcbc001..6f3a67d180b9 100644 --- a/core/java/android/service/controls/flags/flags.aconfig +++ b/core/java/android/service/controls/flags/flags.aconfig @@ -1,4 +1,5 @@ package: "android.service.controls.flags" +container: "system" flag { name: "home_panel_dream" diff --git a/core/java/android/service/dreams/flags.aconfig b/core/java/android/service/dreams/flags.aconfig index cca4937f7499..88f1090750d2 100644 --- a/core/java/android/service/dreams/flags.aconfig +++ b/core/java/android/service/dreams/flags.aconfig @@ -1,4 +1,5 @@ package: "android.service.dreams" +container: "system" flag { name: "dream_overlay_host" diff --git a/core/java/android/service/notification/flags.aconfig b/core/java/android/service/notification/flags.aconfig index 35cd3edcafcb..c5b4b415edf0 100644 --- a/core/java/android/service/notification/flags.aconfig +++ b/core/java/android/service/notification/flags.aconfig @@ -1,5 +1,6 @@ package: "android.service.notification" container: "system" +container: "system" flag { name: "ranking_update_ashmem" @@ -14,7 +15,17 @@ flag { namespace: "systemui" description: "This flag controls the redacting of sensitive notifications from untrusted NotificationListenerServices" bug: "306271190" +} + +flag { + name: "redact_sensitive_notifications_big_text_style" is_exported: true + namespace: "systemui" + description: "This flag controls the redacting of BigTextStyle fields in sensitive notifications" + bug: "335488909" + metadata { + purpose: PURPOSE_BUGFIX + } } flag { diff --git a/core/java/android/service/voice/flags/flags.aconfig b/core/java/android/service/voice/flags/flags.aconfig index 1ae7d8c34442..357cb47ec4b8 100644 --- a/core/java/android/service/voice/flags/flags.aconfig +++ b/core/java/android/service/voice/flags/flags.aconfig @@ -1,4 +1,5 @@ package: "android.service.voice.flags" +container: "system" flag { name: "allow_training_data_egress_from_hds" diff --git a/core/java/android/speech/flags/speech_flags.aconfig b/core/java/android/speech/flags/speech_flags.aconfig index fa3359264ab6..2a42357e45f8 100644 --- a/core/java/android/speech/flags/speech_flags.aconfig +++ b/core/java/android/speech/flags/speech_flags.aconfig @@ -1,4 +1,5 @@ package: "android.speech.flags" +container: "system" flag { name: "multilang_extra_launch" diff --git a/core/java/android/text/flags/flags.aconfig b/core/java/android/text/flags/flags.aconfig index 24035af7c0b1..a8a0c5b8bdf7 100644 --- a/core/java/android/text/flags/flags.aconfig +++ b/core/java/android/text/flags/flags.aconfig @@ -1,4 +1,5 @@ package: "com.android.text.flags" +container: "system" flag { name: "vendor_custom_locale_fallback" diff --git a/core/java/android/tracing/flags.aconfig b/core/java/android/tracing/flags.aconfig index 1815f14726d4..c50c384c6e4d 100644 --- a/core/java/android/tracing/flags.aconfig +++ b/core/java/android/tracing/flags.aconfig @@ -1,4 +1,5 @@ package: "android.tracing" +container: "system" flag { name: "perfetto_transition_tracing" diff --git a/core/java/android/view/TextureView.java b/core/java/android/view/TextureView.java index 5466bf542f91..ebc86ee96f75 100644 --- a/core/java/android/view/TextureView.java +++ b/core/java/android/view/TextureView.java @@ -202,6 +202,14 @@ public class TextureView extends View { // Set by native code, do not write! @UnsupportedAppUsage(maxTargetSdk = Build.VERSION_CODES.R, trackingBug = 170729553) private long mNativeWindow; + // Used for VRR detecting "normal" frame rate rather than "high". This is the previous + // interval for drawing. This can be removed when NORMAL is the default rate for Views. + // (b/329156944) + private long mMinusTwoFrameIntervalMillis = 0; + // Used for VRR detecting "normal" frame rate rather than "high". This is the last + // frame time for drawing. This can be removed when NORMAL is the default rate for Views. + // (b/329156944) + private long mLastFrameTimeMillis = 0; /** * Creates a new TextureView. @@ -890,12 +898,26 @@ public class TextureView extends View { */ @Override protected int calculateFrameRateCategory() { - if (mMinusTwoFrameIntervalMillis > 15 && mMinusOneFrameIntervalMillis > 15) { + long now = getDrawingTime(); + // This isn't necessary when the default frame rate is NORMAL (b/329156944) + if (mMinusTwoFrameIntervalMillis > 15 && (now - mLastFrameTimeMillis) > 15) { return FRAME_RATE_CATEGORY_NORMAL; } return super.calculateFrameRateCategory(); } + /** + * @hide + */ + @Override + protected void votePreferredFrameRate() { + super.votePreferredFrameRate(); + // This isn't necessary when the default frame rate is NORMAL (b/329156944) + long now = getDrawingTime(); + mMinusTwoFrameIntervalMillis = now - mLastFrameTimeMillis; + mLastFrameTimeMillis = now; + } + @UnsupportedAppUsage private final SurfaceTexture.OnFrameAvailableListener mUpdateListener = surfaceTexture -> { diff --git a/core/java/android/view/View.java b/core/java/android/view/View.java index 4c4a22cc96e9..a355f552d6ff 100644 --- a/core/java/android/view/View.java +++ b/core/java/android/view/View.java @@ -911,6 +911,12 @@ public class View implements Drawable.Callback, KeyEvent.Callback, private static final String AUTOFILL_LOG_TAG = "View.Autofill"; /** + * The logging tag used by this class when logging verbose and chatty (high volume) + * autofill-related messages. + */ + private static final String AUTOFILL_CHATTY_LOG_TAG = "View.Autofill.Chatty"; + + /** * The logging tag used by this class when logging content capture-related messages. */ private static final String CONTENT_CAPTURE_LOG_TAG = "View.ContentCapture"; @@ -1133,7 +1139,7 @@ public class View implements Drawable.Callback, KeyEvent.Callback, private static final int FOCUSABLE_MASK = 0x00000011; /** - * This view will adjust its padding to fit sytem windows (e.g. status bar) + * This view will adjust its padding to fit system windows (e.g. status bar) */ private static final int FITS_SYSTEM_WINDOWS = 0x00000002; @@ -5764,23 +5770,10 @@ public class View implements Drawable.Callback, KeyEvent.Callback, static final float MAX_FRAME_RATE = 140; - private static final int INFREQUENT_UPDATE_INTERVAL_MILLIS = 100; - private static final int INFREQUENT_UPDATE_COUNTS = 2; - // The preferred frame rate of the view that is mainly used for // touch boosting, view velocity handling, and TextureView. private float mPreferredFrameRate = REQUESTED_FRAME_RATE_CATEGORY_DEFAULT; - private int mInfrequentUpdateCount = 0; - private long mLastUpdateTimeMillis = 0; - /** - * @hide - */ - protected int mMinusOneFrameIntervalMillis = 0; - /** - * @hide - */ - protected int mMinusTwoFrameIntervalMillis = 0; private int mLastFrameRateCategory = FRAME_RATE_CATEGORY_NO_PREFERENCE; @FlaggedApi(FLAG_TOOLKIT_SET_FRAME_RATE_READ_ONLY) @@ -8704,8 +8697,8 @@ public class View implements Drawable.Callback, KeyEvent.Callback, @CallSuper protected void onFocusChanged(boolean gainFocus, @FocusDirection int direction, @Nullable Rect previouslyFocusedRect) { - if (DBG) { - Log.d(VIEW_LOG_TAG, "onFocusChanged() entered. gainFocus: " + if (Log.isLoggable(AUTOFILL_CHATTY_LOG_TAG, Log.VERBOSE)) { + Log.v(AUTOFILL_CHATTY_LOG_TAG, "onFocusChanged() entered. gainFocus: " + gainFocus); } if (gainFocus) { @@ -8773,8 +8766,8 @@ public class View implements Drawable.Callback, KeyEvent.Callback, if (canNotifyAutofillEnterExitEvent()) { AutofillManager afm = getAutofillManager(); if (afm != null) { - if (DBG) { - Log.d(VIEW_LOG_TAG, this + " afm is not null"); + if (Log.isLoggable(AUTOFILL_CHATTY_LOG_TAG, Log.VERBOSE)) { + Log.v(AUTOFILL_CHATTY_LOG_TAG, this + " afm is not null"); } if (enter) { // We have not been laid out yet, hence cannot evaluate @@ -8787,8 +8780,8 @@ public class View implements Drawable.Callback, KeyEvent.Callback, // animation beginning. On the time, the view is not visible // to the user. And then as the animation progresses, the view // becomes visible to the user. - if (DBG) { - Log.d(VIEW_LOG_TAG, + if (Log.isLoggable(AUTOFILL_CHATTY_LOG_TAG, Log.VERBOSE)) { + Log.v(AUTOFILL_CHATTY_LOG_TAG, "notifyEnterOrExitForAutoFillIfNeeded:" + " isLaidOut(): " + isLaidOut() + " isVisibleToUser(): " + isVisibleToUser() @@ -11020,28 +11013,28 @@ public class View implements Drawable.Callback, KeyEvent.Callback, } private boolean isAutofillable() { - if (DBG) { - Log.d(VIEW_LOG_TAG, "isAutofillable() entered."); + if (Log.isLoggable(AUTOFILL_CHATTY_LOG_TAG, Log.VERBOSE)) { + Log.v(AUTOFILL_CHATTY_LOG_TAG, "isAutofillable() entered."); } if (getAutofillType() == AUTOFILL_TYPE_NONE) { - if (DBG) { - Log.d(VIEW_LOG_TAG, "getAutofillType() returns AUTOFILL_TYPE_NONE"); + if (Log.isLoggable(AUTOFILL_CHATTY_LOG_TAG, Log.VERBOSE)) { + Log.v(AUTOFILL_CHATTY_LOG_TAG, "getAutofillType() returns AUTOFILL_TYPE_NONE"); } return false; } final AutofillManager afm = getAutofillManager(); if (afm == null) { - if (DBG) { - Log.d(VIEW_LOG_TAG, "AutofillManager is null"); + if (Log.isLoggable(AUTOFILL_CHATTY_LOG_TAG, Log.VERBOSE)) { + Log.v(AUTOFILL_CHATTY_LOG_TAG, "AutofillManager is null"); } return false; } // Check whether view is not part of an activity. If it's not, return false. if (getAutofillViewId() <= LAST_APP_AUTOFILL_ID) { - if (DBG) { - Log.d(VIEW_LOG_TAG, "getAutofillViewId()<=LAST_APP_AUTOFILL_ID"); + if (Log.isLoggable(AUTOFILL_CHATTY_LOG_TAG, Log.VERBOSE)) { + Log.v(AUTOFILL_CHATTY_LOG_TAG, "getAutofillViewId()<=LAST_APP_AUTOFILL_ID"); } return false; } @@ -11052,8 +11045,9 @@ public class View implements Drawable.Callback, KeyEvent.Callback, if ((isImportantForAutofill() && afm.isTriggerFillRequestOnFilteredImportantViewsEnabled()) || (!isImportantForAutofill() && afm.isTriggerFillRequestOnUnimportantViewEnabled())) { - if (DBG) { - Log.d(VIEW_LOG_TAG, "isImportantForAutofill(): " + isImportantForAutofill() + if (Log.isLoggable(AUTOFILL_CHATTY_LOG_TAG, Log.VERBOSE)) { + Log.v(AUTOFILL_CHATTY_LOG_TAG, + "isImportantForAutofill(): " + isImportantForAutofill() + "afm.isAutofillable(): " + afm.isAutofillable(this)); } return afm.isAutofillable(this) ? true : notifyAugmentedAutofillIfNeeded(afm); @@ -11061,8 +11055,8 @@ public class View implements Drawable.Callback, KeyEvent.Callback, // If the previous condition is not met, fall back to the previous way to trigger fill // request based on autofill importance instead. - if (DBG) { - Log.d(VIEW_LOG_TAG, "isImportantForAutofill(): " + isImportantForAutofill()); + if (Log.isLoggable(AUTOFILL_CHATTY_LOG_TAG, Log.VERBOSE)) { + Log.v(AUTOFILL_CHATTY_LOG_TAG, "isImportantForAutofill(): " + isImportantForAutofill()); } return isImportantForAutofill() ? true : notifyAugmentedAutofillIfNeeded(afm); } @@ -11078,8 +11072,8 @@ public class View implements Drawable.Callback, KeyEvent.Callback, /** @hide */ public boolean canNotifyAutofillEnterExitEvent() { - if (DBG) { - Log.d(VIEW_LOG_TAG, "canNotifyAutofillEnterExitEvent() entered. " + if (Log.isLoggable(AUTOFILL_CHATTY_LOG_TAG, Log.VERBOSE)) { + Log.v(AUTOFILL_CHATTY_LOG_TAG, "canNotifyAutofillEnterExitEvent() entered. " + " isAutofillable(): " + isAutofillable() + " isAttachedToWindow(): " + isAttachedToWindow()); } @@ -23651,7 +23645,6 @@ public class View implements Drawable.Callback, KeyEvent.Callback, if (sToolkitSetFrameRateReadOnlyFlagValue && sToolkitFrameRateViewEnablingReadOnlyFlagValue) { votePreferredFrameRate(); - updateInfrequentCount(); } mPrivateFlags4 = (mPrivateFlags4 & ~PFLAG4_HAS_MOVED) | PFLAG4_HAS_DRAWN; @@ -32835,6 +32828,13 @@ public class View implements Drawable.Callback, KeyEvent.Callback, SENSITIVE_CONTENT_AUTOFILL_HINTS.add(View.AUTOFILL_HINT_USERNAME); SENSITIVE_CONTENT_AUTOFILL_HINTS.add(View.AUTOFILL_HINT_PASSWORD_AUTO); SENSITIVE_CONTENT_AUTOFILL_HINTS.add(View.AUTOFILL_HINT_PASSWORD); + SENSITIVE_CONTENT_AUTOFILL_HINTS.add(View.AUTOFILL_HINT_CREDIT_CARD_NUMBER); + SENSITIVE_CONTENT_AUTOFILL_HINTS.add(View.AUTOFILL_HINT_CREDIT_CARD_SECURITY_CODE); + SENSITIVE_CONTENT_AUTOFILL_HINTS.add(View.AUTOFILL_HINT_CREDIT_CARD_EXPIRATION_DATE); + SENSITIVE_CONTENT_AUTOFILL_HINTS.add(View.AUTOFILL_HINT_CREDIT_CARD_EXPIRATION_DAY); + SENSITIVE_CONTENT_AUTOFILL_HINTS.add(View.AUTOFILL_HINT_CREDIT_CARD_EXPIRATION_MONTH); + SENSITIVE_CONTENT_AUTOFILL_HINTS.add(View.AUTOFILL_HINT_CREDIT_CARD_EXPIRATION_YEAR); + SENSITIVE_CONTENT_AUTOFILL_HINTS.add(View.AUTOFILL_HINT_CREDENTIAL_MANAGER); } /** @@ -33903,15 +33903,15 @@ public class View implements Drawable.Callback, KeyEvent.Callback, * @hide */ protected int calculateFrameRateCategory() { - if (mMinusTwoFrameIntervalMillis + mMinusOneFrameIntervalMillis - < INFREQUENT_UPDATE_INTERVAL_MILLIS) { - return mSizeBasedFrameRateCategoryAndReason; + int category; + switch (getViewRootImpl().intermittentUpdateState()) { + case ViewRootImpl.INTERMITTENT_STATE_INTERMITTENT -> + category = FRAME_RATE_CATEGORY_NORMAL | FRAME_RATE_CATEGORY_REASON_INTERMITTENT; + case ViewRootImpl.INTERMITTENT_STATE_NOT_INTERMITTENT -> + category = mSizeBasedFrameRateCategoryAndReason; + default -> category = mLastFrameRateCategory; } - - if (mInfrequentUpdateCount == INFREQUENT_UPDATE_COUNTS) { - return FRAME_RATE_CATEGORY_NORMAL | FRAME_RATE_CATEGORY_REASON_INTERMITTENT; - } - return mLastFrameRateCategory; + return category; } /** @@ -33922,76 +33922,99 @@ public class View implements Drawable.Callback, KeyEvent.Callback, protected void votePreferredFrameRate() { // use toolkitSetFrameRate flag to gate the change ViewRootImpl viewRootImpl = getViewRootImpl(); - int width = mRight - mLeft; - int height = mBottom - mTop; - - if (viewRootImpl != null && (width != 0 && height != 0)) { - if (viewRootImpl.shouldCheckFrameRate(mPreferredFrameRate > 0f)) { - float velocityFrameRate = 0f; - if (mAttachInfo.mViewVelocityApi) { - float velocity = mFrameContentVelocity; - - if (velocity < 0f - && (mPrivateFlags4 & (PFLAG4_HAS_MOVED | PFLAG4_HAS_DRAWN)) == ( - PFLAG4_HAS_MOVED | PFLAG4_HAS_DRAWN) - && mParent instanceof View - && ((View) mParent).mFrameContentVelocity <= 0 - ) { - // This current calculation is very simple. If something on the screen - // moved, then it votes for the highest velocity. - velocityFrameRate = MAX_FRAME_RATE; - } else if (velocity > 0f) { - velocityFrameRate = convertVelocityToFrameRate(velocity); - } - } - if (velocityFrameRate > 0f || mPreferredFrameRate > 0f) { - int compatibility = FRAME_RATE_COMPATIBILITY_GTE; - float frameRate = velocityFrameRate; - if (mPreferredFrameRate > velocityFrameRate) { - compatibility = FRAME_RATE_COMPATIBILITY_FIXED_SOURCE; - frameRate = mPreferredFrameRate; - } - viewRootImpl.votePreferredFrameRate(frameRate, compatibility); + if (viewRootImpl == null) { + return; // can't vote if not connected + } + float velocity = mFrameContentVelocity; + float frameRate = mPreferredFrameRate; + ViewParent parent = mParent; + if (velocity <= 0 && Float.isNaN(frameRate)) { + // The most common case is when nothing is set, so this special case is called + // often. + if (mAttachInfo.mViewVelocityApi + && (mPrivateFlags4 & (PFLAG4_HAS_MOVED | PFLAG4_HAS_DRAWN)) == ( + PFLAG4_HAS_MOVED | PFLAG4_HAS_DRAWN) + && viewRootImpl.shouldCheckFrameRate(false) + && parent instanceof View + && ((View) parent).mFrameContentVelocity <= 0) { + viewRootImpl.votePreferredFrameRate(MAX_FRAME_RATE, FRAME_RATE_COMPATIBILITY_GTE); + } + if (!willNotDraw() && viewRootImpl.shouldCheckFrameRateCategory()) { + int frameRateCategory = calculateFrameRateCategory(); + int category = frameRateCategory & ~FRAME_RATE_CATEGORY_REASON_MASK; + int reason = frameRateCategory & FRAME_RATE_CATEGORY_REASON_MASK; + viewRootImpl.votePreferredFrameRateCategory(category, reason, this); + mLastFrameRateCategory = frameRateCategory; + } + return; + } + if (viewRootImpl.shouldCheckFrameRate(frameRate > 0f)) { + float velocityFrameRate = 0f; + if (mAttachInfo.mViewVelocityApi) { + if (velocity < 0f + && (mPrivateFlags4 & (PFLAG4_HAS_MOVED | PFLAG4_HAS_DRAWN)) == ( + PFLAG4_HAS_MOVED | PFLAG4_HAS_DRAWN) + && mParent instanceof View + && ((View) mParent).mFrameContentVelocity <= 0 + ) { + // This current calculation is very simple. If something on the screen + // moved, then it votes for the highest velocity. + velocityFrameRate = MAX_FRAME_RATE; + } else if (velocity > 0f) { + velocityFrameRate = convertVelocityToFrameRate(velocity); } } - if (!willNotDraw() && isDirty() && viewRootImpl.shouldCheckFrameRateCategory()) { - if (sToolkitMetricsForFrameRateDecisionFlagValue) { - float sizePercentage = width * height / mAttachInfo.mDisplayPixelCount; - viewRootImpl.recordViewPercentage(sizePercentage); + if (velocityFrameRate > 0f || frameRate > 0f) { + int compatibility; + if (frameRate >= velocityFrameRate) { + compatibility = FRAME_RATE_COMPATIBILITY_FIXED_SOURCE; + } else { + compatibility = FRAME_RATE_COMPATIBILITY_GTE; + frameRate = velocityFrameRate; } + viewRootImpl.votePreferredFrameRate(frameRate, compatibility); + } + } - int frameRateCategory = FRAME_RATE_CATEGORY_NO_PREFERENCE; - if (Float.isNaN(mPreferredFrameRate)) { - frameRateCategory = calculateFrameRateCategory(); - } else if (mPreferredFrameRate < 0) { - switch ((int) mPreferredFrameRate) { - case (int) REQUESTED_FRAME_RATE_CATEGORY_NO_PREFERENCE -> - frameRateCategory = FRAME_RATE_CATEGORY_NO_PREFERENCE - | FRAME_RATE_CATEGORY_REASON_REQUESTED; - case (int) REQUESTED_FRAME_RATE_CATEGORY_LOW -> - frameRateCategory = FRAME_RATE_CATEGORY_LOW - | FRAME_RATE_CATEGORY_REASON_REQUESTED; - case (int) REQUESTED_FRAME_RATE_CATEGORY_NORMAL -> - frameRateCategory = FRAME_RATE_CATEGORY_NORMAL - | FRAME_RATE_CATEGORY_REASON_REQUESTED; - case (int) REQUESTED_FRAME_RATE_CATEGORY_HIGH -> - frameRateCategory = FRAME_RATE_CATEGORY_HIGH - | FRAME_RATE_CATEGORY_REASON_REQUESTED; - default -> { - // invalid frame rate, use default - int category = sToolkitFrameRateDefaultNormalReadOnlyFlagValue - ? FRAME_RATE_CATEGORY_NORMAL : FRAME_RATE_CATEGORY_HIGH; - frameRateCategory = category - | FRAME_RATE_CATEGORY_REASON_INVALID; - } + if (!willNotDraw() && viewRootImpl.shouldCheckFrameRateCategory()) { + if (sToolkitMetricsForFrameRateDecisionFlagValue) { + int width = mRight - mLeft; + int height = mBottom - mTop; + float sizePercentage = width * height / mAttachInfo.mDisplayPixelCount; + viewRootImpl.recordViewPercentage(sizePercentage); + } + + int frameRateCategory = FRAME_RATE_CATEGORY_NO_PREFERENCE; + if (Float.isNaN(frameRate)) { + frameRateCategory = calculateFrameRateCategory(); + } else if (frameRate < 0) { + switch ((int) frameRate) { + case (int) REQUESTED_FRAME_RATE_CATEGORY_NO_PREFERENCE -> + frameRateCategory = FRAME_RATE_CATEGORY_NO_PREFERENCE + | FRAME_RATE_CATEGORY_REASON_REQUESTED; + case (int) REQUESTED_FRAME_RATE_CATEGORY_LOW -> + frameRateCategory = FRAME_RATE_CATEGORY_LOW + | FRAME_RATE_CATEGORY_REASON_REQUESTED; + case (int) REQUESTED_FRAME_RATE_CATEGORY_NORMAL -> + frameRateCategory = FRAME_RATE_CATEGORY_NORMAL + | FRAME_RATE_CATEGORY_REASON_REQUESTED; + case (int) REQUESTED_FRAME_RATE_CATEGORY_HIGH -> + frameRateCategory = FRAME_RATE_CATEGORY_HIGH + | FRAME_RATE_CATEGORY_REASON_REQUESTED; + default -> { + // invalid frame rate, use default + int category = sToolkitFrameRateDefaultNormalReadOnlyFlagValue + ? FRAME_RATE_CATEGORY_NORMAL : FRAME_RATE_CATEGORY_HIGH; + frameRateCategory = category + | FRAME_RATE_CATEGORY_REASON_INVALID; } } - - int category = frameRateCategory & ~FRAME_RATE_CATEGORY_REASON_MASK; - int reason = frameRateCategory & FRAME_RATE_CATEGORY_REASON_MASK; - viewRootImpl.votePreferredFrameRateCategory(category, reason, this); - mLastFrameRateCategory = frameRateCategory; } + + int category = frameRateCategory & ~FRAME_RATE_CATEGORY_REASON_MASK; + int reason = frameRateCategory & FRAME_RATE_CATEGORY_REASON_MASK; + viewRootImpl.votePreferredFrameRateCategory(category, reason, this); + mLastFrameRateCategory = frameRateCategory; } } @@ -34074,33 +34097,4 @@ public class View implements Drawable.Callback, KeyEvent.Callback, } return 0; } - - /** - * This function is mainly used for migrating infrequent layer logic - * from SurfaceFlinger to Toolkit. - * The infrequent layer logic includes: - * - NORMAL for infrequent update: FT2-FT1 > 100 && FT3-FT2 > 100. - * - HIGH/NORMAL based on size for frequent update: (FT3-FT2) + (FT2 - FT1) < 100. - * - otherwise, use the previous category value. - */ - private void updateInfrequentCount() { - if (!willNotDraw()) { - long currentTimeMillis = getDrawingTime(); - int timeIntervalMillis = - (int) Math.min(Integer.MAX_VALUE, currentTimeMillis - mLastUpdateTimeMillis); - mMinusTwoFrameIntervalMillis = mMinusOneFrameIntervalMillis; - mMinusOneFrameIntervalMillis = timeIntervalMillis; - - mLastUpdateTimeMillis = currentTimeMillis; - if (mMinusTwoFrameIntervalMillis >= 30 && timeIntervalMillis < 2) { - return; - } - if (timeIntervalMillis >= INFREQUENT_UPDATE_INTERVAL_MILLIS) { - mInfrequentUpdateCount = mInfrequentUpdateCount == INFREQUENT_UPDATE_COUNTS - ? mInfrequentUpdateCount : mInfrequentUpdateCount + 1; - } else { - mInfrequentUpdateCount = 0; - } - } - } } diff --git a/core/java/android/view/ViewRootImpl.java b/core/java/android/view/ViewRootImpl.java index 8d55777a2b8e..e2ed2b8097f5 100644 --- a/core/java/android/view/ViewRootImpl.java +++ b/core/java/android/view/ViewRootImpl.java @@ -392,6 +392,26 @@ public final class ViewRootImpl implements ViewParent, private static final int UNSET_SYNC_ID = -1; + private static final int INFREQUENT_UPDATE_INTERVAL_MILLIS = 100; + private static final int INFREQUENT_UPDATE_COUNTS = 2; + + /** + * The {@link #intermittentUpdateState()} value when the ViewRootImpl isn't intermittent. + */ + public static final int INTERMITTENT_STATE_NOT_INTERMITTENT = 1; + + /** + * The {@link #intermittentUpdateState()} value when the ViewRootImpl is transitioning either + * to or from intermittent to not intermittent. This indicates that the frame rate shouldn't + * change. + */ + public static final int INTERMITTENT_STATE_IN_TRANSITION = -1; + + /** + * The {@link #intermittentUpdateState()} value when the ViewRootImpl is intermittent. + */ + public static final int INTERMITTENT_STATE_INTERMITTENT = 0; + /** * Minimum time to wait before reporting changes to keep clear areas. */ @@ -623,6 +643,15 @@ public final class ViewRootImpl implements ViewParent, // Is the stylus pointer icon enabled private final boolean mIsStylusPointerIconEnabled; + // VRR check for number of infrequent updates + private int mInfrequentUpdateCount = 0; + // VRR time of last update + private long mLastUpdateTimeMillis = 0; + // VRR interval since the previous + private int mMinusOneFrameIntervalMillis = 0; + // VRR interval between the previous and the frame before + private int mMinusTwoFrameIntervalMillis = 0; + /** * Update the Choreographer's FrameInfo object with the timing information for the current * ViewRootImpl instance. Erase the data in the current ViewFrameInfo to prepare for the next @@ -1068,6 +1097,7 @@ public final class ViewRootImpl implements ViewParent, // Used to check if there is a message in the message queue // for idleness handling. private boolean mHasIdledMessage = false; + private boolean mDrawnThisFrame = false; // Used to check if there is a conflict between different frame rate voting. // Take 24 and 30 as an example, 24 is not a divisor of 30. // We consider there is a conflict. @@ -4220,25 +4250,29 @@ public final class ViewRootImpl implements ViewParent, // For the variable refresh rate project. // We set the preferred frame rate and frame rate category at the end of performTraversals // when the values are applicable. - setCategoryFromCategoryCounts(); - setPreferredFrameRate(mPreferredFrameRate); - setPreferredFrameRateCategory(mPreferredFrameRateCategory); - if (!mIsFrameRateConflicted) { - mHandler.removeMessages(MSG_FRAME_RATE_SETTING); - mHandler.sendEmptyMessageDelayed(MSG_FRAME_RATE_SETTING, - FRAME_RATE_SETTING_REEVALUATE_TIME); - } - checkIdleness(); - mFrameRateCategoryHighCount = mFrameRateCategoryHighCount > 0 - ? mFrameRateCategoryHighCount - 1 : mFrameRateCategoryHighCount; - mFrameRateCategoryNormalCount = mFrameRateCategoryNormalCount > 0 - ? mFrameRateCategoryNormalCount - 1 : mFrameRateCategoryNormalCount; - mFrameRateCategoryLowCount = mFrameRateCategoryLowCount > 0 - ? mFrameRateCategoryLowCount - 1 : mFrameRateCategoryLowCount; - mPreferredFrameRateCategory = FRAME_RATE_CATEGORY_DEFAULT; - mPreferredFrameRate = -1; - mIsFrameRateConflicted = false; - mFrameRateCategoryChangeReason = FRAME_RATE_CATEGORY_REASON_UNKNOWN; + if (mDrawnThisFrame) { + mDrawnThisFrame = false; + updateInfrequentCount(); + setCategoryFromCategoryCounts(); + setPreferredFrameRate(mPreferredFrameRate); + setPreferredFrameRateCategory(mPreferredFrameRateCategory); + if (!mIsFrameRateConflicted) { + mHandler.removeMessages(MSG_FRAME_RATE_SETTING); + mHandler.sendEmptyMessageDelayed(MSG_FRAME_RATE_SETTING, + FRAME_RATE_SETTING_REEVALUATE_TIME); + } + checkIdleness(); + mFrameRateCategoryHighCount = mFrameRateCategoryHighCount > 0 + ? mFrameRateCategoryHighCount - 1 : mFrameRateCategoryHighCount; + mFrameRateCategoryNormalCount = mFrameRateCategoryNormalCount > 0 + ? mFrameRateCategoryNormalCount - 1 : mFrameRateCategoryNormalCount; + mFrameRateCategoryLowCount = mFrameRateCategoryLowCount > 0 + ? mFrameRateCategoryLowCount - 1 : mFrameRateCategoryLowCount; + mPreferredFrameRateCategory = FRAME_RATE_CATEGORY_DEFAULT; + mPreferredFrameRate = -1; + mIsFrameRateConflicted = false; + mFrameRateCategoryChangeReason = FRAME_RATE_CATEGORY_REASON_UNKNOWN; + } } private void createSyncIfNeeded() { @@ -9044,20 +9078,26 @@ public final class ViewRootImpl implements ViewParent, mTempInsets, mTempControls, mRelayoutBundle); mRelayoutRequested = true; - final int maybeSyncSeqId = mRelayoutBundle.getInt( - IWindowSession.KEY_RELAYOUT_BUNDLE_SEQID); - if (maybeSyncSeqId > 0) { - mSyncSeqId = maybeSyncSeqId; - } if (activityWindowInfoFlag() && mPendingActivityWindowInfo != null) { - final ActivityWindowInfo outInfo = mRelayoutBundle.getParcelable( - IWindowSession.KEY_RELAYOUT_BUNDLE_ACTIVITY_WINDOW_INFO, - ActivityWindowInfo.class); + ActivityWindowInfo outInfo = null; + try { + outInfo = mRelayoutBundle.getParcelable( + IWindowSession.KEY_RELAYOUT_BUNDLE_ACTIVITY_WINDOW_INFO, + ActivityWindowInfo.class); + mRelayoutBundle.remove(IWindowSession.KEY_RELAYOUT_BUNDLE_ACTIVITY_WINDOW_INFO); + } catch (IllegalStateException e) { + Log.e(TAG, "Failed to get ActivityWindowInfo from relayout Bundle", e); + } if (outInfo != null) { mPendingActivityWindowInfo.set(outInfo); } } - mRelayoutBundle.clear(); + final int maybeSyncSeqId = mRelayoutBundle.getInt( + IWindowSession.KEY_RELAYOUT_BUNDLE_SEQID); + if (maybeSyncSeqId > 0) { + mSyncSeqId = maybeSyncSeqId; + } + mWinFrameInScreen.set(mTmpFrames.frame); if (mTranslator != null) { mTranslator.translateRectInScreenToAppWindow(mTmpFrames.frame); @@ -12510,6 +12550,15 @@ public final class ViewRootImpl implements ViewParent, * Sets the mPreferredFrameRateCategory from the high, high_hint, normal, and low counts. */ private void setCategoryFromCategoryCounts() { + switch (mPreferredFrameRateCategory) { + case FRAME_RATE_CATEGORY_LOW -> mFrameRateCategoryLowCount = FRAME_RATE_CATEGORY_COUNT; + case FRAME_RATE_CATEGORY_NORMAL -> + mFrameRateCategoryNormalCount = FRAME_RATE_CATEGORY_COUNT; + case FRAME_RATE_CATEGORY_HIGH_HINT -> + mFrameRateCategoryHighHintCount = FRAME_RATE_CATEGORY_COUNT; + case FRAME_RATE_CATEGORY_HIGH -> + mFrameRateCategoryHighCount = FRAME_RATE_CATEGORY_COUNT; + } if (mFrameRateCategoryHighCount > 0) { mPreferredFrameRateCategory = FRAME_RATE_CATEGORY_HIGH; } else if (mFrameRateCategoryHighHintCount > 0) { @@ -12655,21 +12704,31 @@ public final class ViewRootImpl implements ViewParent, */ @VisibleForTesting(visibility = VisibleForTesting.Visibility.PROTECTED) public void votePreferredFrameRateCategory(int frameRateCategory, int reason, View view) { - switch (frameRateCategory) { - case FRAME_RATE_CATEGORY_LOW -> mFrameRateCategoryLowCount = FRAME_RATE_CATEGORY_COUNT; - case FRAME_RATE_CATEGORY_NORMAL -> - mFrameRateCategoryNormalCount = FRAME_RATE_CATEGORY_COUNT; - case FRAME_RATE_CATEGORY_HIGH_HINT -> - mFrameRateCategoryHighHintCount = FRAME_RATE_CATEGORY_COUNT; - case FRAME_RATE_CATEGORY_HIGH -> - mFrameRateCategoryHighCount = FRAME_RATE_CATEGORY_COUNT; - } if (frameRateCategory > mPreferredFrameRateCategory) { mPreferredFrameRateCategory = frameRateCategory; mFrameRateCategoryChangeReason = reason; - mFrameRateCategoryView = view == null ? "-" : view.getClass().getSimpleName(); +// mFrameRateCategoryView = view == null ? "-" : view.getClass().getSimpleName(); } mHasInvalidation = true; + mDrawnThisFrame = true; + } + + /** + * Returns {@link #INTERMITTENT_STATE_INTERMITTENT} when the ViewRootImpl has only been + * updated intermittently, {@link #INTERMITTENT_STATE_NOT_INTERMITTENT} when it is + * not updated intermittently, and {@link #INTERMITTENT_STATE_IN_TRANSITION} when it + * is transitioning between {@link #INTERMITTENT_STATE_NOT_INTERMITTENT} and + * {@link #INTERMITTENT_STATE_INTERMITTENT}. + */ + int intermittentUpdateState() { + if (mMinusOneFrameIntervalMillis + mMinusTwoFrameIntervalMillis + < INFREQUENT_UPDATE_INTERVAL_MILLIS) { + return INTERMITTENT_STATE_NOT_INTERMITTENT; + } + if (mInfrequentUpdateCount == INFREQUENT_UPDATE_COUNTS) { + return INTERMITTENT_STATE_INTERMITTENT; + } + return INTERMITTENT_STATE_IN_TRANSITION; } /** @@ -12724,6 +12783,8 @@ public final class ViewRootImpl implements ViewParent, mFrameRateCategoryHighCount = FRAME_RATE_CATEGORY_COUNT; mFrameRateCategoryChangeReason = FRAME_RATE_CATEGORY_REASON_VELOCITY; mFrameRateCategoryView = null; + mHasInvalidation = true; + mDrawnThisFrame = true; return; } } @@ -12755,6 +12816,7 @@ public final class ViewRootImpl implements ViewParent, mPreferredFrameRate = nextFrameRate; mFrameRateCompatibility = nextFrameRateCompatibility; mHasInvalidation = true; + mDrawnThisFrame = true; } /** @@ -12888,4 +12950,29 @@ public final class ViewRootImpl implements ViewParent, mHandler.removeMessages(MSG_CHECK_INVALIDATION_IDLE); mHandler.removeMessages(MSG_FRAME_RATE_SETTING); } + + /** + * This function is mainly used for migrating infrequent layer logic + * from SurfaceFlinger to Toolkit. + * The infrequent layer logic includes: + * - NORMAL for infrequent update: FT2-FT1 > 100 && FT3-FT2 > 100. + * - HIGH/NORMAL based on size for frequent update: (FT3-FT2) + (FT2 - FT1) < 100. + * - otherwise, use the previous category value. + */ + private void updateInfrequentCount() { + long currentTimeMillis = mAttachInfo.mDrawingTime; + int timeIntervalMillis = + (int) Math.min(Integer.MAX_VALUE, currentTimeMillis - mLastUpdateTimeMillis); + mMinusTwoFrameIntervalMillis = mMinusOneFrameIntervalMillis; + mMinusOneFrameIntervalMillis = timeIntervalMillis; + + mLastUpdateTimeMillis = currentTimeMillis; + if (timeIntervalMillis >= INFREQUENT_UPDATE_INTERVAL_MILLIS) { + int infrequentUpdateCount = mInfrequentUpdateCount; + mInfrequentUpdateCount = infrequentUpdateCount == INFREQUENT_UPDATE_COUNTS + ? infrequentUpdateCount : infrequentUpdateCount + 1; + } else { + mInfrequentUpdateCount = 0; + } + } } diff --git a/core/java/android/view/accessibility/flags/accessibility_flags.aconfig b/core/java/android/view/accessibility/flags/accessibility_flags.aconfig index c9d99d1a407e..da2bf9d7ab38 100644 --- a/core/java/android/view/accessibility/flags/accessibility_flags.aconfig +++ b/core/java/android/view/accessibility/flags/accessibility_flags.aconfig @@ -1,4 +1,5 @@ package: "android.view.accessibility" +container: "system" # NOTE: Keep alphabetized to help limit merge conflicts from multiple simultaneous editors. diff --git a/core/java/android/view/contentcapture/flags/content_capture_flags.aconfig b/core/java/android/view/contentcapture/flags/content_capture_flags.aconfig index 3c15518419b5..416a877d87ab 100644 --- a/core/java/android/view/contentcapture/flags/content_capture_flags.aconfig +++ b/core/java/android/view/contentcapture/flags/content_capture_flags.aconfig @@ -1,4 +1,5 @@ package: "android.view.contentcapture.flags" +container: "system" flag { name: "run_on_background_thread_enabled" diff --git a/core/java/android/view/contentprotection/flags/content_protection_flags.aconfig b/core/java/android/view/contentprotection/flags/content_protection_flags.aconfig index 4de0f29c60fe..b3bd92b37357 100644 --- a/core/java/android/view/contentprotection/flags/content_protection_flags.aconfig +++ b/core/java/android/view/contentprotection/flags/content_protection_flags.aconfig @@ -1,4 +1,5 @@ package: "android.view.contentprotection.flags" +container: "system" flag { name: "blocklist_update_enabled" diff --git a/core/java/android/view/flags/refresh_rate_flags.aconfig b/core/java/android/view/flags/refresh_rate_flags.aconfig index 1047131c5416..d0fe3e0ecb3a 100644 --- a/core/java/android/view/flags/refresh_rate_flags.aconfig +++ b/core/java/android/view/flags/refresh_rate_flags.aconfig @@ -1,4 +1,5 @@ package: "android.view.flags" +container: "system" flag { name: "view_velocity_api" diff --git a/core/java/android/view/flags/scroll_feedback_flags.aconfig b/core/java/android/view/flags/scroll_feedback_flags.aconfig index a7c41046b5b4..338037f705e4 100644 --- a/core/java/android/view/flags/scroll_feedback_flags.aconfig +++ b/core/java/android/view/flags/scroll_feedback_flags.aconfig @@ -1,4 +1,5 @@ package: "android.view.flags" +container: "system" flag { namespace: "toolkit" diff --git a/core/java/android/view/flags/view_flags.aconfig b/core/java/android/view/flags/view_flags.aconfig index 486c2ab6b6ab..33b29c7e308d 100644 --- a/core/java/android/view/flags/view_flags.aconfig +++ b/core/java/android/view/flags/view_flags.aconfig @@ -1,4 +1,5 @@ package: "android.view.flags" +container: "system" flag { name: "enable_surface_native_alloc_registration_ro" diff --git a/core/java/android/view/flags/window_insets.aconfig b/core/java/android/view/flags/window_insets.aconfig index bf6df5ca21cf..bedb7d578517 100644 --- a/core/java/android/view/flags/window_insets.aconfig +++ b/core/java/android/view/flags/window_insets.aconfig @@ -1,4 +1,5 @@ package: "android.view.flags" +container: "system" flag { name: "customizable_window_headers" diff --git a/core/java/android/view/inputmethod/flags.aconfig b/core/java/android/view/inputmethod/flags.aconfig index 0d197468e3e3..d79903bfd06b 100644 --- a/core/java/android/view/inputmethod/flags.aconfig +++ b/core/java/android/view/inputmethod/flags.aconfig @@ -1,4 +1,5 @@ package: "android.view.inputmethod" +container: "system" flag { name: "refactor_insets_controller" diff --git a/core/java/android/webkit/flags.aconfig b/core/java/android/webkit/flags.aconfig index 2d834a8b2384..defe61e506af 100644 --- a/core/java/android/webkit/flags.aconfig +++ b/core/java/android/webkit/flags.aconfig @@ -1,4 +1,5 @@ package: "android.webkit" +container: "system" flag { name: "update_service_ipc_wrapper" diff --git a/core/java/android/widget/flags/differential_motion_fling_flags.aconfig b/core/java/android/widget/flags/differential_motion_fling_flags.aconfig index 79cfe566ac05..a0a391e58dfe 100644 --- a/core/java/android/widget/flags/differential_motion_fling_flags.aconfig +++ b/core/java/android/widget/flags/differential_motion_fling_flags.aconfig @@ -1,4 +1,5 @@ package: "android.widget.flags" +container: "system" flag { namespace: "toolkit" diff --git a/core/java/android/widget/flags/notification_widget_flags.aconfig b/core/java/android/widget/flags/notification_widget_flags.aconfig index 515fa55b7b90..95794f3b1342 100644 --- a/core/java/android/widget/flags/notification_widget_flags.aconfig +++ b/core/java/android/widget/flags/notification_widget_flags.aconfig @@ -1,4 +1,5 @@ package: "android.widget.flags" +container: "system" flag { name: "notif_linearlayout_optimized" diff --git a/core/java/android/window/TaskOrganizer.java b/core/java/android/window/TaskOrganizer.java index 6d36b579dcc2..b9ffdbc0c2e4 100644 --- a/core/java/android/window/TaskOrganizer.java +++ b/core/java/android/window/TaskOrganizer.java @@ -24,7 +24,7 @@ import android.annotation.RequiresPermission; import android.annotation.SuppressLint; import android.annotation.TestApi; import android.app.ActivityManager; -import android.app.AppCompatTaskInfo.CameraCompatControlState; +import android.app.CameraCompatTaskInfo.CameraCompatControlState; import android.os.IBinder; import android.os.RemoteException; import android.view.SurfaceControl; diff --git a/core/java/android/window/flags/accessibility.aconfig b/core/java/android/window/flags/accessibility.aconfig index 368c6090b6fa..733e3db42fea 100644 --- a/core/java/android/window/flags/accessibility.aconfig +++ b/core/java/android/window/flags/accessibility.aconfig @@ -1,4 +1,5 @@ package: "com.android.window.flags" +container: "system" flag { name: "do_not_check_intersection_when_non_magnifiable_window_transitions" diff --git a/core/java/android/window/flags/large_screen_experiences_app_compat.aconfig b/core/java/android/window/flags/large_screen_experiences_app_compat.aconfig index fa0dab09a8b3..98ff3c6bc347 100644 --- a/core/java/android/window/flags/large_screen_experiences_app_compat.aconfig +++ b/core/java/android/window/flags/large_screen_experiences_app_compat.aconfig @@ -1,4 +1,5 @@ package: "com.android.window.flags" +container: "system" flag { name: "allows_screen_size_decoupled_from_status_bar_and_cutout" diff --git a/core/java/android/window/flags/lse_desktop_experience.aconfig b/core/java/android/window/flags/lse_desktop_experience.aconfig index 65e5f1a32a53..b9c15c563ef8 100644 --- a/core/java/android/window/flags/lse_desktop_experience.aconfig +++ b/core/java/android/window/flags/lse_desktop_experience.aconfig @@ -1,4 +1,5 @@ package: "com.android.window.flags" +container: "system" flag { name: "enable_scaled_resizing" diff --git a/core/java/android/window/flags/responsible_apis.aconfig b/core/java/android/window/flags/responsible_apis.aconfig index 94c72c60ecd0..33af48636f02 100644 --- a/core/java/android/window/flags/responsible_apis.aconfig +++ b/core/java/android/window/flags/responsible_apis.aconfig @@ -1,4 +1,5 @@ package: "com.android.window.flags" +container: "system" flag { name: "bal_require_opt_in_by_pending_intent_creator" diff --git a/core/java/android/window/flags/wallpaper_manager.aconfig b/core/java/android/window/flags/wallpaper_manager.aconfig index edf90b5c141e..150b04e87d97 100644 --- a/core/java/android/window/flags/wallpaper_manager.aconfig +++ b/core/java/android/window/flags/wallpaper_manager.aconfig @@ -1,4 +1,5 @@ package: "com.android.window.flags" +container: "system" flag { name: "always_update_wallpaper_permission" diff --git a/core/java/android/window/flags/window_surfaces.aconfig b/core/java/android/window/flags/window_surfaces.aconfig index 5c310484eff9..460df3103488 100644 --- a/core/java/android/window/flags/window_surfaces.aconfig +++ b/core/java/android/window/flags/window_surfaces.aconfig @@ -1,4 +1,5 @@ package: "com.android.window.flags" +container: "system" # Project link: https://gantry.corp.google.com/projects/android_platform_window_surfaces/changes diff --git a/core/java/android/window/flags/windowing_frontend.aconfig b/core/java/android/window/flags/windowing_frontend.aconfig index e2efff39f74d..87c47da16b9a 100644 --- a/core/java/android/window/flags/windowing_frontend.aconfig +++ b/core/java/android/window/flags/windowing_frontend.aconfig @@ -1,4 +1,5 @@ package: "com.android.window.flags" +container: "system" flag { name: "nav_bar_transparent_by_default" diff --git a/core/java/android/window/flags/windowing_sdk.aconfig b/core/java/android/window/flags/windowing_sdk.aconfig index e49089ded6fb..6c00c70a0f55 100644 --- a/core/java/android/window/flags/windowing_sdk.aconfig +++ b/core/java/android/window/flags/windowing_sdk.aconfig @@ -1,4 +1,5 @@ package: "com.android.window.flags" +container: "system" # Project link: https://gantry.corp.google.com/projects/android_platform_windowing_sdk/changes diff --git a/core/java/com/android/internal/inputmethod/IInputMethodPrivilegedOperations.aidl b/core/java/com/android/internal/inputmethod/IInputMethodPrivilegedOperations.aidl index 457b9dd34644..63623c767694 100644 --- a/core/java/com/android/internal/inputmethod/IInputMethodPrivilegedOperations.aidl +++ b/core/java/com/android/internal/inputmethod/IInputMethodPrivilegedOperations.aidl @@ -49,4 +49,5 @@ oneway interface IInputMethodPrivilegedOperations { void onStylusHandwritingReady(int requestId, int pid); void resetStylusHandwriting(int requestId); void switchKeyboardLayoutAsync(int direction); + void setHandwritingSurfaceNotTouchable(boolean notTouchable); } diff --git a/core/java/com/android/internal/inputmethod/InputMethodPrivilegedOperations.java b/core/java/com/android/internal/inputmethod/InputMethodPrivilegedOperations.java index 635a227e5862..72c41bed4436 100644 --- a/core/java/com/android/internal/inputmethod/InputMethodPrivilegedOperations.java +++ b/core/java/com/android/internal/inputmethod/InputMethodPrivilegedOperations.java @@ -144,6 +144,24 @@ public final class InputMethodPrivilegedOperations { } /** + * Calls {@link IInputMethodPrivilegedOperations#setHandwritingSurfaceNotTouchable(boolean)}. + * + * @param notTouchable {@code true} to make handwriting surface not-touchable (pass-through). + */ + @AnyThread + public void setHandwritingSurfaceNotTouchable(boolean notTouchable) { + final IInputMethodPrivilegedOperations ops = mOps.getAndWarnIfNull(); + if (ops == null) { + return; + } + try { + ops.setHandwritingSurfaceNotTouchable(notTouchable); + } catch (RemoteException e) { + throw e.rethrowFromSystemServer(); + } + } + + /** * Calls {@link IInputMethodPrivilegedOperations#createInputContentUriToken(Uri, String, * AndroidFuture)}. * diff --git a/core/java/com/android/internal/pm/pkg/component/flags/flags.aconfig b/core/java/com/android/internal/pm/pkg/component/flags/flags.aconfig index ea9abdbc4388..89db1cb74c01 100644 --- a/core/java/com/android/internal/pm/pkg/component/flags/flags.aconfig +++ b/core/java/com/android/internal/pm/pkg/component/flags/flags.aconfig @@ -1,4 +1,5 @@ package: "com.android.internal.pm.pkg.component.flags" +container: "system" flag { name: "enable_per_process_use_embedded_dex_attr" diff --git a/core/res/AndroidManifest.xml b/core/res/AndroidManifest.xml index 76d7a4166d09..657cc187089c 100644 --- a/core/res/AndroidManifest.xml +++ b/core/res/AndroidManifest.xml @@ -7985,17 +7985,6 @@ <permission android:name="android.permission.RUN_USER_INITIATED_JOBS" android:protectionLevel="normal"/> - <!-- @FlaggedApi("android.app.job.backup_jobs_exemption") - Gives applications with a <b>major use case</b> of backing-up or syncing content increased - job execution allowance in order to complete the related work. The jobs must have a valid - content URI trigger and network constraint set. - <p>This is a special access permission that can be revoked by the system or the user. - <p>Protection level: signature|privileged|appop - @hide - --> - <permission android:name="android.permission.RUN_BACKUP_JOBS" - android:protectionLevel="signature|privileged|appop"/> - <!-- Allows an app access to the installer provided app metadata. @SystemApi @hide diff --git a/core/res/res/values-af/strings.xml b/core/res/res/values-af/strings.xml index 08418611d902..8b9660eae33c 100644 --- a/core/res/res/values-af/strings.xml +++ b/core/res/res/values-af/strings.xml @@ -662,7 +662,8 @@ </string-array> <string name="fingerprint_error_not_match" msgid="4599441812893438961">"Vingerafdruk word nie herken nie"</string> <string name="fingerprint_udfps_error_not_match" msgid="8236930793223158856">"Vingerafdruk word nie herken nie"</string> - <string name="fingerprint_dialog_use_fingerprint_instead" msgid="6226091888364083421">"Kan nie gesig herken nie. Gebruik eerder vingerafdruk."</string> + <!-- no translation found for fingerprint_dialog_use_fingerprint_instead (5590293588784953188) --> + <skip /> <string name="fingerprint_authenticated" msgid="2024862866860283100">"Vingerafdruk is gestaaf"</string> <string name="face_authenticated_no_confirmation_required" msgid="8867889115112348167">"Gesig is gestaaf"</string> <string name="face_authenticated_confirmation_required" msgid="6872632732508013755">"Gesig is gestaaf; druk asseblief bevestig"</string> diff --git a/core/res/res/values-am/strings.xml b/core/res/res/values-am/strings.xml index 86df6505ce44..60eb410f82f0 100644 --- a/core/res/res/values-am/strings.xml +++ b/core/res/res/values-am/strings.xml @@ -662,7 +662,8 @@ </string-array> <string name="fingerprint_error_not_match" msgid="4599441812893438961">"የጣት አሻራ አልታወቀም"</string> <string name="fingerprint_udfps_error_not_match" msgid="8236930793223158856">"የጣት አሻራ አልታወቀም"</string> - <string name="fingerprint_dialog_use_fingerprint_instead" msgid="6226091888364083421">"መልክን መለየት አልተቻለም። በምትኩ የጣት አሻራ ይጠቀሙ።"</string> + <!-- no translation found for fingerprint_dialog_use_fingerprint_instead (5590293588784953188) --> + <skip /> <string name="fingerprint_authenticated" msgid="2024862866860283100">"የጣት አሻራ ትክክለኛነት ተረጋግጧል"</string> <string name="face_authenticated_no_confirmation_required" msgid="8867889115112348167">"ፊት ተረጋግጧል"</string> <string name="face_authenticated_confirmation_required" msgid="6872632732508013755">"ፊት ተረጋግጧል፣ እባክዎ አረጋግጥን ይጫኑ"</string> diff --git a/core/res/res/values-ar/strings.xml b/core/res/res/values-ar/strings.xml index 185c3c655f04..e3f8442bb44e 100644 --- a/core/res/res/values-ar/strings.xml +++ b/core/res/res/values-ar/strings.xml @@ -666,7 +666,8 @@ </string-array> <string name="fingerprint_error_not_match" msgid="4599441812893438961">"لم يتمّ التعرّف على البصمة."</string> <string name="fingerprint_udfps_error_not_match" msgid="8236930793223158856">"لم يتمّ التعرّف على بصمة الإصبع."</string> - <string name="fingerprint_dialog_use_fingerprint_instead" msgid="6226091888364083421">"يتعذّر التعرّف على الوجه. استخدِم بصمة الإصبع بدلاً من ذلك."</string> + <!-- no translation found for fingerprint_dialog_use_fingerprint_instead (5590293588784953188) --> + <skip /> <string name="fingerprint_authenticated" msgid="2024862866860283100">"تم مصادقة بصمة الإصبع"</string> <string name="face_authenticated_no_confirmation_required" msgid="8867889115112348167">"تمّت مصادقة الوجه"</string> <string name="face_authenticated_confirmation_required" msgid="6872632732508013755">"تمّت مصادقة الوجه، يُرجى الضغط على \"تأكيد\"."</string> diff --git a/core/res/res/values-as/strings.xml b/core/res/res/values-as/strings.xml index 618c5816fdd5..1b8ca14bb64c 100644 --- a/core/res/res/values-as/strings.xml +++ b/core/res/res/values-as/strings.xml @@ -662,7 +662,8 @@ </string-array> <string name="fingerprint_error_not_match" msgid="4599441812893438961">"ফিংগাৰপ্ৰিণ্ট চিনাক্ত কৰিব পৰা নাই"</string> <string name="fingerprint_udfps_error_not_match" msgid="8236930793223158856">"ফিংগাৰপ্ৰিণ্ট চিনাক্ত কৰিব পৰা নাই"</string> - <string name="fingerprint_dialog_use_fingerprint_instead" msgid="6226091888364083421">"মুখাৱয়ব চিনিব নোৱাৰি। ফিংগাৰপ্ৰিণ্ট ব্যৱহাৰ কৰক।"</string> + <!-- no translation found for fingerprint_dialog_use_fingerprint_instead (5590293588784953188) --> + <skip /> <string name="fingerprint_authenticated" msgid="2024862866860283100">"ফিংগাৰপ্ৰিণ্টৰ সত্যাপন কৰা হ’ল"</string> <string name="face_authenticated_no_confirmation_required" msgid="8867889115112348167">"মুখমণ্ডলৰ বিশ্বাসযোগ্যতা প্ৰমাণীকৰণ কৰা হ’ল"</string> <string name="face_authenticated_confirmation_required" msgid="6872632732508013755">"মুখমণ্ডলৰ বিশ্বাসযোগ্যতা প্ৰমাণীকৰণ কৰা হ’ল, অনুগ্ৰহ কৰি ‘নিশ্চিত কৰক’ বুটামটো টিপক"</string> @@ -692,7 +693,7 @@ <string name="alternative_unlock_setup_notification_title" msgid="6241508547901933544">"আনলক কৰিবলৈ আন এটা উপায় ব্যৱহাৰ কৰি চাওক"</string> <string name="alternative_face_setup_notification_content" msgid="3384959224091897331">"আপোনাৰ আঙুলিকেইটা তিতি থকাৰ দৰে পৰিস্থিতিত, আপোনাৰ ফিংগাৰপ্ৰিণ্ট চিনাক্ত কৰিব নোৱাৰিলে ফে’চ আনলক সুবিধাটো ব্যৱহাৰ কৰক"</string> <string name="alternative_fp_setup_notification_content" msgid="7454096947415721639">"পৰ্যাপ্ত পোহৰ নথকাৰ দৰে পৰিস্থিতিত, আপোনাৰ মুখাৱয়ব চিনাক্ত কৰিব নোৱাৰিলে ফিংগাৰপ্ৰিণ্ট আনলক সুবিধাটো ব্যৱহাৰ কৰক"</string> - <string name="face_recalibrate_notification_name" msgid="7311163114750748686">"ফেচ আনলক"</string> + <string name="face_recalibrate_notification_name" msgid="7311163114750748686">"ফে’চ আনলক"</string> <string name="face_recalibrate_notification_title" msgid="2524791952735579082">"ফেচ আনলক ব্যৱহাৰ কৰোঁতে সমস্যা হৈছে"</string> <string name="face_recalibrate_notification_content" msgid="3064513770251355594">"আপোনাৰ মুখাৱয়বৰ মডেলটো মচিবলৈ টিপক, তাৰ পাছত পুনৰ আপোনাৰ মুখাৱয়ব যোগ দিয়ক"</string> <string name="face_sensor_privacy_enabled" msgid="7407126963510598508">"ফেচ আনলক সুবিধাটো ব্যৱহাৰ কৰিবলৈ ছেটিং > গোপনীয়তাত "<b>"কেমেৰাৰ এক্সেছ"</b>" অন কৰক"</string> @@ -1066,7 +1067,7 @@ <string name="keyguard_accessibility_expand_lock_area" msgid="4215280881346033434">"আনলক ক্ষেত্ৰ বিস্তাৰ কৰক।"</string> <string name="keyguard_accessibility_slide_unlock" msgid="2968195219692413046">"শ্লাইডৰদ্বাৰা আনলক।"</string> <string name="keyguard_accessibility_pattern_unlock" msgid="8669128146589233293">"আৰ্হিৰদ্বাৰা আনলক।"</string> - <string name="keyguard_accessibility_face_unlock" msgid="4533832120787386728">"ফেচ আনলক।"</string> + <string name="keyguard_accessibility_face_unlock" msgid="4533832120787386728">"ফে’চ আনলক।"</string> <string name="keyguard_accessibility_pin_unlock" msgid="4020864007967340068">"পিনৰদ্বাৰা আনলক।"</string> <string name="keyguard_accessibility_sim_pin_unlock" msgid="4895939120871890557">"ছিম পিন আনলক।"</string> <string name="keyguard_accessibility_sim_puk_unlock" msgid="3459003464041899101">"ছিম পিইউকে আনলক।"</string> diff --git a/core/res/res/values-az/strings.xml b/core/res/res/values-az/strings.xml index 643c5cbc6eb9..661732d58441 100644 --- a/core/res/res/values-az/strings.xml +++ b/core/res/res/values-az/strings.xml @@ -662,7 +662,8 @@ </string-array> <string name="fingerprint_error_not_match" msgid="4599441812893438961">"Barmaq izi tanınmır"</string> <string name="fingerprint_udfps_error_not_match" msgid="8236930793223158856">"Barmaq izi tanınmır"</string> - <string name="fingerprint_dialog_use_fingerprint_instead" msgid="6226091888364083421">"Tanımaq olmur. Barmaq izini işlədin."</string> + <!-- no translation found for fingerprint_dialog_use_fingerprint_instead (5590293588784953188) --> + <skip /> <string name="fingerprint_authenticated" msgid="2024862866860283100">"Barmaq izi doğrulandı"</string> <string name="face_authenticated_no_confirmation_required" msgid="8867889115112348167">"Üz doğrulandı"</string> <string name="face_authenticated_confirmation_required" msgid="6872632732508013755">"Üz təsdiq edildi, təsdiq düyməsinə basın"</string> diff --git a/core/res/res/values-b+sr+Latn/strings.xml b/core/res/res/values-b+sr+Latn/strings.xml index 06b6a13a184d..950247c6965c 100644 --- a/core/res/res/values-b+sr+Latn/strings.xml +++ b/core/res/res/values-b+sr+Latn/strings.xml @@ -663,7 +663,8 @@ </string-array> <string name="fingerprint_error_not_match" msgid="4599441812893438961">"Otisak prsta nije prepoznat"</string> <string name="fingerprint_udfps_error_not_match" msgid="8236930793223158856">"Otisak prsta nije prepoznat"</string> - <string name="fingerprint_dialog_use_fingerprint_instead" msgid="6226091888364083421">"Lice nije prepoznato. Koristite otisak prsta."</string> + <!-- no translation found for fingerprint_dialog_use_fingerprint_instead (5590293588784953188) --> + <skip /> <string name="fingerprint_authenticated" msgid="2024862866860283100">"Otisak prsta je potvrđen"</string> <string name="face_authenticated_no_confirmation_required" msgid="8867889115112348167">"Lice je potvrđeno"</string> <string name="face_authenticated_confirmation_required" msgid="6872632732508013755">"Lice je potvrđeno. Pritisnite Potvrdi"</string> diff --git a/core/res/res/values-be/strings.xml b/core/res/res/values-be/strings.xml index 43c73d146756..7b55c9c1093b 100644 --- a/core/res/res/values-be/strings.xml +++ b/core/res/res/values-be/strings.xml @@ -664,7 +664,8 @@ </string-array> <string name="fingerprint_error_not_match" msgid="4599441812893438961">"Адбітак пальца не распазнаны"</string> <string name="fingerprint_udfps_error_not_match" msgid="8236930793223158856">"Адбітак пальца не распазнаны"</string> - <string name="fingerprint_dialog_use_fingerprint_instead" msgid="6226091888364083421">"Твар не распазнаны. Скарыстайце адбітак пальца."</string> + <!-- no translation found for fingerprint_dialog_use_fingerprint_instead (5590293588784953188) --> + <skip /> <string name="fingerprint_authenticated" msgid="2024862866860283100">"Адбітак пальца распазнаны"</string> <string name="face_authenticated_no_confirmation_required" msgid="8867889115112348167">"Твар распазнаны"</string> <string name="face_authenticated_confirmation_required" msgid="6872632732508013755">"Твар распазнаны. Націсніце, каб пацвердзіць"</string> diff --git a/core/res/res/values-bg/strings.xml b/core/res/res/values-bg/strings.xml index 181e6129acff..f4b8557226ff 100644 --- a/core/res/res/values-bg/strings.xml +++ b/core/res/res/values-bg/strings.xml @@ -662,7 +662,7 @@ </string-array> <string name="fingerprint_error_not_match" msgid="4599441812893438961">"Отпечатъкът не е разпознат"</string> <string name="fingerprint_udfps_error_not_match" msgid="8236930793223158856">"Отпечатъкът не е разпознат"</string> - <string name="fingerprint_dialog_use_fingerprint_instead" msgid="6226091888364083421">"Лицето не е разпознато. Използвайте отпечатък."</string> + <string name="fingerprint_dialog_use_fingerprint_instead" msgid="5590293588784953188">"Лицето не е разпознато. Използвайте отпечатък."</string> <string name="fingerprint_authenticated" msgid="2024862866860283100">"Отпечатъкът е удостоверен"</string> <string name="face_authenticated_no_confirmation_required" msgid="8867889115112348167">"Лицето е удостоверено"</string> <string name="face_authenticated_confirmation_required" msgid="6872632732508013755">"Лицето е удостоверено. Моля, натиснете „Потвърждаване“"</string> diff --git a/core/res/res/values-bn/strings.xml b/core/res/res/values-bn/strings.xml index 958346192a00..f9fc1db7770b 100644 --- a/core/res/res/values-bn/strings.xml +++ b/core/res/res/values-bn/strings.xml @@ -662,7 +662,8 @@ </string-array> <string name="fingerprint_error_not_match" msgid="4599441812893438961">"ফিঙ্গারপ্রিন্ট শনাক্ত করা যায়নি"</string> <string name="fingerprint_udfps_error_not_match" msgid="8236930793223158856">"ফিঙ্গারপ্রিন্ট শনাক্ত করা যায়নি"</string> - <string name="fingerprint_dialog_use_fingerprint_instead" msgid="6226091888364083421">"মুখ শনাক্ত করতে পারছি না। পরিবর্তে আঙ্গুলের ছাপ ব্যবহার করুন।"</string> + <!-- no translation found for fingerprint_dialog_use_fingerprint_instead (5590293588784953188) --> + <skip /> <string name="fingerprint_authenticated" msgid="2024862866860283100">"আঙ্গুলের ছাপ যাচাই করা হয়েছে"</string> <string name="face_authenticated_no_confirmation_required" msgid="8867889115112348167">"ফেস যাচাই করা হয়েছে"</string> <string name="face_authenticated_confirmation_required" msgid="6872632732508013755">"ফেস যাচাই করা হয়েছে, \'কনফার্ম করুন\' বোতাম প্রেস করুন"</string> diff --git a/core/res/res/values-bs/strings.xml b/core/res/res/values-bs/strings.xml index 170f84e1b3bd..555be460d8fe 100644 --- a/core/res/res/values-bs/strings.xml +++ b/core/res/res/values-bs/strings.xml @@ -663,7 +663,8 @@ </string-array> <string name="fingerprint_error_not_match" msgid="4599441812893438961">"Otisak prsta nije prepoznat"</string> <string name="fingerprint_udfps_error_not_match" msgid="8236930793223158856">"Otisak prsta nije prepoznat"</string> - <string name="fingerprint_dialog_use_fingerprint_instead" msgid="6226091888364083421">"Nije moguće prepoznati lice. Koristite otisak prsta."</string> + <!-- no translation found for fingerprint_dialog_use_fingerprint_instead (5590293588784953188) --> + <skip /> <string name="fingerprint_authenticated" msgid="2024862866860283100">"Otisak prsta je potvrđen"</string> <string name="face_authenticated_no_confirmation_required" msgid="8867889115112348167">"Lice je provjereno"</string> <string name="face_authenticated_confirmation_required" msgid="6872632732508013755">"Lice je provjereno, pritisnite dugme za potvrdu"</string> diff --git a/core/res/res/values-ca/strings.xml b/core/res/res/values-ca/strings.xml index ae4fbcf52d51..4696e4b1fcfa 100644 --- a/core/res/res/values-ca/strings.xml +++ b/core/res/res/values-ca/strings.xml @@ -663,7 +663,7 @@ </string-array> <string name="fingerprint_error_not_match" msgid="4599441812893438961">"L\'empremta digital no s\'ha reconegut"</string> <string name="fingerprint_udfps_error_not_match" msgid="8236930793223158856">"L\'empremta digital no s\'ha reconegut"</string> - <string name="fingerprint_dialog_use_fingerprint_instead" msgid="6226091888364083421">"No podem detectar la cara. Usa l\'empremta digital."</string> + <string name="fingerprint_dialog_use_fingerprint_instead" msgid="5590293588784953188">"La cara no s\'ha reconegut. Usa l\'empremta digital."</string> <string name="fingerprint_authenticated" msgid="2024862866860283100">"L\'empremta digital s\'ha autenticat"</string> <string name="face_authenticated_no_confirmation_required" msgid="8867889115112348167">"Cara autenticada"</string> <string name="face_authenticated_confirmation_required" msgid="6872632732508013755">"Cara autenticada; prem el botó per confirmar"</string> diff --git a/core/res/res/values-cs/strings.xml b/core/res/res/values-cs/strings.xml index 4318608f40e7..f770a74bca7a 100644 --- a/core/res/res/values-cs/strings.xml +++ b/core/res/res/values-cs/strings.xml @@ -664,7 +664,7 @@ </string-array> <string name="fingerprint_error_not_match" msgid="4599441812893438961">"Otisk prstu nebyl rozpoznán"</string> <string name="fingerprint_udfps_error_not_match" msgid="8236930793223158856">"Otisk prstu nebyl rozpoznán"</string> - <string name="fingerprint_dialog_use_fingerprint_instead" msgid="6226091888364083421">"Obličej se nepodařilo rozpoznat. Použijte místo něj otisk prstu."</string> + <string name="fingerprint_dialog_use_fingerprint_instead" msgid="5590293588784953188">"Obličej nebyl rozpoznán. Použijte místo něj otisk prstu."</string> <string name="fingerprint_authenticated" msgid="2024862866860283100">"Otisk byl ověřen"</string> <string name="face_authenticated_no_confirmation_required" msgid="8867889115112348167">"Obličej byl ověřen"</string> <string name="face_authenticated_confirmation_required" msgid="6872632732508013755">"Obličej byl ověřen, stiskněte tlačítko pro potvrzení"</string> diff --git a/core/res/res/values-da/strings.xml b/core/res/res/values-da/strings.xml index 3f830c9d7cf1..473a1205a163 100644 --- a/core/res/res/values-da/strings.xml +++ b/core/res/res/values-da/strings.xml @@ -662,7 +662,8 @@ </string-array> <string name="fingerprint_error_not_match" msgid="4599441812893438961">"Fingeraftrykket blev ikke genkendt"</string> <string name="fingerprint_udfps_error_not_match" msgid="8236930793223158856">"Fingeraftrykket blev ikke genkendt"</string> - <string name="fingerprint_dialog_use_fingerprint_instead" msgid="6226091888364083421">"Ansigtet kan ikke genkendes. Brug fingeraftryk i stedet."</string> + <!-- no translation found for fingerprint_dialog_use_fingerprint_instead (5590293588784953188) --> + <skip /> <string name="fingerprint_authenticated" msgid="2024862866860283100">"Fingeraftrykket blev godkendt"</string> <string name="face_authenticated_no_confirmation_required" msgid="8867889115112348167">"Ansigtet er godkendt"</string> <string name="face_authenticated_confirmation_required" msgid="6872632732508013755">"Ansigtet er godkendt. Tryk på Bekræft."</string> diff --git a/core/res/res/values-de/strings.xml b/core/res/res/values-de/strings.xml index 59940a3bc4c9..d73f2141a46e 100644 --- a/core/res/res/values-de/strings.xml +++ b/core/res/res/values-de/strings.xml @@ -662,7 +662,8 @@ </string-array> <string name="fingerprint_error_not_match" msgid="4599441812893438961">"Fingerabdruck nicht erkannt"</string> <string name="fingerprint_udfps_error_not_match" msgid="8236930793223158856">"Fingerabdruck nicht erkannt"</string> - <string name="fingerprint_dialog_use_fingerprint_instead" msgid="6226091888364083421">"Gesicht wurde nicht erkannt. Verwende stattdessen den Fingerabdruck."</string> + <!-- no translation found for fingerprint_dialog_use_fingerprint_instead (5590293588784953188) --> + <skip /> <string name="fingerprint_authenticated" msgid="2024862866860283100">"Fingerabdruck wurde authentifiziert"</string> <string name="face_authenticated_no_confirmation_required" msgid="8867889115112348167">"Gesicht authentifiziert"</string> <string name="face_authenticated_confirmation_required" msgid="6872632732508013755">"Gesicht authentifiziert, bitte bestätigen"</string> diff --git a/core/res/res/values-el/strings.xml b/core/res/res/values-el/strings.xml index cafccf5992b0..353479b013ab 100644 --- a/core/res/res/values-el/strings.xml +++ b/core/res/res/values-el/strings.xml @@ -662,7 +662,7 @@ </string-array> <string name="fingerprint_error_not_match" msgid="4599441812893438961">"Δεν είναι δυνατή η αναγνώριση του δακτυλικού αποτυπώματος"</string> <string name="fingerprint_udfps_error_not_match" msgid="8236930793223158856">"Δεν είναι δυνατή η αναγνώριση του δακτυλικού αποτυπώματος"</string> - <string name="fingerprint_dialog_use_fingerprint_instead" msgid="6226091888364083421">"Το πρόσωπο δεν αναγνωρίζεται. Χρησιμ. δακτ. αποτ."</string> + <string name="fingerprint_dialog_use_fingerprint_instead" msgid="5590293588784953188">"Δεν αναγνωρίστηκε. Χρήση δακτυλικού αποτυπώματος."</string> <string name="fingerprint_authenticated" msgid="2024862866860283100">"Η ταυτότητα του δακτυλικού αποτυπώματος ελέγχθηκε"</string> <string name="face_authenticated_no_confirmation_required" msgid="8867889115112348167">"Έγινε έλεγχος ταυτότητας προσώπου"</string> <string name="face_authenticated_confirmation_required" msgid="6872632732508013755">"Έγινε έλεγχος ταυτότητας προσώπου, πατήστε \"Επιβεβαίωση\""</string> diff --git a/core/res/res/values-en-rAU/strings.xml b/core/res/res/values-en-rAU/strings.xml index 11fb50e03869..73a0512c5a6e 100644 --- a/core/res/res/values-en-rAU/strings.xml +++ b/core/res/res/values-en-rAU/strings.xml @@ -662,7 +662,8 @@ </string-array> <string name="fingerprint_error_not_match" msgid="4599441812893438961">"Fingerprint not recognised"</string> <string name="fingerprint_udfps_error_not_match" msgid="8236930793223158856">"Fingerprint not recognised"</string> - <string name="fingerprint_dialog_use_fingerprint_instead" msgid="6226091888364083421">"Can’t recognise face. Use fingerprint instead."</string> + <!-- no translation found for fingerprint_dialog_use_fingerprint_instead (5590293588784953188) --> + <skip /> <string name="fingerprint_authenticated" msgid="2024862866860283100">"Fingerprint authenticated"</string> <string name="face_authenticated_no_confirmation_required" msgid="8867889115112348167">"Face authenticated"</string> <string name="face_authenticated_confirmation_required" msgid="6872632732508013755">"Face authenticated. Please press confirm"</string> diff --git a/core/res/res/values-en-rCA/strings.xml b/core/res/res/values-en-rCA/strings.xml index 86fe49cb7ed3..035cd0c0b79c 100644 --- a/core/res/res/values-en-rCA/strings.xml +++ b/core/res/res/values-en-rCA/strings.xml @@ -662,7 +662,7 @@ </string-array> <string name="fingerprint_error_not_match" msgid="4599441812893438961">"Fingerprint not recognized"</string> <string name="fingerprint_udfps_error_not_match" msgid="8236930793223158856">"Fingerprint not recognized"</string> - <string name="fingerprint_dialog_use_fingerprint_instead" msgid="6226091888364083421">"Can’t recognize face. Use fingerprint instead."</string> + <string name="fingerprint_dialog_use_fingerprint_instead" msgid="5590293588784953188">"Face not recognized. Use fingerprint instead."</string> <string name="fingerprint_authenticated" msgid="2024862866860283100">"Fingerprint authenticated"</string> <string name="face_authenticated_no_confirmation_required" msgid="8867889115112348167">"Face authenticated"</string> <string name="face_authenticated_confirmation_required" msgid="6872632732508013755">"Face authenticated, please press confirm"</string> diff --git a/core/res/res/values-en-rGB/strings.xml b/core/res/res/values-en-rGB/strings.xml index 60dbcd96914f..e01792496709 100644 --- a/core/res/res/values-en-rGB/strings.xml +++ b/core/res/res/values-en-rGB/strings.xml @@ -662,7 +662,8 @@ </string-array> <string name="fingerprint_error_not_match" msgid="4599441812893438961">"Fingerprint not recognised"</string> <string name="fingerprint_udfps_error_not_match" msgid="8236930793223158856">"Fingerprint not recognised"</string> - <string name="fingerprint_dialog_use_fingerprint_instead" msgid="6226091888364083421">"Can’t recognise face. Use fingerprint instead."</string> + <!-- no translation found for fingerprint_dialog_use_fingerprint_instead (5590293588784953188) --> + <skip /> <string name="fingerprint_authenticated" msgid="2024862866860283100">"Fingerprint authenticated"</string> <string name="face_authenticated_no_confirmation_required" msgid="8867889115112348167">"Face authenticated"</string> <string name="face_authenticated_confirmation_required" msgid="6872632732508013755">"Face authenticated. Please press confirm"</string> diff --git a/core/res/res/values-en-rIN/strings.xml b/core/res/res/values-en-rIN/strings.xml index 859d04af9037..0380ffc87e30 100644 --- a/core/res/res/values-en-rIN/strings.xml +++ b/core/res/res/values-en-rIN/strings.xml @@ -662,7 +662,8 @@ </string-array> <string name="fingerprint_error_not_match" msgid="4599441812893438961">"Fingerprint not recognised"</string> <string name="fingerprint_udfps_error_not_match" msgid="8236930793223158856">"Fingerprint not recognised"</string> - <string name="fingerprint_dialog_use_fingerprint_instead" msgid="6226091888364083421">"Can’t recognise face. Use fingerprint instead."</string> + <!-- no translation found for fingerprint_dialog_use_fingerprint_instead (5590293588784953188) --> + <skip /> <string name="fingerprint_authenticated" msgid="2024862866860283100">"Fingerprint authenticated"</string> <string name="face_authenticated_no_confirmation_required" msgid="8867889115112348167">"Face authenticated"</string> <string name="face_authenticated_confirmation_required" msgid="6872632732508013755">"Face authenticated. Please press confirm"</string> diff --git a/core/res/res/values-en-rXC/strings.xml b/core/res/res/values-en-rXC/strings.xml index b7f49980acd7..c95aee33901a 100644 --- a/core/res/res/values-en-rXC/strings.xml +++ b/core/res/res/values-en-rXC/strings.xml @@ -662,7 +662,7 @@ </string-array> <string name="fingerprint_error_not_match" msgid="4599441812893438961">"Fingerprint not recognized"</string> <string name="fingerprint_udfps_error_not_match" msgid="8236930793223158856">"Fingerprint not recognized"</string> - <string name="fingerprint_dialog_use_fingerprint_instead" msgid="6226091888364083421">"Can’t recognize face. Use fingerprint instead."</string> + <string name="fingerprint_dialog_use_fingerprint_instead" msgid="5590293588784953188">"Face not recognized. Use fingerprint instead."</string> <string name="fingerprint_authenticated" msgid="2024862866860283100">"Fingerprint authenticated"</string> <string name="face_authenticated_no_confirmation_required" msgid="8867889115112348167">"Face authenticated"</string> <string name="face_authenticated_confirmation_required" msgid="6872632732508013755">"Face authenticated, please press confirm"</string> diff --git a/core/res/res/values-es-rUS/strings.xml b/core/res/res/values-es-rUS/strings.xml index 39e3d5da2227..f1d2dfaf0b03 100644 --- a/core/res/res/values-es-rUS/strings.xml +++ b/core/res/res/values-es-rUS/strings.xml @@ -663,7 +663,8 @@ </string-array> <string name="fingerprint_error_not_match" msgid="4599441812893438961">"No se reconoció la huella dactilar"</string> <string name="fingerprint_udfps_error_not_match" msgid="8236930793223158856">"No se reconoció la huella dactilar"</string> - <string name="fingerprint_dialog_use_fingerprint_instead" msgid="6226091888364083421">"No se reconoce el rostro. Usa la huella dactilar."</string> + <!-- no translation found for fingerprint_dialog_use_fingerprint_instead (5590293588784953188) --> + <skip /> <string name="fingerprint_authenticated" msgid="2024862866860283100">"Se autenticó la huella dactilar"</string> <string name="face_authenticated_no_confirmation_required" msgid="8867889115112348167">"Se autenticó el rostro"</string> <string name="face_authenticated_confirmation_required" msgid="6872632732508013755">"Se autenticó el rostro; presiona Confirmar"</string> diff --git a/core/res/res/values-es/strings.xml b/core/res/res/values-es/strings.xml index d2aa32c4f9e5..e328fcc4f0cf 100644 --- a/core/res/res/values-es/strings.xml +++ b/core/res/res/values-es/strings.xml @@ -663,7 +663,8 @@ </string-array> <string name="fingerprint_error_not_match" msgid="4599441812893438961">"Huella digital no reconocida"</string> <string name="fingerprint_udfps_error_not_match" msgid="8236930793223158856">"Huella digital no reconocida"</string> - <string name="fingerprint_dialog_use_fingerprint_instead" msgid="6226091888364083421">"No se reconoce la cara. Usa la huella digital."</string> + <!-- no translation found for fingerprint_dialog_use_fingerprint_instead (5590293588784953188) --> + <skip /> <string name="fingerprint_authenticated" msgid="2024862866860283100">"Se ha autenticado la huella digital"</string> <string name="face_authenticated_no_confirmation_required" msgid="8867889115112348167">"Cara autenticada"</string> <string name="face_authenticated_confirmation_required" msgid="6872632732508013755">"Se ha autenticado la cara, pulsa para confirmar"</string> diff --git a/core/res/res/values-et/strings.xml b/core/res/res/values-et/strings.xml index 99809d3a3311..d84d0e132862 100644 --- a/core/res/res/values-et/strings.xml +++ b/core/res/res/values-et/strings.xml @@ -662,7 +662,8 @@ </string-array> <string name="fingerprint_error_not_match" msgid="4599441812893438961">"Sõrmejälge ei tuvastatud"</string> <string name="fingerprint_udfps_error_not_match" msgid="8236930793223158856">"Sõrmejälge ei tuvastatud"</string> - <string name="fingerprint_dialog_use_fingerprint_instead" msgid="6226091888364083421">"Nägu ei õnnestu tuvastada. Kasutage sõrmejälge."</string> + <!-- no translation found for fingerprint_dialog_use_fingerprint_instead (5590293588784953188) --> + <skip /> <string name="fingerprint_authenticated" msgid="2024862866860283100">"Sõrmejälg autenditi"</string> <string name="face_authenticated_no_confirmation_required" msgid="8867889115112348167">"Nägu on autenditud"</string> <string name="face_authenticated_confirmation_required" msgid="6872632732508013755">"Nägu on autenditud, vajutage käsku Kinnita"</string> diff --git a/core/res/res/values-eu/strings.xml b/core/res/res/values-eu/strings.xml index c8c2e4575f7b..eb6f507ce1b7 100644 --- a/core/res/res/values-eu/strings.xml +++ b/core/res/res/values-eu/strings.xml @@ -662,7 +662,8 @@ </string-array> <string name="fingerprint_error_not_match" msgid="4599441812893438961">"Ez da ezagutu hatz-marka"</string> <string name="fingerprint_udfps_error_not_match" msgid="8236930793223158856">"Ez da ezagutu hatz-marka"</string> - <string name="fingerprint_dialog_use_fingerprint_instead" msgid="6226091888364083421">"Ezin da hauteman aurpegia. Erabili hatz-marka."</string> + <!-- no translation found for fingerprint_dialog_use_fingerprint_instead (5590293588784953188) --> + <skip /> <string name="fingerprint_authenticated" msgid="2024862866860283100">"Autentifikatu da hatz-marka"</string> <string name="face_authenticated_no_confirmation_required" msgid="8867889115112348167">"Autentifikatu da aurpegia"</string> <string name="face_authenticated_confirmation_required" msgid="6872632732508013755">"Autentifikatu da aurpegia; sakatu Berretsi"</string> diff --git a/core/res/res/values-fa/strings.xml b/core/res/res/values-fa/strings.xml index c59ac025787b..6acd5f6f57fd 100644 --- a/core/res/res/values-fa/strings.xml +++ b/core/res/res/values-fa/strings.xml @@ -662,7 +662,8 @@ </string-array> <string name="fingerprint_error_not_match" msgid="4599441812893438961">"اثر انگشت تشخیص داده نشد"</string> <string name="fingerprint_udfps_error_not_match" msgid="8236930793223158856">"اثر انگشت تشخیص داده نشد"</string> - <string name="fingerprint_dialog_use_fingerprint_instead" msgid="6226091888364083421">"چهره شناسایی نشد. درعوض از اثر انگشت استفاده کنید."</string> + <!-- no translation found for fingerprint_dialog_use_fingerprint_instead (5590293588784953188) --> + <skip /> <string name="fingerprint_authenticated" msgid="2024862866860283100">"اثر انگشت اصالتسنجی شد"</string> <string name="face_authenticated_no_confirmation_required" msgid="8867889115112348167">"چهره اصالتسنجی شد"</string> <string name="face_authenticated_confirmation_required" msgid="6872632732508013755">"چهره اصالتسنجی شد، لطفاً تأیید را فشار دهید"</string> diff --git a/core/res/res/values-fi/strings.xml b/core/res/res/values-fi/strings.xml index 7612906d732f..30fdc24de578 100644 --- a/core/res/res/values-fi/strings.xml +++ b/core/res/res/values-fi/strings.xml @@ -662,7 +662,8 @@ </string-array> <string name="fingerprint_error_not_match" msgid="4599441812893438961">"Sormenjälkeä ei tunnistettu"</string> <string name="fingerprint_udfps_error_not_match" msgid="8236930793223158856">"Sormenjälkeä ei tunnistettu"</string> - <string name="fingerprint_dialog_use_fingerprint_instead" msgid="6226091888364083421">"Kasvoja ei voi tunnistaa. Käytä sormenjälkeä."</string> + <!-- no translation found for fingerprint_dialog_use_fingerprint_instead (5590293588784953188) --> + <skip /> <string name="fingerprint_authenticated" msgid="2024862866860283100">"Sormenjälki tunnistettu"</string> <string name="face_authenticated_no_confirmation_required" msgid="8867889115112348167">"Kasvot tunnistettu"</string> <string name="face_authenticated_confirmation_required" msgid="6872632732508013755">"Kasvot tunnistettu, valitse Vahvista"</string> diff --git a/core/res/res/values-fr-rCA/strings.xml b/core/res/res/values-fr-rCA/strings.xml index 7d86d83432ff..79529a94cbc0 100644 --- a/core/res/res/values-fr-rCA/strings.xml +++ b/core/res/res/values-fr-rCA/strings.xml @@ -663,7 +663,8 @@ </string-array> <string name="fingerprint_error_not_match" msgid="4599441812893438961">"Empreinte digitale non reconnue"</string> <string name="fingerprint_udfps_error_not_match" msgid="8236930793223158856">"Empreinte digitale non reconnue"</string> - <string name="fingerprint_dialog_use_fingerprint_instead" msgid="6226091888364083421">"Visage non reconnu. Utilisez plutôt l\'empreinte digitale."</string> + <!-- no translation found for fingerprint_dialog_use_fingerprint_instead (5590293588784953188) --> + <skip /> <string name="fingerprint_authenticated" msgid="2024862866860283100">"Empreinte digitale authentifiée"</string> <string name="face_authenticated_no_confirmation_required" msgid="8867889115112348167">"Visage authentifié"</string> <string name="face_authenticated_confirmation_required" msgid="6872632732508013755">"Visage authentifié, veuillez appuyer sur le bouton Confirmer"</string> @@ -1994,7 +1995,7 @@ <string name="work_mode_emergency_call_button" msgid="6818855962881612322">"Urgence"</string> <string name="set_up_screen_lock_title" msgid="8346083801616474030">"Config. Verrouillage d\'écran"</string> <string name="set_up_screen_lock_action_label" msgid="2687634803649209367">"Config. Verrouillage d\'écran"</string> - <string name="private_space_set_up_screen_lock_message" msgid="1109956797005149814">"Config. VÉ pour util. Esp. pr."</string> + <string name="private_space_set_up_screen_lock_message" msgid="1109956797005149814">"Configurez verrouillage de l\'écran pour utiliser Espace privé"</string> <string name="app_blocked_title" msgid="7353262160455028160">"L\'application n\'est pas accessible"</string> <string name="app_blocked_message" msgid="542972921087873023">"<xliff:g id="APP_NAME">%1$s</xliff:g> n\'est pas accessible pour le moment."</string> <string name="app_streaming_blocked_title" msgid="6090945835898766139">"<xliff:g id="ACTIVITY">%1$s</xliff:g> non accessible"</string> diff --git a/core/res/res/values-fr/strings.xml b/core/res/res/values-fr/strings.xml index 80f1cf8db321..421b22ad295d 100644 --- a/core/res/res/values-fr/strings.xml +++ b/core/res/res/values-fr/strings.xml @@ -663,7 +663,8 @@ </string-array> <string name="fingerprint_error_not_match" msgid="4599441812893438961">"Empreinte digitale non reconnue"</string> <string name="fingerprint_udfps_error_not_match" msgid="8236930793223158856">"Empreinte digitale non reconnue"</string> - <string name="fingerprint_dialog_use_fingerprint_instead" msgid="6226091888364083421">"Visage non reconnu. Utilisez votre empreinte."</string> + <!-- no translation found for fingerprint_dialog_use_fingerprint_instead (5590293588784953188) --> + <skip /> <string name="fingerprint_authenticated" msgid="2024862866860283100">"Empreinte digitale authentifiée"</string> <string name="face_authenticated_no_confirmation_required" msgid="8867889115112348167">"Visage authentifié"</string> <string name="face_authenticated_confirmation_required" msgid="6872632732508013755">"Visage authentifié, veuillez appuyer sur \"Confirmer\""</string> diff --git a/core/res/res/values-gl/strings.xml b/core/res/res/values-gl/strings.xml index 0dbf36928683..8926c2e07690 100644 --- a/core/res/res/values-gl/strings.xml +++ b/core/res/res/values-gl/strings.xml @@ -662,7 +662,7 @@ </string-array> <string name="fingerprint_error_not_match" msgid="4599441812893438961">"Non se recoñeceu a impresión dixital"</string> <string name="fingerprint_udfps_error_not_match" msgid="8236930793223158856">"Non se recoñeceu a impresión dixital"</string> - <string name="fingerprint_dialog_use_fingerprint_instead" msgid="6226091888364083421">"Non se recoñeceu a cara. Usa a impresión dixital."</string> + <string name="fingerprint_dialog_use_fingerprint_instead" msgid="5590293588784953188">"Non se recoñeceu a cara. Usa a impresión dixital."</string> <string name="fingerprint_authenticated" msgid="2024862866860283100">"Autenticouse a impresión dixital"</string> <string name="face_authenticated_no_confirmation_required" msgid="8867889115112348167">"Autenticouse a cara"</string> <string name="face_authenticated_confirmation_required" msgid="6872632732508013755">"Autenticouse a cara, preme Confirmar"</string> diff --git a/core/res/res/values-gu/strings.xml b/core/res/res/values-gu/strings.xml index b3cf16bb4e5e..40586ae0bbf8 100644 --- a/core/res/res/values-gu/strings.xml +++ b/core/res/res/values-gu/strings.xml @@ -662,7 +662,7 @@ </string-array> <string name="fingerprint_error_not_match" msgid="4599441812893438961">"ફિંગરપ્રિન્ટ ઓળખી શકાઈ નથી"</string> <string name="fingerprint_udfps_error_not_match" msgid="8236930793223158856">"ફિંગરપ્રિન્ટ ઓળખી શકાઈ નથી"</string> - <string name="fingerprint_dialog_use_fingerprint_instead" msgid="6226091888364083421">"ચહેરો ઓળખી શકતા નથી. તેને બદલે ફિંગરપ્રિન્ટ વાપરો."</string> + <string name="fingerprint_dialog_use_fingerprint_instead" msgid="5590293588784953188">"ચહેરો ઓળખાયો નથી. તેને બદલે ફિંગરપ્રિન્ટ વાપરો."</string> <string name="fingerprint_authenticated" msgid="2024862866860283100">"ફિંગરપ્રિન્ટ પ્રમાણિત કરી"</string> <string name="face_authenticated_no_confirmation_required" msgid="8867889115112348167">"ચહેરા પ્રમાણિત"</string> <string name="face_authenticated_confirmation_required" msgid="6872632732508013755">"ચહેરા પ્રમાણિત, કૃપા કરીને કન્ફર્મ કરો"</string> diff --git a/core/res/res/values-hi/strings.xml b/core/res/res/values-hi/strings.xml index c2b36b7342b2..f36de9d7ffa0 100644 --- a/core/res/res/values-hi/strings.xml +++ b/core/res/res/values-hi/strings.xml @@ -662,7 +662,8 @@ </string-array> <string name="fingerprint_error_not_match" msgid="4599441812893438961">"फ़िंगरप्रिंट की पहचान नहीं हो पाई"</string> <string name="fingerprint_udfps_error_not_match" msgid="8236930793223158856">"फ़िंगरप्रिंट की पहचान नहीं हो पाई"</string> - <string name="fingerprint_dialog_use_fingerprint_instead" msgid="6226091888364083421">"चेहरे की पहचान नहीं हुई. फ़िंगरप्रिंट इस्तेमाल करें."</string> + <!-- no translation found for fingerprint_dialog_use_fingerprint_instead (5590293588784953188) --> + <skip /> <string name="fingerprint_authenticated" msgid="2024862866860283100">"फ़िंगरप्रिंट की पुष्टि हो गई"</string> <string name="face_authenticated_no_confirmation_required" msgid="8867889115112348167">"चेहरे की पहचान की गई"</string> <string name="face_authenticated_confirmation_required" msgid="6872632732508013755">"चेहरे की पहचान की गई, कृपया पुष्टि बटन दबाएं"</string> @@ -990,7 +991,7 @@ <string name="lockscreen_instructions_when_pattern_enabled" msgid="7982445492532123308">"लॉक खोलने के लिए मेन्यू दबाएं या आपातलकालीन कॉल करें."</string> <string name="lockscreen_instructions_when_pattern_disabled" msgid="7434061749374801753">"लॉक खोलने के लिए मेन्यू दबाएं."</string> <string name="lockscreen_pattern_instructions" msgid="3169991838169244941">"अनलॉक करने के लिए आकार आरेखित करें"</string> - <string name="lockscreen_emergency_call" msgid="7500692654885445299">"आपातकाल"</string> + <string name="lockscreen_emergency_call" msgid="7500692654885445299">"आपातकालीन कॉल"</string> <string name="lockscreen_return_to_call" msgid="3156883574692006382">"कॉल पर वापस लौटें"</string> <string name="lockscreen_pattern_correct" msgid="8050630103651508582">"सही!"</string> <string name="lockscreen_pattern_wrong" msgid="2940138714468358458">"फिर से कोशिश करें"</string> diff --git a/core/res/res/values-hr/strings.xml b/core/res/res/values-hr/strings.xml index 02435994e2b0..edac53ee0b1b 100644 --- a/core/res/res/values-hr/strings.xml +++ b/core/res/res/values-hr/strings.xml @@ -663,7 +663,8 @@ </string-array> <string name="fingerprint_error_not_match" msgid="4599441812893438961">"Otisak prsta nije prepoznat"</string> <string name="fingerprint_udfps_error_not_match" msgid="8236930793223158856">"Otisak prsta nije prepoznat"</string> - <string name="fingerprint_dialog_use_fingerprint_instead" msgid="6226091888364083421">"Prepoznavanje lica nije uspjelo. Upotrijebite otisak prsta."</string> + <!-- no translation found for fingerprint_dialog_use_fingerprint_instead (5590293588784953188) --> + <skip /> <string name="fingerprint_authenticated" msgid="2024862866860283100">"Autentificirano otiskom prsta"</string> <string name="face_authenticated_no_confirmation_required" msgid="8867889115112348167">"Lice je autentificirano"</string> <string name="face_authenticated_confirmation_required" msgid="6872632732508013755">"Lice je autentificirano, pritisnite Potvrdi"</string> diff --git a/core/res/res/values-hu/strings.xml b/core/res/res/values-hu/strings.xml index 518e851e67cf..feb20274b98b 100644 --- a/core/res/res/values-hu/strings.xml +++ b/core/res/res/values-hu/strings.xml @@ -662,7 +662,8 @@ </string-array> <string name="fingerprint_error_not_match" msgid="4599441812893438961">"Az ujjlenyomat nem ismerhető fel"</string> <string name="fingerprint_udfps_error_not_match" msgid="8236930793223158856">"Az ujjlenyomat nem ismerhető fel"</string> - <string name="fingerprint_dialog_use_fingerprint_instead" msgid="6226091888364083421">"Az arc nem felismerhető. Használjon ujjlenyomatot."</string> + <!-- no translation found for fingerprint_dialog_use_fingerprint_instead (5590293588784953188) --> + <skip /> <string name="fingerprint_authenticated" msgid="2024862866860283100">"Ujjlenyomat hitelesítve"</string> <string name="face_authenticated_no_confirmation_required" msgid="8867889115112348167">"Arc hitelesítve"</string> <string name="face_authenticated_confirmation_required" msgid="6872632732508013755">"Arc hitelesítve; nyomja meg a Megerősítés lehetőséget"</string> diff --git a/core/res/res/values-hy/strings.xml b/core/res/res/values-hy/strings.xml index 74d3751532b8..14f875815da0 100644 --- a/core/res/res/values-hy/strings.xml +++ b/core/res/res/values-hy/strings.xml @@ -662,7 +662,8 @@ </string-array> <string name="fingerprint_error_not_match" msgid="4599441812893438961">"Մատնահետքը չի ճանաչվել"</string> <string name="fingerprint_udfps_error_not_match" msgid="8236930793223158856">"Մատնահետքը չի ճանաչվել"</string> - <string name="fingerprint_dialog_use_fingerprint_instead" msgid="6226091888364083421">"Դեմքը չի հաջողվում ճանաչել։ Օգտագործեք մատնահետքը։"</string> + <!-- no translation found for fingerprint_dialog_use_fingerprint_instead (5590293588784953188) --> + <skip /> <string name="fingerprint_authenticated" msgid="2024862866860283100">"Մատնահետքը նույնականացվեց"</string> <string name="face_authenticated_no_confirmation_required" msgid="8867889115112348167">"Դեմքը ճանաչվեց"</string> <string name="face_authenticated_confirmation_required" msgid="6872632732508013755">"Դեմքը ճանաչվեց: Սեղմեք «Հաստատել»:"</string> diff --git a/core/res/res/values-in/strings.xml b/core/res/res/values-in/strings.xml index 8a29efd9da71..cd02969c635d 100644 --- a/core/res/res/values-in/strings.xml +++ b/core/res/res/values-in/strings.xml @@ -662,7 +662,7 @@ </string-array> <string name="fingerprint_error_not_match" msgid="4599441812893438961">"Sidik jari tidak dikenali"</string> <string name="fingerprint_udfps_error_not_match" msgid="8236930793223158856">"Sidik jari tidak dikenali"</string> - <string name="fingerprint_dialog_use_fingerprint_instead" msgid="6226091888364083421">"Tidak dapat mengenali wajah. Gunakan sidik jari."</string> + <string name="fingerprint_dialog_use_fingerprint_instead" msgid="5590293588784953188">"Wajah tidak dikenali. Gunakan sidik jari."</string> <string name="fingerprint_authenticated" msgid="2024862866860283100">"Sidik jari diautentikasi"</string> <string name="face_authenticated_no_confirmation_required" msgid="8867889115112348167">"Wajah diautentikasi"</string> <string name="face_authenticated_confirmation_required" msgid="6872632732508013755">"Wajah diautentikasi, silakan tekan konfirmasi"</string> diff --git a/core/res/res/values-is/strings.xml b/core/res/res/values-is/strings.xml index caa801de4ae6..20dd3b90be94 100644 --- a/core/res/res/values-is/strings.xml +++ b/core/res/res/values-is/strings.xml @@ -662,7 +662,7 @@ </string-array> <string name="fingerprint_error_not_match" msgid="4599441812893438961">"Fingrafar þekkist ekki"</string> <string name="fingerprint_udfps_error_not_match" msgid="8236930793223158856">"Fingrafar þekkist ekki"</string> - <string name="fingerprint_dialog_use_fingerprint_instead" msgid="6226091888364083421">"Andlit þekkist ekki. Notaðu fingrafar í staðinn."</string> + <string name="fingerprint_dialog_use_fingerprint_instead" msgid="5590293588784953188">"Ekki tókst að bera kennsl á andlit. Notaðu fingrafar í staðinn."</string> <string name="fingerprint_authenticated" msgid="2024862866860283100">"Fingrafar staðfest"</string> <string name="face_authenticated_no_confirmation_required" msgid="8867889115112348167">"Andlit staðfest"</string> <string name="face_authenticated_confirmation_required" msgid="6872632732508013755">"Andlit staðfest, ýttu til að staðfesta"</string> diff --git a/core/res/res/values-it/strings.xml b/core/res/res/values-it/strings.xml index a5373abbc896..baaf1a65724e 100644 --- a/core/res/res/values-it/strings.xml +++ b/core/res/res/values-it/strings.xml @@ -663,7 +663,8 @@ </string-array> <string name="fingerprint_error_not_match" msgid="4599441812893438961">"Impronta non riconosciuta"</string> <string name="fingerprint_udfps_error_not_match" msgid="8236930793223158856">"Impronta non riconosciuta"</string> - <string name="fingerprint_dialog_use_fingerprint_instead" msgid="6226091888364083421">"Impossibile riconoscere il volto. Usa l\'impronta."</string> + <!-- no translation found for fingerprint_dialog_use_fingerprint_instead (5590293588784953188) --> + <skip /> <string name="fingerprint_authenticated" msgid="2024862866860283100">"Impronta autenticata"</string> <string name="face_authenticated_no_confirmation_required" msgid="8867889115112348167">"Volto autenticato"</string> <string name="face_authenticated_confirmation_required" msgid="6872632732508013755">"Volto autenticato, premi Conferma"</string> diff --git a/core/res/res/values-iw/strings.xml b/core/res/res/values-iw/strings.xml index e9e558595a91..9c1e50383c65 100644 --- a/core/res/res/values-iw/strings.xml +++ b/core/res/res/values-iw/strings.xml @@ -663,7 +663,7 @@ </string-array> <string name="fingerprint_error_not_match" msgid="4599441812893438961">"טביעת האצבע לא זוהתה"</string> <string name="fingerprint_udfps_error_not_match" msgid="8236930793223158856">"טביעת האצבע לא זוהתה"</string> - <string name="fingerprint_dialog_use_fingerprint_instead" msgid="6226091888364083421">"לא ניתן לזהות את הפנים. יש להשתמש בטביעת אצבע במקום."</string> + <string name="fingerprint_dialog_use_fingerprint_instead" msgid="5590293588784953188">"הפנים לא זוהו. צריך להשתמש בטביעת אצבע במקום זאת."</string> <string name="fingerprint_authenticated" msgid="2024862866860283100">"טביעת האצבע אומתה"</string> <string name="face_authenticated_no_confirmation_required" msgid="8867889115112348167">"זיהוי הפנים בוצע"</string> <string name="face_authenticated_confirmation_required" msgid="6872632732508013755">"זיהוי הפנים בוצע. יש ללחוץ על אישור"</string> @@ -2167,7 +2167,7 @@ <string name="bluetooth_airplane_mode_toast" msgid="2066399056595768554">"Bluetooth יישאר מופעל במהלך מצב טיסה"</string> <string name="car_loading_profile" msgid="8219978381196748070">"בטעינה"</string> <string name="file_count" msgid="3220018595056126969">"{count,plural, =1{{file_name} ועוד קובץ אחד}one{{file_name} ועוד # קבצים}two{{file_name} ועוד # קבצים}other{{file_name} ועוד # קבצים}}"</string> - <string name="chooser_no_direct_share_targets" msgid="1511722103987329028">"אין אנשים שניתן לשתף איתם"</string> + <string name="chooser_no_direct_share_targets" msgid="1511722103987329028">"אין המלצות עם מי לשתף"</string> <string name="chooser_all_apps_button_label" msgid="3230427756238666328">"רשימת האפליקציות"</string> <string name="usb_device_resolve_prompt_warn" msgid="325871329788064199">"לאפליקציה זו לא ניתנה הרשאת הקלטה, אבל אפשר להקליט אודיו באמצעות התקן ה-USB הזה."</string> <string name="accessibility_system_action_home_label" msgid="3234748160850301870">"בית"</string> diff --git a/core/res/res/values-ja/strings.xml b/core/res/res/values-ja/strings.xml index 4eb0ced6e840..eac123408d4b 100644 --- a/core/res/res/values-ja/strings.xml +++ b/core/res/res/values-ja/strings.xml @@ -662,7 +662,8 @@ </string-array> <string name="fingerprint_error_not_match" msgid="4599441812893438961">"指紋を認識できません"</string> <string name="fingerprint_udfps_error_not_match" msgid="8236930793223158856">"指紋を認識できません"</string> - <string name="fingerprint_dialog_use_fingerprint_instead" msgid="6226091888364083421">"顔を認識できません。指紋認証を使用してください。"</string> + <!-- no translation found for fingerprint_dialog_use_fingerprint_instead (5590293588784953188) --> + <skip /> <string name="fingerprint_authenticated" msgid="2024862866860283100">"指紋認証を完了しました"</string> <string name="face_authenticated_no_confirmation_required" msgid="8867889115112348167">"顔を認証しました"</string> <string name="face_authenticated_confirmation_required" msgid="6872632732508013755">"顔を認証しました。[確認] を押してください"</string> diff --git a/core/res/res/values-ka/strings.xml b/core/res/res/values-ka/strings.xml index d4b4d12798b6..b56da3641c0f 100644 --- a/core/res/res/values-ka/strings.xml +++ b/core/res/res/values-ka/strings.xml @@ -662,7 +662,8 @@ </string-array> <string name="fingerprint_error_not_match" msgid="4599441812893438961">"თითის ანაბეჭდის ამოცნობა ვერ მოხერხდა"</string> <string name="fingerprint_udfps_error_not_match" msgid="8236930793223158856">"თითის ანაბეჭდის ამოცნობა ვერ მოხერხდა"</string> - <string name="fingerprint_dialog_use_fingerprint_instead" msgid="6226091888364083421">"სახის ამოცნობა ვერ ხერხდება. სანაცვლოდ თითის ანაბეჭდი გამოიყენეთ."</string> + <!-- no translation found for fingerprint_dialog_use_fingerprint_instead (5590293588784953188) --> + <skip /> <string name="fingerprint_authenticated" msgid="2024862866860283100">"თითის ანაბეჭდი ავტორიზებულია"</string> <string name="face_authenticated_no_confirmation_required" msgid="8867889115112348167">"სახე ავტორიზებულია"</string> <string name="face_authenticated_confirmation_required" msgid="6872632732508013755">"სახე ავტორიზებულია, დააჭირეთ დადასტურებას"</string> diff --git a/core/res/res/values-kk/strings.xml b/core/res/res/values-kk/strings.xml index d1da74e1c680..5378442a6a15 100644 --- a/core/res/res/values-kk/strings.xml +++ b/core/res/res/values-kk/strings.xml @@ -662,7 +662,8 @@ </string-array> <string name="fingerprint_error_not_match" msgid="4599441812893438961">"Саусақ ізі танылмады."</string> <string name="fingerprint_udfps_error_not_match" msgid="8236930793223158856">"Саусақ ізі танылмады."</string> - <string name="fingerprint_dialog_use_fingerprint_instead" msgid="6226091888364083421">"Бет танылмады. Орнына саусақ ізін пайдаланыңыз."</string> + <!-- no translation found for fingerprint_dialog_use_fingerprint_instead (5590293588784953188) --> + <skip /> <string name="fingerprint_authenticated" msgid="2024862866860283100">"Саусақ ізі аутентификацияланды"</string> <string name="face_authenticated_no_confirmation_required" msgid="8867889115112348167">"Бет танылды"</string> <string name="face_authenticated_confirmation_required" msgid="6872632732508013755">"Бет танылды, \"Растау\" түймесін басыңыз"</string> diff --git a/core/res/res/values-km/strings.xml b/core/res/res/values-km/strings.xml index 59a6e30d5abc..8d242147797b 100644 --- a/core/res/res/values-km/strings.xml +++ b/core/res/res/values-km/strings.xml @@ -662,7 +662,8 @@ </string-array> <string name="fingerprint_error_not_match" msgid="4599441812893438961">"មិនស្គាល់ស្នាមម្រាមដៃទេ"</string> <string name="fingerprint_udfps_error_not_match" msgid="8236930793223158856">"មិនស្គាល់ស្នាមម្រាមដៃទេ"</string> - <string name="fingerprint_dialog_use_fingerprint_instead" msgid="6226091888364083421">"មិនអាចសម្គាល់មុខបានទេ។ សូមប្រើស្នាមម្រាមដៃជំនួសវិញ។"</string> + <!-- no translation found for fingerprint_dialog_use_fingerprint_instead (5590293588784953188) --> + <skip /> <string name="fingerprint_authenticated" msgid="2024862866860283100">"បានផ្ទៀងផ្ទាត់ស្នាមម្រាមដៃ"</string> <string name="face_authenticated_no_confirmation_required" msgid="8867889115112348167">"បានផ្ទៀងផ្ទាត់មុខ"</string> <string name="face_authenticated_confirmation_required" msgid="6872632732508013755">"បានផ្ទៀងផ្ទាត់មុខ សូមចុចបញ្ជាក់"</string> diff --git a/core/res/res/values-kn/strings.xml b/core/res/res/values-kn/strings.xml index b1a74720d88f..03606364ad88 100644 --- a/core/res/res/values-kn/strings.xml +++ b/core/res/res/values-kn/strings.xml @@ -662,7 +662,8 @@ </string-array> <string name="fingerprint_error_not_match" msgid="4599441812893438961">"ಫಿಂಗರ್ಪ್ರಿಂಟ್ ಅನ್ನು ಗುರುತಿಸಲಾಗಿಲ್ಲ"</string> <string name="fingerprint_udfps_error_not_match" msgid="8236930793223158856">"ಫಿಂಗರ್ಪ್ರಿಂಟ್ ಅನ್ನು ಗುರುತಿಸಲಾಗಿಲ್ಲ"</string> - <string name="fingerprint_dialog_use_fingerprint_instead" msgid="6226091888364083421">"ಮುಖ ಗುರುತಿಸಲಾಗುತ್ತಿಲ್ಲ ಬದಲಿಗೆ ಫಿಂಗರ್ಪ್ರಿಂಟ್ ಬಳಸಿ."</string> + <!-- no translation found for fingerprint_dialog_use_fingerprint_instead (5590293588784953188) --> + <skip /> <string name="fingerprint_authenticated" msgid="2024862866860283100">"ಫಿಂಗರ್ಪ್ರಿಂಟ್ ಅನ್ನು ಪ್ರಮಾಣೀಕರಣ ಮಾಡಲಾಗಿದೆ"</string> <string name="face_authenticated_no_confirmation_required" msgid="8867889115112348167">"ಮುಖವನ್ನು ದೃಢೀಕರಿಸಲಾಗಿದೆ"</string> <string name="face_authenticated_confirmation_required" msgid="6872632732508013755">"ಮುಖವನ್ನು ದೃಢೀಕರಿಸಲಾಗಿದೆ, ದೃಢೀಕರಣವನ್ನು ಒತ್ತಿ"</string> diff --git a/core/res/res/values-ko/strings.xml b/core/res/res/values-ko/strings.xml index baa260470dae..8d4fe9bcd9df 100644 --- a/core/res/res/values-ko/strings.xml +++ b/core/res/res/values-ko/strings.xml @@ -662,7 +662,8 @@ </string-array> <string name="fingerprint_error_not_match" msgid="4599441812893438961">"지문이 인식되지 않았습니다."</string> <string name="fingerprint_udfps_error_not_match" msgid="8236930793223158856">"지문을 인식할 수 없습니다."</string> - <string name="fingerprint_dialog_use_fingerprint_instead" msgid="6226091888364083421">"얼굴을 인식할 수 없습니다. 대신 지문을 사용하세요."</string> + <!-- no translation found for fingerprint_dialog_use_fingerprint_instead (5590293588784953188) --> + <skip /> <string name="fingerprint_authenticated" msgid="2024862866860283100">"지문이 인증됨"</string> <string name="face_authenticated_no_confirmation_required" msgid="8867889115112348167">"얼굴이 인증되었습니다"</string> <string name="face_authenticated_confirmation_required" msgid="6872632732508013755">"얼굴이 인증되었습니다. 확인을 누르세요"</string> diff --git a/core/res/res/values-ky/strings.xml b/core/res/res/values-ky/strings.xml index f02b58cd6d41..4c65300cfb90 100644 --- a/core/res/res/values-ky/strings.xml +++ b/core/res/res/values-ky/strings.xml @@ -662,7 +662,8 @@ </string-array> <string name="fingerprint_error_not_match" msgid="4599441812893438961">"Манжа изи таанылган жок"</string> <string name="fingerprint_udfps_error_not_match" msgid="8236930793223158856">"Манжа изи таанылган жок"</string> - <string name="fingerprint_dialog_use_fingerprint_instead" msgid="6226091888364083421">"Жүз таанылбай жатат. Манжа изин колдонуңуз."</string> + <!-- no translation found for fingerprint_dialog_use_fingerprint_instead (5590293588784953188) --> + <skip /> <string name="fingerprint_authenticated" msgid="2024862866860283100">"Манжа изи текшерилди"</string> <string name="face_authenticated_no_confirmation_required" msgid="8867889115112348167">"Жүздүн аныктыгы текшерилди"</string> <string name="face_authenticated_confirmation_required" msgid="6872632732508013755">"Жүздүн аныктыгы текшерилди, эми \"Ырастоону\" басыңыз"</string> diff --git a/core/res/res/values-lo/strings.xml b/core/res/res/values-lo/strings.xml index e94f2d386a98..1ff5fa87b648 100644 --- a/core/res/res/values-lo/strings.xml +++ b/core/res/res/values-lo/strings.xml @@ -662,7 +662,7 @@ </string-array> <string name="fingerprint_error_not_match" msgid="4599441812893438961">"ບໍ່ຮູ້ຈັກລາຍນິ້ວມື"</string> <string name="fingerprint_udfps_error_not_match" msgid="8236930793223158856">"ບໍ່ຮູ້ຈັກລາຍນິ້ວມື"</string> - <string name="fingerprint_dialog_use_fingerprint_instead" msgid="6226091888364083421">"ບໍ່ສາມາດຈຳແນກໜ້າໄດ້. ກະລຸນາໃຊ້ລາຍນິ້ວມືແທນ."</string> + <string name="fingerprint_dialog_use_fingerprint_instead" msgid="5590293588784953188">"ບໍ່ສາມາດຈຳແນກໜ້າໄດ້. ໃຊ້ລາຍນິ້ວມືແທນ."</string> <string name="fingerprint_authenticated" msgid="2024862866860283100">"ພິສູດຢືນຢັນລາຍນິ້ວມືແລ້ວ"</string> <string name="face_authenticated_no_confirmation_required" msgid="8867889115112348167">"ພິສູດຢືນຢັນໃບໜ້າແລ້ວ"</string> <string name="face_authenticated_confirmation_required" msgid="6872632732508013755">"ພິສູດຢືນຢັນໃບໜ້າແລ້ວ, ກະລຸນາກົດຢືນຢັນ"</string> diff --git a/core/res/res/values-lt/strings.xml b/core/res/res/values-lt/strings.xml index da46662cf4b2..c913c17357e2 100644 --- a/core/res/res/values-lt/strings.xml +++ b/core/res/res/values-lt/strings.xml @@ -664,7 +664,8 @@ </string-array> <string name="fingerprint_error_not_match" msgid="4599441812893438961">"Piršto atspaudas neatpažintas"</string> <string name="fingerprint_udfps_error_not_match" msgid="8236930793223158856">"Piršto atspaudas neatpažintas"</string> - <string name="fingerprint_dialog_use_fingerprint_instead" msgid="6226091888364083421">"Veidas neatpažintas. Naudokite kontrolinį kodą."</string> + <!-- no translation found for fingerprint_dialog_use_fingerprint_instead (5590293588784953188) --> + <skip /> <string name="fingerprint_authenticated" msgid="2024862866860283100">"Piršto antspaudas autentifikuotas"</string> <string name="face_authenticated_no_confirmation_required" msgid="8867889115112348167">"Veidas autentifikuotas"</string> <string name="face_authenticated_confirmation_required" msgid="6872632732508013755">"Veidas autentifikuotas, paspauskite patvirtinimo mygtuką"</string> diff --git a/core/res/res/values-lv/strings.xml b/core/res/res/values-lv/strings.xml index 9fcf2d1c802d..21e5d0d8d535 100644 --- a/core/res/res/values-lv/strings.xml +++ b/core/res/res/values-lv/strings.xml @@ -663,7 +663,8 @@ </string-array> <string name="fingerprint_error_not_match" msgid="4599441812893438961">"Pirksta nospiedums netika atpazīts"</string> <string name="fingerprint_udfps_error_not_match" msgid="8236930793223158856">"Pirksta nospiedums netika atpazīts"</string> - <string name="fingerprint_dialog_use_fingerprint_instead" msgid="6226091888364083421">"Nevar atpazīt seju. Lietojiet pirksta nospiedumu."</string> + <!-- no translation found for fingerprint_dialog_use_fingerprint_instead (5590293588784953188) --> + <skip /> <string name="fingerprint_authenticated" msgid="2024862866860283100">"Pirksta nospiedums tika autentificēts."</string> <string name="face_authenticated_no_confirmation_required" msgid="8867889115112348167">"Seja autentificēta"</string> <string name="face_authenticated_confirmation_required" msgid="6872632732508013755">"Seja ir autentificēta. Nospiediet pogu Apstiprināt."</string> diff --git a/core/res/res/values-mk/strings.xml b/core/res/res/values-mk/strings.xml index 9b2b6ab52df7..28871ef9ee29 100644 --- a/core/res/res/values-mk/strings.xml +++ b/core/res/res/values-mk/strings.xml @@ -662,7 +662,8 @@ </string-array> <string name="fingerprint_error_not_match" msgid="4599441812893438961">"Отпечатокот не е препознаен"</string> <string name="fingerprint_udfps_error_not_match" msgid="8236930793223158856">"Отпечатокот не е препознаен"</string> - <string name="fingerprint_dialog_use_fingerprint_instead" msgid="6226091888364083421">"Не се препознава ликот. Користете отпечаток."</string> + <!-- no translation found for fingerprint_dialog_use_fingerprint_instead (5590293588784953188) --> + <skip /> <string name="fingerprint_authenticated" msgid="2024862866860283100">"Отпечатокот е проверен"</string> <string name="face_authenticated_no_confirmation_required" msgid="8867889115112348167">"Лицето е проверено"</string> <string name="face_authenticated_confirmation_required" msgid="6872632732508013755">"Лицето е проверено, притиснете го копчето „Потврди“"</string> diff --git a/core/res/res/values-ml/strings.xml b/core/res/res/values-ml/strings.xml index 44af8b6f66ed..e68e818010b6 100644 --- a/core/res/res/values-ml/strings.xml +++ b/core/res/res/values-ml/strings.xml @@ -662,7 +662,8 @@ </string-array> <string name="fingerprint_error_not_match" msgid="4599441812893438961">"ഫിംഗർപ്രിന്റ് തിരിച്ചറിഞ്ഞില്ല"</string> <string name="fingerprint_udfps_error_not_match" msgid="8236930793223158856">"ഫിംഗർപ്രിന്റ് തിരിച്ചറിഞ്ഞില്ല"</string> - <string name="fingerprint_dialog_use_fingerprint_instead" msgid="6226091888364083421">"മുഖം തിരിച്ചറിയാനായില്ല. പകരം ഫിംഗർപ്രിന്റ് ഉപയോഗിക്കൂ."</string> + <!-- no translation found for fingerprint_dialog_use_fingerprint_instead (5590293588784953188) --> + <skip /> <string name="fingerprint_authenticated" msgid="2024862866860283100">"ഫിംഗർപ്രിന്റ് പരിശോധിച്ചുറപ്പിച്ചു"</string> <string name="face_authenticated_no_confirmation_required" msgid="8867889115112348167">"മുഖം പരിശോധിച്ചുറപ്പിച്ചു"</string> <string name="face_authenticated_confirmation_required" msgid="6872632732508013755">"മുഖം പരിശോധിച്ചുറപ്പിച്ചു, സ്ഥിരീകരിക്കുക അമർത്തുക"</string> diff --git a/core/res/res/values-mn/strings.xml b/core/res/res/values-mn/strings.xml index beda8ee3f636..060f6f860873 100644 --- a/core/res/res/values-mn/strings.xml +++ b/core/res/res/values-mn/strings.xml @@ -662,7 +662,7 @@ </string-array> <string name="fingerprint_error_not_match" msgid="4599441812893438961">"Хурууны хээг таньсангүй"</string> <string name="fingerprint_udfps_error_not_match" msgid="8236930793223158856">"Хурууны хээг таньсангүй"</string> - <string name="fingerprint_dialog_use_fingerprint_instead" msgid="6226091888364083421">"Царай таних боломжгүй. Оронд нь хурууны хээ ашигла"</string> + <string name="fingerprint_dialog_use_fingerprint_instead" msgid="5590293588784953188">"Царайг таньсангүй. Оронд нь хурууны хээ ашигла."</string> <string name="fingerprint_authenticated" msgid="2024862866860283100">"Хурууны хээг нотолсон"</string> <string name="face_authenticated_no_confirmation_required" msgid="8867889115112348167">"Царайг баталгаажууллаа"</string> <string name="face_authenticated_confirmation_required" msgid="6872632732508013755">"Царайг баталгаажууллаа. Баталгаажуулах товчлуурыг дарна уу"</string> diff --git a/core/res/res/values-mr/strings.xml b/core/res/res/values-mr/strings.xml index 9d72fcdb6b9c..a86eadc3a1a3 100644 --- a/core/res/res/values-mr/strings.xml +++ b/core/res/res/values-mr/strings.xml @@ -662,7 +662,8 @@ </string-array> <string name="fingerprint_error_not_match" msgid="4599441812893438961">"फिंगरप्रिंट ओळखली नाही"</string> <string name="fingerprint_udfps_error_not_match" msgid="8236930793223158856">"फिंगरप्रिंट ओळखली नाही"</string> - <string name="fingerprint_dialog_use_fingerprint_instead" msgid="6226091888364083421">"चेहरा ओळखू शकत नाही. त्याऐवजी फिंगरप्रिंट वापरा."</string> + <!-- no translation found for fingerprint_dialog_use_fingerprint_instead (5590293588784953188) --> + <skip /> <string name="fingerprint_authenticated" msgid="2024862866860283100">"फिंगरप्रिंट ऑथेंटिकेट केली आहे"</string> <string name="face_authenticated_no_confirmation_required" msgid="8867889115112348167">"चेहरा ऑथेंटिकेशन केलेला आहे"</string> <string name="face_authenticated_confirmation_required" msgid="6872632732508013755">"चेहरा ऑथेंटिकेशन केलेला आहे, कृपया कन्फर्म प्रेस करा"</string> diff --git a/core/res/res/values-ms/strings.xml b/core/res/res/values-ms/strings.xml index 674eac389094..6710bf6c0a7d 100644 --- a/core/res/res/values-ms/strings.xml +++ b/core/res/res/values-ms/strings.xml @@ -662,7 +662,7 @@ </string-array> <string name="fingerprint_error_not_match" msgid="4599441812893438961">"Cap jari tidak dikenali"</string> <string name="fingerprint_udfps_error_not_match" msgid="8236930793223158856">"Cap jari tidak dikenali"</string> - <string name="fingerprint_dialog_use_fingerprint_instead" msgid="6226091888364083421">"Tidak mengenali wajah. Gunakan cap jari."</string> + <string name="fingerprint_dialog_use_fingerprint_instead" msgid="5590293588784953188">"Wajah tidak dikenali. Gunakan cap jari."</string> <string name="fingerprint_authenticated" msgid="2024862866860283100">"Cap jari disahkan"</string> <string name="face_authenticated_no_confirmation_required" msgid="8867889115112348167">"Wajah disahkan"</string> <string name="face_authenticated_confirmation_required" msgid="6872632732508013755">"Wajah disahkan, sila tekan sahkan"</string> diff --git a/core/res/res/values-my/strings.xml b/core/res/res/values-my/strings.xml index 030633b9172a..184ef9dfa829 100644 --- a/core/res/res/values-my/strings.xml +++ b/core/res/res/values-my/strings.xml @@ -662,7 +662,7 @@ </string-array> <string name="fingerprint_error_not_match" msgid="4599441812893438961">"လက်ဗွေကို မသိရှိပါ"</string> <string name="fingerprint_udfps_error_not_match" msgid="8236930793223158856">"လက်ဗွေကို မသိရှိပါ"</string> - <string name="fingerprint_dialog_use_fingerprint_instead" msgid="6226091888364083421">"မျက်နှာကို မမှတ်မိပါ။ လက်ဗွေကို အစားထိုးသုံးပါ။"</string> + <string name="fingerprint_dialog_use_fingerprint_instead" msgid="5590293588784953188">"မျက်နှာကို မမှတ်မိပါ။ ၎င်းအစား လက်ဗွေသုံးပါ။"</string> <string name="fingerprint_authenticated" msgid="2024862866860283100">"လက်ဗွေကို အထောက်အထား စိစစ်ပြီးပါပြီ"</string> <string name="face_authenticated_no_confirmation_required" msgid="8867889115112348167">"မျက်နှာ အထောက်အထားစိစစ်ပြီးပြီ"</string> <string name="face_authenticated_confirmation_required" msgid="6872632732508013755">"မျက်နှာ အထောက်အထားစိစစ်ပြီးပြီ၊ အတည်ပြုရန်ကို နှိပ်ပါ"</string> diff --git a/core/res/res/values-nb/strings.xml b/core/res/res/values-nb/strings.xml index b380199b3c36..2c481f104502 100644 --- a/core/res/res/values-nb/strings.xml +++ b/core/res/res/values-nb/strings.xml @@ -662,7 +662,8 @@ </string-array> <string name="fingerprint_error_not_match" msgid="4599441812893438961">"Gjenkjenner ikke fingeravtrykket"</string> <string name="fingerprint_udfps_error_not_match" msgid="8236930793223158856">"Gjenkjenner ikke fingeravtrykket"</string> - <string name="fingerprint_dialog_use_fingerprint_instead" msgid="6226091888364083421">"Ansiktet gjenkjennes ikke. Bruk fingeravtrykk."</string> + <!-- no translation found for fingerprint_dialog_use_fingerprint_instead (5590293588784953188) --> + <skip /> <string name="fingerprint_authenticated" msgid="2024862866860283100">"Fingeravtrykket er godkjent"</string> <string name="face_authenticated_no_confirmation_required" msgid="8867889115112348167">"Ansiktet er autentisert"</string> <string name="face_authenticated_confirmation_required" msgid="6872632732508013755">"Ansiktet er autentisert. Trykk på Bekreft"</string> diff --git a/core/res/res/values-ne/strings.xml b/core/res/res/values-ne/strings.xml index a4867974c880..a10e375eb4b4 100644 --- a/core/res/res/values-ne/strings.xml +++ b/core/res/res/values-ne/strings.xml @@ -662,7 +662,8 @@ </string-array> <string name="fingerprint_error_not_match" msgid="4599441812893438961">"फिंगरप्रिन्ट पहिचान गर्न सकिएन"</string> <string name="fingerprint_udfps_error_not_match" msgid="8236930793223158856">"फिंगरप्रिन्ट पहिचान गर्न सकिएन"</string> - <string name="fingerprint_dialog_use_fingerprint_instead" msgid="6226091888364083421">"अनुहार पहिचान गर्न सकिएन। बरु फिंगरप्रिन्ट प्रयोग गर्नुहोस्।"</string> + <!-- no translation found for fingerprint_dialog_use_fingerprint_instead (5590293588784953188) --> + <skip /> <string name="fingerprint_authenticated" msgid="2024862866860283100">"फिंगरप्रिन्ट प्रमाणीकरण गरियो"</string> <string name="face_authenticated_no_confirmation_required" msgid="8867889115112348167">"अनुहार प्रमाणीकरण गरियो"</string> <string name="face_authenticated_confirmation_required" msgid="6872632732508013755">"अनुहार प्रमाणीकरण गरियो, कृपया पुष्टि गर्नुहोस् थिच्नुहोस्"</string> @@ -1529,7 +1530,7 @@ <string name="vpn_text_long" msgid="278540576806169831">"<xliff:g id="SESSION">%s</xliff:g>सँग जोडिएको। नेटवर्क प्रबन्ध गर्न हान्नुहोस्।"</string> <string name="vpn_lockdown_connecting" msgid="6096725311950342607">"VPN जडान सधै जोड्दै…"</string> <string name="vpn_lockdown_connected" msgid="2853127976590658469">"सधैँ खुल्ला हुने VPN जोडिएको"</string> - <string name="vpn_lockdown_disconnected" msgid="5573611651300764955">"सधैँ-सक्रिय रहने VPN सेवाबाट विच्छेद गरियो"</string> + <string name="vpn_lockdown_disconnected" msgid="5573611651300764955">"सधैँ-सक्रिय रहने VPN सेवाबाट डिस्कनेक्ट गरियो"</string> <string name="vpn_lockdown_error" msgid="4453048646854247947">"सधैँ सक्रिय रहने VPN सेवामा जडान गर्न सकिएन"</string> <string name="vpn_lockdown_config" msgid="8331697329868252169">"नेटवर्क वा VPN सम्बन्धी सेटिङहरू परिवर्तन गर्नुहोस्"</string> <string name="upload_file" msgid="8651942222301634271">"फाइल छान्नुहोस्"</string> diff --git a/core/res/res/values-nl/strings.xml b/core/res/res/values-nl/strings.xml index d4844051033c..8333fd1928e7 100644 --- a/core/res/res/values-nl/strings.xml +++ b/core/res/res/values-nl/strings.xml @@ -662,7 +662,8 @@ </string-array> <string name="fingerprint_error_not_match" msgid="4599441812893438961">"Vingerafdruk niet herkend"</string> <string name="fingerprint_udfps_error_not_match" msgid="8236930793223158856">"Vingerafdruk niet herkend"</string> - <string name="fingerprint_dialog_use_fingerprint_instead" msgid="6226091888364083421">"Gezicht niet herkend. Gebruik je vingerafdruk."</string> + <!-- no translation found for fingerprint_dialog_use_fingerprint_instead (5590293588784953188) --> + <skip /> <string name="fingerprint_authenticated" msgid="2024862866860283100">"Vingerafdruk geverifieerd"</string> <string name="face_authenticated_no_confirmation_required" msgid="8867889115112348167">"Gezicht geverifieerd"</string> <string name="face_authenticated_confirmation_required" msgid="6872632732508013755">"Gezicht geverifieerd. Druk op Bevestigen."</string> diff --git a/core/res/res/values-or/strings.xml b/core/res/res/values-or/strings.xml index df78cc9d1b12..fcfdb7b4e117 100644 --- a/core/res/res/values-or/strings.xml +++ b/core/res/res/values-or/strings.xml @@ -662,7 +662,8 @@ </string-array> <string name="fingerprint_error_not_match" msgid="4599441812893438961">"ଟିପଚିହ୍ନ ଚିହ୍ନଟ ହେଲା ନାହିଁ"</string> <string name="fingerprint_udfps_error_not_match" msgid="8236930793223158856">"ଟିପଚିହ୍ନ ଚିହ୍ନଟ ହେଲା ନାହିଁ"</string> - <string name="fingerprint_dialog_use_fingerprint_instead" msgid="6226091888364083421">"ଫେସ୍ ଚିହ୍ନଟ କରିହେବ ନାହିଁ। ଟିପଚିହ୍ନ ବ୍ୟବହାର କରନ୍ତୁ।"</string> + <!-- no translation found for fingerprint_dialog_use_fingerprint_instead (5590293588784953188) --> + <skip /> <string name="fingerprint_authenticated" msgid="2024862866860283100">"ଟିପଚିହ୍ନ ପ୍ରମାଣିତ ହେଲା"</string> <string name="face_authenticated_no_confirmation_required" msgid="8867889115112348167">"ମୁହଁ ଚିହ୍ନଟ ହୋଇଛି"</string> <string name="face_authenticated_confirmation_required" msgid="6872632732508013755">"ମୁହଁ ଚିହ୍ନଟ ହୋଇଛି, ଦୟାକରି ସୁନିଶ୍ଚିତ ଦବାନ୍ତୁ"</string> diff --git a/core/res/res/values-pa/strings.xml b/core/res/res/values-pa/strings.xml index 282694d32188..b11c196e5a63 100644 --- a/core/res/res/values-pa/strings.xml +++ b/core/res/res/values-pa/strings.xml @@ -662,7 +662,8 @@ </string-array> <string name="fingerprint_error_not_match" msgid="4599441812893438961">"ਫਿੰਗਰਪ੍ਰਿੰਟ ਦੀ ਪਛਾਣ ਨਹੀਂ ਹੋਈ"</string> <string name="fingerprint_udfps_error_not_match" msgid="8236930793223158856">"ਫਿੰਗਰਪ੍ਰਿੰਟ ਦੀ ਪਛਾਣ ਨਹੀਂ ਹੋਈ"</string> - <string name="fingerprint_dialog_use_fingerprint_instead" msgid="6226091888364083421">"ਚਿਹਰਾ ਨਹੀਂ ਪਛਾਣ ਸਕਦੇ। ਇਸਦੀ ਬਜਾਏ ਫਿੰਗਰਪ੍ਰਿੰਟ ਵਰਤੋ।"</string> + <!-- no translation found for fingerprint_dialog_use_fingerprint_instead (5590293588784953188) --> + <skip /> <string name="fingerprint_authenticated" msgid="2024862866860283100">"ਫਿੰਗਰਪ੍ਰਿੰਟ ਪ੍ਰਮਾਣਿਤ ਹੋਇਆ"</string> <string name="face_authenticated_no_confirmation_required" msgid="8867889115112348167">"ਚਿਹਰਾ ਪੁਸ਼ਟੀਕਰਨ"</string> <string name="face_authenticated_confirmation_required" msgid="6872632732508013755">"ਚਿਹਰਾ ਪੁਸ਼ਟੀਕਰਨ, ਕਿਰਪਾ ਕਰਕੇ \'ਪੁਸ਼ਟੀ ਕਰੋ\' ਦਬਾਓ"</string> diff --git a/core/res/res/values-pl/strings.xml b/core/res/res/values-pl/strings.xml index f80e832b2e74..c39fdd362192 100644 --- a/core/res/res/values-pl/strings.xml +++ b/core/res/res/values-pl/strings.xml @@ -664,7 +664,8 @@ </string-array> <string name="fingerprint_error_not_match" msgid="4599441812893438961">"Nie rozpoznano odcisku palca"</string> <string name="fingerprint_udfps_error_not_match" msgid="8236930793223158856">"Nie rozpoznano odcisku palca"</string> - <string name="fingerprint_dialog_use_fingerprint_instead" msgid="6226091888364083421">"Nie rozpoznaję twarzy. Użyj odcisku palca."</string> + <!-- no translation found for fingerprint_dialog_use_fingerprint_instead (5590293588784953188) --> + <skip /> <string name="fingerprint_authenticated" msgid="2024862866860283100">"Uwierzytelniono odciskiem palca"</string> <string name="face_authenticated_no_confirmation_required" msgid="8867889115112348167">"Twarz rozpoznana"</string> <string name="face_authenticated_confirmation_required" msgid="6872632732508013755">"Twarz rozpoznana, kliknij Potwierdź"</string> diff --git a/core/res/res/values-pt-rBR/strings.xml b/core/res/res/values-pt-rBR/strings.xml index 3dcd619afa1e..d4620e60511c 100644 --- a/core/res/res/values-pt-rBR/strings.xml +++ b/core/res/res/values-pt-rBR/strings.xml @@ -663,7 +663,8 @@ </string-array> <string name="fingerprint_error_not_match" msgid="4599441812893438961">"Impressão digital não reconhecida"</string> <string name="fingerprint_udfps_error_not_match" msgid="8236930793223158856">"Impressão digital não reconhecida"</string> - <string name="fingerprint_dialog_use_fingerprint_instead" msgid="6226091888364083421">"Não foi possível reconhecer o rosto Use a impressão digital."</string> + <!-- no translation found for fingerprint_dialog_use_fingerprint_instead (5590293588784953188) --> + <skip /> <string name="fingerprint_authenticated" msgid="2024862866860283100">"Impressão digital autenticada"</string> <string name="face_authenticated_no_confirmation_required" msgid="8867889115112348167">"Rosto autenticado"</string> <string name="face_authenticated_confirmation_required" msgid="6872632732508013755">"Rosto autenticado, pressione \"Confirmar\""</string> diff --git a/core/res/res/values-pt-rPT/strings.xml b/core/res/res/values-pt-rPT/strings.xml index 10e19cdf6c72..96545fe80d58 100644 --- a/core/res/res/values-pt-rPT/strings.xml +++ b/core/res/res/values-pt-rPT/strings.xml @@ -663,7 +663,7 @@ </string-array> <string name="fingerprint_error_not_match" msgid="4599441812893438961">"Impressão digital não reconhecida"</string> <string name="fingerprint_udfps_error_not_match" msgid="8236930793223158856">"Impressão digital não reconhecida"</string> - <string name="fingerprint_dialog_use_fingerprint_instead" msgid="6226091888364083421">"Impos. reconh. rosto. Utilize a impressão digital."</string> + <string name="fingerprint_dialog_use_fingerprint_instead" msgid="5590293588784953188">"Rosto não reconhecido. Use a impressão digital."</string> <string name="fingerprint_authenticated" msgid="2024862866860283100">"A impressão digital foi autenticada."</string> <string name="face_authenticated_no_confirmation_required" msgid="8867889115112348167">"Rosto autenticado."</string> <string name="face_authenticated_confirmation_required" msgid="6872632732508013755">"Rosto autenticado. Prima Confirmar."</string> diff --git a/core/res/res/values-pt/strings.xml b/core/res/res/values-pt/strings.xml index 3dcd619afa1e..d4620e60511c 100644 --- a/core/res/res/values-pt/strings.xml +++ b/core/res/res/values-pt/strings.xml @@ -663,7 +663,8 @@ </string-array> <string name="fingerprint_error_not_match" msgid="4599441812893438961">"Impressão digital não reconhecida"</string> <string name="fingerprint_udfps_error_not_match" msgid="8236930793223158856">"Impressão digital não reconhecida"</string> - <string name="fingerprint_dialog_use_fingerprint_instead" msgid="6226091888364083421">"Não foi possível reconhecer o rosto Use a impressão digital."</string> + <!-- no translation found for fingerprint_dialog_use_fingerprint_instead (5590293588784953188) --> + <skip /> <string name="fingerprint_authenticated" msgid="2024862866860283100">"Impressão digital autenticada"</string> <string name="face_authenticated_no_confirmation_required" msgid="8867889115112348167">"Rosto autenticado"</string> <string name="face_authenticated_confirmation_required" msgid="6872632732508013755">"Rosto autenticado, pressione \"Confirmar\""</string> diff --git a/core/res/res/values-ro/strings.xml b/core/res/res/values-ro/strings.xml index e27603af34c9..e60af5c0d855 100644 --- a/core/res/res/values-ro/strings.xml +++ b/core/res/res/values-ro/strings.xml @@ -663,7 +663,8 @@ </string-array> <string name="fingerprint_error_not_match" msgid="4599441812893438961">"Amprenta nu a fost recunoscută"</string> <string name="fingerprint_udfps_error_not_match" msgid="8236930793223158856">"Amprenta nu a fost recunoscută"</string> - <string name="fingerprint_dialog_use_fingerprint_instead" msgid="6226091888364083421">"Chipul nu a fost recunoscut. Folosește amprenta."</string> + <!-- no translation found for fingerprint_dialog_use_fingerprint_instead (5590293588784953188) --> + <skip /> <string name="fingerprint_authenticated" msgid="2024862866860283100">"Amprentă autentificată"</string> <string name="face_authenticated_no_confirmation_required" msgid="8867889115112348167">"Chip autentificat"</string> <string name="face_authenticated_confirmation_required" msgid="6872632732508013755">"Chip autentificat, apasă pe Confirmă"</string> diff --git a/core/res/res/values-ru/strings.xml b/core/res/res/values-ru/strings.xml index a1da51e5d3d7..50638988814b 100644 --- a/core/res/res/values-ru/strings.xml +++ b/core/res/res/values-ru/strings.xml @@ -664,7 +664,8 @@ </string-array> <string name="fingerprint_error_not_match" msgid="4599441812893438961">"Отпечаток не распознан."</string> <string name="fingerprint_udfps_error_not_match" msgid="8236930793223158856">"Отпечаток не распознан."</string> - <string name="fingerprint_dialog_use_fingerprint_instead" msgid="6226091888364083421">"Не удалось распознать лицо. Используйте отпечаток."</string> + <!-- no translation found for fingerprint_dialog_use_fingerprint_instead (5590293588784953188) --> + <skip /> <string name="fingerprint_authenticated" msgid="2024862866860283100">"Отпечаток пальца проверен"</string> <string name="face_authenticated_no_confirmation_required" msgid="8867889115112348167">"Лицо распознано"</string> <string name="face_authenticated_confirmation_required" msgid="6872632732508013755">"Лицо распознано, нажмите кнопку \"Подтвердить\""</string> diff --git a/core/res/res/values-si/strings.xml b/core/res/res/values-si/strings.xml index 5c9f4d9004f5..8f1835ec5934 100644 --- a/core/res/res/values-si/strings.xml +++ b/core/res/res/values-si/strings.xml @@ -662,7 +662,8 @@ </string-array> <string name="fingerprint_error_not_match" msgid="4599441812893438961">"ඇඟිලි සලකුණ හඳුනා නොගන්නා ලදි"</string> <string name="fingerprint_udfps_error_not_match" msgid="8236930793223158856">"ඇඟිලි සලකුණ හඳුනා නොගන්නා ලදි"</string> - <string name="fingerprint_dialog_use_fingerprint_instead" msgid="6226091888364083421">"මුහුණ හැඳිනිය නොහැක. ඒ වෙනුවට ඇඟිලි සලකුණ භාවිත ක."</string> + <!-- no translation found for fingerprint_dialog_use_fingerprint_instead (5590293588784953188) --> + <skip /> <string name="fingerprint_authenticated" msgid="2024862866860283100">"ඇඟිලි සලකුණ සත්යාපනය කරන ලදී"</string> <string name="face_authenticated_no_confirmation_required" msgid="8867889115112348167">"මුහුණ සත්යාපනය කරන ලදී"</string> <string name="face_authenticated_confirmation_required" msgid="6872632732508013755">"මුහුණ සත්යාපනය කරන ලදී, කරුණාකර තහවුරු කරන්න ඔබන්න"</string> diff --git a/core/res/res/values-sk/strings.xml b/core/res/res/values-sk/strings.xml index 47358665fe74..ef87a337c779 100644 --- a/core/res/res/values-sk/strings.xml +++ b/core/res/res/values-sk/strings.xml @@ -664,7 +664,8 @@ </string-array> <string name="fingerprint_error_not_match" msgid="4599441812893438961">"Odtlačok prsta nebol rozpoznaný"</string> <string name="fingerprint_udfps_error_not_match" msgid="8236930793223158856">"Odtlačok prsta nebol rozpoznaný"</string> - <string name="fingerprint_dialog_use_fingerprint_instead" msgid="6226091888364083421">"Tvár sa nedá rozpoznať. Použite odtlačok prsta."</string> + <!-- no translation found for fingerprint_dialog_use_fingerprint_instead (5590293588784953188) --> + <skip /> <string name="fingerprint_authenticated" msgid="2024862866860283100">"Odtlačok prsta bol overený"</string> <string name="face_authenticated_no_confirmation_required" msgid="8867889115112348167">"Tvár bola overená"</string> <string name="face_authenticated_confirmation_required" msgid="6872632732508013755">"Tvár bola overená, stlačte tlačidlo potvrdenia"</string> diff --git a/core/res/res/values-sl/strings.xml b/core/res/res/values-sl/strings.xml index 9118c9532c53..1284a8c6226b 100644 --- a/core/res/res/values-sl/strings.xml +++ b/core/res/res/values-sl/strings.xml @@ -664,7 +664,8 @@ </string-array> <string name="fingerprint_error_not_match" msgid="4599441812893438961">"Prstni odtis ni prepoznan."</string> <string name="fingerprint_udfps_error_not_match" msgid="8236930793223158856">"Prstni odtis ni prepoznan."</string> - <string name="fingerprint_dialog_use_fingerprint_instead" msgid="6226091888364083421">"Obraza ni mogoče prepoznati. Uporabite prstni odtis."</string> + <!-- no translation found for fingerprint_dialog_use_fingerprint_instead (5590293588784953188) --> + <skip /> <string name="fingerprint_authenticated" msgid="2024862866860283100">"Pristnost prstnega odtisa je preverjena"</string> <string name="face_authenticated_no_confirmation_required" msgid="8867889115112348167">"Pristnost obraza je potrjena"</string> <string name="face_authenticated_confirmation_required" msgid="6872632732508013755">"Pristnost obraza je preverjena. Pritisnite gumb »Potrdi«."</string> diff --git a/core/res/res/values-sq/strings.xml b/core/res/res/values-sq/strings.xml index 6036a1773274..451168f6da8e 100644 --- a/core/res/res/values-sq/strings.xml +++ b/core/res/res/values-sq/strings.xml @@ -662,7 +662,8 @@ </string-array> <string name="fingerprint_error_not_match" msgid="4599441812893438961">"Gjurma e gishtit nuk u njoh"</string> <string name="fingerprint_udfps_error_not_match" msgid="8236930793223158856">"Gjurma e gishtit nuk u njoh"</string> - <string name="fingerprint_dialog_use_fingerprint_instead" msgid="6226091888364083421">"Nuk mund ta dallojë fytyrën. Përdor më mirë gjurmën e gishtit."</string> + <!-- no translation found for fingerprint_dialog_use_fingerprint_instead (5590293588784953188) --> + <skip /> <string name="fingerprint_authenticated" msgid="2024862866860283100">"Gjurma e gishtit u vërtetua"</string> <string name="face_authenticated_no_confirmation_required" msgid="8867889115112348167">"Fytyra u vërtetua"</string> <string name="face_authenticated_confirmation_required" msgid="6872632732508013755">"Fytyra u vërtetua, shtyp \"Konfirmo\""</string> diff --git a/core/res/res/values-sr/strings.xml b/core/res/res/values-sr/strings.xml index 2020f916376a..dfb518d152bc 100644 --- a/core/res/res/values-sr/strings.xml +++ b/core/res/res/values-sr/strings.xml @@ -663,7 +663,8 @@ </string-array> <string name="fingerprint_error_not_match" msgid="4599441812893438961">"Отисак прста није препознат"</string> <string name="fingerprint_udfps_error_not_match" msgid="8236930793223158856">"Отисак прста није препознат"</string> - <string name="fingerprint_dialog_use_fingerprint_instead" msgid="6226091888364083421">"Лице није препознато. Користите отисак прста."</string> + <!-- no translation found for fingerprint_dialog_use_fingerprint_instead (5590293588784953188) --> + <skip /> <string name="fingerprint_authenticated" msgid="2024862866860283100">"Отисак прста је потврђен"</string> <string name="face_authenticated_no_confirmation_required" msgid="8867889115112348167">"Лице је потврђено"</string> <string name="face_authenticated_confirmation_required" msgid="6872632732508013755">"Лице је потврђено. Притисните Потврди"</string> diff --git a/core/res/res/values-sv/strings.xml b/core/res/res/values-sv/strings.xml index cd334a359f19..099059c423a7 100644 --- a/core/res/res/values-sv/strings.xml +++ b/core/res/res/values-sv/strings.xml @@ -662,7 +662,8 @@ </string-array> <string name="fingerprint_error_not_match" msgid="4599441812893438961">"Fingeravtrycket känns inte igen"</string> <string name="fingerprint_udfps_error_not_match" msgid="8236930793223158856">"Fingeravtrycket känns inte igen"</string> - <string name="fingerprint_dialog_use_fingerprint_instead" msgid="6226091888364083421">"Ansiktet kändes inte igen. Använd fingeravtryck."</string> + <!-- no translation found for fingerprint_dialog_use_fingerprint_instead (5590293588784953188) --> + <skip /> <string name="fingerprint_authenticated" msgid="2024862866860283100">"Fingeravtrycket har autentiserats"</string> <string name="face_authenticated_no_confirmation_required" msgid="8867889115112348167">"Ansiktet har autentiserats"</string> <string name="face_authenticated_confirmation_required" msgid="6872632732508013755">"Ansiktet har autentiserats. Tryck på Bekräfta"</string> diff --git a/core/res/res/values-sw/strings.xml b/core/res/res/values-sw/strings.xml index b16bbcd74364..c1845050452c 100644 --- a/core/res/res/values-sw/strings.xml +++ b/core/res/res/values-sw/strings.xml @@ -662,7 +662,7 @@ </string-array> <string name="fingerprint_error_not_match" msgid="4599441812893438961">"Alama ya kidole haijatambuliwa"</string> <string name="fingerprint_udfps_error_not_match" msgid="8236930793223158856">"Alama ya kidole haijatambuliwa"</string> - <string name="fingerprint_dialog_use_fingerprint_instead" msgid="6226091888364083421">"Imeshindwa kutambua uso. Tumia alama ya kidole."</string> + <string name="fingerprint_dialog_use_fingerprint_instead" msgid="5590293588784953188">"Uso hautambuliki. Tumia alama ya kidole."</string> <string name="fingerprint_authenticated" msgid="2024862866860283100">"Imethibitisha alama ya kidole"</string> <string name="face_authenticated_no_confirmation_required" msgid="8867889115112348167">"Uso umethibitishwa"</string> <string name="face_authenticated_confirmation_required" msgid="6872632732508013755">"Uso umethibitishwa, tafadhali bonyeza thibitisha"</string> diff --git a/core/res/res/values-ta/strings.xml b/core/res/res/values-ta/strings.xml index 02e06fa028a5..86aa8a73713e 100644 --- a/core/res/res/values-ta/strings.xml +++ b/core/res/res/values-ta/strings.xml @@ -662,7 +662,8 @@ </string-array> <string name="fingerprint_error_not_match" msgid="4599441812893438961">"கைரேகை அங்கீகரிக்கப்படவில்லை"</string> <string name="fingerprint_udfps_error_not_match" msgid="8236930793223158856">"கைரேகை அங்கீகரிக்கப்படவில்லை"</string> - <string name="fingerprint_dialog_use_fingerprint_instead" msgid="6226091888364083421">"முகத்தை அடையாளம் காண முடியவில்லை. கைரேகையைப் பயன்படுத்தவும்."</string> + <!-- no translation found for fingerprint_dialog_use_fingerprint_instead (5590293588784953188) --> + <skip /> <string name="fingerprint_authenticated" msgid="2024862866860283100">"கைரேகை அங்கீகரிக்கப்பட்டது"</string> <string name="face_authenticated_no_confirmation_required" msgid="8867889115112348167">"முகம் அங்கீகரிக்கப்பட்டது"</string> <string name="face_authenticated_confirmation_required" msgid="6872632732508013755">"முகம் அங்கீகரிக்கப்பட்டது. ’உறுதிப்படுத்துக’ என்பதை அழுத்துக"</string> diff --git a/core/res/res/values-te/strings.xml b/core/res/res/values-te/strings.xml index ecd7e94592a9..90f21a068bf4 100644 --- a/core/res/res/values-te/strings.xml +++ b/core/res/res/values-te/strings.xml @@ -662,7 +662,8 @@ </string-array> <string name="fingerprint_error_not_match" msgid="4599441812893438961">"వేలిముద్ర గుర్తించబడలేదు"</string> <string name="fingerprint_udfps_error_not_match" msgid="8236930793223158856">"వేలిముద్ర గుర్తించబడలేదు"</string> - <string name="fingerprint_dialog_use_fingerprint_instead" msgid="6226091888364083421">"ముఖం గుర్తించలేము. బదులుగా వేలిముద్ర ఉపయోగించండి."</string> + <!-- no translation found for fingerprint_dialog_use_fingerprint_instead (5590293588784953188) --> + <skip /> <string name="fingerprint_authenticated" msgid="2024862866860283100">"వేలిముద్ర ప్రమాణీకరించబడింది"</string> <string name="face_authenticated_no_confirmation_required" msgid="8867889115112348167">"ముఖం ప్రమాణీకరించబడింది"</string> <string name="face_authenticated_confirmation_required" msgid="6872632732508013755">"ముఖం ప్రమాణీకరించబడింది, దయచేసి ధృవీకరించును నొక్కండి"</string> diff --git a/core/res/res/values-th/strings.xml b/core/res/res/values-th/strings.xml index b1debfd4cf74..e3cd9dea60c9 100644 --- a/core/res/res/values-th/strings.xml +++ b/core/res/res/values-th/strings.xml @@ -662,7 +662,7 @@ </string-array> <string name="fingerprint_error_not_match" msgid="4599441812893438961">"ไม่รู้จักลายนิ้วมือ"</string> <string name="fingerprint_udfps_error_not_match" msgid="8236930793223158856">"ไม่รู้จักลายนิ้วมือ"</string> - <string name="fingerprint_dialog_use_fingerprint_instead" msgid="6226091888364083421">"ไม่รู้จักใบหน้า ใช้ลายนิ้วมือแทน"</string> + <string name="fingerprint_dialog_use_fingerprint_instead" msgid="5590293588784953188">"ไม่รู้จักใบหน้า ใช้ลายนิ้วมือแทน"</string> <string name="fingerprint_authenticated" msgid="2024862866860283100">"ตรวจสอบสิทธิ์ลายนิ้วมือแล้ว"</string> <string name="face_authenticated_no_confirmation_required" msgid="8867889115112348167">"ตรวจสอบสิทธิ์ใบหน้าแล้ว"</string> <string name="face_authenticated_confirmation_required" msgid="6872632732508013755">"ตรวจสอบสิทธิ์ใบหน้าแล้ว โปรดกดยืนยัน"</string> diff --git a/core/res/res/values-tl/strings.xml b/core/res/res/values-tl/strings.xml index a6a6b5019dcb..4f5fde60fdda 100644 --- a/core/res/res/values-tl/strings.xml +++ b/core/res/res/values-tl/strings.xml @@ -662,7 +662,7 @@ </string-array> <string name="fingerprint_error_not_match" msgid="4599441812893438961">"Hindi nakilala ang fingerprint"</string> <string name="fingerprint_udfps_error_not_match" msgid="8236930793223158856">"Hindi nakilala ang fingerprint"</string> - <string name="fingerprint_dialog_use_fingerprint_instead" msgid="6226091888364083421">"Hindi makilala ang mukha. Gumamit ng fingerprint."</string> + <string name="fingerprint_dialog_use_fingerprint_instead" msgid="5590293588784953188">"Hindi nakilala ang mukha. Gumamit ng fingerprint."</string> <string name="fingerprint_authenticated" msgid="2024862866860283100">"Na-authenticate ang fingerprint"</string> <string name="face_authenticated_no_confirmation_required" msgid="8867889115112348167">"Na-authenticate ang mukha"</string> <string name="face_authenticated_confirmation_required" msgid="6872632732508013755">"Na-authenticate ang mukha, pakipindot ang kumpirmahin"</string> diff --git a/core/res/res/values-tr/strings.xml b/core/res/res/values-tr/strings.xml index 7e34e4bf97f3..529ea741462f 100644 --- a/core/res/res/values-tr/strings.xml +++ b/core/res/res/values-tr/strings.xml @@ -662,7 +662,8 @@ </string-array> <string name="fingerprint_error_not_match" msgid="4599441812893438961">"Parmak izi tanınmadı"</string> <string name="fingerprint_udfps_error_not_match" msgid="8236930793223158856">"Parmak izi tanınmadı"</string> - <string name="fingerprint_dialog_use_fingerprint_instead" msgid="6226091888364083421">"Yüz tanınamadı. Bunun yerine parmak izi kullanın."</string> + <!-- no translation found for fingerprint_dialog_use_fingerprint_instead (5590293588784953188) --> + <skip /> <string name="fingerprint_authenticated" msgid="2024862866860283100">"Parmak izi kimlik doğrulaması yapıldı"</string> <string name="face_authenticated_no_confirmation_required" msgid="8867889115112348167">"Yüz kimliği doğrulandı"</string> <string name="face_authenticated_confirmation_required" msgid="6872632732508013755">"Yüz kimliği doğrulandı, lütfen onayla\'ya basın"</string> diff --git a/core/res/res/values-uk/strings.xml b/core/res/res/values-uk/strings.xml index 34618cd243c4..800bd1ded7c0 100644 --- a/core/res/res/values-uk/strings.xml +++ b/core/res/res/values-uk/strings.xml @@ -664,7 +664,8 @@ </string-array> <string name="fingerprint_error_not_match" msgid="4599441812893438961">"Відбиток пальця не розпізнано"</string> <string name="fingerprint_udfps_error_not_match" msgid="8236930793223158856">"Відбиток пальця не розпізнано"</string> - <string name="fingerprint_dialog_use_fingerprint_instead" msgid="6226091888364083421">"Обличчя не розпізнано. Скористайтеся відбитком пальця."</string> + <!-- no translation found for fingerprint_dialog_use_fingerprint_instead (5590293588784953188) --> + <skip /> <string name="fingerprint_authenticated" msgid="2024862866860283100">"Відбиток пальця автентифіковано"</string> <string name="face_authenticated_no_confirmation_required" msgid="8867889115112348167">"Обличчя автентифіковано"</string> <string name="face_authenticated_confirmation_required" msgid="6872632732508013755">"Обличчя автентифіковано. Натисніть \"Підтвердити\""</string> diff --git a/core/res/res/values-ur/strings.xml b/core/res/res/values-ur/strings.xml index caf0ca4e435a..6caed2edb9d0 100644 --- a/core/res/res/values-ur/strings.xml +++ b/core/res/res/values-ur/strings.xml @@ -662,7 +662,8 @@ </string-array> <string name="fingerprint_error_not_match" msgid="4599441812893438961">"فنگر پرنٹ کی شناخت نہیں ہو سکی"</string> <string name="fingerprint_udfps_error_not_match" msgid="8236930793223158856">"فنگر پرنٹ کی شناخت نہیں ہو سکی"</string> - <string name="fingerprint_dialog_use_fingerprint_instead" msgid="6226091888364083421">"چہرے کی شناخت نہیں ہو سکی۔ اس کے بجائے فنگر پرنٹ استعمال کریں۔"</string> + <!-- no translation found for fingerprint_dialog_use_fingerprint_instead (5590293588784953188) --> + <skip /> <string name="fingerprint_authenticated" msgid="2024862866860283100">"فنگر پرنٹ کی تصدیق ہو گئی"</string> <string name="face_authenticated_no_confirmation_required" msgid="8867889115112348167">"چہرے کی تصدیق ہو گئی"</string> <string name="face_authenticated_confirmation_required" msgid="6872632732508013755">"چہرے کی تصدیق ہو گئی، براہ کرم \'تصدیق کریں\' کو دبائيں"</string> diff --git a/core/res/res/values-uz/strings.xml b/core/res/res/values-uz/strings.xml index e22c1dce2a03..36b0794c5eb4 100644 --- a/core/res/res/values-uz/strings.xml +++ b/core/res/res/values-uz/strings.xml @@ -662,7 +662,8 @@ </string-array> <string name="fingerprint_error_not_match" msgid="4599441812893438961">"Barmoq izi aniqlanmadi"</string> <string name="fingerprint_udfps_error_not_match" msgid="8236930793223158856">"Barmoq izi aniqlanmadi"</string> - <string name="fingerprint_dialog_use_fingerprint_instead" msgid="6226091888364083421">"Bu yuz notanish. Barmoq izi orqali urining."</string> + <!-- no translation found for fingerprint_dialog_use_fingerprint_instead (5590293588784953188) --> + <skip /> <string name="fingerprint_authenticated" msgid="2024862866860283100">"Barmoq izi tekshirildi"</string> <string name="face_authenticated_no_confirmation_required" msgid="8867889115112348167">"Yuzingiz aniqlandi"</string> <string name="face_authenticated_confirmation_required" msgid="6872632732508013755">"Yuzingiz aniqlandi, tasdiqlash uchun bosing"</string> diff --git a/core/res/res/values-vi/strings.xml b/core/res/res/values-vi/strings.xml index d6bd1904ec21..ff3132d3b9e5 100644 --- a/core/res/res/values-vi/strings.xml +++ b/core/res/res/values-vi/strings.xml @@ -662,7 +662,8 @@ </string-array> <string name="fingerprint_error_not_match" msgid="4599441812893438961">"Không nhận dạng được vân tay"</string> <string name="fingerprint_udfps_error_not_match" msgid="8236930793223158856">"Không nhận dạng được vân tay"</string> - <string name="fingerprint_dialog_use_fingerprint_instead" msgid="6226091888364083421">"Không thể nhận dạng khuôn mặt. Hãy dùng vân tay."</string> + <!-- no translation found for fingerprint_dialog_use_fingerprint_instead (5590293588784953188) --> + <skip /> <string name="fingerprint_authenticated" msgid="2024862866860283100">"Đã xác thực vân tay"</string> <string name="face_authenticated_no_confirmation_required" msgid="8867889115112348167">"Đã xác thực khuôn mặt"</string> <string name="face_authenticated_confirmation_required" msgid="6872632732508013755">"Đã xác thực khuôn mặt, vui lòng nhấn để xác nhận"</string> diff --git a/core/res/res/values-zh-rCN/strings.xml b/core/res/res/values-zh-rCN/strings.xml index 9336c17de745..ce6f0b83ea10 100644 --- a/core/res/res/values-zh-rCN/strings.xml +++ b/core/res/res/values-zh-rCN/strings.xml @@ -662,7 +662,8 @@ </string-array> <string name="fingerprint_error_not_match" msgid="4599441812893438961">"未能识别指纹"</string> <string name="fingerprint_udfps_error_not_match" msgid="8236930793223158856">"未能识别指纹"</string> - <string name="fingerprint_dialog_use_fingerprint_instead" msgid="6226091888364083421">"无法识别人脸。请改用指纹。"</string> + <!-- no translation found for fingerprint_dialog_use_fingerprint_instead (5590293588784953188) --> + <skip /> <string name="fingerprint_authenticated" msgid="2024862866860283100">"已验证指纹"</string> <string name="face_authenticated_no_confirmation_required" msgid="8867889115112348167">"面孔已验证"</string> <string name="face_authenticated_confirmation_required" msgid="6872632732508013755">"面孔已验证,请按确认按钮"</string> diff --git a/core/res/res/values-zh-rHK/strings.xml b/core/res/res/values-zh-rHK/strings.xml index e92b7f08b6a5..7d40ca120cdf 100644 --- a/core/res/res/values-zh-rHK/strings.xml +++ b/core/res/res/values-zh-rHK/strings.xml @@ -662,7 +662,8 @@ </string-array> <string name="fingerprint_error_not_match" msgid="4599441812893438961">"無法辨識指紋"</string> <string name="fingerprint_udfps_error_not_match" msgid="8236930793223158856">"無法辨識指紋"</string> - <string name="fingerprint_dialog_use_fingerprint_instead" msgid="6226091888364083421">"無法辨識面孔,請改用指紋完成驗證。"</string> + <!-- no translation found for fingerprint_dialog_use_fingerprint_instead (5590293588784953188) --> + <skip /> <string name="fingerprint_authenticated" msgid="2024862866860283100">"驗證咗指紋"</string> <string name="face_authenticated_no_confirmation_required" msgid="8867889115112348167">"面孔已經驗證"</string> <string name="face_authenticated_confirmation_required" msgid="6872632732508013755">"面孔已經驗證,請㩒一下 [確認]"</string> diff --git a/core/res/res/values-zh-rTW/strings.xml b/core/res/res/values-zh-rTW/strings.xml index 124d17a805b3..f19385529c9b 100644 --- a/core/res/res/values-zh-rTW/strings.xml +++ b/core/res/res/values-zh-rTW/strings.xml @@ -662,7 +662,8 @@ </string-array> <string name="fingerprint_error_not_match" msgid="4599441812893438961">"指紋辨識失敗"</string> <string name="fingerprint_udfps_error_not_match" msgid="8236930793223158856">"指紋辨識失敗"</string> - <string name="fingerprint_dialog_use_fingerprint_instead" msgid="6226091888364083421">"無法辨識臉孔,請改用指紋完成驗證。"</string> + <!-- no translation found for fingerprint_dialog_use_fingerprint_instead (5590293588784953188) --> + <skip /> <string name="fingerprint_authenticated" msgid="2024862866860283100">"指紋驗證成功"</string> <string name="face_authenticated_no_confirmation_required" msgid="8867889115112348167">"臉孔驗證成功"</string> <string name="face_authenticated_confirmation_required" msgid="6872632732508013755">"臉孔驗證成功,請按下 [確認] 按鈕"</string> diff --git a/core/res/res/values-zu/strings.xml b/core/res/res/values-zu/strings.xml index 8ffb7a43b36c..e22a359d755f 100644 --- a/core/res/res/values-zu/strings.xml +++ b/core/res/res/values-zu/strings.xml @@ -662,7 +662,8 @@ </string-array> <string name="fingerprint_error_not_match" msgid="4599441812893438961">"Isigxivizo somunwe asaziwa"</string> <string name="fingerprint_udfps_error_not_match" msgid="8236930793223158856">"Isigxivizo somunwe asaziwa"</string> - <string name="fingerprint_dialog_use_fingerprint_instead" msgid="6226091888364083421">"Ayibazi ubuso. Sebenzisa izigxivizo zeminwe kunalokho."</string> + <!-- no translation found for fingerprint_dialog_use_fingerprint_instead (5590293588784953188) --> + <skip /> <string name="fingerprint_authenticated" msgid="2024862866860283100">"Izigxivizo zeminwe zigunyaziwe"</string> <string name="face_authenticated_no_confirmation_required" msgid="8867889115112348167">"Ubuso bufakazelwe ubuqiniso"</string> <string name="face_authenticated_confirmation_required" msgid="6872632732508013755">"Ukuqinisekiswa kobuso, sicela ucindezele okuthi qinisekisa"</string> diff --git a/core/res/res/values/strings.xml b/core/res/res/values/strings.xml index 4c941fda1f14..60289c1921c2 100644 --- a/core/res/res/values/strings.xml +++ b/core/res/res/values/strings.xml @@ -5188,7 +5188,7 @@ <string name="lock_to_app_unlock_password">Ask for password before unpinning</string> <!-- Notification shown when device owner silently installs a package [CHAR LIMIT=NONE] --> - <string name="package_installed_device_owner">Installed by your admin</string> + <string name="package_installed_device_owner">Installed by your admin.\nGo to settings to view granted permissions</string> <!-- Notification shown when device owner silently updates a package [CHAR LIMIT=NONE] --> <string name="package_updated_device_owner">Updated by your admin</string> <!-- Notification shown when device owner silently deletes a package [CHAR LIMIT=NONE] --> @@ -6436,10 +6436,8 @@ ul.</string> <!-- Communal profile label on a screen. This can be used as a tab label for this profile in tabbed views and can be used to represent the profile in sharing surfaces, etc. [CHAR LIMIT=20] --> <string name="profile_label_communal">Communal</string> - <!-- Notification message used when a notification's normal message contains sensitive information. --> - <!-- TODO b/301960090: replace with redacted message string and action title, when/if UX provides one --> - <!-- DO NOT TRANSLATE --> - <string name="redacted_notification_message"></string> + <!-- Notification message used when a notification's normal message contains sensitive information [CHAR_LIMIT=NOTIF_BODY] --> + <string name="redacted_notification_message">Sensitive notification content hidden</string> <!-- Notification action title used instead of a notification's normal title sensitive [CHAR_LIMIT=NOTIF_BODY] --> <string name="redacted_notification_action_title"></string> diff --git a/libs/WindowManager/Shell/res/values-de/strings.xml b/libs/WindowManager/Shell/res/values-de/strings.xml index 7b5c471e074f..bcdc2a9c8539 100644 --- a/libs/WindowManager/Shell/res/values-de/strings.xml +++ b/libs/WindowManager/Shell/res/values-de/strings.xml @@ -62,7 +62,7 @@ <string name="bubble_content_description_single" msgid="8495748092720065813">"<xliff:g id="NOTIFICATION_TITLE">%1$s</xliff:g> von <xliff:g id="APP_NAME">%2$s</xliff:g>"</string> <string name="bubble_content_description_stack" msgid="8071515017164630429">"<xliff:g id="NOTIFICATION_TITLE">%1$s</xliff:g> aus <xliff:g id="APP_NAME">%2$s</xliff:g> und <xliff:g id="BUBBLE_COUNT">%3$d</xliff:g> weiteren"</string> <string name="bubble_accessibility_action_move_top_left" msgid="2644118920500782758">"Nach oben links verschieben"</string> - <string name="bubble_accessibility_action_move_top_right" msgid="5864594920870245525">"Nach rechts oben verschieben"</string> + <string name="bubble_accessibility_action_move_top_right" msgid="5864594920870245525">"Nach oben rechts verschieben"</string> <string name="bubble_accessibility_action_move_bottom_left" msgid="850271002773745634">"Nach unten links verschieben"</string> <string name="bubble_accessibility_action_move_bottom_right" msgid="2107626346109206352">"Nach unten rechts verschieben"</string> <string name="bubble_accessibility_announce_expand" msgid="5388792092888203776">"<xliff:g id="BUBBLE_TITLE">%1$s</xliff:g> maximieren"</string> diff --git a/libs/WindowManager/Shell/res/values-pt-rPT/strings.xml b/libs/WindowManager/Shell/res/values-pt-rPT/strings.xml index ff77d3b2d150..18d21eb6310b 100644 --- a/libs/WindowManager/Shell/res/values-pt-rPT/strings.xml +++ b/libs/WindowManager/Shell/res/values-pt-rPT/strings.xml @@ -62,7 +62,7 @@ <string name="bubble_content_description_single" msgid="8495748092720065813">"<xliff:g id="NOTIFICATION_TITLE">%1$s</xliff:g> de <xliff:g id="APP_NAME">%2$s</xliff:g>"</string> <string name="bubble_content_description_stack" msgid="8071515017164630429">"<xliff:g id="NOTIFICATION_TITLE">%1$s</xliff:g> do <xliff:g id="APP_NAME">%2$s</xliff:g> e mais<xliff:g id="BUBBLE_COUNT">%3$d</xliff:g>."</string> <string name="bubble_accessibility_action_move_top_left" msgid="2644118920500782758">"Mover p/ parte sup. esquerda"</string> - <string name="bubble_accessibility_action_move_top_right" msgid="5864594920870245525">"Mover parte superior direita"</string> + <string name="bubble_accessibility_action_move_top_right" msgid="5864594920870245525">"Mover p/ parte sup. direita"</string> <string name="bubble_accessibility_action_move_bottom_left" msgid="850271002773745634">"Mover p/ parte infer. esquerda"</string> <string name="bubble_accessibility_action_move_bottom_right" msgid="2107626346109206352">"Mover parte inferior direita"</string> <string name="bubble_accessibility_announce_expand" msgid="5388792092888203776">"expandir <xliff:g id="BUBBLE_TITLE">%1$s</xliff:g>"</string> diff --git a/libs/WindowManager/Shell/res/values-ru/strings.xml b/libs/WindowManager/Shell/res/values-ru/strings.xml index e23c1ff19563..971e146ba77e 100644 --- a/libs/WindowManager/Shell/res/values-ru/strings.xml +++ b/libs/WindowManager/Shell/res/values-ru/strings.xml @@ -61,10 +61,10 @@ <string name="bubble_accessibility_action_add_back" msgid="1830101076853540953">"Добавить обратно в стек"</string> <string name="bubble_content_description_single" msgid="8495748092720065813">"<xliff:g id="NOTIFICATION_TITLE">%1$s</xliff:g> из приложения \"<xliff:g id="APP_NAME">%2$s</xliff:g>\""</string> <string name="bubble_content_description_stack" msgid="8071515017164630429">"<xliff:g id="NOTIFICATION_TITLE">%1$s</xliff:g> от приложения \"<xliff:g id="APP_NAME">%2$s</xliff:g>\" и ещё <xliff:g id="BUBBLE_COUNT">%3$d</xliff:g>"</string> - <string name="bubble_accessibility_action_move_top_left" msgid="2644118920500782758">"Перенести в левый верхний угол"</string> - <string name="bubble_accessibility_action_move_top_right" msgid="5864594920870245525">"Перенести в правый верхний угол"</string> - <string name="bubble_accessibility_action_move_bottom_left" msgid="850271002773745634">"Перенести в левый нижний угол"</string> - <string name="bubble_accessibility_action_move_bottom_right" msgid="2107626346109206352">"Перенести в правый нижний угол"</string> + <string name="bubble_accessibility_action_move_top_left" msgid="2644118920500782758">"Переместить в левый верхний угол"</string> + <string name="bubble_accessibility_action_move_top_right" msgid="5864594920870245525">"Переместить в правый верхний угол"</string> + <string name="bubble_accessibility_action_move_bottom_left" msgid="850271002773745634">"Переместить в левый нижний угол"</string> + <string name="bubble_accessibility_action_move_bottom_right" msgid="2107626346109206352">"Переместить в правый нижний угол"</string> <string name="bubble_accessibility_announce_expand" msgid="5388792092888203776">"Развернуть <xliff:g id="BUBBLE_TITLE">%1$s</xliff:g>"</string> <string name="bubble_accessibility_announce_collapse" msgid="3178806224494537097">"Свернуть <xliff:g id="BUBBLE_TITLE">%1$s</xliff:g>"</string> <string name="bubbles_app_settings" msgid="3617224938701566416">"<xliff:g id="NOTIFICATION_TITLE">%1$s</xliff:g>: настройки"</string> diff --git a/libs/WindowManager/Shell/res/values-th/strings.xml b/libs/WindowManager/Shell/res/values-th/strings.xml index 407fbbbb1707..fe0b74c469f4 100644 --- a/libs/WindowManager/Shell/res/values-th/strings.xml +++ b/libs/WindowManager/Shell/res/values-th/strings.xml @@ -64,7 +64,7 @@ <string name="bubble_accessibility_action_move_top_left" msgid="2644118920500782758">"ย้ายไปด้านซ้ายบน"</string> <string name="bubble_accessibility_action_move_top_right" msgid="5864594920870245525">"ย้ายไปด้านขวาบน"</string> <string name="bubble_accessibility_action_move_bottom_left" msgid="850271002773745634">"ย้ายไปด้านซ้ายล่าง"</string> - <string name="bubble_accessibility_action_move_bottom_right" msgid="2107626346109206352">"ย้ายไปด้านขาวล่าง"</string> + <string name="bubble_accessibility_action_move_bottom_right" msgid="2107626346109206352">"ย้ายไปด้านขวาล่าง"</string> <string name="bubble_accessibility_announce_expand" msgid="5388792092888203776">"ขยาย <xliff:g id="BUBBLE_TITLE">%1$s</xliff:g>"</string> <string name="bubble_accessibility_announce_collapse" msgid="3178806224494537097">"ยุบ <xliff:g id="BUBBLE_TITLE">%1$s</xliff:g>"</string> <string name="bubbles_app_settings" msgid="3617224938701566416">"การตั้งค่า <xliff:g id="NOTIFICATION_TITLE">%1$s</xliff:g>"</string> diff --git a/libs/WindowManager/Shell/src/com/android/wm/shell/ShellTaskOrganizer.java b/libs/WindowManager/Shell/src/com/android/wm/shell/ShellTaskOrganizer.java index d8d0d876b4f2..3244837324b6 100644 --- a/libs/WindowManager/Shell/src/com/android/wm/shell/ShellTaskOrganizer.java +++ b/libs/WindowManager/Shell/src/com/android/wm/shell/ShellTaskOrganizer.java @@ -16,6 +16,7 @@ package com.android.wm.shell; + import static android.app.WindowConfiguration.ACTIVITY_TYPE_HOME; import static android.app.WindowConfiguration.WINDOWING_MODE_FREEFORM; import static android.app.WindowConfiguration.WINDOWING_MODE_FULLSCREEN; @@ -30,7 +31,7 @@ import android.annotation.IntDef; import android.annotation.NonNull; import android.annotation.Nullable; import android.app.ActivityManager.RunningTaskInfo; -import android.app.AppCompatTaskInfo; +import android.app.CameraCompatTaskInfo.CameraCompatControlState; import android.app.TaskInfo; import android.app.WindowConfiguration; import android.content.LocusId; @@ -718,8 +719,7 @@ public class ShellTaskOrganizer extends TaskOrganizer implements } @Override - public void onCameraControlStateUpdated( - int taskId, @AppCompatTaskInfo.CameraCompatControlState int state) { + public void onCameraControlStateUpdated(int taskId, @CameraCompatControlState int state) { final TaskAppearedInfo info; synchronized (mLock) { info = mTasks.get(taskId); diff --git a/libs/WindowManager/Shell/src/com/android/wm/shell/back/CrossActivityBackAnimation.kt b/libs/WindowManager/Shell/src/com/android/wm/shell/back/CrossActivityBackAnimation.kt index 7cb56605cc12..0799fe3b6eb2 100644 --- a/libs/WindowManager/Shell/src/com/android/wm/shell/back/CrossActivityBackAnimation.kt +++ b/libs/WindowManager/Shell/src/com/android/wm/shell/back/CrossActivityBackAnimation.kt @@ -94,6 +94,8 @@ class CrossActivityBackAnimation @Inject constructor( private var scrimLayer: SurfaceControl? = null private var maxScrimAlpha: Float = 0f + private var isLetterboxed = false + override fun onConfigurationChanged(newConfiguration: Configuration) { cornerRadius = ScreenDecorationsUtils.getWindowCornerRadius(context) } @@ -112,9 +114,15 @@ class CrossActivityBackAnimation @Inject constructor( initialTouchPos.set(backMotionEvent.touchX, backMotionEvent.touchY) transaction.setAnimationTransaction() - + isLetterboxed = closingTarget!!.taskInfo.appCompatTaskInfo.topActivityBoundsLetterboxed + if (isLetterboxed) { + // Include letterbox in back animation + backAnimRect.set(closingTarget!!.windowConfiguration.bounds) + } else { + // otherwise play animation on localBounds only + backAnimRect.set(closingTarget!!.localBounds) + } // Offset start rectangle to align task bounds. - backAnimRect.set(closingTarget!!.localBounds) backAnimRect.offsetTo(0, 0) startClosingRect.set(backAnimRect) @@ -241,6 +249,7 @@ class CrossActivityBackAnimation @Inject constructor( } finishCallback = null removeScrimLayer() + isLetterboxed = false } private fun applyTransform(leash: SurfaceControl?, rect: RectF, alpha: Float) { @@ -274,10 +283,11 @@ class CrossActivityBackAnimation @Inject constructor( scrimLayer = scrimBuilder.build() val colorComponents = floatArrayOf(0f, 0f, 0f) maxScrimAlpha = if (isDarkTheme) MAX_SCRIM_ALPHA_DARK else MAX_SCRIM_ALPHA_LIGHT + val scrimCrop = if (isLetterboxed) backAnimRect else closingTarget!!.localBounds transaction .setColor(scrimLayer, colorComponents) .setAlpha(scrimLayer!!, maxScrimAlpha) - .setCrop(scrimLayer!!, closingTarget!!.localBounds) + .setCrop(scrimLayer!!, scrimCrop) .setRelativeLayer(scrimLayer!!, closingTarget!!.leash, -1) .show(scrimLayer) } diff --git a/libs/WindowManager/Shell/src/com/android/wm/shell/compatui/CompatUIController.java b/libs/WindowManager/Shell/src/com/android/wm/shell/compatui/CompatUIController.java index 86571cf9c622..5c292f173e5b 100644 --- a/libs/WindowManager/Shell/src/com/android/wm/shell/compatui/CompatUIController.java +++ b/libs/WindowManager/Shell/src/com/android/wm/shell/compatui/CompatUIController.java @@ -20,7 +20,7 @@ import static android.app.WindowConfiguration.WINDOWING_MODE_FULLSCREEN; import android.annotation.NonNull; import android.annotation.Nullable; -import android.app.AppCompatTaskInfo.CameraCompatControlState; +import android.app.CameraCompatTaskInfo.CameraCompatControlState; import android.app.TaskInfo; import android.content.ComponentName; import android.content.Context; diff --git a/libs/WindowManager/Shell/src/com/android/wm/shell/compatui/CompatUILayout.java b/libs/WindowManager/Shell/src/com/android/wm/shell/compatui/CompatUILayout.java index a0986fa601f2..2b0bd3272ed2 100644 --- a/libs/WindowManager/Shell/src/com/android/wm/shell/compatui/CompatUILayout.java +++ b/libs/WindowManager/Shell/src/com/android/wm/shell/compatui/CompatUILayout.java @@ -16,10 +16,10 @@ package com.android.wm.shell.compatui; -import static android.app.AppCompatTaskInfo.CAMERA_COMPAT_CONTROL_TREATMENT_SUGGESTED; +import static android.app.CameraCompatTaskInfo.CAMERA_COMPAT_CONTROL_TREATMENT_SUGGESTED; import android.annotation.IdRes; -import android.app.AppCompatTaskInfo.CameraCompatControlState; +import android.app.CameraCompatTaskInfo.CameraCompatControlState; import android.content.Context; import android.util.AttributeSet; import android.view.View; diff --git a/libs/WindowManager/Shell/src/com/android/wm/shell/compatui/CompatUIWindowManager.java b/libs/WindowManager/Shell/src/com/android/wm/shell/compatui/CompatUIWindowManager.java index dbf7186def8a..4e5c2fa24f25 100644 --- a/libs/WindowManager/Shell/src/com/android/wm/shell/compatui/CompatUIWindowManager.java +++ b/libs/WindowManager/Shell/src/com/android/wm/shell/compatui/CompatUIWindowManager.java @@ -16,16 +16,16 @@ package com.android.wm.shell.compatui; -import static android.app.AppCompatTaskInfo.CAMERA_COMPAT_CONTROL_DISMISSED; -import static android.app.AppCompatTaskInfo.CAMERA_COMPAT_CONTROL_HIDDEN; -import static android.app.AppCompatTaskInfo.CAMERA_COMPAT_CONTROL_TREATMENT_APPLIED; -import static android.app.AppCompatTaskInfo.CAMERA_COMPAT_CONTROL_TREATMENT_SUGGESTED; +import static android.app.CameraCompatTaskInfo.CAMERA_COMPAT_CONTROL_DISMISSED; +import static android.app.CameraCompatTaskInfo.CAMERA_COMPAT_CONTROL_HIDDEN; +import static android.app.CameraCompatTaskInfo.CAMERA_COMPAT_CONTROL_TREATMENT_APPLIED; +import static android.app.CameraCompatTaskInfo.CAMERA_COMPAT_CONTROL_TREATMENT_SUGGESTED; import static android.window.TaskConstants.TASK_CHILD_LAYER_COMPAT_UI; import android.annotation.NonNull; import android.annotation.Nullable; import android.app.AppCompatTaskInfo; -import android.app.AppCompatTaskInfo.CameraCompatControlState; +import android.app.CameraCompatTaskInfo.CameraCompatControlState; import android.app.TaskInfo; import android.content.Context; import android.graphics.Rect; @@ -81,7 +81,8 @@ class CompatUIWindowManager extends CompatUIWindowManagerAbstract { super(context, taskInfo, syncQueue, taskListener, displayLayout); mCallback = callback; mHasSizeCompat = taskInfo.appCompatTaskInfo.topActivityInSizeCompat; - mCameraCompatControlState = taskInfo.appCompatTaskInfo.cameraCompatControlState; + mCameraCompatControlState = + taskInfo.appCompatTaskInfo.cameraCompatTaskInfo.cameraCompatControlState; mCompatUIHintsState = compatUIHintsState; mCompatUIConfiguration = compatUIConfiguration; mOnRestartButtonClicked = onRestartButtonClicked; @@ -135,7 +136,8 @@ class CompatUIWindowManager extends CompatUIWindowManagerAbstract { final boolean prevHasSizeCompat = mHasSizeCompat; final int prevCameraCompatControlState = mCameraCompatControlState; mHasSizeCompat = taskInfo.appCompatTaskInfo.topActivityInSizeCompat; - mCameraCompatControlState = taskInfo.appCompatTaskInfo.cameraCompatControlState; + mCameraCompatControlState = + taskInfo.appCompatTaskInfo.cameraCompatTaskInfo.cameraCompatControlState; if (!super.updateCompatInfo(taskInfo, taskListener, canShow)) { return false; diff --git a/libs/WindowManager/Shell/src/com/android/wm/shell/compatui/UserAspectRatioSettingsWindowManager.java b/libs/WindowManager/Shell/src/com/android/wm/shell/compatui/UserAspectRatioSettingsWindowManager.java index 7c280994042b..8fb4bdbea933 100644 --- a/libs/WindowManager/Shell/src/com/android/wm/shell/compatui/UserAspectRatioSettingsWindowManager.java +++ b/libs/WindowManager/Shell/src/com/android/wm/shell/compatui/UserAspectRatioSettingsWindowManager.java @@ -237,7 +237,8 @@ class UserAspectRatioSettingsWindowManager extends CompatUIWindowManagerAbstract final int letterboxWidth = taskInfo.topActivityLetterboxWidth; // App is not visibly letterboxed if it covers status bar/bottom insets or matches the // stable bounds, so don't show the button - if (stableBounds.height() <= letterboxHeight && stableBounds.width() <= letterboxWidth) { + if (stableBounds.height() <= letterboxHeight && stableBounds.width() <= letterboxWidth + && !taskInfo.isUserFullscreenOverrideEnabled) { return false; } diff --git a/libs/WindowManager/Shell/src/com/android/wm/shell/pip/PipAnimationController.java b/libs/WindowManager/Shell/src/com/android/wm/shell/pip/PipAnimationController.java index 4c477373c32c..eb845db409e3 100644 --- a/libs/WindowManager/Shell/src/com/android/wm/shell/pip/PipAnimationController.java +++ b/libs/WindowManager/Shell/src/com/android/wm/shell/pip/PipAnimationController.java @@ -743,11 +743,6 @@ public class PipAnimationController { .alpha(tx, leash, 1f) .round(tx, leash, shouldApplyCornerRadius()) .shadow(tx, leash, shouldApplyShadowRadius()); - // TODO(b/178632364): this is a work around for the black background when - // entering PiP in button navigation mode. - if (isInPipDirection(direction)) { - tx.setWindowCrop(leash, getStartValue()); - } tx.show(leash); tx.apply(); } diff --git a/libs/WindowManager/Shell/src/com/android/wm/shell/pip/PipTransition.java b/libs/WindowManager/Shell/src/com/android/wm/shell/pip/PipTransition.java index d60f5a631044..10b7619c4adb 100644 --- a/libs/WindowManager/Shell/src/com/android/wm/shell/pip/PipTransition.java +++ b/libs/WindowManager/Shell/src/com/android/wm/shell/pip/PipTransition.java @@ -818,8 +818,13 @@ public class PipTransition extends PipTransitionController { @NonNull Transitions.TransitionFinishCallback finishCallback, @NonNull TaskInfo taskInfo) { startTransaction.apply(); - finishTransaction.setWindowCrop(info.getChanges().get(0).getLeash(), - mPipDisplayLayoutState.getDisplayBounds()); + if (info.getChanges().isEmpty()) { + ProtoLog.e(ShellProtoLogGroup.WM_SHELL_PICTURE_IN_PICTURE, + "removePipImmediately is called with empty changes"); + } else { + finishTransaction.setWindowCrop(info.getChanges().get(0).getLeash(), + mPipDisplayLayoutState.getDisplayBounds()); + } mPipOrganizer.onExitPipFinished(taskInfo); finishCallback.onTransitionFinished(null); } diff --git a/libs/WindowManager/Shell/src/com/android/wm/shell/transition/DefaultTransitionHandler.java b/libs/WindowManager/Shell/src/com/android/wm/shell/transition/DefaultTransitionHandler.java index 9adb67c8a65e..2d6ba6ee7217 100644 --- a/libs/WindowManager/Shell/src/com/android/wm/shell/transition/DefaultTransitionHandler.java +++ b/libs/WindowManager/Shell/src/com/android/wm/shell/transition/DefaultTransitionHandler.java @@ -594,7 +594,6 @@ public class DefaultTransitionHandler implements Transitions.TransitionHandler { .setName("animation-background") .setCallsite("DefaultTransitionHandler") .setColorLayer(); - final SurfaceControl backgroundSurface = colorLayerBuilder.build(); // Attaching the background surface to the transition root could unexpectedly make it // cover one of the split root tasks. To avoid this, put the background surface just @@ -605,8 +604,10 @@ public class DefaultTransitionHandler implements Transitions.TransitionHandler { if (isSplitTaskInvolved) { mRootTDAOrganizer.attachToDisplayArea(displayId, colorLayerBuilder); } else { - startTransaction.reparent(backgroundSurface, info.getRootLeash()); + colorLayerBuilder.setParent(info.getRootLeash()); } + + final SurfaceControl backgroundSurface = colorLayerBuilder.build(); startTransaction.setColor(backgroundSurface, colorArray) .setLayer(backgroundSurface, -1) .show(backgroundSurface); diff --git a/libs/WindowManager/Shell/tests/flicker/service/src/com/android/wm/shell/flicker/service/desktopmode/OWNERS b/libs/WindowManager/Shell/tests/flicker/service/src/com/android/wm/shell/flicker/service/desktopmode/OWNERS new file mode 100644 index 000000000000..73a5a23909c5 --- /dev/null +++ b/libs/WindowManager/Shell/tests/flicker/service/src/com/android/wm/shell/flicker/service/desktopmode/OWNERS @@ -0,0 +1,5 @@ +# Android > Android OS & Apps > Framework (Java + Native) > Window Manager > WM Shell > Freeform +# Bug component: 929241 + +uysalorhan@google.com +pragyabajoria@google.com
\ No newline at end of file diff --git a/libs/WindowManager/Shell/tests/flicker/service/src/com/android/wm/shell/flicker/service/desktopmode/flicker/EnterDesktopWithDragLandscape.kt b/libs/WindowManager/Shell/tests/flicker/service/src/com/android/wm/shell/flicker/service/desktopmode/flicker/EnterDesktopWithDragLandscape.kt new file mode 100644 index 000000000000..4c781d36acf6 --- /dev/null +++ b/libs/WindowManager/Shell/tests/flicker/service/src/com/android/wm/shell/flicker/service/desktopmode/flicker/EnterDesktopWithDragLandscape.kt @@ -0,0 +1,74 @@ +/* + * Copyright (C) 2024 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.wm.shell.flicker.service.desktopmode.flicker + +import android.tools.Rotation +import android.tools.flicker.AssertionInvocationGroup +import android.tools.flicker.FlickerConfig +import android.tools.flicker.annotation.ExpectedScenarios +import android.tools.flicker.annotation.FlickerConfigProvider +import android.tools.flicker.assertors.assertions.AppLayerIsVisibleAlways +import android.tools.flicker.assertors.assertions.AppWindowHasDesktopModeInitialBoundsAtTheEnd +import android.tools.flicker.assertors.assertions.AppWindowOnTopAtEnd +import android.tools.flicker.config.AssertionTemplates +import android.tools.flicker.config.FlickerConfig +import android.tools.flicker.config.FlickerConfigEntry +import android.tools.flicker.config.FlickerServiceConfig +import android.tools.flicker.config.ScenarioId +import android.tools.flicker.config.desktopmode.Components +import android.tools.flicker.extractors.ITransitionMatcher +import android.tools.flicker.extractors.ShellTransitionScenarioExtractor +import android.tools.flicker.junit.FlickerServiceJUnit4ClassRunner +import android.tools.traces.wm.Transition +import android.tools.traces.wm.TransitionType +import com.android.wm.shell.flicker.service.desktopmode.scenarios.EnterDesktopWithDrag +import org.junit.Test +import org.junit.runner.RunWith + +@RunWith(FlickerServiceJUnit4ClassRunner::class) +class EnterDesktopWithDragLandscape : EnterDesktopWithDrag(Rotation.ROTATION_90) { + @ExpectedScenarios(["END_DRAG_TO_DESKTOP"]) @Test override fun enterDesktopWithDrag() = + super.enterDesktopWithDrag() + + companion object { + private val END_DRAG_TO_DESKTOP = FlickerConfigEntry( + scenarioId = ScenarioId("END_DRAG_TO_DESKTOP"), + extractor = ShellTransitionScenarioExtractor( + transitionMatcher = object : ITransitionMatcher { + override fun findAll( + transitions: Collection<Transition> + ): Collection<Transition> { + return transitions.filter { + it.type == TransitionType.DESKTOP_MODE_END_DRAG_TO_DESKTOP} + } + }), + assertions = AssertionTemplates.COMMON_ASSERTIONS + + listOf( + AppLayerIsVisibleAlways(Components.DESKTOP_MODE_APP), + AppWindowOnTopAtEnd(Components.DESKTOP_MODE_APP), + AppWindowHasDesktopModeInitialBoundsAtTheEnd(Components.DESKTOP_MODE_APP) + ).associateBy({ it }, { AssertionInvocationGroup.BLOCKING }), + ) + + @JvmStatic + @FlickerConfigProvider + fun flickerConfigProvider(): FlickerConfig = + FlickerConfig() + .use(FlickerServiceConfig.DEFAULT) + .use(END_DRAG_TO_DESKTOP) + } +} diff --git a/libs/WindowManager/Shell/tests/flicker/service/src/com/android/wm/shell/flicker/service/desktopmode/flicker/EnterDesktopWithDragPortrait.kt b/libs/WindowManager/Shell/tests/flicker/service/src/com/android/wm/shell/flicker/service/desktopmode/flicker/EnterDesktopWithDragPortrait.kt new file mode 100644 index 000000000000..d99d875fb126 --- /dev/null +++ b/libs/WindowManager/Shell/tests/flicker/service/src/com/android/wm/shell/flicker/service/desktopmode/flicker/EnterDesktopWithDragPortrait.kt @@ -0,0 +1,74 @@ +/* + * Copyright (C) 2024 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.wm.shell.flicker.service.desktopmode.flicker + +import android.tools.Rotation +import android.tools.flicker.AssertionInvocationGroup +import android.tools.flicker.FlickerConfig +import android.tools.flicker.annotation.ExpectedScenarios +import android.tools.flicker.annotation.FlickerConfigProvider +import android.tools.flicker.assertors.assertions.AppLayerIsVisibleAlways +import android.tools.flicker.assertors.assertions.AppWindowHasDesktopModeInitialBoundsAtTheEnd +import android.tools.flicker.assertors.assertions.AppWindowOnTopAtEnd +import android.tools.flicker.config.AssertionTemplates +import android.tools.flicker.config.FlickerConfig +import android.tools.flicker.config.FlickerConfigEntry +import android.tools.flicker.config.FlickerServiceConfig +import android.tools.flicker.config.ScenarioId +import android.tools.flicker.config.desktopmode.Components +import android.tools.flicker.extractors.ITransitionMatcher +import android.tools.flicker.extractors.ShellTransitionScenarioExtractor +import android.tools.flicker.junit.FlickerServiceJUnit4ClassRunner +import android.tools.traces.wm.Transition +import android.tools.traces.wm.TransitionType +import com.android.wm.shell.flicker.service.desktopmode.scenarios.EnterDesktopWithDrag +import org.junit.Test +import org.junit.runner.RunWith + +@RunWith(FlickerServiceJUnit4ClassRunner::class) +class EnterDesktopWithDragPortrait : EnterDesktopWithDrag(Rotation.ROTATION_0) { + @ExpectedScenarios(["END_DRAG_TO_DESKTOP"]) @Test override fun enterDesktopWithDrag() = + super.enterDesktopWithDrag() + + companion object { + private val END_DRAG_TO_DESKTOP = FlickerConfigEntry( + scenarioId = ScenarioId("END_DRAG_TO_DESKTOP"), + extractor = ShellTransitionScenarioExtractor( + transitionMatcher = object : ITransitionMatcher { + override fun findAll( + transitions: Collection<Transition> + ): Collection<Transition> { + return transitions.filter { + it.type == TransitionType.DESKTOP_MODE_END_DRAG_TO_DESKTOP} + } + }), + assertions = AssertionTemplates.COMMON_ASSERTIONS + + listOf( + AppLayerIsVisibleAlways(Components.DESKTOP_MODE_APP), + AppWindowOnTopAtEnd(Components.DESKTOP_MODE_APP), + AppWindowHasDesktopModeInitialBoundsAtTheEnd(Components.DESKTOP_MODE_APP) + ).associateBy({ it }, { AssertionInvocationGroup.BLOCKING }), + ) + + @JvmStatic + @FlickerConfigProvider + fun flickerConfigProvider(): FlickerConfig = + FlickerConfig() + .use(FlickerServiceConfig.DEFAULT) + .use(END_DRAG_TO_DESKTOP) + } +} diff --git a/libs/WindowManager/Shell/tests/flicker/service/src/com/android/wm/shell/flicker/service/desktopmode/scenarios/EnterDesktopWithDrag.kt b/libs/WindowManager/Shell/tests/flicker/service/src/com/android/wm/shell/flicker/service/desktopmode/scenarios/EnterDesktopWithDrag.kt new file mode 100644 index 000000000000..0403b4f64faf --- /dev/null +++ b/libs/WindowManager/Shell/tests/flicker/service/src/com/android/wm/shell/flicker/service/desktopmode/scenarios/EnterDesktopWithDrag.kt @@ -0,0 +1,63 @@ +/* + * Copyright (C) 2024 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.wm.shell.flicker.service.desktopmode.scenarios + +import android.app.Instrumentation +import android.tools.NavBar +import android.tools.Rotation +import android.tools.traces.parsers.WindowManagerStateHelper +import androidx.test.platform.app.InstrumentationRegistry +import androidx.test.uiautomator.UiDevice +import com.android.launcher3.tapl.LauncherInstrumentation +import com.android.server.wm.flicker.helpers.SimpleAppHelper +import com.android.wm.shell.flicker.service.common.Utils +import com.android.wm.shell.flicker.utils.DesktopModeUtils +import org.junit.After +import org.junit.Before +import org.junit.Ignore +import org.junit.Rule +import org.junit.Test + +@Ignore("Base Test Class") +abstract class EnterDesktopWithDrag +@JvmOverloads +constructor(val rotation: Rotation = Rotation.ROTATION_0) { + + private val instrumentation: Instrumentation = InstrumentationRegistry.getInstrumentation() + private val tapl = LauncherInstrumentation() + private val wmHelper = WindowManagerStateHelper(instrumentation) + private val device = UiDevice.getInstance(instrumentation) + private val testApp = SimpleAppHelper(instrumentation) + + @Rule @JvmField val testSetupRule = Utils.testSetupRule(NavBar.MODE_GESTURAL, rotation) + + @Before + fun setup() { + tapl.setEnableRotation(true) + tapl.setExpectedRotation(rotation.value) + } + + @Test + open fun enterDesktopWithDrag() { + DesktopModeUtils.enterDesktopWithDrag(wmHelper, device, testApp) + } + + @After + fun teardown() { + testApp.exit(wmHelper) + } +} diff --git a/libs/WindowManager/Shell/tests/flicker/src/com/android/wm/shell/flicker/utils/DesktopModeUtils.kt b/libs/WindowManager/Shell/tests/flicker/src/com/android/wm/shell/flicker/utils/DesktopModeUtils.kt new file mode 100644 index 000000000000..345bc5ebb20e --- /dev/null +++ b/libs/WindowManager/Shell/tests/flicker/src/com/android/wm/shell/flicker/utils/DesktopModeUtils.kt @@ -0,0 +1,112 @@ +/* + * Copyright (C) 2024 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.wm.shell.flicker.utils + +import android.tools.device.apphelpers.StandardAppHelper +import android.tools.helpers.SYSTEMUI_PACKAGE +import android.tools.traces.component.IComponentMatcher +import android.tools.traces.parsers.WindowManagerStateHelper +import android.tools.traces.wm.WindowingMode +import androidx.test.uiautomator.By +import androidx.test.uiautomator.BySelector +import androidx.test.uiautomator.UiDevice +import androidx.test.uiautomator.Until + +/** + * Provides a collection of utility functions for desktop mode testing. + */ +object DesktopModeUtils { + private const val TIMEOUT_MS = 3_000L + private const val CAPTION = "desktop_mode_caption" + private const val CAPTION_HANDLE = "caption_handle" + private const val MAXIMIZE_BUTTON = "maximize_button_view" + + private val captionFullscreen: BySelector + get() = By.res(SYSTEMUI_PACKAGE, CAPTION) + private val captionHandle: BySelector + get() = By.res(SYSTEMUI_PACKAGE, CAPTION_HANDLE) + private val maximizeButton: BySelector + get() = By.res(SYSTEMUI_PACKAGE, MAXIMIZE_BUTTON) + + /** + * Wait for an app moved to desktop to finish its transition. + */ + private fun waitForAppToMoveToDesktop( + wmHelper: WindowManagerStateHelper, + currentApp: IComponentMatcher, + ) { + wmHelper + .StateSyncBuilder() + .withWindowSurfaceAppeared(currentApp) + .withFreeformApp(currentApp) + .withAppTransitionIdle() + .waitForAndVerify() + } + + /** + * Click maximise button on the app header for the given app. + */ + fun maximiseDesktopApp( + wmHelper: WindowManagerStateHelper, + device: UiDevice, + currentApp: StandardAppHelper + ) { + if (wmHelper.getWindow(currentApp)?.windowingMode + != WindowingMode.WINDOWING_MODE_FREEFORM.value) + error("expected a freeform window to maximise but window is not in freefrom mode") + + val maximizeButton = + device.wait(Until.findObject(maximizeButton), TIMEOUT_MS) + ?: error("Unable to find view $maximizeButton\n") + maximizeButton.click() + } + + /** + * Move an app to Desktop by dragging the app handle at the top. + */ + fun enterDesktopWithDrag( + wmHelper: WindowManagerStateHelper, + device: UiDevice, + currentApp: StandardAppHelper, + ) { + currentApp.launchViaIntent(wmHelper) + dragToDesktop(wmHelper, currentApp, device) + waitForAppToMoveToDesktop(wmHelper, currentApp) + } + + private fun dragToDesktop( + wmHelper: WindowManagerStateHelper, + currentApp: StandardAppHelper, + device: UiDevice + ) { + val windowRect = wmHelper.getWindowRegion(currentApp).bounds + val startX = windowRect.centerX() + + // Start dragging a little under the top to prevent dragging the notification shade. + val startY = 10 + + val displayRect = + wmHelper.currentState.wmState.getDefaultDisplay()?.displayRect + ?: throw IllegalStateException("Default display is null") + + // The position we want to drag to + val endY = displayRect.centerY() / 2 + + // drag the window to move to desktop + device.drag(startX, startY, startX, endY, 100) + } +} diff --git a/libs/WindowManager/Shell/tests/unittest/src/com/android/wm/shell/ShellTaskOrganizerTests.java b/libs/WindowManager/Shell/tests/unittest/src/com/android/wm/shell/ShellTaskOrganizerTests.java index 9c1a88e1caa0..82c070cbf1c3 100644 --- a/libs/WindowManager/Shell/tests/unittest/src/com/android/wm/shell/ShellTaskOrganizerTests.java +++ b/libs/WindowManager/Shell/tests/unittest/src/com/android/wm/shell/ShellTaskOrganizerTests.java @@ -16,10 +16,10 @@ package com.android.wm.shell; -import static android.app.AppCompatTaskInfo.CAMERA_COMPAT_CONTROL_DISMISSED; -import static android.app.AppCompatTaskInfo.CAMERA_COMPAT_CONTROL_HIDDEN; -import static android.app.AppCompatTaskInfo.CAMERA_COMPAT_CONTROL_TREATMENT_APPLIED; -import static android.app.AppCompatTaskInfo.CAMERA_COMPAT_CONTROL_TREATMENT_SUGGESTED; +import static android.app.CameraCompatTaskInfo.CAMERA_COMPAT_CONTROL_DISMISSED; +import static android.app.CameraCompatTaskInfo.CAMERA_COMPAT_CONTROL_HIDDEN; +import static android.app.CameraCompatTaskInfo.CAMERA_COMPAT_CONTROL_TREATMENT_APPLIED; +import static android.app.CameraCompatTaskInfo.CAMERA_COMPAT_CONTROL_TREATMENT_SUGGESTED; import static android.app.WindowConfiguration.WINDOWING_MODE_FULLSCREEN; import static android.app.WindowConfiguration.WINDOWING_MODE_MULTI_WINDOW; import static android.app.WindowConfiguration.WINDOWING_MODE_PINNED; @@ -435,7 +435,8 @@ public class ShellTaskOrganizerTests extends ShellTestCase { public void testOnCameraCompatActivityChanged() { final RunningTaskInfo taskInfo1 = createTaskInfo(1, WINDOWING_MODE_FULLSCREEN); taskInfo1.displayId = DEFAULT_DISPLAY; - taskInfo1.appCompatTaskInfo.cameraCompatControlState = CAMERA_COMPAT_CONTROL_HIDDEN; + taskInfo1.appCompatTaskInfo.cameraCompatTaskInfo.cameraCompatControlState = + CAMERA_COMPAT_CONTROL_HIDDEN; final TrackingTaskListener taskListener = new TrackingTaskListener(); mOrganizer.addListenerForType(taskListener, TASK_LISTENER_TYPE_FULLSCREEN); mOrganizer.onTaskAppeared(taskInfo1, null); @@ -449,7 +450,7 @@ public class ShellTaskOrganizerTests extends ShellTestCase { final RunningTaskInfo taskInfo2 = createTaskInfo(taskInfo1.taskId, taskInfo1.getWindowingMode()); taskInfo2.displayId = taskInfo1.displayId; - taskInfo2.appCompatTaskInfo.cameraCompatControlState = + taskInfo2.appCompatTaskInfo.cameraCompatTaskInfo.cameraCompatControlState = CAMERA_COMPAT_CONTROL_TREATMENT_SUGGESTED; taskInfo2.isVisible = true; mOrganizer.onTaskInfoChanged(taskInfo2); @@ -461,7 +462,7 @@ public class ShellTaskOrganizerTests extends ShellTestCase { final RunningTaskInfo taskInfo3 = createTaskInfo(taskInfo1.taskId, taskInfo1.getWindowingMode()); taskInfo3.displayId = taskInfo1.displayId; - taskInfo3.appCompatTaskInfo.cameraCompatControlState = + taskInfo3.appCompatTaskInfo.cameraCompatTaskInfo.cameraCompatControlState = CAMERA_COMPAT_CONTROL_TREATMENT_APPLIED; taskInfo3.isVisible = true; mOrganizer.onTaskInfoChanged(taskInfo3); @@ -474,7 +475,7 @@ public class ShellTaskOrganizerTests extends ShellTestCase { createTaskInfo(taskInfo1.taskId, taskInfo1.getWindowingMode()); taskInfo4.displayId = taskInfo1.displayId; taskInfo4.appCompatTaskInfo.topActivityInSizeCompat = true; - taskInfo4.appCompatTaskInfo.cameraCompatControlState = + taskInfo4.appCompatTaskInfo.cameraCompatTaskInfo.cameraCompatControlState = CAMERA_COMPAT_CONTROL_TREATMENT_APPLIED; taskInfo4.isVisible = true; mOrganizer.onTaskInfoChanged(taskInfo4); @@ -485,7 +486,7 @@ public class ShellTaskOrganizerTests extends ShellTestCase { final RunningTaskInfo taskInfo5 = createTaskInfo(taskInfo1.taskId, taskInfo1.getWindowingMode()); taskInfo5.displayId = taskInfo1.displayId; - taskInfo5.appCompatTaskInfo.cameraCompatControlState = + taskInfo5.appCompatTaskInfo.cameraCompatTaskInfo.cameraCompatControlState = CAMERA_COMPAT_CONTROL_DISMISSED; taskInfo5.isVisible = true; mOrganizer.onTaskInfoChanged(taskInfo5); @@ -496,7 +497,7 @@ public class ShellTaskOrganizerTests extends ShellTestCase { final RunningTaskInfo taskInfo6 = createTaskInfo(taskInfo1.taskId, taskInfo1.getWindowingMode()); taskInfo6.displayId = taskInfo1.displayId; - taskInfo6.appCompatTaskInfo.cameraCompatControlState = + taskInfo6.appCompatTaskInfo.cameraCompatTaskInfo.cameraCompatControlState = CAMERA_COMPAT_CONTROL_TREATMENT_SUGGESTED; taskInfo6.isVisible = false; mOrganizer.onTaskInfoChanged(taskInfo6); diff --git a/libs/WindowManager/Shell/tests/unittest/src/com/android/wm/shell/compatui/CompatUIControllerTest.java b/libs/WindowManager/Shell/tests/unittest/src/com/android/wm/shell/compatui/CompatUIControllerTest.java index fef81af8946b..afae653f0682 100644 --- a/libs/WindowManager/Shell/tests/unittest/src/com/android/wm/shell/compatui/CompatUIControllerTest.java +++ b/libs/WindowManager/Shell/tests/unittest/src/com/android/wm/shell/compatui/CompatUIControllerTest.java @@ -16,8 +16,8 @@ package com.android.wm.shell.compatui; -import static android.app.AppCompatTaskInfo.CAMERA_COMPAT_CONTROL_HIDDEN; -import static android.app.AppCompatTaskInfo.CAMERA_COMPAT_CONTROL_TREATMENT_APPLIED; +import static android.app.CameraCompatTaskInfo.CAMERA_COMPAT_CONTROL_HIDDEN; +import static android.app.CameraCompatTaskInfo.CAMERA_COMPAT_CONTROL_TREATMENT_APPLIED; import static android.view.WindowInsets.Type.navigationBars; import static com.android.dx.mockito.inline.extended.ExtendedMockito.spyOn; @@ -34,7 +34,7 @@ import static org.mockito.Mockito.times; import static org.mockito.Mockito.verify; import android.app.ActivityManager.RunningTaskInfo; -import android.app.AppCompatTaskInfo.CameraCompatControlState; +import android.app.CameraCompatTaskInfo.CameraCompatControlState; import android.app.TaskInfo; import android.content.Context; import android.content.res.Configuration; @@ -689,7 +689,8 @@ public class CompatUIControllerTest extends ShellTestCase { taskInfo.taskId = taskId; taskInfo.displayId = displayId; taskInfo.appCompatTaskInfo.topActivityInSizeCompat = hasSizeCompat; - taskInfo.appCompatTaskInfo.cameraCompatControlState = cameraCompatControlState; + taskInfo.appCompatTaskInfo.cameraCompatTaskInfo.cameraCompatControlState = + cameraCompatControlState; taskInfo.isVisible = isVisible; taskInfo.isFocused = isFocused; taskInfo.isTopActivityTransparent = isTopActivityTransparent; diff --git a/libs/WindowManager/Shell/tests/unittest/src/com/android/wm/shell/compatui/CompatUILayoutTest.java b/libs/WindowManager/Shell/tests/unittest/src/com/android/wm/shell/compatui/CompatUILayoutTest.java index dd358e757fde..cd3e8cb0e8e1 100644 --- a/libs/WindowManager/Shell/tests/unittest/src/com/android/wm/shell/compatui/CompatUILayoutTest.java +++ b/libs/WindowManager/Shell/tests/unittest/src/com/android/wm/shell/compatui/CompatUILayoutTest.java @@ -16,10 +16,10 @@ package com.android.wm.shell.compatui; -import static android.app.AppCompatTaskInfo.CAMERA_COMPAT_CONTROL_DISMISSED; -import static android.app.AppCompatTaskInfo.CAMERA_COMPAT_CONTROL_HIDDEN; -import static android.app.AppCompatTaskInfo.CAMERA_COMPAT_CONTROL_TREATMENT_APPLIED; -import static android.app.AppCompatTaskInfo.CAMERA_COMPAT_CONTROL_TREATMENT_SUGGESTED; +import static android.app.CameraCompatTaskInfo.CAMERA_COMPAT_CONTROL_DISMISSED; +import static android.app.CameraCompatTaskInfo.CAMERA_COMPAT_CONTROL_HIDDEN; +import static android.app.CameraCompatTaskInfo.CAMERA_COMPAT_CONTROL_TREATMENT_APPLIED; +import static android.app.CameraCompatTaskInfo.CAMERA_COMPAT_CONTROL_TREATMENT_SUGGESTED; import static com.android.dx.mockito.inline.extended.ExtendedMockito.spyOn; @@ -28,7 +28,7 @@ import static org.mockito.Mockito.doReturn; import static org.mockito.Mockito.verify; import android.app.ActivityManager; -import android.app.AppCompatTaskInfo.CameraCompatControlState; +import android.app.CameraCompatTaskInfo.CameraCompatControlState; import android.app.TaskInfo; import android.graphics.Rect; import android.testing.AndroidTestingRunner; @@ -222,7 +222,8 @@ public class CompatUILayoutTest extends ShellTestCase { ActivityManager.RunningTaskInfo taskInfo = new ActivityManager.RunningTaskInfo(); taskInfo.taskId = TASK_ID; taskInfo.appCompatTaskInfo.topActivityInSizeCompat = hasSizeCompat; - taskInfo.appCompatTaskInfo.cameraCompatControlState = cameraCompatControlState; + taskInfo.appCompatTaskInfo.cameraCompatTaskInfo.cameraCompatControlState = + cameraCompatControlState; taskInfo.appCompatTaskInfo.topActivityLetterboxHeight = 1000; taskInfo.appCompatTaskInfo.topActivityLetterboxWidth = 1000; taskInfo.configuration.windowConfiguration.setBounds(new Rect(0, 0, 2000, 2000)); diff --git a/libs/WindowManager/Shell/tests/unittest/src/com/android/wm/shell/compatui/CompatUIWindowManagerTest.java b/libs/WindowManager/Shell/tests/unittest/src/com/android/wm/shell/compatui/CompatUIWindowManagerTest.java index 4f261cd79d39..5209d0e4bdd0 100644 --- a/libs/WindowManager/Shell/tests/unittest/src/com/android/wm/shell/compatui/CompatUIWindowManagerTest.java +++ b/libs/WindowManager/Shell/tests/unittest/src/com/android/wm/shell/compatui/CompatUIWindowManagerTest.java @@ -16,10 +16,10 @@ package com.android.wm.shell.compatui; -import static android.app.AppCompatTaskInfo.CAMERA_COMPAT_CONTROL_DISMISSED; -import static android.app.AppCompatTaskInfo.CAMERA_COMPAT_CONTROL_HIDDEN; -import static android.app.AppCompatTaskInfo.CAMERA_COMPAT_CONTROL_TREATMENT_APPLIED; -import static android.app.AppCompatTaskInfo.CAMERA_COMPAT_CONTROL_TREATMENT_SUGGESTED; +import static android.app.CameraCompatTaskInfo.CAMERA_COMPAT_CONTROL_DISMISSED; +import static android.app.CameraCompatTaskInfo.CAMERA_COMPAT_CONTROL_HIDDEN; +import static android.app.CameraCompatTaskInfo.CAMERA_COMPAT_CONTROL_TREATMENT_APPLIED; +import static android.app.CameraCompatTaskInfo.CAMERA_COMPAT_CONTROL_TREATMENT_SUGGESTED; import static android.platform.test.flag.junit.SetFlagsRule.DefaultInitValueType.DEVICE_DEFAULT; import static android.view.WindowInsets.Type.navigationBars; @@ -37,7 +37,7 @@ import static org.mockito.Mockito.never; import static org.mockito.Mockito.verify; import android.app.ActivityManager; -import android.app.AppCompatTaskInfo; +import android.app.CameraCompatTaskInfo; import android.app.TaskInfo; import android.content.res.Configuration; import android.graphics.Rect; @@ -521,11 +521,12 @@ public class CompatUIWindowManagerTest extends ShellTestCase { } private static TaskInfo createTaskInfo(boolean hasSizeCompat, - @AppCompatTaskInfo.CameraCompatControlState int cameraCompatControlState) { + @CameraCompatTaskInfo.CameraCompatControlState int cameraCompatControlState) { ActivityManager.RunningTaskInfo taskInfo = new ActivityManager.RunningTaskInfo(); taskInfo.taskId = TASK_ID; taskInfo.appCompatTaskInfo.topActivityInSizeCompat = hasSizeCompat; - taskInfo.appCompatTaskInfo.cameraCompatControlState = cameraCompatControlState; + taskInfo.appCompatTaskInfo.cameraCompatTaskInfo.cameraCompatControlState = + cameraCompatControlState; taskInfo.configuration.uiMode &= ~Configuration.UI_MODE_TYPE_DESK; // Letterboxed activity that takes half the screen should show size compat restart button taskInfo.configuration.windowConfiguration.setBounds( diff --git a/libs/WindowManager/Shell/tests/unittest/src/com/android/wm/shell/compatui/UserAspectRatioSettingsLayoutTest.java b/libs/WindowManager/Shell/tests/unittest/src/com/android/wm/shell/compatui/UserAspectRatioSettingsLayoutTest.java index 38d6ea1839c4..02316125bcc3 100644 --- a/libs/WindowManager/Shell/tests/unittest/src/com/android/wm/shell/compatui/UserAspectRatioSettingsLayoutTest.java +++ b/libs/WindowManager/Shell/tests/unittest/src/com/android/wm/shell/compatui/UserAspectRatioSettingsLayoutTest.java @@ -16,7 +16,7 @@ package com.android.wm.shell.compatui; -import static android.app.AppCompatTaskInfo.CAMERA_COMPAT_CONTROL_HIDDEN; +import static android.app.CameraCompatTaskInfo.CAMERA_COMPAT_CONTROL_HIDDEN; import static com.android.dx.mockito.inline.extended.ExtendedMockito.spyOn; @@ -25,7 +25,7 @@ import static org.mockito.Mockito.doReturn; import static org.mockito.Mockito.verify; import android.app.ActivityManager; -import android.app.AppCompatTaskInfo.CameraCompatControlState; +import android.app.CameraCompatTaskInfo.CameraCompatControlState; import android.app.TaskInfo; import android.content.ComponentName; import android.testing.AndroidTestingRunner; @@ -148,7 +148,8 @@ public class UserAspectRatioSettingsLayoutTest extends ShellTestCase { ActivityManager.RunningTaskInfo taskInfo = new ActivityManager.RunningTaskInfo(); taskInfo.taskId = TASK_ID; taskInfo.appCompatTaskInfo.topActivityInSizeCompat = hasSizeCompat; - taskInfo.appCompatTaskInfo.cameraCompatControlState = cameraCompatControlState; + taskInfo.appCompatTaskInfo.cameraCompatTaskInfo.cameraCompatControlState = + cameraCompatControlState; taskInfo.realActivity = new ComponentName("com.mypackage.test", "TestActivity"); return taskInfo; } diff --git a/libs/WindowManager/Shell/tests/unittest/src/com/android/wm/shell/compatui/UserAspectRatioSettingsWindowManagerTest.java b/libs/WindowManager/Shell/tests/unittest/src/com/android/wm/shell/compatui/UserAspectRatioSettingsWindowManagerTest.java index 81ba4b37d13b..94e168ed70ed 100644 --- a/libs/WindowManager/Shell/tests/unittest/src/com/android/wm/shell/compatui/UserAspectRatioSettingsWindowManagerTest.java +++ b/libs/WindowManager/Shell/tests/unittest/src/com/android/wm/shell/compatui/UserAspectRatioSettingsWindowManagerTest.java @@ -292,6 +292,24 @@ public class UserAspectRatioSettingsWindowManagerTest extends ShellTestCase { } @Test + public void testUserFullscreenOverrideEnabled_buttonAlwaysShown() { + TaskInfo taskInfo = createTaskInfo(/* eligibleForUserAspectRatioButton= */ + true, /* topActivityBoundsLetterboxed */ true, ACTION_MAIN, CATEGORY_LAUNCHER); + + final Rect stableBounds = mWindowManager.getTaskStableBounds(); + + // Letterboxed activity that has user fullscreen override should always show button, + // layout should be inflated + taskInfo.appCompatTaskInfo.topActivityLetterboxHeight = stableBounds.height(); + taskInfo.appCompatTaskInfo.topActivityLetterboxWidth = stableBounds.width(); + taskInfo.appCompatTaskInfo.isUserFullscreenOverrideEnabled = true; + + mWindowManager.updateCompatInfo(taskInfo, mTaskListener, /* canShow= */ true); + + verify(mWindowManager).inflateLayout(); + } + + @Test public void testUpdateDisplayLayout() { final DisplayInfo displayInfo = new DisplayInfo(); displayInfo.logicalWidth = 1000; diff --git a/libs/hwui/SkiaInterpolator.cpp b/libs/hwui/SkiaInterpolator.cpp index c67b135855f7..5a45ad9085e7 100644 --- a/libs/hwui/SkiaInterpolator.cpp +++ b/libs/hwui/SkiaInterpolator.cpp @@ -20,6 +20,7 @@ #include "include/core/SkTypes.h" #include <cstdlib> +#include <cstring> #include <log/log.h> typedef int Dot14; diff --git a/libs/hwui/effects/GainmapRenderer.cpp b/libs/hwui/effects/GainmapRenderer.cpp index 3ebf7d19202d..0a30c6c14c4c 100644 --- a/libs/hwui/effects/GainmapRenderer.cpp +++ b/libs/hwui/effects/GainmapRenderer.cpp @@ -32,6 +32,8 @@ #include "src/core/SkColorFilterPriv.h" #include "src/core/SkImageInfoPriv.h" #include "src/core/SkRuntimeEffectPriv.h" + +#include <cmath> #endif namespace android::uirenderer { @@ -206,12 +208,12 @@ private: void setupGenericUniforms(const sk_sp<const SkImage>& gainmapImage, const SkGainmapInfo& gainmapInfo) { - const SkColor4f logRatioMin({sk_float_log(gainmapInfo.fGainmapRatioMin.fR), - sk_float_log(gainmapInfo.fGainmapRatioMin.fG), - sk_float_log(gainmapInfo.fGainmapRatioMin.fB), 1.f}); - const SkColor4f logRatioMax({sk_float_log(gainmapInfo.fGainmapRatioMax.fR), - sk_float_log(gainmapInfo.fGainmapRatioMax.fG), - sk_float_log(gainmapInfo.fGainmapRatioMax.fB), 1.f}); + const SkColor4f logRatioMin({std::log(gainmapInfo.fGainmapRatioMin.fR), + std::log(gainmapInfo.fGainmapRatioMin.fG), + std::log(gainmapInfo.fGainmapRatioMin.fB), 1.f}); + const SkColor4f logRatioMax({std::log(gainmapInfo.fGainmapRatioMax.fR), + std::log(gainmapInfo.fGainmapRatioMax.fG), + std::log(gainmapInfo.fGainmapRatioMax.fB), 1.f}); const int noGamma = gainmapInfo.fGainmapGamma.fR == 1.f && gainmapInfo.fGainmapGamma.fG == 1.f && gainmapInfo.fGainmapGamma.fB == 1.f; @@ -248,10 +250,10 @@ private: float W = 0.f; if (targetHdrSdrRatio > mGainmapInfo.fDisplayRatioSdr) { if (targetHdrSdrRatio < mGainmapInfo.fDisplayRatioHdr) { - W = (sk_float_log(targetHdrSdrRatio) - - sk_float_log(mGainmapInfo.fDisplayRatioSdr)) / - (sk_float_log(mGainmapInfo.fDisplayRatioHdr) - - sk_float_log(mGainmapInfo.fDisplayRatioSdr)); + W = (std::log(targetHdrSdrRatio) - + std::log(mGainmapInfo.fDisplayRatioSdr)) / + (std::log(mGainmapInfo.fDisplayRatioHdr) - + std::log(mGainmapInfo.fDisplayRatioSdr)); } else { W = 1.f; } diff --git a/libs/hwui/renderthread/CanvasContext.cpp b/libs/hwui/renderthread/CanvasContext.cpp index 66e089627a7b..8bb11badb607 100644 --- a/libs/hwui/renderthread/CanvasContext.cpp +++ b/libs/hwui/renderthread/CanvasContext.cpp @@ -1010,7 +1010,15 @@ void CanvasContext::destroyHardwareResources() { } void CanvasContext::onContextDestroyed() { - destroyHardwareResources(); + // We don't want to destroyHardwareResources as that will invalidate display lists which + // the client may not be expecting. Instead just purge all scratch resources + if (mRenderPipeline->isContextReady()) { + freePrefetchedLayers(); + for (const sp<RenderNode>& node : mRenderNodes) { + node->destroyLayers(); + } + mRenderPipeline->onDestroyHardwareResources(); + } } DeferredLayerUpdater* CanvasContext::createTextureLayer() { diff --git a/libs/hwui/utils/Color.cpp b/libs/hwui/utils/Color.cpp index f6c57927cc85..6a560b365247 100644 --- a/libs/hwui/utils/Color.cpp +++ b/libs/hwui/utils/Color.cpp @@ -403,7 +403,7 @@ skcms_TransferFunction GetPQSkTransferFunction(float sdr_white_level) { } static skcms_TransferFunction trfn_apply_gain(const skcms_TransferFunction trfn, float gain) { - float pow_gain_ginv = sk_float_pow(gain, 1 / trfn.g); + float pow_gain_ginv = std::pow(gain, 1 / trfn.g); skcms_TransferFunction result; result.g = trfn.g; result.a = trfn.a * pow_gain_ginv; diff --git a/location/Android.bp b/location/Android.bp index eb7cd01111b2..5ba35ac3328a 100644 --- a/location/Android.bp +++ b/location/Android.bp @@ -26,6 +26,7 @@ java_sdk_library { "com.android.internal.location", ], libs: [ + "android.location.flags-aconfig-java", "app-compat-annotations", "unsupportedappusage", // for android.compat.annotation.UnsupportedAppUsage ], diff --git a/location/TEST_MAPPING b/location/TEST_MAPPING index f5deb2ba3e07..10da632e7b6f 100644 --- a/location/TEST_MAPPING +++ b/location/TEST_MAPPING @@ -2,12 +2,7 @@ "presubmit": [ { "name": "CtsLocationFineTestCases", - "options": [ - { - // TODO: Wait for test to deflake - b/293934372 - "exclude-filter":"android.location.cts.fine.ScanningSettingsTest" - } - ] + "options": [] }, { "name": "CtsLocationCoarseTestCases" diff --git a/location/api/current.txt b/location/api/current.txt index 85e9f65a0718..61afd266aecf 100644 --- a/location/api/current.txt +++ b/location/api/current.txt @@ -412,8 +412,8 @@ package android.location { field public static final int TYPE_GPS_L1CA = 257; // 0x101 field public static final int TYPE_GPS_L2CNAV = 258; // 0x102 field public static final int TYPE_GPS_L5CNAV = 259; // 0x103 - field @FlaggedApi(Flags.FLAG_GNSS_API_NAVIC_L1) public static final int TYPE_IRN_L1 = 1795; // 0x703 - field @FlaggedApi(Flags.FLAG_GNSS_API_NAVIC_L1) public static final int TYPE_IRN_L5 = 1794; // 0x702 + field @FlaggedApi("android.location.flags.gnss_api_navic_l1") public static final int TYPE_IRN_L1 = 1795; // 0x703 + field @FlaggedApi("android.location.flags.gnss_api_navic_l1") public static final int TYPE_IRN_L5 = 1794; // 0x702 field public static final int TYPE_IRN_L5CA = 1793; // 0x701 field public static final int TYPE_QZS_L1CA = 1025; // 0x401 field public static final int TYPE_SBS = 513; // 0x201 @@ -682,7 +682,7 @@ package android.location.altitude { public final class AltitudeConverter { ctor public AltitudeConverter(); method @WorkerThread public void addMslAltitudeToLocation(@NonNull android.content.Context, @NonNull android.location.Location) throws java.io.IOException; - method @FlaggedApi(Flags.FLAG_GEOID_HEIGHTS_VIA_ALTITUDE_HAL) public boolean tryAddMslAltitudeToLocation(@NonNull android.location.Location); + method @FlaggedApi("android.location.flags.geoid_heights_via_altitude_hal") public boolean tryAddMslAltitudeToLocation(@NonNull android.location.Location); } } diff --git a/location/api/system-current.txt b/location/api/system-current.txt index 254d74aa235c..f6e76a246947 100644 --- a/location/api/system-current.txt +++ b/location/api/system-current.txt @@ -113,13 +113,13 @@ package android.location { } public final class GnssMeasurementRequest implements android.os.Parcelable { - method @FlaggedApi(Flags.FLAG_GNSS_API_MEASUREMENT_REQUEST_WORK_SOURCE) @NonNull public android.os.WorkSource getWorkSource(); + method @FlaggedApi("android.location.flags.gnss_api_measurement_request_work_source") @NonNull public android.os.WorkSource getWorkSource(); method public boolean isCorrelationVectorOutputsEnabled(); } public static final class GnssMeasurementRequest.Builder { method @NonNull public android.location.GnssMeasurementRequest.Builder setCorrelationVectorOutputsEnabled(boolean); - method @FlaggedApi(Flags.FLAG_GNSS_API_MEASUREMENT_REQUEST_WORK_SOURCE) @NonNull @RequiresPermission(android.Manifest.permission.UPDATE_DEVICE_STATS) public android.location.GnssMeasurementRequest.Builder setWorkSource(@Nullable android.os.WorkSource); + method @FlaggedApi("android.location.flags.gnss_api_measurement_request_work_source") @NonNull @RequiresPermission(android.Manifest.permission.UPDATE_DEVICE_STATS) public android.location.GnssMeasurementRequest.Builder setWorkSource(@Nullable android.os.WorkSource); } public final class GnssReflectingPlane implements android.os.Parcelable { @@ -591,7 +591,7 @@ package android.location { package android.location.provider { - @FlaggedApi(Flags.FLAG_NEW_GEOCODER) public final class ForwardGeocodeRequest implements android.os.Parcelable { + @FlaggedApi("android.location.flags.new_geocoder") public final class ForwardGeocodeRequest implements android.os.Parcelable { method public int describeContents(); method @Nullable public String getCallingAttributionTag(); method @NonNull public String getCallingPackage(); @@ -613,7 +613,7 @@ package android.location.provider { method @NonNull public android.location.provider.ForwardGeocodeRequest.Builder setCallingAttributionTag(@NonNull String); } - @FlaggedApi(Flags.FLAG_NEW_GEOCODER) public abstract class GeocodeProviderBase { + @FlaggedApi("android.location.flags.new_geocoder") public abstract class GeocodeProviderBase { ctor public GeocodeProviderBase(@NonNull android.content.Context, @NonNull String); method @NonNull public final android.os.IBinder getBinder(); method public abstract void onForwardGeocode(@NonNull android.location.provider.ForwardGeocodeRequest, @NonNull android.os.OutcomeReceiver<java.util.List<android.location.Address>,java.lang.Throwable>); @@ -672,7 +672,7 @@ package android.location.provider { method public void onProviderRequestChanged(@NonNull String, @NonNull android.location.provider.ProviderRequest); } - @FlaggedApi(Flags.FLAG_NEW_GEOCODER) public final class ReverseGeocodeRequest implements android.os.Parcelable { + @FlaggedApi("android.location.flags.new_geocoder") public final class ReverseGeocodeRequest implements android.os.Parcelable { method public int describeContents(); method @Nullable public String getCallingAttributionTag(); method @NonNull public String getCallingPackage(); diff --git a/location/java/android/location/flags/location.aconfig b/location/java/android/location/flags/location.aconfig index d6d4989aa47e..49810294a888 100644 --- a/location/java/android/location/flags/location.aconfig +++ b/location/java/android/location/flags/location.aconfig @@ -1,4 +1,5 @@ package: "android.location.flags" +container: "system" flag { name: "new_geocoder" diff --git a/media/java/android/media/flags/editing.aconfig b/media/java/android/media/flags/editing.aconfig index 5bf1b4ef96ff..bf6ec9635912 100644 --- a/media/java/android/media/flags/editing.aconfig +++ b/media/java/android/media/flags/editing.aconfig @@ -1,4 +1,5 @@ package: "com.android.media.editing.flags" +container: "system" flag { name: "add_media_metrics_editing" diff --git a/media/java/android/media/flags/media_better_together.aconfig b/media/java/android/media/flags/media_better_together.aconfig index 8d6982e2b122..91c4f118658a 100644 --- a/media/java/android/media/flags/media_better_together.aconfig +++ b/media/java/android/media/flags/media_better_together.aconfig @@ -1,4 +1,5 @@ package: "com.android.media.flags" +container: "system" flag { name: "enable_rlp_callbacks_in_media_router2" diff --git a/media/java/android/media/flags/projection.aconfig b/media/java/android/media/flags/projection.aconfig index b16580927fa6..9a9a0735d089 100644 --- a/media/java/android/media/flags/projection.aconfig +++ b/media/java/android/media/flags/projection.aconfig @@ -1,4 +1,5 @@ package: "com.android.media.projection.flags" +container: "system" # Project link: https://gantry.corp.google.com/projects/android_platform_window_surfaces/changes diff --git a/media/java/android/media/tv/flags/media_tv.aconfig b/media/java/android/media/tv/flags/media_tv.aconfig index 1731e5e4335c..97971e134f02 100644 --- a/media/java/android/media/tv/flags/media_tv.aconfig +++ b/media/java/android/media/tv/flags/media_tv.aconfig @@ -1,4 +1,5 @@ package: "android.media.tv.flags" +container: "system" flag { name: "broadcast_visibility_types" diff --git a/media/jni/android_media_MediaCodec.cpp b/media/jni/android_media_MediaCodec.cpp index 4f9917b19110..8a13c034995d 100644 --- a/media/jni/android_media_MediaCodec.cpp +++ b/media/jni/android_media_MediaCodec.cpp @@ -2099,9 +2099,14 @@ static status_t extractInfosFromObject( } if (i == 0) { *initialOffset = offset; + if (CC_UNLIKELY(*initialOffset < 0)) { + if (errorDetailMsg) { + *errorDetailMsg = "Error: offset/size in BufferInfo"; + } + return BAD_VALUE; + } } - if (CC_UNLIKELY((offset > UINT32_MAX) - || ((long)(offset + size) > UINT32_MAX) + if (CC_UNLIKELY(((ssize_t)(UINT32_MAX - offset) < (ssize_t)size) || ((offset - *initialOffset) != *totalSize))) { if (errorDetailMsg) { *errorDetailMsg = "Error: offset/size in BufferInfo"; diff --git a/media/jni/playback_flags.aconfig b/media/jni/playback_flags.aconfig index 2bb0ec5375fd..9d927eccc596 100644 --- a/media/jni/playback_flags.aconfig +++ b/media/jni/playback_flags.aconfig @@ -1,4 +1,5 @@ package: "com.android.media.playback.flags" +container: "system" flag { name: "mediametadataretriever_default_rgba8888" diff --git a/native/android/performance_hint.cpp b/native/android/performance_hint.cpp index 882afcab6290..fbb35e2bc355 100644 --- a/native/android/performance_hint.cpp +++ b/native/android/performance_hint.cpp @@ -59,7 +59,8 @@ public: ~APerformanceHintManager() = default; APerformanceHintSession* createSession(const int32_t* threadIds, size_t size, - int64_t initialTargetWorkDurationNanos); + int64_t initialTargetWorkDurationNanos, + hal::SessionTag tag = hal::SessionTag::OTHER); int64_t getPreferredRateNanos() const; private: @@ -84,7 +85,8 @@ struct APerformanceHintSession { public: APerformanceHintSession(std::shared_ptr<IHintManager> hintManager, std::shared_ptr<IHintSession> session, int64_t preferredRateNanos, - int64_t targetDurationNanos); + int64_t targetDurationNanos, + std::optional<hal::SessionConfig> sessionConfig); APerformanceHintSession() = delete; ~APerformanceHintSession(); @@ -116,9 +118,10 @@ private: // Cached samples std::vector<hal::WorkDuration> mActualWorkDurations; std::string mSessionName; - static int32_t sIDCounter; + static int64_t sIDCounter; // The most recent set of thread IDs std::vector<int32_t> mLastThreadIDs; + std::optional<hal::SessionConfig> mSessionConfig; // Tracing helpers void traceThreads(std::vector<int32_t>& tids); void tracePowerEfficient(bool powerEfficient); @@ -129,7 +132,8 @@ private: static std::shared_ptr<IHintManager>* gIHintManagerForTesting = nullptr; static APerformanceHintManager* gHintManagerForTesting = nullptr; -int32_t APerformanceHintSession::sIDCounter = 0; +// Start above the int32 range so we don't collide with config sessions +int64_t APerformanceHintSession::sIDCounter = INT32_MAX; // ===================================== APerformanceHintManager implementation APerformanceHintManager::APerformanceHintManager(std::shared_ptr<IHintManager> manager, @@ -174,16 +178,20 @@ APerformanceHintManager* APerformanceHintManager::create(std::shared_ptr<IHintMa } APerformanceHintSession* APerformanceHintManager::createSession( - const int32_t* threadIds, size_t size, int64_t initialTargetWorkDurationNanos) { + const int32_t* threadIds, size_t size, int64_t initialTargetWorkDurationNanos, + hal::SessionTag tag) { std::vector<int32_t> tids(threadIds, threadIds + size); std::shared_ptr<IHintSession> session; - ndk::ScopedAStatus ret = - mHintManager->createHintSession(mToken, tids, initialTargetWorkDurationNanos, &session); + ndk::ScopedAStatus ret; + std::optional<hal::SessionConfig> sessionConfig; + ret = mHintManager->createHintSessionWithConfig(mToken, tids, initialTargetWorkDurationNanos, + tag, &sessionConfig, &session); + if (!ret.isOk() || !session) { return nullptr; } auto out = new APerformanceHintSession(mHintManager, std::move(session), mPreferredRateNanos, - initialTargetWorkDurationNanos); + initialTargetWorkDurationNanos, sessionConfig); out->traceThreads(tids); out->traceTargetDuration(initialTargetWorkDurationNanos); out->tracePowerEfficient(false); @@ -199,19 +207,23 @@ int64_t APerformanceHintManager::getPreferredRateNanos() const { APerformanceHintSession::APerformanceHintSession(std::shared_ptr<IHintManager> hintManager, std::shared_ptr<IHintSession> session, int64_t preferredRateNanos, - int64_t targetDurationNanos) + int64_t targetDurationNanos, + std::optional<hal::SessionConfig> sessionConfig) : mHintManager(hintManager), mHintSession(std::move(session)), mPreferredRateNanos(preferredRateNanos), mTargetDurationNanos(targetDurationNanos), mFirstTargetMetTimestamp(0), - mLastTargetMetTimestamp(0) { - const std::vector<hal::SessionHint> sessionHintRange{ndk::enum_range<hal::SessionHint>() - .begin(), - ndk::enum_range<hal::SessionHint>().end()}; - - mLastHintSentTimestamp = std::vector<int64_t>(sessionHintRange.size(), 0); - mSessionName = android::base::StringPrintf("ADPF Session %" PRId32, ++sIDCounter); + mLastTargetMetTimestamp(0), + mSessionConfig(sessionConfig) { + if (sessionConfig->id > INT32_MAX) { + ALOGE("Session ID too large, must fit 32-bit integer"); + } + constexpr int numEnums = + ndk::enum_range<hal::SessionHint>().end() - ndk::enum_range<hal::SessionHint>().begin(); + mLastHintSentTimestamp = std::vector<int64_t>(numEnums, 0); + int64_t traceId = sessionConfig.has_value() ? sessionConfig->id : ++sIDCounter; + mSessionName = android::base::StringPrintf("ADPF Session %" PRId64, traceId); } APerformanceHintSession::~APerformanceHintSession() { diff --git a/native/android/tests/performance_hint/PerformanceHintNativeTest.cpp b/native/android/tests/performance_hint/PerformanceHintNativeTest.cpp index bfbe34e7a8a1..974e6e63b424 100644 --- a/native/android/tests/performance_hint/PerformanceHintNativeTest.cpp +++ b/native/android/tests/performance_hint/PerformanceHintNativeTest.cpp @@ -16,6 +16,8 @@ #define LOG_TAG "PerformanceHintNativeTest" +#include <aidl/android/hardware/power/SessionConfig.h> +#include <aidl/android/hardware/power/SessionTag.h> #include <aidl/android/hardware/power/WorkDuration.h> #include <aidl/android/os/IHintManager.h> #include <android/binder_manager.h> @@ -28,6 +30,8 @@ #include <memory> #include <vector> +using aidl::android::hardware::power::SessionConfig; +using aidl::android::hardware::power::SessionTag; using aidl::android::hardware::power::WorkDuration; using aidl::android::os::IHintManager; using aidl::android::os::IHintSession; @@ -39,8 +43,9 @@ using namespace testing; class MockIHintManager : public IHintManager { public: - MOCK_METHOD(ScopedAStatus, createHintSession, + MOCK_METHOD(ScopedAStatus, createHintSessionWithConfig, (const SpAIBinder& token, const ::std::vector<int32_t>& tids, int64_t durationNanos, + SessionTag tag, std::optional<SessionConfig>* config, std::shared_ptr<IHintSession>* _aidl_return), (override)); MOCK_METHOD(ScopedAStatus, getHintSessionPreferredRate, (int64_t * _aidl_return), (override)); @@ -92,14 +97,18 @@ public: APerformanceHintSession* createSession(APerformanceHintManager* manager, int64_t targetDuration = 56789L) { mMockSession = ndk::SharedRefBase::make<NiceMock<MockIHintSession>>(); - + int64_t sessionId = 123; std::vector<int32_t> tids; tids.push_back(1); tids.push_back(2); - ON_CALL(*mMockIHintManager, createHintSession(_, Eq(tids), Eq(targetDuration), _)) - .WillByDefault(DoAll(SetArgPointee<3>(std::shared_ptr<IHintSession>(mMockSession)), + ON_CALL(*mMockIHintManager, + createHintSessionWithConfig(_, Eq(tids), Eq(targetDuration), _, _, _)) + .WillByDefault(DoAll(SetArgPointee<4>( + std::make_optional<SessionConfig>({.id = sessionId})), + SetArgPointee<5>(std::shared_ptr<IHintSession>(mMockSession)), [] { return ScopedAStatus::ok(); })); + ON_CALL(*mMockIHintManager, setHintSessionThreads(_, _)).WillByDefault([] { return ScopedAStatus::ok(); }); @@ -115,7 +124,6 @@ public: ON_CALL(*mMockSession, reportActualWorkDuration2(_)).WillByDefault([] { return ScopedAStatus::ok(); }); - return APerformanceHint_createSession(manager, tids.data(), tids.size(), targetDuration); } @@ -178,6 +186,14 @@ TEST_F(PerformanceHintTest, TestSession) { APerformanceHint_closeSession(session); } +TEST_F(PerformanceHintTest, TestUpdatedSessionCreation) { + EXPECT_CALL(*mMockIHintManager, createHintSessionWithConfig(_, _, _, _, _, _)).Times(1); + APerformanceHintManager* manager = createManager(); + APerformanceHintSession* session = createSession(manager); + ASSERT_TRUE(session); + APerformanceHint_closeSession(session); +} + TEST_F(PerformanceHintTest, SetThreads) { APerformanceHintManager* manager = createManager(); diff --git a/nfc/java/android/nfc/flags.aconfig b/nfc/java/android/nfc/flags.aconfig index 778f07c64a0a..73b29db0f317 100644 --- a/nfc/java/android/nfc/flags.aconfig +++ b/nfc/java/android/nfc/flags.aconfig @@ -1,4 +1,5 @@ package: "android.nfc" +container: "system" flag { name: "enable_nfc_mainline" diff --git a/packages/CompanionDeviceManager/src/com/android/companiondevicemanager/CompanionDeviceDiscoveryService.java b/packages/CompanionDeviceManager/src/com/android/companiondevicemanager/CompanionDeviceDiscoveryService.java index a5bb34f4422b..c8801bb5ded2 100644 --- a/packages/CompanionDeviceManager/src/com/android/companiondevicemanager/CompanionDeviceDiscoveryService.java +++ b/packages/CompanionDeviceManager/src/com/android/companiondevicemanager/CompanionDeviceDiscoveryService.java @@ -188,12 +188,7 @@ public class CompanionDeviceDiscoveryService extends Service { filter(allFilters, BluetoothLeDeviceFilter.class); final List<WifiDeviceFilter> wifiFilters = filter(allFilters, WifiDeviceFilter.class); - // No need to startDiscovery if the device is already bound or connected for - // singleDevice dialog. - if (checkBoundDevicesIfNeeded(request, btFilters)) { - stopSelf(); - return; - } + checkBoundDevicesIfNeeded(request, btFilters); // If no filters are specified: look for everything. final boolean forceStartScanningAll = isEmpty(allFilters); @@ -253,37 +248,33 @@ public class CompanionDeviceDiscoveryService extends Service { stopSelf(); } - private boolean checkBoundDevicesIfNeeded(@NonNull AssociationRequest request, + private void checkBoundDevicesIfNeeded(@NonNull AssociationRequest request, @NonNull List<BluetoothDeviceFilter> btFilters) { // If filtering to get single device by mac address, also search in the set of already // bonded devices to allow linking those directly - if (btFilters.isEmpty() || !request.isSingleDevice()) return false; + if (btFilters.isEmpty() || !request.isSingleDevice()) return; final BluetoothDeviceFilter singleMacAddressFilter = find(btFilters, filter -> !TextUtils.isEmpty(filter.getAddress())); - if (singleMacAddressFilter == null) return false; + if (singleMacAddressFilter == null) return; - return findAndReportMatches(mBtAdapter.getBondedDevices(), btFilters) - || findAndReportMatches(mBtManager.getConnectedDevices( - BluetoothProfile.GATT), btFilters) - || findAndReportMatches(mBtManager.getConnectedDevices( - BluetoothProfile.GATT_SERVER), btFilters); + findAndReportMatches(mBtAdapter.getBondedDevices(), btFilters); + findAndReportMatches(mBtManager.getConnectedDevices(BluetoothProfile.GATT), btFilters); + findAndReportMatches( + mBtManager.getConnectedDevices(BluetoothProfile.GATT_SERVER), btFilters); } - private boolean findAndReportMatches(@Nullable Collection<BluetoothDevice> devices, + private void findAndReportMatches(@Nullable Collection<BluetoothDevice> devices, @NonNull List<BluetoothDeviceFilter> filters) { - if (devices == null) return false; + if (devices == null) return; for (BluetoothDevice device : devices) { final DeviceFilterPair<BluetoothDevice> match = findMatch(device, filters); if (match != null) { onDeviceFound(match); - return true; } } - - return false; } private BluetoothBroadcastReceiver startBtScanningIfNeeded( diff --git a/packages/CrashRecovery/aconfig/flags.aconfig b/packages/CrashRecovery/aconfig/flags.aconfig index 15fdc521f75a..cddbb6b8954d 100644 --- a/packages/CrashRecovery/aconfig/flags.aconfig +++ b/packages/CrashRecovery/aconfig/flags.aconfig @@ -1,4 +1,5 @@ package: "android.crashrecovery.flags" +container: "system" flag { name: "recoverability_detection" diff --git a/packages/CredentialManager/res/values-af/strings.xml b/packages/CredentialManager/res/values-af/strings.xml index b17293dbe4e2..b0bac45de59e 100644 --- a/packages/CredentialManager/res/values-af/strings.xml +++ b/packages/CredentialManager/res/values-af/strings.xml @@ -42,9 +42,6 @@ <string name="choose_create_option_passkey_title" msgid="8762295821604276511">"Skep toegangsleutel om by <xliff:g id="APP_NAME">%1$s</xliff:g> aan te meld?"</string> <string name="choose_create_option_password_title" msgid="4481366993598649224">"Stoor wagwoord om by <xliff:g id="APP_NAME">%1$s</xliff:g> aan te meld?"</string> <string name="choose_create_option_sign_in_title" msgid="7092914088455358079">"Stoor aanmeldinligting vir <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string> - <string name="choose_create_single_tap_passkey_title" msgid="3872793514041774218">"Gebruik jou skermslot om ’n toegangsleutel vir <xliff:g id="APP_NAME">%1$s</xliff:g> te skep?"</string> - <string name="choose_create_single_tap_password_title" msgid="5231871886818921622">"Gebruik jou skermslot om ’n wagwoord vir <xliff:g id="APP_NAME">%1$s</xliff:g> te skep?"</string> - <string name="choose_create_single_tap_sign_in_title" msgid="256498714574099587">"Gebruik jou skermslot om aanmeldinligting vir <xliff:g id="APP_NAME">%1$s</xliff:g> te stoor?"</string> <string name="passkey" msgid="632353688396759522">"toegangsleutel"</string> <string name="password" msgid="6738570945182936667">"wagwoord"</string> <string name="passkeys" msgid="5733880786866559847">"toegangsleutels"</string> @@ -71,15 +68,16 @@ <string name="accessibility_back_arrow_button" msgid="3233198183497842492">"Gaan terug na die vorige bladsy"</string> <string name="accessibility_close_button" msgid="1163435587545377687">"Maak toe"</string> <string name="accessibility_snackbar_dismiss" msgid="3456598374801836120">"Maak toe"</string> - <string name="get_dialog_title_use_passkey_for" msgid="6236608872708021767">"Gebruik jou gestoorde toegangsleutel vir <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string> - <string name="get_dialog_title_use_password_for" msgid="625828023234318484">"Gebruik jou gestoorde wagwoord vir <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string> - <string name="get_dialog_title_single_tap_for" msgid="2057945648748859483">"Gebruik jou skermslot om met <xliff:g id="USERNAME">%2$s</xliff:g> by <xliff:g id="APP_NAME">%1$s</xliff:g> aan te meld"</string> - <string name="get_dialog_title_use_sign_in_for" msgid="790049858275131785">"Gebruik jou aanmelding vir <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string> - <string name="get_dialog_title_unlock_options_for" msgid="7605568190597632433">"Ontsluit aanmeldingopsies vir <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string> + <string name="get_dialog_title_use_passkey_for" msgid="479261099705979148">"Gebruik jou gestoorde toegangsleutel vir <xliff:g id="APP_NAME">%1$s</xliff:g>"</string> + <string name="get_dialog_title_use_password_for" msgid="688557784207167647">"Gebruik jou gestoorde wagwoord vir <xliff:g id="APP_NAME">%1$s</xliff:g>"</string> + <string name="get_dialog_title_use_sign_in_for" msgid="4233553937542583226">"Gebruik jou rekening vir <xliff:g id="APP_NAME">%1$s</xliff:g>"</string> + <!-- no translation found for get_dialog_description_single_tap (2797059565126030879) --> + <skip /> + <string name="get_dialog_title_unlock_options_for" msgid="7096423827682163270">"Ontsluit aanmeldingopsies vir <xliff:g id="APP_NAME">%1$s</xliff:g>"</string> <string name="get_dialog_title_choose_passkey_for" msgid="9175997688078538490">"Kies ’n gestoorde toegangsleutel vir <xliff:g id="APP_NAME">%1$s</xliff:g>"</string> <string name="get_dialog_title_choose_password_for" msgid="1724435823820819221">"Kies ’n gestoorde wagwoord vir <xliff:g id="APP_NAME">%1$s</xliff:g>"</string> <string name="get_dialog_title_choose_saved_sign_in_for" msgid="2420298653461652728">"Kies ’n gestoorde aanmelding vir <xliff:g id="APP_NAME">%1$s</xliff:g>"</string> - <string name="get_dialog_title_choose_sign_in_for" msgid="3048870756117876514">"Kies ’n aanmelding vir <xliff:g id="APP_NAME">%1$s</xliff:g>"</string> + <string name="get_dialog_title_choose_sign_in_for" msgid="645728947702442421">"Kies ’n rekening vir <xliff:g id="APP_NAME">%1$s</xliff:g>"</string> <string name="get_dialog_title_choose_option_for" msgid="4976380044745029107">"Kies ’n opsie vir <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string> <string name="get_dialog_title_use_info_on" msgid="8863708099535435146">"Gebruik hierdie inligting op <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string> <string name="get_dialog_use_saved_passkey_for" msgid="4618100798664888512">"Meld op ’n ander manier aan"</string> diff --git a/packages/CredentialManager/res/values-am/strings.xml b/packages/CredentialManager/res/values-am/strings.xml index 4ee07883d23e..dcf98a006d11 100644 --- a/packages/CredentialManager/res/values-am/strings.xml +++ b/packages/CredentialManager/res/values-am/strings.xml @@ -42,9 +42,6 @@ <string name="choose_create_option_passkey_title" msgid="8762295821604276511">"ወደ <xliff:g id="APP_NAME">%1$s</xliff:g> ለመግባት የይለፍ ቁልፍ ይፈጠር?"</string> <string name="choose_create_option_password_title" msgid="4481366993598649224">"ወደ <xliff:g id="APP_NAME">%1$s</xliff:g> ለመግባት የይለፍ ቃል ይቀመጥ?"</string> <string name="choose_create_option_sign_in_title" msgid="7092914088455358079">"የ<xliff:g id="APP_NAME">%1$s</xliff:g> የመግቢያ መረጃ ይቀመጥ?"</string> - <string name="choose_create_single_tap_passkey_title" msgid="3872793514041774218">"ለ<xliff:g id="APP_NAME">%1$s</xliff:g> የይለፍ ቁልፍ ለመፍጠር የማያ ገጽ መቆለፊያዎን መጠቀም ይፈልጋሉ?"</string> - <string name="choose_create_single_tap_password_title" msgid="5231871886818921622">"ለ<xliff:g id="APP_NAME">%1$s</xliff:g> የይለፍ ቃል ለመፍጠር የማያ ገጽ መቆለፊያዎን መጠቀም ይፈልጋሉ?"</string> - <string name="choose_create_single_tap_sign_in_title" msgid="256498714574099587">"የ<xliff:g id="APP_NAME">%1$s</xliff:g> መግቢያ መረጃን ለማስቀመጥ የማያ ገጽ መቆለፊያዎን መጠቀም ይፈልጋሉ?"</string> <string name="passkey" msgid="632353688396759522">"የይለፍ ቁልፍ"</string> <string name="password" msgid="6738570945182936667">"የይለፍ ቃል"</string> <string name="passkeys" msgid="5733880786866559847">"የይለፍ ቁልፎች"</string> @@ -71,15 +68,16 @@ <string name="accessibility_back_arrow_button" msgid="3233198183497842492">"ወደ ቀዳሚው ገፅ ይመለሱ"</string> <string name="accessibility_close_button" msgid="1163435587545377687">"ዝጋ"</string> <string name="accessibility_snackbar_dismiss" msgid="3456598374801836120">"አሰናብት"</string> - <string name="get_dialog_title_use_passkey_for" msgid="6236608872708021767">"የተቀመጠ የይለፍ ቁልፍዎን ለ<xliff:g id="APP_NAME">%1$s</xliff:g> ይጠቀሙ?"</string> - <string name="get_dialog_title_use_password_for" msgid="625828023234318484">"ለ<xliff:g id="APP_NAME">%1$s</xliff:g> የተቀመጠውን የይለፍ ቃልዎን ይጠቀሙ?"</string> - <string name="get_dialog_title_single_tap_for" msgid="2057945648748859483">"በ<xliff:g id="USERNAME">%2$s</xliff:g> ወደ <xliff:g id="APP_NAME">%1$s</xliff:g> ለመግባት የማያ ገጽ መቆለፊያዎን ይጠቀሙ"</string> - <string name="get_dialog_title_use_sign_in_for" msgid="790049858275131785">"ለ<xliff:g id="APP_NAME">%1$s</xliff:g> መግቢያዎ ጥቅም ላይ ይዋል?"</string> - <string name="get_dialog_title_unlock_options_for" msgid="7605568190597632433">"ለ<xliff:g id="APP_NAME">%1$s</xliff:g> የመግቢያ አማራጮች ይከፈቱ?"</string> + <string name="get_dialog_title_use_passkey_for" msgid="479261099705979148">"የተቀመጠ የይለፍ ቁልፍዎን ለ<xliff:g id="APP_NAME">%1$s</xliff:g> ይጠቀሙ"</string> + <string name="get_dialog_title_use_password_for" msgid="688557784207167647">"ለ<xliff:g id="APP_NAME">%1$s</xliff:g> የተቀመጠውን የይለፍ ቃልዎ ይጠቀሙ"</string> + <string name="get_dialog_title_use_sign_in_for" msgid="4233553937542583226">"መለያዎን ለ<xliff:g id="APP_NAME">%1$s</xliff:g> ይጠቀሙ"</string> + <!-- no translation found for get_dialog_description_single_tap (2797059565126030879) --> + <skip /> + <string name="get_dialog_title_unlock_options_for" msgid="7096423827682163270">"ለ<xliff:g id="APP_NAME">%1$s</xliff:g> የመግቢያ አማራጮችን ይከፈቱ"</string> <string name="get_dialog_title_choose_passkey_for" msgid="9175997688078538490">"ለ<xliff:g id="APP_NAME">%1$s</xliff:g> የተቀመጠ የይለፍ ቁልፍ ይምረጡ"</string> <string name="get_dialog_title_choose_password_for" msgid="1724435823820819221">"ለ<xliff:g id="APP_NAME">%1$s</xliff:g> የተቀመጠ የይለፍ ቃል ይምረጡ"</string> <string name="get_dialog_title_choose_saved_sign_in_for" msgid="2420298653461652728">"ለ<xliff:g id="APP_NAME">%1$s</xliff:g> የተቀመጠ መግቢያ ይጠቀሙ"</string> - <string name="get_dialog_title_choose_sign_in_for" msgid="3048870756117876514">"ለ<xliff:g id="APP_NAME">%1$s</xliff:g> መግቢያ ይምረጡ"</string> + <string name="get_dialog_title_choose_sign_in_for" msgid="645728947702442421">"ለ<xliff:g id="APP_NAME">%1$s</xliff:g> መለያን ይምረጡ"</string> <string name="get_dialog_title_choose_option_for" msgid="4976380044745029107">"ለ<xliff:g id="APP_NAME">%1$s</xliff:g> አማራጭ ይመረጥ?"</string> <string name="get_dialog_title_use_info_on" msgid="8863708099535435146">"ይህን መረጃ በ<xliff:g id="APP_NAME">%1$s</xliff:g> ላይ ይጠቀማሉ?"</string> <string name="get_dialog_use_saved_passkey_for" msgid="4618100798664888512">"በሌላ መንገድ ይግቡ"</string> diff --git a/packages/CredentialManager/res/values-ar/strings.xml b/packages/CredentialManager/res/values-ar/strings.xml index 7e141c244516..ab1c640a3588 100644 --- a/packages/CredentialManager/res/values-ar/strings.xml +++ b/packages/CredentialManager/res/values-ar/strings.xml @@ -42,9 +42,6 @@ <string name="choose_create_option_passkey_title" msgid="8762295821604276511">"هل تريد إنشاء مفتاح مرور لتسجيل الدخول إلى \"<xliff:g id="APP_NAME">%1$s</xliff:g>\"؟"</string> <string name="choose_create_option_password_title" msgid="4481366993598649224">"هل تريد حفظ كلمة المرور لتسجيل الدخول إلى \"<xliff:g id="APP_NAME">%1$s</xliff:g>\"؟"</string> <string name="choose_create_option_sign_in_title" msgid="7092914088455358079">"هل تريد حفظ معلومات تسجيل الدخول إلى \"<xliff:g id="APP_NAME">%1$s</xliff:g>\"؟"</string> - <string name="choose_create_single_tap_passkey_title" msgid="3872793514041774218">"هل تريد استخدام قفل الشاشة لإنشاء مفتاح مرور لتطبيق \"<xliff:g id="APP_NAME">%1$s</xliff:g>\"؟"</string> - <string name="choose_create_single_tap_password_title" msgid="5231871886818921622">"هل تريد استخدام قفل الشاشة لإنشاء كلمة مرور لتطبيق \"<xliff:g id="APP_NAME">%1$s</xliff:g>\"؟"</string> - <string name="choose_create_single_tap_sign_in_title" msgid="256498714574099587">"هل تريد استخدام قفل الشاشة لحفظ معلومات تسجيل الدخول لتطبيق \"<xliff:g id="APP_NAME">%1$s</xliff:g>\"؟"</string> <string name="passkey" msgid="632353688396759522">"مفتاح المرور"</string> <string name="password" msgid="6738570945182936667">"كلمة المرور"</string> <string name="passkeys" msgid="5733880786866559847">"مفاتيح المرور"</string> @@ -71,15 +68,16 @@ <string name="accessibility_back_arrow_button" msgid="3233198183497842492">"العودة إلى الصفحة السابقة"</string> <string name="accessibility_close_button" msgid="1163435587545377687">"إغلاق"</string> <string name="accessibility_snackbar_dismiss" msgid="3456598374801836120">"إغلاق"</string> - <string name="get_dialog_title_use_passkey_for" msgid="6236608872708021767">"هل تريد استخدام مفتاح المرور المحفوظ لتطبيق \"<xliff:g id="APP_NAME">%1$s</xliff:g>\"؟"</string> - <string name="get_dialog_title_use_password_for" msgid="625828023234318484">"هل تريد استخدام كلمة المرور المحفوظة لتطبيق \"<xliff:g id="APP_NAME">%1$s</xliff:g>\"؟"</string> - <string name="get_dialog_title_single_tap_for" msgid="2057945648748859483">"استخدِم قفل الشاشة لتسجيل الدخول إلى \"<xliff:g id="APP_NAME">%1$s</xliff:g>\" باستخدام <xliff:g id="USERNAME">%2$s</xliff:g>"</string> - <string name="get_dialog_title_use_sign_in_for" msgid="790049858275131785">"هل تريد استخدام معلومات تسجيل دخولك لتطبيق \"<xliff:g id="APP_NAME">%1$s</xliff:g>\"؟"</string> - <string name="get_dialog_title_unlock_options_for" msgid="7605568190597632433">"هل تريد فتح القفل لاستعادة خيارات تسجيل الدخول لتطبيق \"<xliff:g id="APP_NAME">%1$s</xliff:g>\"؟"</string> + <string name="get_dialog_title_use_passkey_for" msgid="479261099705979148">"استخدام مفتاح المرور المحفوظ لتسجيل الدخول إلى \"<xliff:g id="APP_NAME">%1$s</xliff:g>\""</string> + <string name="get_dialog_title_use_password_for" msgid="688557784207167647">"استخدام كلمة المرور المحفوظة لتسجيل الدخول إلى \"<xliff:g id="APP_NAME">%1$s</xliff:g>\""</string> + <string name="get_dialog_title_use_sign_in_for" msgid="4233553937542583226">"استخدام حسابك لتسجيل الدخول إلى \"<xliff:g id="APP_NAME">%1$s</xliff:g>\""</string> + <!-- no translation found for get_dialog_description_single_tap (2797059565126030879) --> + <skip /> + <string name="get_dialog_title_unlock_options_for" msgid="7096423827682163270">"فتح القفل لاستعادة خيارات تسجيل الدخول إلى \"<xliff:g id="APP_NAME">%1$s</xliff:g>\""</string> <string name="get_dialog_title_choose_passkey_for" msgid="9175997688078538490">"اختيار مفتاح مرور محفوظ لتطبيق \"<xliff:g id="APP_NAME">%1$s</xliff:g>\""</string> <string name="get_dialog_title_choose_password_for" msgid="1724435823820819221">"اختيار كلمة مرور محفوظة لتطبيق \"<xliff:g id="APP_NAME">%1$s</xliff:g>\""</string> <string name="get_dialog_title_choose_saved_sign_in_for" msgid="2420298653461652728">"اختيار بيانات اعتماد تسجيل دخول محفوظة لتطبيق \"<xliff:g id="APP_NAME">%1$s</xliff:g>\""</string> - <string name="get_dialog_title_choose_sign_in_for" msgid="3048870756117876514">"اختيار معلومات تسجيل الدخول لتطبيق \"<xliff:g id="APP_NAME">%1$s</xliff:g>\""</string> + <string name="get_dialog_title_choose_sign_in_for" msgid="645728947702442421">"اختيار حساب لتسجيل الدخول إلى \"<xliff:g id="APP_NAME">%1$s</xliff:g>\""</string> <string name="get_dialog_title_choose_option_for" msgid="4976380044745029107">"هل تريد اختيار بيانات الاعتماد لتطبيق \"<xliff:g id="APP_NAME">%1$s</xliff:g>\"؟"</string> <string name="get_dialog_title_use_info_on" msgid="8863708099535435146">"هل تريد استخدام بيانات الاعتماد هذه في \"<xliff:g id="APP_NAME">%1$s</xliff:g>\"؟"</string> <string name="get_dialog_use_saved_passkey_for" msgid="4618100798664888512">"تسجيل الدخول بطريقة أخرى"</string> diff --git a/packages/CredentialManager/res/values-as/strings.xml b/packages/CredentialManager/res/values-as/strings.xml index cde91123d08b..c5939da5150c 100644 --- a/packages/CredentialManager/res/values-as/strings.xml +++ b/packages/CredentialManager/res/values-as/strings.xml @@ -42,9 +42,6 @@ <string name="choose_create_option_passkey_title" msgid="8762295821604276511">"<xliff:g id="APP_NAME">%1$s</xliff:g>ত ছাইন ইন কৰিবলৈ পাছকী সৃষ্টি কৰিবনে?"</string> <string name="choose_create_option_password_title" msgid="4481366993598649224">"<xliff:g id="APP_NAME">%1$s</xliff:g>ত ছাইন ইন কৰিবলৈ পাছৱৰ্ড ছেভ কৰিবনে?"</string> <string name="choose_create_option_sign_in_title" msgid="7092914088455358079">"<xliff:g id="APP_NAME">%1$s</xliff:g>ৰ বাবে ছাইন ইনৰ তথ্য ছেভ কৰিবনে?"</string> - <string name="choose_create_single_tap_passkey_title" msgid="3872793514041774218">"<xliff:g id="APP_NAME">%1$s</xliff:g>ৰ বাবে পাছকী সৃষ্টি কৰিবলৈ আপোনাৰ স্ক্ৰীন লক ব্যৱহাৰ কৰিবনে?"</string> - <string name="choose_create_single_tap_password_title" msgid="5231871886818921622">"<xliff:g id="APP_NAME">%1$s</xliff:g>ৰ বাবে পাছৱৰ্ড সৃষ্টি কৰিবলৈ আপোনাৰ স্ক্ৰীন লক ব্যৱহাৰ কৰিবনে?"</string> - <string name="choose_create_single_tap_sign_in_title" msgid="256498714574099587">"<xliff:g id="APP_NAME">%1$s</xliff:g>ৰ বাবে ছাইন ইনৰ তথ্য ছেভ কৰিবলৈ আপোনাৰ স্ক্ৰীন লক ব্যৱহাৰ কৰিবনে?"</string> <string name="passkey" msgid="632353688396759522">"পাছকী"</string> <string name="password" msgid="6738570945182936667">"পাছৱৰ্ড"</string> <string name="passkeys" msgid="5733880786866559847">"পাছকী"</string> @@ -71,15 +68,16 @@ <string name="accessibility_back_arrow_button" msgid="3233198183497842492">"পূৰ্বৱৰ্তী পৃষ্ঠালৈ ঘূৰি যাওক"</string> <string name="accessibility_close_button" msgid="1163435587545377687">"বন্ধ কৰক"</string> <string name="accessibility_snackbar_dismiss" msgid="3456598374801836120">"অগ্ৰাহ্য কৰক"</string> - <string name="get_dialog_title_use_passkey_for" msgid="6236608872708021767">"<xliff:g id="APP_NAME">%1$s</xliff:g>ৰ বাবে আপোনাৰ ছেভ হৈ থকা পাছকী ব্যৱহাৰ কৰিবনে?"</string> - <string name="get_dialog_title_use_password_for" msgid="625828023234318484">"<xliff:g id="APP_NAME">%1$s</xliff:g>ৰ বাবে আপোনাৰ ছেভ কৰি থোৱা পাছৱৰ্ড ব্যৱহাৰ কৰিবনে?"</string> - <string name="get_dialog_title_single_tap_for" msgid="2057945648748859483">"<xliff:g id="USERNAME">%2$s</xliff:g>ৰ জৰিয়তে <xliff:g id="APP_NAME">%1$s</xliff:g>ত ছাইন ইন কৰিবলৈ আপোনাৰ স্ক্ৰীন লক ব্যৱহাৰ কৰক"</string> - <string name="get_dialog_title_use_sign_in_for" msgid="790049858275131785">"<xliff:g id="APP_NAME">%1$s</xliff:g>ৰ বাবে ছাইন ইন কৰিবলৈ আপোনাৰ ক্ৰিডেনশ্বিয়েল ব্যৱহাৰ কৰিবনে?"</string> - <string name="get_dialog_title_unlock_options_for" msgid="7605568190597632433">"<xliff:g id="APP_NAME">%1$s</xliff:g>ৰ বাবে ছাইন ইনৰ বিকল্পসমূহ আনলক কৰিবনে?"</string> + <string name="get_dialog_title_use_passkey_for" msgid="479261099705979148">"আপুনি <xliff:g id="APP_NAME">%1$s</xliff:g>ৰ বাবে ছেভ কৰি থোৱা পাছকী ব্যৱহাৰ কৰক"</string> + <string name="get_dialog_title_use_password_for" msgid="688557784207167647">"আপুনি <xliff:g id="APP_NAME">%1$s</xliff:g>ৰ বাবে ছেভ কৰি থোৱা পাছৱৰ্ড ব্যৱহাৰ কৰক"</string> + <string name="get_dialog_title_use_sign_in_for" msgid="4233553937542583226">"<xliff:g id="APP_NAME">%1$s</xliff:g>ৰ বাবে থকা আপোনাৰ একাউণ্ট ব্যৱহাৰ কৰক"</string> + <!-- no translation found for get_dialog_description_single_tap (2797059565126030879) --> + <skip /> + <string name="get_dialog_title_unlock_options_for" msgid="7096423827682163270">"<xliff:g id="APP_NAME">%1$s</xliff:g>ৰ বাবে ছাইন ইনৰ বিকল্পসমূহ আনলক কৰক"</string> <string name="get_dialog_title_choose_passkey_for" msgid="9175997688078538490">"<xliff:g id="APP_NAME">%1$s</xliff:g>ৰ বাবে ছেভ হৈ থকা এটা পাছকী বাছনি কৰক"</string> <string name="get_dialog_title_choose_password_for" msgid="1724435823820819221">"<xliff:g id="APP_NAME">%1$s</xliff:g>ৰ বাবে ছেভ হৈ থকা এটা পাছৱৰ্ড বাছনি কৰক"</string> <string name="get_dialog_title_choose_saved_sign_in_for" msgid="2420298653461652728">"<xliff:g id="APP_NAME">%1$s</xliff:g>ৰ বাবে ছেভ হৈ থকা এটা ছাইন ইন বাছনি কৰক"</string> - <string name="get_dialog_title_choose_sign_in_for" msgid="3048870756117876514">"<xliff:g id="APP_NAME">%1$s</xliff:g>ৰ বাবে ছাইন ইন কৰিবলৈ এটা ক্ৰিডেনশ্বিয়েল বাছনি কৰক"</string> + <string name="get_dialog_title_choose_sign_in_for" msgid="645728947702442421">"<xliff:g id="APP_NAME">%1$s</xliff:g>ৰ বাবে এটা একাউণ্ট বাছনি কৰক"</string> <string name="get_dialog_title_choose_option_for" msgid="4976380044745029107">"<xliff:g id="APP_NAME">%1$s</xliff:g>ৰ বাবে এটা বিকল্প বাছনি কৰিবনে?"</string> <string name="get_dialog_title_use_info_on" msgid="8863708099535435146">"<xliff:g id="APP_NAME">%1$s</xliff:g>ত এই তথ্য ব্যৱহাৰ কৰিবনে?"</string> <string name="get_dialog_use_saved_passkey_for" msgid="4618100798664888512">"অন্য উপায়েৰে ছাইন ইন কৰক"</string> diff --git a/packages/CredentialManager/res/values-az/strings.xml b/packages/CredentialManager/res/values-az/strings.xml index 1623ec4b292b..db7b8b5fa8d3 100644 --- a/packages/CredentialManager/res/values-az/strings.xml +++ b/packages/CredentialManager/res/values-az/strings.xml @@ -42,9 +42,6 @@ <string name="choose_create_option_passkey_title" msgid="8762295821604276511">"<xliff:g id="APP_NAME">%1$s</xliff:g> tətbiqinə daxil olmaq üçün giriş açarı yaradılsın?"</string> <string name="choose_create_option_password_title" msgid="4481366993598649224">"<xliff:g id="APP_NAME">%1$s</xliff:g> tətbiqinə daxil olmaq üçün parol yadda saxlansın?"</string> <string name="choose_create_option_sign_in_title" msgid="7092914088455358079">"<xliff:g id="APP_NAME">%1$s</xliff:g> üçün giriş məlumatları yadda saxlansın?"</string> - <string name="choose_create_single_tap_passkey_title" msgid="3872793514041774218">"<xliff:g id="APP_NAME">%1$s</xliff:g> üçün giriş açarı yaratmaq məqsədilə ekran kilidi istifadə edilsin?"</string> - <string name="choose_create_single_tap_password_title" msgid="5231871886818921622">"<xliff:g id="APP_NAME">%1$s</xliff:g> üçün parol yaratmaq məqsədilə ekran kilidi istifadə edilsin?"</string> - <string name="choose_create_single_tap_sign_in_title" msgid="256498714574099587">"<xliff:g id="APP_NAME">%1$s</xliff:g> üçün giriş məlumatını yadda saxlamaq məqsədilə ekran kilidi istifadə edilsin?"</string> <string name="passkey" msgid="632353688396759522">"açar"</string> <string name="password" msgid="6738570945182936667">"parol"</string> <string name="passkeys" msgid="5733880786866559847">"açarlar"</string> @@ -71,15 +68,16 @@ <string name="accessibility_back_arrow_button" msgid="3233198183497842492">"Əvvəlki səhifəyə qayıdın"</string> <string name="accessibility_close_button" msgid="1163435587545377687">"Bağlayın"</string> <string name="accessibility_snackbar_dismiss" msgid="3456598374801836120">"İmtina edin"</string> - <string name="get_dialog_title_use_passkey_for" msgid="6236608872708021767">"<xliff:g id="APP_NAME">%1$s</xliff:g> üçün yadda saxlanmış giriş açarı istifadə edilsin?"</string> - <string name="get_dialog_title_use_password_for" msgid="625828023234318484">"<xliff:g id="APP_NAME">%1$s</xliff:g> üçün yadda saxlanmış parol istifadə edilsin?"</string> - <string name="get_dialog_title_single_tap_for" msgid="2057945648748859483">"<xliff:g id="APP_NAME">%1$s</xliff:g> tətbiqinə <xliff:g id="USERNAME">%2$s</xliff:g> ilə daxil olmaq üçün ekran kilidindən istifadə edin"</string> - <string name="get_dialog_title_use_sign_in_for" msgid="790049858275131785">"<xliff:g id="APP_NAME">%1$s</xliff:g> üçün giriş istifadə edilsin?"</string> - <string name="get_dialog_title_unlock_options_for" msgid="7605568190597632433">"<xliff:g id="APP_NAME">%1$s</xliff:g> üçün giriş seçimləri kiliddən çıxarılsın?"</string> + <string name="get_dialog_title_use_passkey_for" msgid="479261099705979148">"<xliff:g id="APP_NAME">%1$s</xliff:g> üçün yadda saxlanılmış giriş açarından istifadə edin"</string> + <string name="get_dialog_title_use_password_for" msgid="688557784207167647">"<xliff:g id="APP_NAME">%1$s</xliff:g> üçün yadda saxlanılmış paroldan istifadə edin"</string> + <string name="get_dialog_title_use_sign_in_for" msgid="4233553937542583226">"<xliff:g id="APP_NAME">%1$s</xliff:g> üçün hesabınızdan istifadə edin"</string> + <!-- no translation found for get_dialog_description_single_tap (2797059565126030879) --> + <skip /> + <string name="get_dialog_title_unlock_options_for" msgid="7096423827682163270">"<xliff:g id="APP_NAME">%1$s</xliff:g> üçün giriş seçimlərini kiliddən çıxarın"</string> <string name="get_dialog_title_choose_passkey_for" msgid="9175997688078538490">"<xliff:g id="APP_NAME">%1$s</xliff:g> üçün yadda saxlanmış giriş açarı seçin"</string> <string name="get_dialog_title_choose_password_for" msgid="1724435823820819221">"<xliff:g id="APP_NAME">%1$s</xliff:g> üçün yadda saxlanmış parol seçin"</string> <string name="get_dialog_title_choose_saved_sign_in_for" msgid="2420298653461652728">"<xliff:g id="APP_NAME">%1$s</xliff:g> üçün yadda saxlanmış giriş seçin"</string> - <string name="get_dialog_title_choose_sign_in_for" msgid="3048870756117876514">"<xliff:g id="APP_NAME">%1$s</xliff:g> üçün giriş seçin"</string> + <string name="get_dialog_title_choose_sign_in_for" msgid="645728947702442421">"<xliff:g id="APP_NAME">%1$s</xliff:g> üçün hesab seçin"</string> <string name="get_dialog_title_choose_option_for" msgid="4976380044745029107">"<xliff:g id="APP_NAME">%1$s</xliff:g> üçün seçim edilsin?"</string> <string name="get_dialog_title_use_info_on" msgid="8863708099535435146">"Məlumat <xliff:g id="APP_NAME">%1$s</xliff:g> tətbiqində istifadə edilsin?"</string> <string name="get_dialog_use_saved_passkey_for" msgid="4618100798664888512">"Başqa üsulla daxil olun"</string> diff --git a/packages/CredentialManager/res/values-b+sr+Latn/strings.xml b/packages/CredentialManager/res/values-b+sr+Latn/strings.xml index 23c021e2528d..ddc8304ac765 100644 --- a/packages/CredentialManager/res/values-b+sr+Latn/strings.xml +++ b/packages/CredentialManager/res/values-b+sr+Latn/strings.xml @@ -42,9 +42,6 @@ <string name="choose_create_option_passkey_title" msgid="8762295821604276511">"Želite da napravite pristupni ključ da biste se prijavili u <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string> <string name="choose_create_option_password_title" msgid="4481366993598649224">"Želite da sačuvate lozinku da biste se prijavili u <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string> <string name="choose_create_option_sign_in_title" msgid="7092914088455358079">"Želite da sačuvate podatke za prijavljivanje za: <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string> - <string name="choose_create_single_tap_passkey_title" msgid="3872793514041774218">"Želite da koristite otključavanje ekrana da biste napravili pristupni ključ za: <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string> - <string name="choose_create_single_tap_password_title" msgid="5231871886818921622">"Želite da koristite otključavanje ekrana da biste napravili lozinku za: <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string> - <string name="choose_create_single_tap_sign_in_title" msgid="256498714574099587">"Želite da koristite otključavanje ekrana da biste sačuvali podatke za prijavljivanje za: <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string> <string name="passkey" msgid="632353688396759522">"pristupni kôd"</string> <string name="password" msgid="6738570945182936667">"lozinka"</string> <string name="passkeys" msgid="5733880786866559847">"pristupni kodovi"</string> @@ -71,15 +68,16 @@ <string name="accessibility_back_arrow_button" msgid="3233198183497842492">"Vratite se na prethodnu stranicu"</string> <string name="accessibility_close_button" msgid="1163435587545377687">"Zatvorite"</string> <string name="accessibility_snackbar_dismiss" msgid="3456598374801836120">"Odbaci"</string> - <string name="get_dialog_title_use_passkey_for" msgid="6236608872708021767">"Želite da koristite sačuvani pristupni kôd za: <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string> - <string name="get_dialog_title_use_password_for" msgid="625828023234318484">"Želite da koristite sačuvanu lozinku za: <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string> - <string name="get_dialog_title_single_tap_for" msgid="2057945648748859483">"Koristite otključavanje ekrana da biste se prijavili u <xliff:g id="APP_NAME">%1$s</xliff:g> kao <xliff:g id="USERNAME">%2$s</xliff:g>"</string> - <string name="get_dialog_title_use_sign_in_for" msgid="790049858275131785">"Želite li da koristite svoje podatke za prijavljivanje za aplikaciju <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string> - <string name="get_dialog_title_unlock_options_for" msgid="7605568190597632433">"Želite da otključate opcije prijavljivanja za: <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string> + <string name="get_dialog_title_use_passkey_for" msgid="479261099705979148">"Koristite sačuvani pristupni ključ za: <xliff:g id="APP_NAME">%1$s</xliff:g>"</string> + <string name="get_dialog_title_use_password_for" msgid="688557784207167647">"Koristite sačuvanu lozinku za: <xliff:g id="APP_NAME">%1$s</xliff:g>"</string> + <string name="get_dialog_title_use_sign_in_for" msgid="4233553937542583226">"Koristite nalog za: <xliff:g id="APP_NAME">%1$s</xliff:g>"</string> + <!-- no translation found for get_dialog_description_single_tap (2797059565126030879) --> + <skip /> + <string name="get_dialog_title_unlock_options_for" msgid="7096423827682163270">"Otključajte opcije prijavljivanja za: <xliff:g id="APP_NAME">%1$s</xliff:g>"</string> <string name="get_dialog_title_choose_passkey_for" msgid="9175997688078538490">"Izaberite sačuvan pristupni ključ za: <xliff:g id="APP_NAME">%1$s</xliff:g>"</string> <string name="get_dialog_title_choose_password_for" msgid="1724435823820819221">"Izaberite sačuvanu lozinku za: <xliff:g id="APP_NAME">%1$s</xliff:g>"</string> <string name="get_dialog_title_choose_saved_sign_in_for" msgid="2420298653461652728">"Izaberite sačuvane podatke za prijavljivanje za: <xliff:g id="APP_NAME">%1$s</xliff:g>"</string> - <string name="get_dialog_title_choose_sign_in_for" msgid="3048870756117876514">"Odaberite podatke za prijavljivanje za aplikaciju <xliff:g id="APP_NAME">%1$s</xliff:g>"</string> + <string name="get_dialog_title_choose_sign_in_for" msgid="645728947702442421">"Odaberite nalog za: <xliff:g id="APP_NAME">%1$s</xliff:g>"</string> <string name="get_dialog_title_choose_option_for" msgid="4976380044745029107">"Želite da odaberete opciju za aplikaciju <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string> <string name="get_dialog_title_use_info_on" msgid="8863708099535435146">"Želite da koristite te podatke u aplikaciji <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string> <string name="get_dialog_use_saved_passkey_for" msgid="4618100798664888512">"Prijavite se na drugi način"</string> diff --git a/packages/CredentialManager/res/values-be/strings.xml b/packages/CredentialManager/res/values-be/strings.xml index 0b8ade7f64ec..c302ea2fc420 100644 --- a/packages/CredentialManager/res/values-be/strings.xml +++ b/packages/CredentialManager/res/values-be/strings.xml @@ -42,9 +42,6 @@ <string name="choose_create_option_passkey_title" msgid="8762295821604276511">"Стварыць ключ доступу для ўваходу ў праграму \"<xliff:g id="APP_NAME">%1$s</xliff:g>\"?"</string> <string name="choose_create_option_password_title" msgid="4481366993598649224">"Захаваць пароль для ўваходу ў праграму \"<xliff:g id="APP_NAME">%1$s</xliff:g>\"?"</string> <string name="choose_create_option_sign_in_title" msgid="7092914088455358079">"Захаваць даныя для ўваходу ў праграму \"<xliff:g id="APP_NAME">%1$s</xliff:g>\"?"</string> - <string name="choose_create_single_tap_passkey_title" msgid="3872793514041774218">"Выкарыстаць сродак разблакіроўкі экрана, каб стварыць ключ доступу для праграмы \"<xliff:g id="APP_NAME">%1$s</xliff:g>\"?"</string> - <string name="choose_create_single_tap_password_title" msgid="5231871886818921622">"Выкарыстаць сродак разблакіроўкі экрана, каб стварыць пароль для праграмы \"<xliff:g id="APP_NAME">%1$s</xliff:g>\"?"</string> - <string name="choose_create_single_tap_sign_in_title" msgid="256498714574099587">"Выкарыстаць сродак разблакіроўкі экрана, каб захаваць даныя для ўваходу для праграмы \"<xliff:g id="APP_NAME">%1$s</xliff:g>\"?"</string> <string name="passkey" msgid="632353688396759522">"ключ доступу"</string> <string name="password" msgid="6738570945182936667">"пароль"</string> <string name="passkeys" msgid="5733880786866559847">"ключы доступу"</string> @@ -71,15 +68,16 @@ <string name="accessibility_back_arrow_button" msgid="3233198183497842492">"Вярнуцца да папярэдняй старонкі"</string> <string name="accessibility_close_button" msgid="1163435587545377687">"Закрыць"</string> <string name="accessibility_snackbar_dismiss" msgid="3456598374801836120">"Закрыць"</string> - <string name="get_dialog_title_use_passkey_for" msgid="6236608872708021767">"Скарыстаць захаваны ключ доступу для праграмы \"<xliff:g id="APP_NAME">%1$s</xliff:g>\"?"</string> - <string name="get_dialog_title_use_password_for" msgid="625828023234318484">"Выкарыстоўваць пароль, захаваны для праграмы \"<xliff:g id="APP_NAME">%1$s</xliff:g>\"?"</string> - <string name="get_dialog_title_single_tap_for" msgid="2057945648748859483">"Выкарыстайце сродак разблакіроўкі экрана для ўваходу ў праграму \"<xliff:g id="APP_NAME">%1$s</xliff:g>\" як <xliff:g id="USERNAME">%2$s</xliff:g>"</string> - <string name="get_dialog_title_use_sign_in_for" msgid="790049858275131785">"Скарыстаць ваш спосаб уваходу для праграмы <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string> - <string name="get_dialog_title_unlock_options_for" msgid="7605568190597632433">"Разблакіраваць варыянты ўваходу для праграмы\"<xliff:g id="APP_NAME">%1$s</xliff:g>\"?"</string> + <string name="get_dialog_title_use_passkey_for" msgid="479261099705979148">"Выкарыстайце захаваны ключ доступу для праграмы \"<xliff:g id="APP_NAME">%1$s</xliff:g>\""</string> + <string name="get_dialog_title_use_password_for" msgid="688557784207167647">"Выкарыстайце захаваны пароль для праграмы \"<xliff:g id="APP_NAME">%1$s</xliff:g>\""</string> + <string name="get_dialog_title_use_sign_in_for" msgid="4233553937542583226">"Выкарыстайце ўліковы запіс для ўваходу ў праграму \"<xliff:g id="APP_NAME">%1$s</xliff:g>\""</string> + <!-- no translation found for get_dialog_description_single_tap (2797059565126030879) --> + <skip /> + <string name="get_dialog_title_unlock_options_for" msgid="7096423827682163270">"Разблакіруйце спосабы ўваходу для праграмы \"<xliff:g id="APP_NAME">%1$s</xliff:g>\""</string> <string name="get_dialog_title_choose_passkey_for" msgid="9175997688078538490">"Выберыце захаваны ключ доступу для праграмы \"<xliff:g id="APP_NAME">%1$s</xliff:g>\""</string> <string name="get_dialog_title_choose_password_for" msgid="1724435823820819221">"Выберыце захаваны пароль для праграмы \"<xliff:g id="APP_NAME">%1$s</xliff:g>\""</string> <string name="get_dialog_title_choose_saved_sign_in_for" msgid="2420298653461652728">"Выберыце захаваны спосаб уваходу для праграмы \"<xliff:g id="APP_NAME">%1$s</xliff:g>\""</string> - <string name="get_dialog_title_choose_sign_in_for" msgid="3048870756117876514">"Выберыце спосаб уваходу для праграмы <xliff:g id="APP_NAME">%1$s</xliff:g>"</string> + <string name="get_dialog_title_choose_sign_in_for" msgid="645728947702442421">"Выберыце ўліковы запіс для праграмы \"<xliff:g id="APP_NAME">%1$s</xliff:g>\""</string> <string name="get_dialog_title_choose_option_for" msgid="4976380044745029107">"Выберыце ўліковыя даныя для ўваходу ў праграму \"<xliff:g id="APP_NAME">%1$s</xliff:g>\""</string> <string name="get_dialog_title_use_info_on" msgid="8863708099535435146">"Выкарыстоўваць гэтую інфармацыю на прыладзе <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string> <string name="get_dialog_use_saved_passkey_for" msgid="4618100798664888512">"Увайсці іншым спосабам"</string> diff --git a/packages/CredentialManager/res/values-bg/strings.xml b/packages/CredentialManager/res/values-bg/strings.xml index 6a79b11d2ab3..a5b8c9b29d66 100644 --- a/packages/CredentialManager/res/values-bg/strings.xml +++ b/packages/CredentialManager/res/values-bg/strings.xml @@ -42,9 +42,6 @@ <string name="choose_create_option_passkey_title" msgid="8762295821604276511">"Искате ли да създадете ключ за достъп, с който да влизате в(ъв) <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string> <string name="choose_create_option_password_title" msgid="4481366993598649224">"Искате ли да запазите паролата за влизане в(ъв) <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string> <string name="choose_create_option_sign_in_title" msgid="7092914088455358079">"Искате ли да запазите данните за вход за <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string> - <string name="choose_create_single_tap_passkey_title" msgid="3872793514041774218">"Искате ли да използвате опцията си за заключване на екрана, за да създадете ключ за достъп за <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string> - <string name="choose_create_single_tap_password_title" msgid="5231871886818921622">"Искате ли да използвате опцията си за заключване на екрана, за да създадете парола за <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string> - <string name="choose_create_single_tap_sign_in_title" msgid="256498714574099587">"Искате ли да използвате опцията си за заключване на екрана, за да запазите данните за вход за <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string> <string name="passkey" msgid="632353688396759522">"код за достъп"</string> <string name="password" msgid="6738570945182936667">"парола"</string> <string name="passkeys" msgid="5733880786866559847">"ключове за достъп"</string> @@ -71,15 +68,16 @@ <string name="accessibility_back_arrow_button" msgid="3233198183497842492">"Назад към предишната страница"</string> <string name="accessibility_close_button" msgid="1163435587545377687">"Затваряне"</string> <string name="accessibility_snackbar_dismiss" msgid="3456598374801836120">"Отхвърляне"</string> - <string name="get_dialog_title_use_passkey_for" msgid="6236608872708021767">"Да се използва ли запазеният ви код за достъп за <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string> - <string name="get_dialog_title_use_password_for" msgid="625828023234318484">"Искате ли да използвате запазената си парола за <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string> - <string name="get_dialog_title_single_tap_for" msgid="2057945648748859483">"Използвайте опцията си за заключване на екрана, за да влизате в(ъв) <xliff:g id="APP_NAME">%1$s</xliff:g> с профила <xliff:g id="USERNAME">%2$s</xliff:g>"</string> - <string name="get_dialog_title_use_sign_in_for" msgid="790049858275131785">"Да се използват ли вашите данни за вход за <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string> - <string name="get_dialog_title_unlock_options_for" msgid="7605568190597632433">"Искате ли да отключите опциите за влизане в профила за <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string> + <string name="get_dialog_title_use_passkey_for" msgid="479261099705979148">"Използване на запазения ви ключ за достъп за <xliff:g id="APP_NAME">%1$s</xliff:g>"</string> + <string name="get_dialog_title_use_password_for" msgid="688557784207167647">"Използване на запазената ви парола за <xliff:g id="APP_NAME">%1$s</xliff:g>"</string> + <string name="get_dialog_title_use_sign_in_for" msgid="4233553937542583226">"Използване на профила ви за <xliff:g id="APP_NAME">%1$s</xliff:g>"</string> + <!-- no translation found for get_dialog_description_single_tap (2797059565126030879) --> + <skip /> + <string name="get_dialog_title_unlock_options_for" msgid="7096423827682163270">"Искате ли да отключите опциите за влизане в профила за <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string> <string name="get_dialog_title_choose_passkey_for" msgid="9175997688078538490">"Изберете запазен ключ за достъп за <xliff:g id="APP_NAME">%1$s</xliff:g>"</string> <string name="get_dialog_title_choose_password_for" msgid="1724435823820819221">"Изберете запазена парола за <xliff:g id="APP_NAME">%1$s</xliff:g>"</string> <string name="get_dialog_title_choose_saved_sign_in_for" msgid="2420298653461652728">"Изберете запазени данни за вход за <xliff:g id="APP_NAME">%1$s</xliff:g>"</string> - <string name="get_dialog_title_choose_sign_in_for" msgid="3048870756117876514">"Избиране на данни за вход за <xliff:g id="APP_NAME">%1$s</xliff:g>"</string> + <string name="get_dialog_title_choose_sign_in_for" msgid="645728947702442421">"Изберете профил за <xliff:g id="APP_NAME">%1$s</xliff:g>"</string> <string name="get_dialog_title_choose_option_for" msgid="4976380044745029107">"Искате ли да изберете опция за <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string> <string name="get_dialog_title_use_info_on" msgid="8863708099535435146">"Да се използва ли тази информация за <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string> <string name="get_dialog_use_saved_passkey_for" msgid="4618100798664888512">"Влизане в профила по друг начин"</string> diff --git a/packages/CredentialManager/res/values-bn/strings.xml b/packages/CredentialManager/res/values-bn/strings.xml index 76fc0a71d7e4..46ec5644de4c 100644 --- a/packages/CredentialManager/res/values-bn/strings.xml +++ b/packages/CredentialManager/res/values-bn/strings.xml @@ -42,9 +42,6 @@ <string name="choose_create_option_passkey_title" msgid="8762295821604276511">"<xliff:g id="APP_NAME">%1$s</xliff:g> অ্যাপে সাইন-ইন করার জন্য পাসকী তৈরি করবেন?"</string> <string name="choose_create_option_password_title" msgid="4481366993598649224">"<xliff:g id="APP_NAME">%1$s</xliff:g> অ্যাপে সাইন-ইন করার জন্য পাসওয়ার্ড সেভ করবেন?"</string> <string name="choose_create_option_sign_in_title" msgid="7092914088455358079">"<xliff:g id="APP_NAME">%1$s</xliff:g> অ্যাপের জন্য সাইন-ইন সংক্রান্ত তথ্য সেভ করবেন?"</string> - <string name="choose_create_single_tap_passkey_title" msgid="3872793514041774218">"<xliff:g id="APP_NAME">%1$s</xliff:g> অ্যাপের জন্য পাসকী তৈরি করতে আপনার স্ক্রিন লক ব্যবহার করতে চান?"</string> - <string name="choose_create_single_tap_password_title" msgid="5231871886818921622">"<xliff:g id="APP_NAME">%1$s</xliff:g> অ্যাপের জন্য পাসওয়ার্ড তৈরি করতে আপনার স্ক্রিন লক ব্যবহার করতে চান?"</string> - <string name="choose_create_single_tap_sign_in_title" msgid="256498714574099587">"<xliff:g id="APP_NAME">%1$s</xliff:g> অ্যাপের জন্য সাইন-ইন সংক্রান্ত তথ্য সেভ করতে আপনার স্ক্রিন লক ব্যবহার করতে চান?"</string> <string name="passkey" msgid="632353688396759522">"পাসকী"</string> <string name="password" msgid="6738570945182936667">"পাসওয়ার্ড"</string> <string name="passkeys" msgid="5733880786866559847">"পাসকী"</string> @@ -71,15 +68,16 @@ <string name="accessibility_back_arrow_button" msgid="3233198183497842492">"আগের পৃষ্ঠায় ফিরে যান"</string> <string name="accessibility_close_button" msgid="1163435587545377687">"বন্ধ করুন"</string> <string name="accessibility_snackbar_dismiss" msgid="3456598374801836120">"বাতিল করুন"</string> - <string name="get_dialog_title_use_passkey_for" msgid="6236608872708021767">"<xliff:g id="APP_NAME">%1$s</xliff:g>-এর জন্য আপনার সেভ করা পাসকী ব্যবহার করবেন?"</string> - <string name="get_dialog_title_use_password_for" msgid="625828023234318484">"আপনার সেভ করা পাসওয়ার্ড <xliff:g id="APP_NAME">%1$s</xliff:g>-এর জন্য ব্যবহার করবেন?"</string> - <string name="get_dialog_title_single_tap_for" msgid="2057945648748859483">"আপনার স্ক্রিন লক ব্যবহার করে <xliff:g id="USERNAME">%2$s</xliff:g>-এর মাধ্যমে <xliff:g id="APP_NAME">%1$s</xliff:g> অ্যাপে সাইন-ইন করুন"</string> - <string name="get_dialog_title_use_sign_in_for" msgid="790049858275131785">"<xliff:g id="APP_NAME">%1$s</xliff:g>-এর জন্য আপনার সাইন-ইন ক্রেডেনশিয়াল ব্যবহার করবেন?"</string> - <string name="get_dialog_title_unlock_options_for" msgid="7605568190597632433">"<xliff:g id="APP_NAME">%1$s</xliff:g>-এর জন্য সাইন-ইন করার বিকল্প আনলক করতে চান?"</string> + <string name="get_dialog_title_use_passkey_for" msgid="479261099705979148">"<xliff:g id="APP_NAME">%1$s</xliff:g>-এর জন্য আপনার সেভ করা পাসকী ব্যবহার করুন"</string> + <string name="get_dialog_title_use_password_for" msgid="688557784207167647">"<xliff:g id="APP_NAME">%1$s</xliff:g>-এর জন্য আপনার সেভ করা পাসওয়ার্ড ব্যবহার করুন"</string> + <string name="get_dialog_title_use_sign_in_for" msgid="4233553937542583226">"<xliff:g id="APP_NAME">%1$s</xliff:g>-এর জন্য আপনার অ্যাকাউন্ট ব্যবহার করুন"</string> + <!-- no translation found for get_dialog_description_single_tap (2797059565126030879) --> + <skip /> + <string name="get_dialog_title_unlock_options_for" msgid="7096423827682163270">"<xliff:g id="APP_NAME">%1$s</xliff:g>-এর জন্য সাইন-ইন করার বিকল্পগুলি আনলক করুন"</string> <string name="get_dialog_title_choose_passkey_for" msgid="9175997688078538490">"<xliff:g id="APP_NAME">%1$s</xliff:g>-এর জন্য সেভ করা পাসকী বেছে নিন"</string> <string name="get_dialog_title_choose_password_for" msgid="1724435823820819221">"<xliff:g id="APP_NAME">%1$s</xliff:g>-এর জন্য সেভ করা পাসকী বেছে নিন"</string> <string name="get_dialog_title_choose_saved_sign_in_for" msgid="2420298653461652728">"<xliff:g id="APP_NAME">%1$s</xliff:g>-এর জন্য সেভ করা ক্রেডেনশিয়াল বেছে নিন"</string> - <string name="get_dialog_title_choose_sign_in_for" msgid="3048870756117876514">"<xliff:g id="APP_NAME">%1$s</xliff:g>-এর জন্য সাইন-ইন ক্রেডেনশিয়াল বেছে নিন"</string> + <string name="get_dialog_title_choose_sign_in_for" msgid="645728947702442421">"<xliff:g id="APP_NAME">%1$s</xliff:g>-এর জন্য একটি অ্যাকাউন্ট বেছে নিন"</string> <string name="get_dialog_title_choose_option_for" msgid="4976380044745029107">"<xliff:g id="APP_NAME">%1$s</xliff:g>-এর জন্য বিকল্প বেছে নেবেন?"</string> <string name="get_dialog_title_use_info_on" msgid="8863708099535435146">"<xliff:g id="APP_NAME">%1$s</xliff:g>-এ সাইন-ইন করতে এই তথ্য ব্যবহার করবেন?"</string> <string name="get_dialog_use_saved_passkey_for" msgid="4618100798664888512">"অন্যভাবে সাইন-ইন করুন"</string> diff --git a/packages/CredentialManager/res/values-bs/strings.xml b/packages/CredentialManager/res/values-bs/strings.xml index 6d3a676e6a17..23ed34c1eaf5 100644 --- a/packages/CredentialManager/res/values-bs/strings.xml +++ b/packages/CredentialManager/res/values-bs/strings.xml @@ -42,9 +42,6 @@ <string name="choose_create_option_passkey_title" msgid="8762295821604276511">"Kreirati pristupni ključ da se prijavite u aplikaciju <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string> <string name="choose_create_option_password_title" msgid="4481366993598649224">"Sačuvati lozinku da se prijavite u aplikaciju <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string> <string name="choose_create_option_sign_in_title" msgid="7092914088455358079">"Sačuvati podatke za prijavu u aplikaciju <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string> - <string name="choose_create_single_tap_passkey_title" msgid="3872793514041774218">"Koristiti zaključavanje ekrana da kreirate pristupni ključ za aplikaciju <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string> - <string name="choose_create_single_tap_password_title" msgid="5231871886818921622">"Koristiti zaključavanje ekrana da kreirate lozinku za aplikaciju <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string> - <string name="choose_create_single_tap_sign_in_title" msgid="256498714574099587">"Koristiti zaključavanje ekrana da sačuvate podatke za prijavu za aplikaciju <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string> <string name="passkey" msgid="632353688396759522">"pristupni ključ"</string> <string name="password" msgid="6738570945182936667">"lozinka"</string> <string name="passkeys" msgid="5733880786866559847">"pristupni ključevi"</string> @@ -71,15 +68,16 @@ <string name="accessibility_back_arrow_button" msgid="3233198183497842492">"Povratak na prethodnu stranicu"</string> <string name="accessibility_close_button" msgid="1163435587545377687">"Zatvaranje"</string> <string name="accessibility_snackbar_dismiss" msgid="3456598374801836120">"Odbacivanje"</string> - <string name="get_dialog_title_use_passkey_for" msgid="6236608872708021767">"Koristiti sačuvani pristupni ključ za aplikaciju <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string> - <string name="get_dialog_title_use_password_for" msgid="625828023234318484">"Koristiti sačuvanu lozinku za aplikaciju <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string> - <string name="get_dialog_title_single_tap_for" msgid="2057945648748859483">"Koristite zaključavanje ekrana da se prijavite u aplikaciju <xliff:g id="APP_NAME">%1$s</xliff:g> s korisničkim imenom <xliff:g id="USERNAME">%2$s</xliff:g>"</string> - <string name="get_dialog_title_use_sign_in_for" msgid="790049858275131785">"Koristiti prijavu za aplikaciju <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string> - <string name="get_dialog_title_unlock_options_for" msgid="7605568190597632433">"Otključati opcije prijave za aplikaciju <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string> + <string name="get_dialog_title_use_passkey_for" msgid="479261099705979148">"Koristite sačuvani pristupni ključ za aplikaciju <xliff:g id="APP_NAME">%1$s</xliff:g>"</string> + <string name="get_dialog_title_use_password_for" msgid="688557784207167647">"Koristite sačuvanu lozinku za aplikaciju <xliff:g id="APP_NAME">%1$s</xliff:g>"</string> + <string name="get_dialog_title_use_sign_in_for" msgid="4233553937542583226">"Koristite račun za aplikaciju <xliff:g id="APP_NAME">%1$s</xliff:g>"</string> + <!-- no translation found for get_dialog_description_single_tap (2797059565126030879) --> + <skip /> + <string name="get_dialog_title_unlock_options_for" msgid="7096423827682163270">"Otključajte načine prijave za aplikaciju <xliff:g id="APP_NAME">%1$s</xliff:g>"</string> <string name="get_dialog_title_choose_passkey_for" msgid="9175997688078538490">"Odaberite sačuvani pristupni ključ za aplikaciju <xliff:g id="APP_NAME">%1$s</xliff:g>"</string> <string name="get_dialog_title_choose_password_for" msgid="1724435823820819221">"Odaberite sačuvanu lozinku za aplikaciju <xliff:g id="APP_NAME">%1$s</xliff:g>"</string> <string name="get_dialog_title_choose_saved_sign_in_for" msgid="2420298653461652728">"Odaberite sačuvanu prijavu za aplikaciju <xliff:g id="APP_NAME">%1$s</xliff:g>"</string> - <string name="get_dialog_title_choose_sign_in_for" msgid="3048870756117876514">"Odaberite prijavu za aplikaciju <xliff:g id="APP_NAME">%1$s</xliff:g>"</string> + <string name="get_dialog_title_choose_sign_in_for" msgid="645728947702442421">"Odaberite račun za aplikaciju <xliff:g id="APP_NAME">%1$s</xliff:g>"</string> <string name="get_dialog_title_choose_option_for" msgid="4976380044745029107">"Odabrati opciju za aplikaciju <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string> <string name="get_dialog_title_use_info_on" msgid="8863708099535435146">"Koristiti ove informacije u aplikaciji <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string> <string name="get_dialog_use_saved_passkey_for" msgid="4618100798664888512">"Prijavite se na drugi način"</string> diff --git a/packages/CredentialManager/res/values-ca/strings.xml b/packages/CredentialManager/res/values-ca/strings.xml index 28762e75ac71..0f96a9cd6629 100644 --- a/packages/CredentialManager/res/values-ca/strings.xml +++ b/packages/CredentialManager/res/values-ca/strings.xml @@ -42,9 +42,6 @@ <string name="choose_create_option_passkey_title" msgid="8762295821604276511">"Vols crear una clau d\'accés per iniciar la sessió a <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string> <string name="choose_create_option_password_title" msgid="4481366993598649224">"Vols desar la contrasenya per iniciar la sessió a <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string> <string name="choose_create_option_sign_in_title" msgid="7092914088455358079">"Vols desar la informació d\'inici de sessió per a <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string> - <string name="choose_create_single_tap_passkey_title" msgid="3872793514041774218">"Vols fer servir el bloqueig de pantalla per crear una clau d\'accés per a <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string> - <string name="choose_create_single_tap_password_title" msgid="5231871886818921622">"Vols fer servir el bloqueig de pantalla per crear una contrasenya per a <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string> - <string name="choose_create_single_tap_sign_in_title" msgid="256498714574099587">"Vols fer servir el bloqueig de pantalla per desar la informació d\'inici de sessió de <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string> <string name="passkey" msgid="632353688396759522">"clau d\'accés"</string> <string name="password" msgid="6738570945182936667">"contrasenya"</string> <string name="passkeys" msgid="5733880786866559847">"claus d\'accés"</string> @@ -71,15 +68,16 @@ <string name="accessibility_back_arrow_button" msgid="3233198183497842492">"Torna a la pàgina anterior"</string> <string name="accessibility_close_button" msgid="1163435587545377687">"Tanca"</string> <string name="accessibility_snackbar_dismiss" msgid="3456598374801836120">"Ignora"</string> - <string name="get_dialog_title_use_passkey_for" msgid="6236608872708021767">"Vols utilitzar la clau d\'accés desada per a <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string> - <string name="get_dialog_title_use_password_for" msgid="625828023234318484">"Vols utilitzar la contrasenya desada per a <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string> - <string name="get_dialog_title_single_tap_for" msgid="2057945648748859483">"Utilitza el bloqueig de pantalla per iniciar sessió a <xliff:g id="APP_NAME">%1$s</xliff:g> amb <xliff:g id="USERNAME">%2$s</xliff:g>"</string> - <string name="get_dialog_title_use_sign_in_for" msgid="790049858275131785">"Vols utilitzar el teu inici de sessió per a <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string> - <string name="get_dialog_title_unlock_options_for" msgid="7605568190597632433">"Vols desbloquejar les opcions d\'inici de sessió per a <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string> + <string name="get_dialog_title_use_passkey_for" msgid="479261099705979148">"Utilitza la clau d\'accés desada per a <xliff:g id="APP_NAME">%1$s</xliff:g>"</string> + <string name="get_dialog_title_use_password_for" msgid="688557784207167647">"Utilitza la contrasenya desada per a <xliff:g id="APP_NAME">%1$s</xliff:g>"</string> + <string name="get_dialog_title_use_sign_in_for" msgid="4233553937542583226">"Utilitza el teu compte per a <xliff:g id="APP_NAME">%1$s</xliff:g>"</string> + <!-- no translation found for get_dialog_description_single_tap (2797059565126030879) --> + <skip /> + <string name="get_dialog_title_unlock_options_for" msgid="7096423827682163270">"Desbloqueja les opcions d\'inici de sessió per a <xliff:g id="APP_NAME">%1$s</xliff:g>"</string> <string name="get_dialog_title_choose_passkey_for" msgid="9175997688078538490">"Tria una clau d\'accés desada per a <xliff:g id="APP_NAME">%1$s</xliff:g>"</string> <string name="get_dialog_title_choose_password_for" msgid="1724435823820819221">"Tria una clau d\'accés desada per a <xliff:g id="APP_NAME">%1$s</xliff:g>"</string> <string name="get_dialog_title_choose_saved_sign_in_for" msgid="2420298653461652728">"Tria un inici de sessió desat per a <xliff:g id="APP_NAME">%1$s</xliff:g>"</string> - <string name="get_dialog_title_choose_sign_in_for" msgid="3048870756117876514">"Tria un inici de sessió per a <xliff:g id="APP_NAME">%1$s</xliff:g>"</string> + <string name="get_dialog_title_choose_sign_in_for" msgid="645728947702442421">"Selecciona un compte per a <xliff:g id="APP_NAME">%1$s</xliff:g>"</string> <string name="get_dialog_title_choose_option_for" msgid="4976380044745029107">"Vols triar una opció per a <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string> <string name="get_dialog_title_use_info_on" msgid="8863708099535435146">"Vols utilitzar aquesta informació a <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string> <string name="get_dialog_use_saved_passkey_for" msgid="4618100798664888512">"Inicia la sessió d\'una altra manera"</string> diff --git a/packages/CredentialManager/res/values-cs/strings.xml b/packages/CredentialManager/res/values-cs/strings.xml index a3ff390a12b5..64f52cdca5dd 100644 --- a/packages/CredentialManager/res/values-cs/strings.xml +++ b/packages/CredentialManager/res/values-cs/strings.xml @@ -42,9 +42,6 @@ <string name="choose_create_option_passkey_title" msgid="8762295821604276511">"Vytvořit přístupový klíč k přihlašování do aplikace <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string> <string name="choose_create_option_password_title" msgid="4481366993598649224">"Uložit heslo k přihlašování do aplikace <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string> <string name="choose_create_option_sign_in_title" msgid="7092914088455358079">"Uložit přihlašovací údaje pro aplikaci <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string> - <string name="choose_create_single_tap_passkey_title" msgid="3872793514041774218">"Chcete pomocí zámku obrazovky vytvořit přístupový klíč pro aplikaci <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string> - <string name="choose_create_single_tap_password_title" msgid="5231871886818921622">"Chcete pomocí zámku obrazovky vytvořit heslo pro aplikaci <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string> - <string name="choose_create_single_tap_sign_in_title" msgid="256498714574099587">"Chcete pomocí zámku obrazovky uložit přihlašovací údaje pro aplikaci <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string> <string name="passkey" msgid="632353688396759522">"přístupový klíč"</string> <string name="password" msgid="6738570945182936667">"heslo"</string> <string name="passkeys" msgid="5733880786866559847">"přístupové klíče"</string> @@ -71,15 +68,16 @@ <string name="accessibility_back_arrow_button" msgid="3233198183497842492">"Zpět na předchozí stránku"</string> <string name="accessibility_close_button" msgid="1163435587545377687">"Zavřít"</string> <string name="accessibility_snackbar_dismiss" msgid="3456598374801836120">"Zavřít"</string> - <string name="get_dialog_title_use_passkey_for" msgid="6236608872708021767">"Použít uložený přístupový klíč pro aplikaci <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string> - <string name="get_dialog_title_use_password_for" msgid="625828023234318484">"Použít pro aplikaci <xliff:g id="APP_NAME">%1$s</xliff:g> uložené heslo?"</string> - <string name="get_dialog_title_single_tap_for" msgid="2057945648748859483">"Přihlašovat se do aplikace <xliff:g id="APP_NAME">%1$s</xliff:g> uživatelským jménem <xliff:g id="USERNAME">%2$s</xliff:g> pomocí zámku obrazovky"</string> - <string name="get_dialog_title_use_sign_in_for" msgid="790049858275131785">"Použít přihlášení pro <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string> - <string name="get_dialog_title_unlock_options_for" msgid="7605568190597632433">"Odemknout možnosti přihlášení pro aplikaci <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string> + <string name="get_dialog_title_use_passkey_for" msgid="479261099705979148">"Použijte pro aplikaci <xliff:g id="APP_NAME">%1$s</xliff:g> uložený přístupový klíč"</string> + <string name="get_dialog_title_use_password_for" msgid="688557784207167647">"Použijte pro aplikaci <xliff:g id="APP_NAME">%1$s</xliff:g> uložené heslo"</string> + <string name="get_dialog_title_use_sign_in_for" msgid="4233553937542583226">"Použijte pro aplikaci <xliff:g id="APP_NAME">%1$s</xliff:g> svůj účet"</string> + <!-- no translation found for get_dialog_description_single_tap (2797059565126030879) --> + <skip /> + <string name="get_dialog_title_unlock_options_for" msgid="7096423827682163270">"Odemkněte možnosti přihlášení pro aplikaci <xliff:g id="APP_NAME">%1$s</xliff:g>"</string> <string name="get_dialog_title_choose_passkey_for" msgid="9175997688078538490">"Vyberte uložený přístupový klíč pro aplikaci <xliff:g id="APP_NAME">%1$s</xliff:g>"</string> <string name="get_dialog_title_choose_password_for" msgid="1724435823820819221">"Vyberte uložené heslo pro aplikaci <xliff:g id="APP_NAME">%1$s</xliff:g>"</string> <string name="get_dialog_title_choose_saved_sign_in_for" msgid="2420298653461652728">"Vyberte uložené přihlášení pro aplikaci <xliff:g id="APP_NAME">%1$s</xliff:g>"</string> - <string name="get_dialog_title_choose_sign_in_for" msgid="3048870756117876514">"Vyberte přihlášení pro <xliff:g id="APP_NAME">%1$s</xliff:g>"</string> + <string name="get_dialog_title_choose_sign_in_for" msgid="645728947702442421">"Vyberte účet pro aplikaci <xliff:g id="APP_NAME">%1$s</xliff:g>"</string> <string name="get_dialog_title_choose_option_for" msgid="4976380044745029107">"Vybrat možnost pro aplikaci <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string> <string name="get_dialog_title_use_info_on" msgid="8863708099535435146">"Použít tyto informace na <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string> <string name="get_dialog_use_saved_passkey_for" msgid="4618100798664888512">"Přihlásit se jinak"</string> diff --git a/packages/CredentialManager/res/values-da/strings.xml b/packages/CredentialManager/res/values-da/strings.xml index b61b81c646d4..14e68a1f318d 100644 --- a/packages/CredentialManager/res/values-da/strings.xml +++ b/packages/CredentialManager/res/values-da/strings.xml @@ -42,9 +42,6 @@ <string name="choose_create_option_passkey_title" msgid="8762295821604276511">"Vil du oprette en adgangsnøgle for at logge ind på <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string> <string name="choose_create_option_password_title" msgid="4481366993598649224">"Vil du gemme adgangskoden for at logge ind på <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string> <string name="choose_create_option_sign_in_title" msgid="7092914088455358079">"Vil du gemme loginoplysningerne til <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string> - <string name="choose_create_single_tap_passkey_title" msgid="3872793514041774218">"Vil du bruge din skærmlås til at oprette en adgangsnøgle til <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string> - <string name="choose_create_single_tap_password_title" msgid="5231871886818921622">"Vil du bruge din skærmlås til at oprette en adgangskode til <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string> - <string name="choose_create_single_tap_sign_in_title" msgid="256498714574099587">"Vil du bruge din skærmlås til at gemme loginoplysningerne til <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string> <string name="passkey" msgid="632353688396759522">"adgangsnøgle"</string> <string name="password" msgid="6738570945182936667">"adgangskode"</string> <string name="passkeys" msgid="5733880786866559847">"adgangsnøgler"</string> @@ -71,15 +68,16 @@ <string name="accessibility_back_arrow_button" msgid="3233198183497842492">"Gå tilbage til den forrige side"</string> <string name="accessibility_close_button" msgid="1163435587545377687">"Luk"</string> <string name="accessibility_snackbar_dismiss" msgid="3456598374801836120">"Luk"</string> - <string name="get_dialog_title_use_passkey_for" msgid="6236608872708021767">"Vil du bruge din gemte adgangsnøgle til <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string> - <string name="get_dialog_title_use_password_for" msgid="625828023234318484">"Vil du bruge din gemte adgangskode til <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string> - <string name="get_dialog_title_single_tap_for" msgid="2057945648748859483">"Brug din skærmlås til at logge ind på <xliff:g id="APP_NAME">%1$s</xliff:g> med <xliff:g id="USERNAME">%2$s</xliff:g>"</string> - <string name="get_dialog_title_use_sign_in_for" msgid="790049858275131785">"Vil du bruge dine loginoplysninger til <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string> - <string name="get_dialog_title_unlock_options_for" msgid="7605568190597632433">"Vil du låse enheden op for at se loginmetoder for <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string> + <string name="get_dialog_title_use_passkey_for" msgid="479261099705979148">"Brug din gemte adgangsnøgle til <xliff:g id="APP_NAME">%1$s</xliff:g>"</string> + <string name="get_dialog_title_use_password_for" msgid="688557784207167647">"Brug din gemte adgangskode til <xliff:g id="APP_NAME">%1$s</xliff:g>"</string> + <string name="get_dialog_title_use_sign_in_for" msgid="4233553937542583226">"Brug din konto til <xliff:g id="APP_NAME">%1$s</xliff:g>"</string> + <!-- no translation found for get_dialog_description_single_tap (2797059565126030879) --> + <skip /> + <string name="get_dialog_title_unlock_options_for" msgid="7096423827682163270">"Lås loginmetoder for <xliff:g id="APP_NAME">%1$s</xliff:g> op"</string> <string name="get_dialog_title_choose_passkey_for" msgid="9175997688078538490">"Vælg en gemt adgangsnøgle til <xliff:g id="APP_NAME">%1$s</xliff:g>"</string> <string name="get_dialog_title_choose_password_for" msgid="1724435823820819221">"Vælg en gemt adgangskode til <xliff:g id="APP_NAME">%1$s</xliff:g>"</string> <string name="get_dialog_title_choose_saved_sign_in_for" msgid="2420298653461652728">"Vælg en gemt loginmetode til <xliff:g id="APP_NAME">%1$s</xliff:g>"</string> - <string name="get_dialog_title_choose_sign_in_for" msgid="3048870756117876514">"Vælg loginoplysninger til <xliff:g id="APP_NAME">%1$s</xliff:g>"</string> + <string name="get_dialog_title_choose_sign_in_for" msgid="645728947702442421">"Vælg en konto til <xliff:g id="APP_NAME">%1$s</xliff:g>"</string> <string name="get_dialog_title_choose_option_for" msgid="4976380044745029107">"Vil du vælge en mulighed for <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string> <string name="get_dialog_title_use_info_on" msgid="8863708099535435146">"Vil du bruge disse oplysninger i <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string> <string name="get_dialog_use_saved_passkey_for" msgid="4618100798664888512">"Log ind på en anden måde"</string> diff --git a/packages/CredentialManager/res/values-de/strings.xml b/packages/CredentialManager/res/values-de/strings.xml index 98974439c2da..fbcdc94fb22a 100644 --- a/packages/CredentialManager/res/values-de/strings.xml +++ b/packages/CredentialManager/res/values-de/strings.xml @@ -42,9 +42,6 @@ <string name="choose_create_option_passkey_title" msgid="8762295821604276511">"Passkey zur Anmeldung in <xliff:g id="APP_NAME">%1$s</xliff:g> erstellen?"</string> <string name="choose_create_option_password_title" msgid="4481366993598649224">"Passwort zur Anmeldung in <xliff:g id="APP_NAME">%1$s</xliff:g> speichern?"</string> <string name="choose_create_option_sign_in_title" msgid="7092914088455358079">"Anmeldedaten für <xliff:g id="APP_NAME">%1$s</xliff:g> speichern?"</string> - <string name="choose_create_single_tap_passkey_title" msgid="3872793514041774218">"Displaysperre verwenden, um einen Passkey für <xliff:g id="APP_NAME">%1$s</xliff:g> zu erstellen?"</string> - <string name="choose_create_single_tap_password_title" msgid="5231871886818921622">"Displaysperre verwenden, um ein Passwort für <xliff:g id="APP_NAME">%1$s</xliff:g> zu erstellen?"</string> - <string name="choose_create_single_tap_sign_in_title" msgid="256498714574099587">"Displaysperre verwenden, um Anmeldedaten für <xliff:g id="APP_NAME">%1$s</xliff:g> zu speichern?"</string> <string name="passkey" msgid="632353688396759522">"Passkey"</string> <string name="password" msgid="6738570945182936667">"Passwort"</string> <string name="passkeys" msgid="5733880786866559847">"Passkeys"</string> @@ -71,15 +68,16 @@ <string name="accessibility_back_arrow_button" msgid="3233198183497842492">"Zurück zur vorherigen Seite"</string> <string name="accessibility_close_button" msgid="1163435587545377687">"Schließen"</string> <string name="accessibility_snackbar_dismiss" msgid="3456598374801836120">"Schließen"</string> - <string name="get_dialog_title_use_passkey_for" msgid="6236608872708021767">"Gespeicherten Passkey für <xliff:g id="APP_NAME">%1$s</xliff:g> verwenden?"</string> - <string name="get_dialog_title_use_password_for" msgid="625828023234318484">"Soll dein gespeichertes Passwort für <xliff:g id="APP_NAME">%1$s</xliff:g> verwendet werden?"</string> - <string name="get_dialog_title_single_tap_for" msgid="2057945648748859483">"Du kannst die Displaysperre verwenden, um dich in <xliff:g id="APP_NAME">%1$s</xliff:g> als <xliff:g id="USERNAME">%2$s</xliff:g> anzumelden"</string> - <string name="get_dialog_title_use_sign_in_for" msgid="790049858275131785">"Anmeldedaten für <xliff:g id="APP_NAME">%1$s</xliff:g> verwenden?"</string> - <string name="get_dialog_title_unlock_options_for" msgid="7605568190597632433">"Anmeldeoptionen für <xliff:g id="APP_NAME">%1$s</xliff:g> freischalten?"</string> + <string name="get_dialog_title_use_passkey_for" msgid="479261099705979148">"Gespeicherten Passkey für <xliff:g id="APP_NAME">%1$s</xliff:g> verwenden"</string> + <string name="get_dialog_title_use_password_for" msgid="688557784207167647">"Gespeichertes Passwort für <xliff:g id="APP_NAME">%1$s</xliff:g> verwenden"</string> + <string name="get_dialog_title_use_sign_in_for" msgid="4233553937542583226">"Dein Konto für <xliff:g id="APP_NAME">%1$s</xliff:g> verwenden"</string> + <!-- no translation found for get_dialog_description_single_tap (2797059565126030879) --> + <skip /> + <string name="get_dialog_title_unlock_options_for" msgid="7096423827682163270">"Anmeldeoptionen für <xliff:g id="APP_NAME">%1$s</xliff:g> freischalten"</string> <string name="get_dialog_title_choose_passkey_for" msgid="9175997688078538490">"Einen gespeicherten Passkey für <xliff:g id="APP_NAME">%1$s</xliff:g> auswählen"</string> <string name="get_dialog_title_choose_password_for" msgid="1724435823820819221">"Ein gespeichertes Passwort für <xliff:g id="APP_NAME">%1$s</xliff:g> auswählen"</string> <string name="get_dialog_title_choose_saved_sign_in_for" msgid="2420298653461652728">"Gespeicherte Anmeldedaten für <xliff:g id="APP_NAME">%1$s</xliff:g> auswählen"</string> - <string name="get_dialog_title_choose_sign_in_for" msgid="3048870756117876514">"Anmeldedaten für <xliff:g id="APP_NAME">%1$s</xliff:g> auswählen"</string> + <string name="get_dialog_title_choose_sign_in_for" msgid="645728947702442421">"Konto für <xliff:g id="APP_NAME">%1$s</xliff:g> auswählen"</string> <string name="get_dialog_title_choose_option_for" msgid="4976380044745029107">"Option für <xliff:g id="APP_NAME">%1$s</xliff:g> auswählen?"</string> <string name="get_dialog_title_use_info_on" msgid="8863708099535435146">"Diese Infos für <xliff:g id="APP_NAME">%1$s</xliff:g> verwenden?"</string> <string name="get_dialog_use_saved_passkey_for" msgid="4618100798664888512">"Andere Anmeldeoption auswählen"</string> diff --git a/packages/CredentialManager/res/values-el/strings.xml b/packages/CredentialManager/res/values-el/strings.xml index b1c3506a1b4f..f77581de47ad 100644 --- a/packages/CredentialManager/res/values-el/strings.xml +++ b/packages/CredentialManager/res/values-el/strings.xml @@ -42,9 +42,6 @@ <string name="choose_create_option_passkey_title" msgid="8762295821604276511">"Δημιουργία κλειδιού πρόσβασης για σύνδεση στην εφαρμογή <xliff:g id="APP_NAME">%1$s</xliff:g>;"</string> <string name="choose_create_option_password_title" msgid="4481366993598649224">"Αποθήκευση κωδικού πρόσβασης για σύνδεση στην εφαρμογή <xliff:g id="APP_NAME">%1$s</xliff:g>;"</string> <string name="choose_create_option_sign_in_title" msgid="7092914088455358079">"Αποθήκευση πληροφοριών σύνδεσης για την εφαρμογή <xliff:g id="APP_NAME">%1$s</xliff:g>;"</string> - <string name="choose_create_single_tap_passkey_title" msgid="3872793514041774218">"Θέλετε να χρησιμοποιήσετε το κλείδωμα οθόνης για τη δημιουργία ενός κλειδιού πρόσβασης για την εφαρμογή <xliff:g id="APP_NAME">%1$s</xliff:g>;"</string> - <string name="choose_create_single_tap_password_title" msgid="5231871886818921622">"Θέλετε να χρησιμοποιήσετε το κλείδωμα οθόνης για τη δημιουργία ενός κωδικού πρόσβασης για την εφαρμογή <xliff:g id="APP_NAME">%1$s</xliff:g>;"</string> - <string name="choose_create_single_tap_sign_in_title" msgid="256498714574099587">"Θέλετε να χρησιμοποιήσετε το κλείδωμα οθόνης για την αποθήκευση πληροφοριών σύνδεσης για την εφαρμογή <xliff:g id="APP_NAME">%1$s</xliff:g>;"</string> <string name="passkey" msgid="632353688396759522">"κλειδί πρόσβασης"</string> <string name="password" msgid="6738570945182936667">"κωδικός πρόσβασης"</string> <string name="passkeys" msgid="5733880786866559847">"κλειδιά πρόσβασης"</string> @@ -71,15 +68,16 @@ <string name="accessibility_back_arrow_button" msgid="3233198183497842492">"Επιστροφή στην προηγούμενη σελίδα"</string> <string name="accessibility_close_button" msgid="1163435587545377687">"Κλείσιμο"</string> <string name="accessibility_snackbar_dismiss" msgid="3456598374801836120">"Παράβλεψη"</string> - <string name="get_dialog_title_use_passkey_for" msgid="6236608872708021767">"Να χρησιμοποιηθεί το αποθηκευμένο κλειδί πρόσβασης για την εφαρμογή <xliff:g id="APP_NAME">%1$s</xliff:g>;"</string> - <string name="get_dialog_title_use_password_for" msgid="625828023234318484">"Χρήση του αποθηκευμένου κωδικού πρόσβασης για την εφαρμογή <xliff:g id="APP_NAME">%1$s</xliff:g>;"</string> - <string name="get_dialog_title_single_tap_for" msgid="2057945648748859483">"Χρησιμοποιήστε το κλείδωμα οθόνης για να συνδεθείτε στην εφαρμογή <xliff:g id="APP_NAME">%1$s</xliff:g> με το όνομα χρήστη <xliff:g id="USERNAME">%2$s</xliff:g>"</string> - <string name="get_dialog_title_use_sign_in_for" msgid="790049858275131785">"Χρήση της σύνδεσής σας για την εφαρμογή <xliff:g id="APP_NAME">%1$s</xliff:g>;"</string> - <string name="get_dialog_title_unlock_options_for" msgid="7605568190597632433">"Ξεκλείδωμα των επιλογών σύνδεσης για την εφαρμογή <xliff:g id="APP_NAME">%1$s</xliff:g>;"</string> + <string name="get_dialog_title_use_passkey_for" msgid="479261099705979148">"Χρήση του αποθηκευμένου κλειδιού πρόσβασης για την εφαρμογή <xliff:g id="APP_NAME">%1$s</xliff:g>"</string> + <string name="get_dialog_title_use_password_for" msgid="688557784207167647">"Χρήση του αποθηκευμένου κωδικού πρόσβασης για την εφαρμογή <xliff:g id="APP_NAME">%1$s</xliff:g>"</string> + <string name="get_dialog_title_use_sign_in_for" msgid="4233553937542583226">"Χρήση του λογαριασμού για την εφαρμογή <xliff:g id="APP_NAME">%1$s</xliff:g>"</string> + <!-- no translation found for get_dialog_description_single_tap (2797059565126030879) --> + <skip /> + <string name="get_dialog_title_unlock_options_for" msgid="7096423827682163270">"Ξεκλείδωμα των επιλογών σύνδεσης για την εφαρμογή <xliff:g id="APP_NAME">%1$s</xliff:g>"</string> <string name="get_dialog_title_choose_passkey_for" msgid="9175997688078538490">"Επιλογή αποθηκευμένου κλειδιού πρόσβασης για την εφαρμογή <xliff:g id="APP_NAME">%1$s</xliff:g>"</string> <string name="get_dialog_title_choose_password_for" msgid="1724435823820819221">"Επιλογή αποθηκευμένου κωδικού πρόσβασης για την εφαρμογή <xliff:g id="APP_NAME">%1$s</xliff:g>"</string> <string name="get_dialog_title_choose_saved_sign_in_for" msgid="2420298653461652728">"Επιλογή αποθηκευμένων στοιχείων σύνδεσης για την εφαρμογή <xliff:g id="APP_NAME">%1$s</xliff:g>"</string> - <string name="get_dialog_title_choose_sign_in_for" msgid="3048870756117876514">"Επιλέξτε μια σύνδεση για την εφαρμογή <xliff:g id="APP_NAME">%1$s</xliff:g>"</string> + <string name="get_dialog_title_choose_sign_in_for" msgid="645728947702442421">"Επιλογή ενός λογαριασμού για την εφαρμογή <xliff:g id="APP_NAME">%1$s</xliff:g>"</string> <string name="get_dialog_title_choose_option_for" msgid="4976380044745029107">"Επιλογή ενέργειας για την εφαρμογή <xliff:g id="APP_NAME">%1$s</xliff:g>;"</string> <string name="get_dialog_title_use_info_on" msgid="8863708099535435146">"Να χρησιμοποιηθούν αυτές οι πληροφορίες στην εφαρμογή <xliff:g id="APP_NAME">%1$s</xliff:g>;"</string> <string name="get_dialog_use_saved_passkey_for" msgid="4618100798664888512">"Σύνδεση με άλλον τρόπο"</string> diff --git a/packages/CredentialManager/res/values-en-rAU/strings.xml b/packages/CredentialManager/res/values-en-rAU/strings.xml index 1afd5f6d7d6e..cc55b664323a 100644 --- a/packages/CredentialManager/res/values-en-rAU/strings.xml +++ b/packages/CredentialManager/res/values-en-rAU/strings.xml @@ -42,9 +42,6 @@ <string name="choose_create_option_passkey_title" msgid="8762295821604276511">"Create passkey to sign in to <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string> <string name="choose_create_option_password_title" msgid="4481366993598649224">"Save password to sign in to <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string> <string name="choose_create_option_sign_in_title" msgid="7092914088455358079">"Save sign-in info for <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string> - <string name="choose_create_single_tap_passkey_title" msgid="3872793514041774218">"Use your screen lock to create a passkey for <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string> - <string name="choose_create_single_tap_password_title" msgid="5231871886818921622">"Use your screen lock to create a password for <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string> - <string name="choose_create_single_tap_sign_in_title" msgid="256498714574099587">"Use your screen lock to save sign-in info for <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string> <string name="passkey" msgid="632353688396759522">"passkey"</string> <string name="password" msgid="6738570945182936667">"password"</string> <string name="passkeys" msgid="5733880786866559847">"passkeys"</string> @@ -71,15 +68,16 @@ <string name="accessibility_back_arrow_button" msgid="3233198183497842492">"Go back to the previous page"</string> <string name="accessibility_close_button" msgid="1163435587545377687">"Close"</string> <string name="accessibility_snackbar_dismiss" msgid="3456598374801836120">"Dismiss"</string> - <string name="get_dialog_title_use_passkey_for" msgid="6236608872708021767">"Use your saved passkey for <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string> - <string name="get_dialog_title_use_password_for" msgid="625828023234318484">"Use your saved password for <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string> - <string name="get_dialog_title_single_tap_for" msgid="2057945648748859483">"Use your screen lock to sign in to <xliff:g id="APP_NAME">%1$s</xliff:g> with <xliff:g id="USERNAME">%2$s</xliff:g>"</string> - <string name="get_dialog_title_use_sign_in_for" msgid="790049858275131785">"Use your sign-in for <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string> - <string name="get_dialog_title_unlock_options_for" msgid="7605568190597632433">"Unlock sign-in options for <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string> + <string name="get_dialog_title_use_passkey_for" msgid="479261099705979148">"Use your saved passkey for <xliff:g id="APP_NAME">%1$s</xliff:g>"</string> + <string name="get_dialog_title_use_password_for" msgid="688557784207167647">"Use your saved password for <xliff:g id="APP_NAME">%1$s</xliff:g>"</string> + <string name="get_dialog_title_use_sign_in_for" msgid="4233553937542583226">"Use your account for <xliff:g id="APP_NAME">%1$s</xliff:g>"</string> + <!-- no translation found for get_dialog_description_single_tap (2797059565126030879) --> + <skip /> + <string name="get_dialog_title_unlock_options_for" msgid="7096423827682163270">"Unlock sign-in options for <xliff:g id="APP_NAME">%1$s</xliff:g>"</string> <string name="get_dialog_title_choose_passkey_for" msgid="9175997688078538490">"Choose a saved passkey for <xliff:g id="APP_NAME">%1$s</xliff:g>"</string> <string name="get_dialog_title_choose_password_for" msgid="1724435823820819221">"Choose a saved password for <xliff:g id="APP_NAME">%1$s</xliff:g>"</string> <string name="get_dialog_title_choose_saved_sign_in_for" msgid="2420298653461652728">"Choose a saved sign-in for <xliff:g id="APP_NAME">%1$s</xliff:g>"</string> - <string name="get_dialog_title_choose_sign_in_for" msgid="3048870756117876514">"Choose a sign-in for <xliff:g id="APP_NAME">%1$s</xliff:g>"</string> + <string name="get_dialog_title_choose_sign_in_for" msgid="645728947702442421">"Choose an account for <xliff:g id="APP_NAME">%1$s</xliff:g>"</string> <string name="get_dialog_title_choose_option_for" msgid="4976380044745029107">"Choose an option for <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string> <string name="get_dialog_title_use_info_on" msgid="8863708099535435146">"Use this info for <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string> <string name="get_dialog_use_saved_passkey_for" msgid="4618100798664888512">"Sign in another way"</string> diff --git a/packages/CredentialManager/res/values-en-rCA/strings.xml b/packages/CredentialManager/res/values-en-rCA/strings.xml index 3fb3d55e655d..f5cb357eb812 100644 --- a/packages/CredentialManager/res/values-en-rCA/strings.xml +++ b/packages/CredentialManager/res/values-en-rCA/strings.xml @@ -42,9 +42,6 @@ <string name="choose_create_option_passkey_title" msgid="8762295821604276511">"Create passkey to sign in to <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string> <string name="choose_create_option_password_title" msgid="4481366993598649224">"Save password to sign in to <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string> <string name="choose_create_option_sign_in_title" msgid="7092914088455358079">"Save sign-in info for <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string> - <string name="choose_create_single_tap_passkey_title" msgid="3872793514041774218">"Use your screen lock to create a passkey for <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string> - <string name="choose_create_single_tap_password_title" msgid="5231871886818921622">"Use your screen lock to create a password for <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string> - <string name="choose_create_single_tap_sign_in_title" msgid="256498714574099587">"Use your screen lock to save sign in info for <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string> <string name="passkey" msgid="632353688396759522">"passkey"</string> <string name="password" msgid="6738570945182936667">"password"</string> <string name="passkeys" msgid="5733880786866559847">"passkeys"</string> @@ -71,15 +68,15 @@ <string name="accessibility_back_arrow_button" msgid="3233198183497842492">"Go back to the previous page"</string> <string name="accessibility_close_button" msgid="1163435587545377687">"Close"</string> <string name="accessibility_snackbar_dismiss" msgid="3456598374801836120">"Dismiss"</string> - <string name="get_dialog_title_use_passkey_for" msgid="6236608872708021767">"Use your saved passkey for <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string> - <string name="get_dialog_title_use_password_for" msgid="625828023234318484">"Use your saved password for <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string> - <string name="get_dialog_title_single_tap_for" msgid="2057945648748859483">"Use your screen lock to sign in to <xliff:g id="APP_NAME">%1$s</xliff:g> with <xliff:g id="USERNAME">%2$s</xliff:g>"</string> - <string name="get_dialog_title_use_sign_in_for" msgid="790049858275131785">"Use your sign-in for <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string> - <string name="get_dialog_title_unlock_options_for" msgid="7605568190597632433">"Unlock sign-in options for <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string> + <string name="get_dialog_title_use_passkey_for" msgid="479261099705979148">"Use your saved passkey for <xliff:g id="APP_NAME">%1$s</xliff:g>"</string> + <string name="get_dialog_title_use_password_for" msgid="688557784207167647">"Use your saved password for <xliff:g id="APP_NAME">%1$s</xliff:g>"</string> + <string name="get_dialog_title_use_sign_in_for" msgid="4233553937542583226">"Use your account for <xliff:g id="APP_NAME">%1$s</xliff:g>"</string> + <string name="get_dialog_description_single_tap" msgid="2797059565126030879">"Use your screen lock to sign in to <xliff:g id="APP_NAME">%1$s</xliff:g> with <xliff:g id="USERNAME">%2$s</xliff:g>"</string> + <string name="get_dialog_title_unlock_options_for" msgid="7096423827682163270">"Unlock sign-in options for <xliff:g id="APP_NAME">%1$s</xliff:g>"</string> <string name="get_dialog_title_choose_passkey_for" msgid="9175997688078538490">"Choose a saved passkey for <xliff:g id="APP_NAME">%1$s</xliff:g>"</string> <string name="get_dialog_title_choose_password_for" msgid="1724435823820819221">"Choose a saved password for <xliff:g id="APP_NAME">%1$s</xliff:g>"</string> <string name="get_dialog_title_choose_saved_sign_in_for" msgid="2420298653461652728">"Choose a saved sign-in for <xliff:g id="APP_NAME">%1$s</xliff:g>"</string> - <string name="get_dialog_title_choose_sign_in_for" msgid="3048870756117876514">"Choose a sign-in for <xliff:g id="APP_NAME">%1$s</xliff:g>"</string> + <string name="get_dialog_title_choose_sign_in_for" msgid="645728947702442421">"Choose an account for <xliff:g id="APP_NAME">%1$s</xliff:g>"</string> <string name="get_dialog_title_choose_option_for" msgid="4976380044745029107">"Choose an option for <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string> <string name="get_dialog_title_use_info_on" msgid="8863708099535435146">"Use this info on <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string> <string name="get_dialog_use_saved_passkey_for" msgid="4618100798664888512">"Sign in another way"</string> diff --git a/packages/CredentialManager/res/values-en-rGB/strings.xml b/packages/CredentialManager/res/values-en-rGB/strings.xml index 1afd5f6d7d6e..cc55b664323a 100644 --- a/packages/CredentialManager/res/values-en-rGB/strings.xml +++ b/packages/CredentialManager/res/values-en-rGB/strings.xml @@ -42,9 +42,6 @@ <string name="choose_create_option_passkey_title" msgid="8762295821604276511">"Create passkey to sign in to <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string> <string name="choose_create_option_password_title" msgid="4481366993598649224">"Save password to sign in to <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string> <string name="choose_create_option_sign_in_title" msgid="7092914088455358079">"Save sign-in info for <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string> - <string name="choose_create_single_tap_passkey_title" msgid="3872793514041774218">"Use your screen lock to create a passkey for <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string> - <string name="choose_create_single_tap_password_title" msgid="5231871886818921622">"Use your screen lock to create a password for <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string> - <string name="choose_create_single_tap_sign_in_title" msgid="256498714574099587">"Use your screen lock to save sign-in info for <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string> <string name="passkey" msgid="632353688396759522">"passkey"</string> <string name="password" msgid="6738570945182936667">"password"</string> <string name="passkeys" msgid="5733880786866559847">"passkeys"</string> @@ -71,15 +68,16 @@ <string name="accessibility_back_arrow_button" msgid="3233198183497842492">"Go back to the previous page"</string> <string name="accessibility_close_button" msgid="1163435587545377687">"Close"</string> <string name="accessibility_snackbar_dismiss" msgid="3456598374801836120">"Dismiss"</string> - <string name="get_dialog_title_use_passkey_for" msgid="6236608872708021767">"Use your saved passkey for <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string> - <string name="get_dialog_title_use_password_for" msgid="625828023234318484">"Use your saved password for <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string> - <string name="get_dialog_title_single_tap_for" msgid="2057945648748859483">"Use your screen lock to sign in to <xliff:g id="APP_NAME">%1$s</xliff:g> with <xliff:g id="USERNAME">%2$s</xliff:g>"</string> - <string name="get_dialog_title_use_sign_in_for" msgid="790049858275131785">"Use your sign-in for <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string> - <string name="get_dialog_title_unlock_options_for" msgid="7605568190597632433">"Unlock sign-in options for <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string> + <string name="get_dialog_title_use_passkey_for" msgid="479261099705979148">"Use your saved passkey for <xliff:g id="APP_NAME">%1$s</xliff:g>"</string> + <string name="get_dialog_title_use_password_for" msgid="688557784207167647">"Use your saved password for <xliff:g id="APP_NAME">%1$s</xliff:g>"</string> + <string name="get_dialog_title_use_sign_in_for" msgid="4233553937542583226">"Use your account for <xliff:g id="APP_NAME">%1$s</xliff:g>"</string> + <!-- no translation found for get_dialog_description_single_tap (2797059565126030879) --> + <skip /> + <string name="get_dialog_title_unlock_options_for" msgid="7096423827682163270">"Unlock sign-in options for <xliff:g id="APP_NAME">%1$s</xliff:g>"</string> <string name="get_dialog_title_choose_passkey_for" msgid="9175997688078538490">"Choose a saved passkey for <xliff:g id="APP_NAME">%1$s</xliff:g>"</string> <string name="get_dialog_title_choose_password_for" msgid="1724435823820819221">"Choose a saved password for <xliff:g id="APP_NAME">%1$s</xliff:g>"</string> <string name="get_dialog_title_choose_saved_sign_in_for" msgid="2420298653461652728">"Choose a saved sign-in for <xliff:g id="APP_NAME">%1$s</xliff:g>"</string> - <string name="get_dialog_title_choose_sign_in_for" msgid="3048870756117876514">"Choose a sign-in for <xliff:g id="APP_NAME">%1$s</xliff:g>"</string> + <string name="get_dialog_title_choose_sign_in_for" msgid="645728947702442421">"Choose an account for <xliff:g id="APP_NAME">%1$s</xliff:g>"</string> <string name="get_dialog_title_choose_option_for" msgid="4976380044745029107">"Choose an option for <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string> <string name="get_dialog_title_use_info_on" msgid="8863708099535435146">"Use this info for <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string> <string name="get_dialog_use_saved_passkey_for" msgid="4618100798664888512">"Sign in another way"</string> diff --git a/packages/CredentialManager/res/values-en-rIN/strings.xml b/packages/CredentialManager/res/values-en-rIN/strings.xml index 1afd5f6d7d6e..cc55b664323a 100644 --- a/packages/CredentialManager/res/values-en-rIN/strings.xml +++ b/packages/CredentialManager/res/values-en-rIN/strings.xml @@ -42,9 +42,6 @@ <string name="choose_create_option_passkey_title" msgid="8762295821604276511">"Create passkey to sign in to <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string> <string name="choose_create_option_password_title" msgid="4481366993598649224">"Save password to sign in to <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string> <string name="choose_create_option_sign_in_title" msgid="7092914088455358079">"Save sign-in info for <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string> - <string name="choose_create_single_tap_passkey_title" msgid="3872793514041774218">"Use your screen lock to create a passkey for <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string> - <string name="choose_create_single_tap_password_title" msgid="5231871886818921622">"Use your screen lock to create a password for <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string> - <string name="choose_create_single_tap_sign_in_title" msgid="256498714574099587">"Use your screen lock to save sign-in info for <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string> <string name="passkey" msgid="632353688396759522">"passkey"</string> <string name="password" msgid="6738570945182936667">"password"</string> <string name="passkeys" msgid="5733880786866559847">"passkeys"</string> @@ -71,15 +68,16 @@ <string name="accessibility_back_arrow_button" msgid="3233198183497842492">"Go back to the previous page"</string> <string name="accessibility_close_button" msgid="1163435587545377687">"Close"</string> <string name="accessibility_snackbar_dismiss" msgid="3456598374801836120">"Dismiss"</string> - <string name="get_dialog_title_use_passkey_for" msgid="6236608872708021767">"Use your saved passkey for <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string> - <string name="get_dialog_title_use_password_for" msgid="625828023234318484">"Use your saved password for <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string> - <string name="get_dialog_title_single_tap_for" msgid="2057945648748859483">"Use your screen lock to sign in to <xliff:g id="APP_NAME">%1$s</xliff:g> with <xliff:g id="USERNAME">%2$s</xliff:g>"</string> - <string name="get_dialog_title_use_sign_in_for" msgid="790049858275131785">"Use your sign-in for <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string> - <string name="get_dialog_title_unlock_options_for" msgid="7605568190597632433">"Unlock sign-in options for <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string> + <string name="get_dialog_title_use_passkey_for" msgid="479261099705979148">"Use your saved passkey for <xliff:g id="APP_NAME">%1$s</xliff:g>"</string> + <string name="get_dialog_title_use_password_for" msgid="688557784207167647">"Use your saved password for <xliff:g id="APP_NAME">%1$s</xliff:g>"</string> + <string name="get_dialog_title_use_sign_in_for" msgid="4233553937542583226">"Use your account for <xliff:g id="APP_NAME">%1$s</xliff:g>"</string> + <!-- no translation found for get_dialog_description_single_tap (2797059565126030879) --> + <skip /> + <string name="get_dialog_title_unlock_options_for" msgid="7096423827682163270">"Unlock sign-in options for <xliff:g id="APP_NAME">%1$s</xliff:g>"</string> <string name="get_dialog_title_choose_passkey_for" msgid="9175997688078538490">"Choose a saved passkey for <xliff:g id="APP_NAME">%1$s</xliff:g>"</string> <string name="get_dialog_title_choose_password_for" msgid="1724435823820819221">"Choose a saved password for <xliff:g id="APP_NAME">%1$s</xliff:g>"</string> <string name="get_dialog_title_choose_saved_sign_in_for" msgid="2420298653461652728">"Choose a saved sign-in for <xliff:g id="APP_NAME">%1$s</xliff:g>"</string> - <string name="get_dialog_title_choose_sign_in_for" msgid="3048870756117876514">"Choose a sign-in for <xliff:g id="APP_NAME">%1$s</xliff:g>"</string> + <string name="get_dialog_title_choose_sign_in_for" msgid="645728947702442421">"Choose an account for <xliff:g id="APP_NAME">%1$s</xliff:g>"</string> <string name="get_dialog_title_choose_option_for" msgid="4976380044745029107">"Choose an option for <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string> <string name="get_dialog_title_use_info_on" msgid="8863708099535435146">"Use this info for <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string> <string name="get_dialog_use_saved_passkey_for" msgid="4618100798664888512">"Sign in another way"</string> diff --git a/packages/CredentialManager/res/values-en-rXC/strings.xml b/packages/CredentialManager/res/values-en-rXC/strings.xml index b642c87bf28a..9841f1949261 100644 --- a/packages/CredentialManager/res/values-en-rXC/strings.xml +++ b/packages/CredentialManager/res/values-en-rXC/strings.xml @@ -42,9 +42,6 @@ <string name="choose_create_option_passkey_title" msgid="8762295821604276511">"Create passkey to sign in to <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string> <string name="choose_create_option_password_title" msgid="4481366993598649224">"Save password to sign in to <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string> <string name="choose_create_option_sign_in_title" msgid="7092914088455358079">"Save sign-in info for <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string> - <string name="choose_create_single_tap_passkey_title" msgid="3872793514041774218">"Use your screen lock to create a passkey for <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string> - <string name="choose_create_single_tap_password_title" msgid="5231871886818921622">"Use your screen lock to create a password for <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string> - <string name="choose_create_single_tap_sign_in_title" msgid="256498714574099587">"Use your screen lock to save sign in info for <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string> <string name="passkey" msgid="632353688396759522">"passkey"</string> <string name="password" msgid="6738570945182936667">"password"</string> <string name="passkeys" msgid="5733880786866559847">"passkeys"</string> @@ -71,15 +68,15 @@ <string name="accessibility_back_arrow_button" msgid="3233198183497842492">"Go back to the previous page"</string> <string name="accessibility_close_button" msgid="1163435587545377687">"Close"</string> <string name="accessibility_snackbar_dismiss" msgid="3456598374801836120">"Dismiss"</string> - <string name="get_dialog_title_use_passkey_for" msgid="6236608872708021767">"Use your saved passkey for <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string> - <string name="get_dialog_title_use_password_for" msgid="625828023234318484">"Use your saved password for <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string> - <string name="get_dialog_title_single_tap_for" msgid="2057945648748859483">"Use your screen lock to sign in to <xliff:g id="APP_NAME">%1$s</xliff:g> with <xliff:g id="USERNAME">%2$s</xliff:g>"</string> - <string name="get_dialog_title_use_sign_in_for" msgid="790049858275131785">"Use your sign-in for <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string> - <string name="get_dialog_title_unlock_options_for" msgid="7605568190597632433">"Unlock sign-in options for <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string> + <string name="get_dialog_title_use_passkey_for" msgid="479261099705979148">"Use your saved passkey for <xliff:g id="APP_NAME">%1$s</xliff:g>"</string> + <string name="get_dialog_title_use_password_for" msgid="688557784207167647">"Use your saved password for <xliff:g id="APP_NAME">%1$s</xliff:g>"</string> + <string name="get_dialog_title_use_sign_in_for" msgid="4233553937542583226">"Use your account for <xliff:g id="APP_NAME">%1$s</xliff:g>"</string> + <string name="get_dialog_description_single_tap" msgid="2797059565126030879">"Use your screen lock to sign in to <xliff:g id="APP_NAME">%1$s</xliff:g> with <xliff:g id="USERNAME">%2$s</xliff:g>"</string> + <string name="get_dialog_title_unlock_options_for" msgid="7096423827682163270">"Unlock sign-in options for <xliff:g id="APP_NAME">%1$s</xliff:g>"</string> <string name="get_dialog_title_choose_passkey_for" msgid="9175997688078538490">"Choose a saved passkey for <xliff:g id="APP_NAME">%1$s</xliff:g>"</string> <string name="get_dialog_title_choose_password_for" msgid="1724435823820819221">"Choose a saved password for <xliff:g id="APP_NAME">%1$s</xliff:g>"</string> <string name="get_dialog_title_choose_saved_sign_in_for" msgid="2420298653461652728">"Choose a saved sign-in for <xliff:g id="APP_NAME">%1$s</xliff:g>"</string> - <string name="get_dialog_title_choose_sign_in_for" msgid="3048870756117876514">"Choose a sign-in for <xliff:g id="APP_NAME">%1$s</xliff:g>"</string> + <string name="get_dialog_title_choose_sign_in_for" msgid="645728947702442421">"Choose an account for <xliff:g id="APP_NAME">%1$s</xliff:g>"</string> <string name="get_dialog_title_choose_option_for" msgid="4976380044745029107">"Choose an option for <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string> <string name="get_dialog_title_use_info_on" msgid="8863708099535435146">"Use this info on <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string> <string name="get_dialog_use_saved_passkey_for" msgid="4618100798664888512">"Sign in another way"</string> diff --git a/packages/CredentialManager/res/values-es-rUS/strings.xml b/packages/CredentialManager/res/values-es-rUS/strings.xml index e007ab7a617c..2a190a49900f 100644 --- a/packages/CredentialManager/res/values-es-rUS/strings.xml +++ b/packages/CredentialManager/res/values-es-rUS/strings.xml @@ -42,9 +42,6 @@ <string name="choose_create_option_passkey_title" msgid="8762295821604276511">"¿Quieres crear una llave de acceso para acceder a <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string> <string name="choose_create_option_password_title" msgid="4481366993598649224">"¿Quieres guardar la contraseña para acceder a <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string> <string name="choose_create_option_sign_in_title" msgid="7092914088455358079">"¿Quieres guardar la información de acceso para <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string> - <string name="choose_create_single_tap_passkey_title" msgid="3872793514041774218">"¿Quieres usar el bloqueo de pantalla para crear una llave de acceso para <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string> - <string name="choose_create_single_tap_password_title" msgid="5231871886818921622">"¿Quieres usar el bloqueo de pantalla para crear una contraseña para <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string> - <string name="choose_create_single_tap_sign_in_title" msgid="256498714574099587">"¿Quieres usar el bloqueo de pantalla para guardar la información de acceso para <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string> <string name="passkey" msgid="632353688396759522">"llave de acceso"</string> <string name="password" msgid="6738570945182936667">"contraseña"</string> <string name="passkeys" msgid="5733880786866559847">"llaves de acceso"</string> @@ -71,15 +68,16 @@ <string name="accessibility_back_arrow_button" msgid="3233198183497842492">"Volver a la página anterior"</string> <string name="accessibility_close_button" msgid="1163435587545377687">"Cerrar"</string> <string name="accessibility_snackbar_dismiss" msgid="3456598374801836120">"Descartar"</string> - <string name="get_dialog_title_use_passkey_for" msgid="6236608872708021767">"¿Quieres usar tu llave de acceso guardada para <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string> - <string name="get_dialog_title_use_password_for" msgid="625828023234318484">"¿Quieres usar la contraseña guardada para <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string> - <string name="get_dialog_title_single_tap_for" msgid="2057945648748859483">"Usar el bloqueo de pantalla para acceder a <xliff:g id="APP_NAME">%1$s</xliff:g> con <xliff:g id="USERNAME">%2$s</xliff:g>"</string> - <string name="get_dialog_title_use_sign_in_for" msgid="790049858275131785">"¿Quieres usar tu acceso para <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string> - <string name="get_dialog_title_unlock_options_for" msgid="7605568190597632433">"¿Quieres desbloquear las opciones de acceso para <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string> + <string name="get_dialog_title_use_passkey_for" msgid="479261099705979148">"Usar la llave de acceso guardada para <xliff:g id="APP_NAME">%1$s</xliff:g>"</string> + <string name="get_dialog_title_use_password_for" msgid="688557784207167647">"Usar la contraseña guardada para <xliff:g id="APP_NAME">%1$s</xliff:g>"</string> + <string name="get_dialog_title_use_sign_in_for" msgid="4233553937542583226">"Usar tu cuenta para <xliff:g id="APP_NAME">%1$s</xliff:g>"</string> + <!-- no translation found for get_dialog_description_single_tap (2797059565126030879) --> + <skip /> + <string name="get_dialog_title_unlock_options_for" msgid="7096423827682163270">"Desbloquear las opciones para acceder para <xliff:g id="APP_NAME">%1$s</xliff:g>"</string> <string name="get_dialog_title_choose_passkey_for" msgid="9175997688078538490">"Elige una llave de acceso guardada para <xliff:g id="APP_NAME">%1$s</xliff:g>"</string> <string name="get_dialog_title_choose_password_for" msgid="1724435823820819221">"Elige una contraseña guardada para <xliff:g id="APP_NAME">%1$s</xliff:g>"</string> <string name="get_dialog_title_choose_saved_sign_in_for" msgid="2420298653461652728">"Elige un acceso guardado para <xliff:g id="APP_NAME">%1$s</xliff:g>"</string> - <string name="get_dialog_title_choose_sign_in_for" msgid="3048870756117876514">"Elige un acceso para <xliff:g id="APP_NAME">%1$s</xliff:g>"</string> + <string name="get_dialog_title_choose_sign_in_for" msgid="645728947702442421">"Elige una cuenta para <xliff:g id="APP_NAME">%1$s</xliff:g>"</string> <string name="get_dialog_title_choose_option_for" msgid="4976380044745029107">"¿Quieres una opción para <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string> <string name="get_dialog_title_use_info_on" msgid="8863708099535435146">"¿Quieres usar esta información en <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string> <string name="get_dialog_use_saved_passkey_for" msgid="4618100798664888512">"Acceder de otra forma"</string> diff --git a/packages/CredentialManager/res/values-es/strings.xml b/packages/CredentialManager/res/values-es/strings.xml index e82f33162bef..ef54dcb02d48 100644 --- a/packages/CredentialManager/res/values-es/strings.xml +++ b/packages/CredentialManager/res/values-es/strings.xml @@ -42,9 +42,6 @@ <string name="choose_create_option_passkey_title" msgid="8762295821604276511">"¿Crear llave de acceso para iniciar sesión en <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string> <string name="choose_create_option_password_title" msgid="4481366993598649224">"¿Guardar contraseña para iniciar sesión en <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string> <string name="choose_create_option_sign_in_title" msgid="7092914088455358079">"¿Guardar la información de inicio de sesión de <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string> - <string name="choose_create_single_tap_passkey_title" msgid="3872793514041774218">"¿Usar tu bloqueo de pantalla para crear una llave de acceso para <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string> - <string name="choose_create_single_tap_password_title" msgid="5231871886818921622">"¿Usar tu bloqueo de pantalla para crear una contraseña para <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string> - <string name="choose_create_single_tap_sign_in_title" msgid="256498714574099587">"¿Usar tu bloqueo de pantalla para guardar tu información de inicio de sesión para <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string> <string name="passkey" msgid="632353688396759522">"llave de acceso"</string> <string name="password" msgid="6738570945182936667">"contraseña"</string> <string name="passkeys" msgid="5733880786866559847">"llaves de acceso"</string> @@ -71,15 +68,16 @@ <string name="accessibility_back_arrow_button" msgid="3233198183497842492">"Volver a la página anterior"</string> <string name="accessibility_close_button" msgid="1163435587545377687">"Cerrar"</string> <string name="accessibility_snackbar_dismiss" msgid="3456598374801836120">"Cerrar"</string> - <string name="get_dialog_title_use_passkey_for" msgid="6236608872708021767">"¿Usar la llave de acceso guardada para <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string> - <string name="get_dialog_title_use_password_for" msgid="625828023234318484">"¿Usar la contraseña que tienes guardada para <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string> - <string name="get_dialog_title_single_tap_for" msgid="2057945648748859483">"Usa tu bloqueo de pantalla para iniciar sesión en <xliff:g id="APP_NAME">%1$s</xliff:g> con el usuario <xliff:g id="USERNAME">%2$s</xliff:g>"</string> - <string name="get_dialog_title_use_sign_in_for" msgid="790049858275131785">"¿Usar tu inicio de sesión en <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string> - <string name="get_dialog_title_unlock_options_for" msgid="7605568190597632433">"¿Desbloquear las opciones de inicio de sesión de <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string> + <string name="get_dialog_title_use_passkey_for" msgid="479261099705979148">"Usa la llave de acceso guardada para <xliff:g id="APP_NAME">%1$s</xliff:g>"</string> + <string name="get_dialog_title_use_password_for" msgid="688557784207167647">"Usa la contraseña que tienes guardada para <xliff:g id="APP_NAME">%1$s</xliff:g>"</string> + <string name="get_dialog_title_use_sign_in_for" msgid="4233553937542583226">"Usa tu cuenta para <xliff:g id="APP_NAME">%1$s</xliff:g>"</string> + <!-- no translation found for get_dialog_description_single_tap (2797059565126030879) --> + <skip /> + <string name="get_dialog_title_unlock_options_for" msgid="7096423827682163270">"Desbloquea las opciones de inicio de sesión para <xliff:g id="APP_NAME">%1$s</xliff:g>"</string> <string name="get_dialog_title_choose_passkey_for" msgid="9175997688078538490">"Elige una llave de acceso guardada para <xliff:g id="APP_NAME">%1$s</xliff:g>"</string> <string name="get_dialog_title_choose_password_for" msgid="1724435823820819221">"Elige una contraseña guardada para <xliff:g id="APP_NAME">%1$s</xliff:g>"</string> <string name="get_dialog_title_choose_saved_sign_in_for" msgid="2420298653461652728">"Elige un inicio de sesión guardado para <xliff:g id="APP_NAME">%1$s</xliff:g>"</string> - <string name="get_dialog_title_choose_sign_in_for" msgid="3048870756117876514">"Elige un inicio de sesión para <xliff:g id="APP_NAME">%1$s</xliff:g>"</string> + <string name="get_dialog_title_choose_sign_in_for" msgid="645728947702442421">"Elige la cuenta que usar en <xliff:g id="APP_NAME">%1$s</xliff:g>"</string> <string name="get_dialog_title_choose_option_for" msgid="4976380044745029107">"¿Elegir una opción para <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string> <string name="get_dialog_title_use_info_on" msgid="8863708099535435146">"¿Usar esta información en <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string> <string name="get_dialog_use_saved_passkey_for" msgid="4618100798664888512">"Iniciar sesión de otra manera"</string> diff --git a/packages/CredentialManager/res/values-et/strings.xml b/packages/CredentialManager/res/values-et/strings.xml index a4c3438969cd..582a0d09dd62 100644 --- a/packages/CredentialManager/res/values-et/strings.xml +++ b/packages/CredentialManager/res/values-et/strings.xml @@ -42,9 +42,6 @@ <string name="choose_create_option_passkey_title" msgid="8762295821604276511">"Kas luua rakendusse <xliff:g id="APP_NAME">%1$s</xliff:g> sisselogimiseks pääsuvõti?"</string> <string name="choose_create_option_password_title" msgid="4481366993598649224">"Kas salvestada rakendusse <xliff:g id="APP_NAME">%1$s</xliff:g> sisselogimiseks parool?"</string> <string name="choose_create_option_sign_in_title" msgid="7092914088455358079">"Kas salvestada rakenduse <xliff:g id="APP_NAME">%1$s</xliff:g> jaoks sisselogimisteave?"</string> - <string name="choose_create_single_tap_passkey_title" msgid="3872793514041774218">"Kas kasutada ekraanilukku, et luua rakenduse <xliff:g id="APP_NAME">%1$s</xliff:g> jaoks pääsuvõti?"</string> - <string name="choose_create_single_tap_password_title" msgid="5231871886818921622">"Kas kasutada ekraanilukku, et luua rakenduse <xliff:g id="APP_NAME">%1$s</xliff:g> jaoks parool?"</string> - <string name="choose_create_single_tap_sign_in_title" msgid="256498714574099587">"Kas kasutada ekraanilukku, et salvestada rakenduse <xliff:g id="APP_NAME">%1$s</xliff:g> jaoks sisselogimisteave?"</string> <string name="passkey" msgid="632353688396759522">"pääsuvõti"</string> <string name="password" msgid="6738570945182936667">"parool"</string> <string name="passkeys" msgid="5733880786866559847">"pääsuvõtmed"</string> @@ -71,15 +68,16 @@ <string name="accessibility_back_arrow_button" msgid="3233198183497842492">"Minge tagasi eelmisele lehele"</string> <string name="accessibility_close_button" msgid="1163435587545377687">"Sule"</string> <string name="accessibility_snackbar_dismiss" msgid="3456598374801836120">"Loobu"</string> - <string name="get_dialog_title_use_passkey_for" msgid="6236608872708021767">"Kas kasutada rakenduse <xliff:g id="APP_NAME">%1$s</xliff:g> jaoks salvestatud pääsuvõtit?"</string> - <string name="get_dialog_title_use_password_for" msgid="625828023234318484">"Kas kasutada rakenduse <xliff:g id="APP_NAME">%1$s</xliff:g> puhul salvestatud parooli?"</string> - <string name="get_dialog_title_single_tap_for" msgid="2057945648748859483">"Kasutage rakendusse <xliff:g id="APP_NAME">%1$s</xliff:g> kasutajanimega <xliff:g id="USERNAME">%2$s</xliff:g> sisselogimiseks ekraanilukku"</string> - <string name="get_dialog_title_use_sign_in_for" msgid="790049858275131785">"Kas soovite rakendusse <xliff:g id="APP_NAME">%1$s</xliff:g> sisselogimiseks kasutada oma mandaati?"</string> - <string name="get_dialog_title_unlock_options_for" msgid="7605568190597632433">"Kas avada rakenduse <xliff:g id="APP_NAME">%1$s</xliff:g> jaoks sisselogimisvalikud?"</string> + <string name="get_dialog_title_use_passkey_for" msgid="479261099705979148">"Kasutage rakenduse <xliff:g id="APP_NAME">%1$s</xliff:g> jaoks salvestatud pääsuvõtit"</string> + <string name="get_dialog_title_use_password_for" msgid="688557784207167647">"Kasutage rakenduse <xliff:g id="APP_NAME">%1$s</xliff:g> jaoks salvestatud parooli"</string> + <string name="get_dialog_title_use_sign_in_for" msgid="4233553937542583226">"Kasutage rakenduse <xliff:g id="APP_NAME">%1$s</xliff:g> jaoks kontot"</string> + <!-- no translation found for get_dialog_description_single_tap (2797059565126030879) --> + <skip /> + <string name="get_dialog_title_unlock_options_for" msgid="7096423827682163270">"Avage rakenduse <xliff:g id="APP_NAME">%1$s</xliff:g> jaoks sisselogimisviisid"</string> <string name="get_dialog_title_choose_passkey_for" msgid="9175997688078538490">"Valige rakenduse <xliff:g id="APP_NAME">%1$s</xliff:g> jaoks salvestatud pääsuvõti"</string> <string name="get_dialog_title_choose_password_for" msgid="1724435823820819221">"Valige rakenduse <xliff:g id="APP_NAME">%1$s</xliff:g> jaoks salvestatud parool"</string> <string name="get_dialog_title_choose_saved_sign_in_for" msgid="2420298653461652728">"Valige rakenduse <xliff:g id="APP_NAME">%1$s</xliff:g> jaoks salvestatud sisselogimisandmed"</string> - <string name="get_dialog_title_choose_sign_in_for" msgid="3048870756117876514">"Valige rakendusse <xliff:g id="APP_NAME">%1$s</xliff:g> sisselogimiseks mandaat"</string> + <string name="get_dialog_title_choose_sign_in_for" msgid="645728947702442421">"Valige rakenduse <xliff:g id="APP_NAME">%1$s</xliff:g> jaoks konto"</string> <string name="get_dialog_title_choose_option_for" msgid="4976380044745029107">"Kas teha valik rakendusele <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string> <string name="get_dialog_title_use_info_on" msgid="8863708099535435146">"Kas soovite kasutada seda teavet rakenduses <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string> <string name="get_dialog_use_saved_passkey_for" msgid="4618100798664888512">"Logige sisse muul viisil"</string> diff --git a/packages/CredentialManager/res/values-eu/strings.xml b/packages/CredentialManager/res/values-eu/strings.xml index 2f62ba3add02..4edf87dbc810 100644 --- a/packages/CredentialManager/res/values-eu/strings.xml +++ b/packages/CredentialManager/res/values-eu/strings.xml @@ -42,9 +42,6 @@ <string name="choose_create_option_passkey_title" msgid="8762295821604276511">"<xliff:g id="APP_NAME">%1$s</xliff:g> aplikazioan saioa hasteko sarbide-gako bat sortu nahi duzu?"</string> <string name="choose_create_option_password_title" msgid="4481366993598649224">"<xliff:g id="APP_NAME">%1$s</xliff:g> aplikazioan saioa hasteko pasahitza gorde nahi duzu?"</string> <string name="choose_create_option_sign_in_title" msgid="7092914088455358079">"<xliff:g id="APP_NAME">%1$s</xliff:g> aplikazioan saioa hasteko informazioa gorde nahi duzu?"</string> - <string name="choose_create_single_tap_passkey_title" msgid="3872793514041774218">"Pantailaren blokeoa erabili nahi duzu <xliff:g id="APP_NAME">%1$s</xliff:g> aplikaziorako sarbide-gako bat sortzeko?"</string> - <string name="choose_create_single_tap_password_title" msgid="5231871886818921622">"Pantailaren blokeoa erabili nahi duzu <xliff:g id="APP_NAME">%1$s</xliff:g> aplikaziorako pasahitz bat sortzeko?"</string> - <string name="choose_create_single_tap_sign_in_title" msgid="256498714574099587">"Pantailaren blokeoa erabili nahi duzu <xliff:g id="APP_NAME">%1$s</xliff:g> aplikazioan saioa hasteko informazioa gordetzeko?"</string> <string name="passkey" msgid="632353688396759522">"sarbide-gakoa"</string> <string name="password" msgid="6738570945182936667">"pasahitza"</string> <string name="passkeys" msgid="5733880786866559847">"sarbide-gakoak"</string> @@ -71,15 +68,16 @@ <string name="accessibility_back_arrow_button" msgid="3233198183497842492">"Itzuli aurreko orrira"</string> <string name="accessibility_close_button" msgid="1163435587545377687">"Itxi"</string> <string name="accessibility_snackbar_dismiss" msgid="3456598374801836120">"Baztertu"</string> - <string name="get_dialog_title_use_passkey_for" msgid="6236608872708021767">"<xliff:g id="APP_NAME">%1$s</xliff:g> aplikaziorako gorde duzun sarbide-gakoa erabili nahi duzu?"</string> - <string name="get_dialog_title_use_password_for" msgid="625828023234318484">"<xliff:g id="APP_NAME">%1$s</xliff:g> aplikaziorako gordetako pasahitza erabili nahi duzu?"</string> - <string name="get_dialog_title_single_tap_for" msgid="2057945648748859483">"Erabili pantailaren blokeoa <xliff:g id="APP_NAME">%1$s</xliff:g> aplikazioan <xliff:g id="USERNAME">%2$s</xliff:g> kontuarekin saioa hasteko"</string> - <string name="get_dialog_title_use_sign_in_for" msgid="790049858275131785">"<xliff:g id="APP_NAME">%1$s</xliff:g> zerbitzuan saioa hasteko kredentzialak erabili nahi dituzu?"</string> - <string name="get_dialog_title_unlock_options_for" msgid="7605568190597632433">"<xliff:g id="APP_NAME">%1$s</xliff:g> aplikazioan saioa hasteko aukerak desblokeatu nahi dituzu?"</string> + <string name="get_dialog_title_use_passkey_for" msgid="479261099705979148">"Erabili <xliff:g id="APP_NAME">%1$s</xliff:g> aplikaziorako gordetako sarbide-gakoa"</string> + <string name="get_dialog_title_use_password_for" msgid="688557784207167647">"Erabili <xliff:g id="APP_NAME">%1$s</xliff:g> aplikaziorako gordetako pasahitza"</string> + <string name="get_dialog_title_use_sign_in_for" msgid="4233553937542583226">"Erabili zure kontua <xliff:g id="APP_NAME">%1$s</xliff:g> aplikaziorako"</string> + <!-- no translation found for get_dialog_description_single_tap (2797059565126030879) --> + <skip /> + <string name="get_dialog_title_unlock_options_for" msgid="7096423827682163270">"Desblokeatu <xliff:g id="APP_NAME">%1$s</xliff:g> aplikazioan saioa hasteko aukerak"</string> <string name="get_dialog_title_choose_passkey_for" msgid="9175997688078538490">"Aukeratu <xliff:g id="APP_NAME">%1$s</xliff:g> aplikaziorako gordetako sarbide-gakoa"</string> <string name="get_dialog_title_choose_password_for" msgid="1724435823820819221">"Aukeratu <xliff:g id="APP_NAME">%1$s</xliff:g> aplikaziorako gordetako pasahitza"</string> <string name="get_dialog_title_choose_saved_sign_in_for" msgid="2420298653461652728">"Aukeratu <xliff:g id="APP_NAME">%1$s</xliff:g> aplikaziorako gordetako saioa hasteko moduak"</string> - <string name="get_dialog_title_choose_sign_in_for" msgid="3048870756117876514">"Aukeratu <xliff:g id="APP_NAME">%1$s</xliff:g> zerbitzuan saioa hasteko kredentzialak"</string> + <string name="get_dialog_title_choose_sign_in_for" msgid="645728947702442421">"Aukeratu <xliff:g id="APP_NAME">%1$s</xliff:g> aplikazioan erabili nahi duzun kontua"</string> <string name="get_dialog_title_choose_option_for" msgid="4976380044745029107">"<xliff:g id="APP_NAME">%1$s</xliff:g> aplikaziorako aukera bat hautatu nahi duzu?"</string> <string name="get_dialog_title_use_info_on" msgid="8863708099535435146">"<xliff:g id="APP_NAME">%1$s</xliff:g> aplikazioan erabili nahi duzu informazio hori?"</string> <string name="get_dialog_use_saved_passkey_for" msgid="4618100798664888512">"Hasi saioa beste modu batean"</string> diff --git a/packages/CredentialManager/res/values-fa/strings.xml b/packages/CredentialManager/res/values-fa/strings.xml index 6266ed2a4ccb..ab2ebb04117d 100644 --- a/packages/CredentialManager/res/values-fa/strings.xml +++ b/packages/CredentialManager/res/values-fa/strings.xml @@ -42,9 +42,6 @@ <string name="choose_create_option_passkey_title" msgid="8762295821604276511">"برای ورود به سیستم <xliff:g id="APP_NAME">%1$s</xliff:g>، گذرکلید ایجاد شود؟"</string> <string name="choose_create_option_password_title" msgid="4481366993598649224">"برای ورود به سیستم <xliff:g id="APP_NAME">%1$s</xliff:g>، گذرواژه ذخیره شود؟"</string> <string name="choose_create_option_sign_in_title" msgid="7092914088455358079">"اطلاعات ورود به سیستم <xliff:g id="APP_NAME">%1$s</xliff:g> ذخیره شود؟"</string> - <string name="choose_create_single_tap_passkey_title" msgid="3872793514041774218">"برای ایجاد گذرکلید برای <xliff:g id="APP_NAME">%1$s</xliff:g> از قفل صفحه استفاده شود؟"</string> - <string name="choose_create_single_tap_password_title" msgid="5231871886818921622">"برای ایجاد گذرواژه برای <xliff:g id="APP_NAME">%1$s</xliff:g> از قفل صفحه استفاده شود؟"</string> - <string name="choose_create_single_tap_sign_in_title" msgid="256498714574099587">"برای ذخیرهسازی اطلاعات ورود به سیستم <xliff:g id="APP_NAME">%1$s</xliff:g> از قفل صفحه استفاده شود؟"</string> <string name="passkey" msgid="632353688396759522">"گذرکلید"</string> <string name="password" msgid="6738570945182936667">"گذرواژه"</string> <string name="passkeys" msgid="5733880786866559847">"گذرکلیدها"</string> @@ -71,15 +68,16 @@ <string name="accessibility_back_arrow_button" msgid="3233198183497842492">"برگشتن به صفحه قبلی"</string> <string name="accessibility_close_button" msgid="1163435587545377687">"بستن"</string> <string name="accessibility_snackbar_dismiss" msgid="3456598374801836120">"بستن"</string> - <string name="get_dialog_title_use_passkey_for" msgid="6236608872708021767">"از گذرکلید ذخیرهشده برای «<xliff:g id="APP_NAME">%1$s</xliff:g>» استفاده شود؟"</string> - <string name="get_dialog_title_use_password_for" msgid="625828023234318484">"از گذرواژه ذخیرهشدهتان برای <xliff:g id="APP_NAME">%1$s</xliff:g> استفاده شود؟"</string> - <string name="get_dialog_title_single_tap_for" msgid="2057945648748859483">"برای ورود به سیستم <xliff:g id="APP_NAME">%1$s</xliff:g> با <xliff:g id="USERNAME">%2$s</xliff:g> از قفل صفحه استفاده کنید"</string> - <string name="get_dialog_title_use_sign_in_for" msgid="790049858275131785">"از روش ورود به سیستم شما برای <xliff:g id="APP_NAME">%1$s</xliff:g> استفاده شود؟"</string> - <string name="get_dialog_title_unlock_options_for" msgid="7605568190597632433">"گزینههای ورود به سیستم برای <xliff:g id="APP_NAME">%1$s</xliff:g> باز شود؟"</string> + <string name="get_dialog_title_use_passkey_for" msgid="479261099705979148">"از گذرکلید ذخیرهشده برای <xliff:g id="APP_NAME">%1$s</xliff:g> استفاده کنید"</string> + <string name="get_dialog_title_use_password_for" msgid="688557784207167647">"از گذرواژه ذخیرهشده برای <xliff:g id="APP_NAME">%1$s</xliff:g> استفاده کنید"</string> + <string name="get_dialog_title_use_sign_in_for" msgid="4233553937542583226">"از حساب <xliff:g id="APP_NAME">%1$s</xliff:g> استفاده کنید"</string> + <!-- no translation found for get_dialog_description_single_tap (2797059565126030879) --> + <skip /> + <string name="get_dialog_title_unlock_options_for" msgid="7096423827682163270">"قفل را ازطریق گزینههای ورود به سیستم <xliff:g id="APP_NAME">%1$s</xliff:g> باز کنید"</string> <string name="get_dialog_title_choose_passkey_for" msgid="9175997688078538490">"گذرکلید ذخیرهشدهای را برای <xliff:g id="APP_NAME">%1$s</xliff:g> انتخاب کنید"</string> <string name="get_dialog_title_choose_password_for" msgid="1724435823820819221">"گذرواژه ذخیرهشدهای را برای <xliff:g id="APP_NAME">%1$s</xliff:g> انتخاب کنید"</string> <string name="get_dialog_title_choose_saved_sign_in_for" msgid="2420298653461652728">"اطلاعات ورود به سیستم ذخیرهشدهای را برای <xliff:g id="APP_NAME">%1$s</xliff:g> انتخاب کنید"</string> - <string name="get_dialog_title_choose_sign_in_for" msgid="3048870756117876514">"انتخاب روش ورود به سیستم برای <xliff:g id="APP_NAME">%1$s</xliff:g>"</string> + <string name="get_dialog_title_choose_sign_in_for" msgid="645728947702442421">"حسابی برای <xliff:g id="APP_NAME">%1$s</xliff:g> انتخاب کنید"</string> <string name="get_dialog_title_choose_option_for" msgid="4976380044745029107">"گزینهای را برای <xliff:g id="APP_NAME">%1$s</xliff:g> انتخاب کنید؟"</string> <string name="get_dialog_title_use_info_on" msgid="8863708099535435146">"از این اطلاعات در <xliff:g id="APP_NAME">%1$s</xliff:g> استفاده شود؟"</string> <string name="get_dialog_use_saved_passkey_for" msgid="4618100798664888512">"ورود به سیستم به یک روش دیگر"</string> diff --git a/packages/CredentialManager/res/values-fi/strings.xml b/packages/CredentialManager/res/values-fi/strings.xml index 838d6d9fb0be..806085a2bb41 100644 --- a/packages/CredentialManager/res/values-fi/strings.xml +++ b/packages/CredentialManager/res/values-fi/strings.xml @@ -42,9 +42,6 @@ <string name="choose_create_option_passkey_title" msgid="8762295821604276511">"Luodaanko avainkoodi sisäänkirjautumista (<xliff:g id="APP_NAME">%1$s</xliff:g>) varten?"</string> <string name="choose_create_option_password_title" msgid="4481366993598649224">"Tallennetaanko salasana sisäänkirjautumista (<xliff:g id="APP_NAME">%1$s</xliff:g>) varten?"</string> <string name="choose_create_option_sign_in_title" msgid="7092914088455358079">"Tallennetaanko kirjautumistiedot (<xliff:g id="APP_NAME">%1$s</xliff:g>)?"</string> - <string name="choose_create_single_tap_passkey_title" msgid="3872793514041774218">"Käytetäänkö näytön lukitusta aivankoodin luomiseen sovellukselle (<xliff:g id="APP_NAME">%1$s</xliff:g>)?"</string> - <string name="choose_create_single_tap_password_title" msgid="5231871886818921622">"Käytetäänkö näytön lukitusta salasanan luomiseen sovellukselle (<xliff:g id="APP_NAME">%1$s</xliff:g>)?"</string> - <string name="choose_create_single_tap_sign_in_title" msgid="256498714574099587">"Käytetäänkö näytön lukitusta sovelluksen (<xliff:g id="APP_NAME">%1$s</xliff:g>) sisäänkirjautumistietojen tallentamiseen?"</string> <string name="passkey" msgid="632353688396759522">"avainkoodi"</string> <string name="password" msgid="6738570945182936667">"salasana"</string> <string name="passkeys" msgid="5733880786866559847">"avainkoodit"</string> @@ -71,15 +68,16 @@ <string name="accessibility_back_arrow_button" msgid="3233198183497842492">"Takaisin edelliselle sivulle"</string> <string name="accessibility_close_button" msgid="1163435587545377687">"Sulje"</string> <string name="accessibility_snackbar_dismiss" msgid="3456598374801836120">"Sulje"</string> - <string name="get_dialog_title_use_passkey_for" msgid="6236608872708021767">"Käytetäänkö tallennettua avainkoodiasi täällä: <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string> - <string name="get_dialog_title_use_password_for" msgid="625828023234318484">"Käytetäänkö tallennettua salasanaasi sovelluksessa <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string> - <string name="get_dialog_title_single_tap_for" msgid="2057945648748859483">"Kirjaudu sisään (<xliff:g id="APP_NAME">%1$s</xliff:g>) käyttämällä näytön lukitusta tilillä <xliff:g id="USERNAME">%2$s</xliff:g>"</string> - <string name="get_dialog_title_use_sign_in_for" msgid="790049858275131785">"Käytetäänkö kirjautumistapaa: <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string> - <string name="get_dialog_title_unlock_options_for" msgid="7605568190597632433">"Avataanko kirjautumisvaihtoehdot (<xliff:g id="APP_NAME">%1$s</xliff:g>)?"</string> + <string name="get_dialog_title_use_passkey_for" msgid="479261099705979148">"Käytä tallennettua avainkoodia: <xliff:g id="APP_NAME">%1$s</xliff:g>"</string> + <string name="get_dialog_title_use_password_for" msgid="688557784207167647">"Käytetä tallennettua salasanaa: <xliff:g id="APP_NAME">%1$s</xliff:g>"</string> + <string name="get_dialog_title_use_sign_in_for" msgid="4233553937542583226">"Käytä tiliä: <xliff:g id="APP_NAME">%1$s</xliff:g>"</string> + <!-- no translation found for get_dialog_description_single_tap (2797059565126030879) --> + <skip /> + <string name="get_dialog_title_unlock_options_for" msgid="7096423827682163270">"Avaa kirjautumisvaihtoehdot: <xliff:g id="APP_NAME">%1$s</xliff:g>"</string> <string name="get_dialog_title_choose_passkey_for" msgid="9175997688078538490">"<xliff:g id="APP_NAME">%1$s</xliff:g>: valitse tallennettu avainkoodi"</string> <string name="get_dialog_title_choose_password_for" msgid="1724435823820819221">"<xliff:g id="APP_NAME">%1$s</xliff:g>: valitse tallennettu salasana"</string> <string name="get_dialog_title_choose_saved_sign_in_for" msgid="2420298653461652728">"<xliff:g id="APP_NAME">%1$s</xliff:g>: valitse tallennetut kirjautumistiedot"</string> - <string name="get_dialog_title_choose_sign_in_for" msgid="3048870756117876514">"Valitse kirjautumistapa: <xliff:g id="APP_NAME">%1$s</xliff:g>"</string> + <string name="get_dialog_title_choose_sign_in_for" msgid="645728947702442421">"Valitse tili: <xliff:g id="APP_NAME">%1$s</xliff:g>"</string> <string name="get_dialog_title_choose_option_for" msgid="4976380044745029107">"Valitaanko vaihtoehto, jota <xliff:g id="APP_NAME">%1$s</xliff:g> käyttää?"</string> <string name="get_dialog_title_use_info_on" msgid="8863708099535435146">"Saako <xliff:g id="APP_NAME">%1$s</xliff:g> käyttää näitä tietoja?"</string> <string name="get_dialog_use_saved_passkey_for" msgid="4618100798664888512">"Kirjaudu sisään toisella tavalla"</string> diff --git a/packages/CredentialManager/res/values-fr-rCA/strings.xml b/packages/CredentialManager/res/values-fr-rCA/strings.xml index 834dffef4f99..4e4e02f22f21 100644 --- a/packages/CredentialManager/res/values-fr-rCA/strings.xml +++ b/packages/CredentialManager/res/values-fr-rCA/strings.xml @@ -42,9 +42,6 @@ <string name="choose_create_option_passkey_title" msgid="8762295821604276511">"Créer une clé d\'accès pour se connecter à <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string> <string name="choose_create_option_password_title" msgid="4481366993598649224">"Enregistrer un mot de passe pour se connecter à <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string> <string name="choose_create_option_sign_in_title" msgid="7092914088455358079">"Enregistrer les renseignements de connexion pour <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string> - <string name="choose_create_single_tap_passkey_title" msgid="3872793514041774218">"Utiliser le Verrouillage de l\'écran pour créer une clé d\'accès pour <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string> - <string name="choose_create_single_tap_password_title" msgid="5231871886818921622">"Utiliser le Verrouillage de l\'écran pour créer un mot de passe pour <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string> - <string name="choose_create_single_tap_sign_in_title" msgid="256498714574099587">"Utiliser le Verrouillage de l\'écran pour enregistrer les renseignements de connexion pour <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string> <string name="passkey" msgid="632353688396759522">"clé d\'accès"</string> <string name="password" msgid="6738570945182936667">"mot de passe"</string> <string name="passkeys" msgid="5733880786866559847">"clés d\'accès"</string> @@ -71,15 +68,16 @@ <string name="accessibility_back_arrow_button" msgid="3233198183497842492">"Retourner à la page précédente"</string> <string name="accessibility_close_button" msgid="1163435587545377687">"Fermer"</string> <string name="accessibility_snackbar_dismiss" msgid="3456598374801836120">"Fermer"</string> - <string name="get_dialog_title_use_passkey_for" msgid="6236608872708021767">"Utiliser votre clé d\'accès enregistrée pour <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string> - <string name="get_dialog_title_use_password_for" msgid="625828023234318484">"Utiliser votre mot de passe enregistré pour <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string> - <string name="get_dialog_title_single_tap_for" msgid="2057945648748859483">"Utilisez votre verrouillage d\'écran pour vous connecter à <xliff:g id="APP_NAME">%1$s</xliff:g> avec <xliff:g id="USERNAME">%2$s</xliff:g>"</string> - <string name="get_dialog_title_use_sign_in_for" msgid="790049858275131785">"Utiliser votre identifiant de connexion pour <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string> - <string name="get_dialog_title_unlock_options_for" msgid="7605568190597632433">"Déverrouiller les options de connexion pour <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string> + <string name="get_dialog_title_use_passkey_for" msgid="479261099705979148">"Utiliser votre clé d\'accès enregistrée pour <xliff:g id="APP_NAME">%1$s</xliff:g>"</string> + <string name="get_dialog_title_use_password_for" msgid="688557784207167647">"Utiliser votre mot de passe enregistré pour <xliff:g id="APP_NAME">%1$s</xliff:g>"</string> + <string name="get_dialog_title_use_sign_in_for" msgid="4233553937542583226">"Utiliser votre compte pour <xliff:g id="APP_NAME">%1$s</xliff:g>"</string> + <!-- no translation found for get_dialog_description_single_tap (2797059565126030879) --> + <skip /> + <string name="get_dialog_title_unlock_options_for" msgid="7096423827682163270">"Déverrouiller les options de connexion pour <xliff:g id="APP_NAME">%1$s</xliff:g>"</string> <string name="get_dialog_title_choose_passkey_for" msgid="9175997688078538490">"Choisissez une clé d\'accès enregistrée pour <xliff:g id="APP_NAME">%1$s</xliff:g>"</string> <string name="get_dialog_title_choose_password_for" msgid="1724435823820819221">"Choisissez un mot de passe enregistré pour <xliff:g id="APP_NAME">%1$s</xliff:g>"</string> <string name="get_dialog_title_choose_saved_sign_in_for" msgid="2420298653461652728">"Choisissez une connexion enregistrée pour <xliff:g id="APP_NAME">%1$s</xliff:g>"</string> - <string name="get_dialog_title_choose_sign_in_for" msgid="3048870756117876514">"Choisissez un identifiant de connexion pour <xliff:g id="APP_NAME">%1$s</xliff:g>"</string> + <string name="get_dialog_title_choose_sign_in_for" msgid="645728947702442421">"Choisir un compte pour <xliff:g id="APP_NAME">%1$s</xliff:g>"</string> <string name="get_dialog_title_choose_option_for" msgid="4976380044745029107">"Choisir une option pour <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string> <string name="get_dialog_title_use_info_on" msgid="8863708099535435146">"Utiliser ces renseignements dans <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string> <string name="get_dialog_use_saved_passkey_for" msgid="4618100798664888512">"Se connecter d\'une autre manière"</string> diff --git a/packages/CredentialManager/res/values-fr/strings.xml b/packages/CredentialManager/res/values-fr/strings.xml index 1c86c9b8e573..05c3473ab045 100644 --- a/packages/CredentialManager/res/values-fr/strings.xml +++ b/packages/CredentialManager/res/values-fr/strings.xml @@ -42,9 +42,6 @@ <string name="choose_create_option_passkey_title" msgid="8762295821604276511">"Créer une clé d\'accès pour se connecter à <xliff:g id="APP_NAME">%1$s</xliff:g> ?"</string> <string name="choose_create_option_password_title" msgid="4481366993598649224">"Enregistrer un mot de passe pour se connecter à <xliff:g id="APP_NAME">%1$s</xliff:g> ?"</string> <string name="choose_create_option_sign_in_title" msgid="7092914088455358079">"Enregistrer les informations de connexion pour <xliff:g id="APP_NAME">%1$s</xliff:g> ?"</string> - <string name="choose_create_single_tap_passkey_title" msgid="3872793514041774218">"Utiliser le verrouillage de l\'écran afin de créer une clé d\'accès pour <xliff:g id="APP_NAME">%1$s</xliff:g> ?"</string> - <string name="choose_create_single_tap_password_title" msgid="5231871886818921622">"Utiliser le verrouillage de l\'écran afin de créer un mot de passe pour <xliff:g id="APP_NAME">%1$s</xliff:g> ?"</string> - <string name="choose_create_single_tap_sign_in_title" msgid="256498714574099587">"Utiliser le verrouillage de l\'écran afin d\'enregistrer les informations de connexion pour <xliff:g id="APP_NAME">%1$s</xliff:g> ?"</string> <string name="passkey" msgid="632353688396759522">"clé d\'accès"</string> <string name="password" msgid="6738570945182936667">"mot de passe"</string> <string name="passkeys" msgid="5733880786866559847">"clés d\'accès"</string> @@ -71,15 +68,16 @@ <string name="accessibility_back_arrow_button" msgid="3233198183497842492">"Revenir à la page précédente"</string> <string name="accessibility_close_button" msgid="1163435587545377687">"Fermer"</string> <string name="accessibility_snackbar_dismiss" msgid="3456598374801836120">"Fermer"</string> - <string name="get_dialog_title_use_passkey_for" msgid="6236608872708021767">"Utiliser votre clé d\'accès enregistrée pour <xliff:g id="APP_NAME">%1$s</xliff:g> ?"</string> - <string name="get_dialog_title_use_password_for" msgid="625828023234318484">"Utiliser votre mot de passe enregistré pour <xliff:g id="APP_NAME">%1$s</xliff:g> ?"</string> - <string name="get_dialog_title_single_tap_for" msgid="2057945648748859483">"Utiliser le verrouillage de l\'écran pour se connecter à <xliff:g id="APP_NAME">%1$s</xliff:g> avec <xliff:g id="USERNAME">%2$s</xliff:g>"</string> - <string name="get_dialog_title_use_sign_in_for" msgid="790049858275131785">"Utiliser vos infos de connexion pour <xliff:g id="APP_NAME">%1$s</xliff:g> ?"</string> - <string name="get_dialog_title_unlock_options_for" msgid="7605568190597632433">"Déverrouiller les options de connexion pour <xliff:g id="APP_NAME">%1$s</xliff:g> ?"</string> + <string name="get_dialog_title_use_passkey_for" msgid="479261099705979148">"Utiliser votre clé d\'accès enregistrée pour <xliff:g id="APP_NAME">%1$s</xliff:g>"</string> + <string name="get_dialog_title_use_password_for" msgid="688557784207167647">"Utiliser votre mot de passe enregistré pour <xliff:g id="APP_NAME">%1$s</xliff:g>"</string> + <string name="get_dialog_title_use_sign_in_for" msgid="4233553937542583226">"Utiliser votre compte pour <xliff:g id="APP_NAME">%1$s</xliff:g>"</string> + <!-- no translation found for get_dialog_description_single_tap (2797059565126030879) --> + <skip /> + <string name="get_dialog_title_unlock_options_for" msgid="7096423827682163270">"Déverrouiller les options de connexion pour <xliff:g id="APP_NAME">%1$s</xliff:g>"</string> <string name="get_dialog_title_choose_passkey_for" msgid="9175997688078538490">"Choisir une clé d\'accès enregistrée pour <xliff:g id="APP_NAME">%1$s</xliff:g>"</string> <string name="get_dialog_title_choose_password_for" msgid="1724435823820819221">"Choisir un mot de passe enregistré pour <xliff:g id="APP_NAME">%1$s</xliff:g>"</string> <string name="get_dialog_title_choose_saved_sign_in_for" msgid="2420298653461652728">"Choisissez les identifiants à utiliser pour la connexion à <xliff:g id="APP_NAME">%1$s</xliff:g>"</string> - <string name="get_dialog_title_choose_sign_in_for" msgid="3048870756117876514">"Choisir des infos de connexion pour <xliff:g id="APP_NAME">%1$s</xliff:g>"</string> + <string name="get_dialog_title_choose_sign_in_for" msgid="645728947702442421">"Sélectionnez un compte pour <xliff:g id="APP_NAME">%1$s</xliff:g>"</string> <string name="get_dialog_title_choose_option_for" msgid="4976380044745029107">"Choisir une option pour <xliff:g id="APP_NAME">%1$s</xliff:g> ?"</string> <string name="get_dialog_title_use_info_on" msgid="8863708099535435146">"Utiliser ces informations dans <xliff:g id="APP_NAME">%1$s</xliff:g> ?"</string> <string name="get_dialog_use_saved_passkey_for" msgid="4618100798664888512">"Se connecter d\'une autre manière"</string> diff --git a/packages/CredentialManager/res/values-gl/strings.xml b/packages/CredentialManager/res/values-gl/strings.xml index a95f6b9a768d..9a3430fc81bf 100644 --- a/packages/CredentialManager/res/values-gl/strings.xml +++ b/packages/CredentialManager/res/values-gl/strings.xml @@ -42,9 +42,6 @@ <string name="choose_create_option_passkey_title" msgid="8762295821604276511">"Queres crear unha clave de acceso para iniciar sesión en <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string> <string name="choose_create_option_password_title" msgid="4481366993598649224">"Queres gardar o contrasinal para iniciar sesión en <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string> <string name="choose_create_option_sign_in_title" msgid="7092914088455358079">"Queres gardar a información de inicio de sesión de <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string> - <string name="choose_create_single_tap_passkey_title" msgid="3872793514041774218">"Queres usar o bloqueo de pantalla para crear unha clave de acceso para <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string> - <string name="choose_create_single_tap_password_title" msgid="5231871886818921622">"Queres usar o bloqueo de pantalla para crear un contrasinal para <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string> - <string name="choose_create_single_tap_sign_in_title" msgid="256498714574099587">"Queres usar o bloqueo de pantalla para gardar a información de inicio de sesión para <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string> <string name="passkey" msgid="632353688396759522">"clave de acceso"</string> <string name="password" msgid="6738570945182936667">"contrasinal"</string> <string name="passkeys" msgid="5733880786866559847">"claves de acceso"</string> @@ -71,15 +68,16 @@ <string name="accessibility_back_arrow_button" msgid="3233198183497842492">"Volver á páxina anterior"</string> <string name="accessibility_close_button" msgid="1163435587545377687">"Pechar"</string> <string name="accessibility_snackbar_dismiss" msgid="3456598374801836120">"Pechar"</string> - <string name="get_dialog_title_use_passkey_for" msgid="6236608872708021767">"Queres usar a clave de acceso gardada para <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string> - <string name="get_dialog_title_use_password_for" msgid="625828023234318484">"Queres usar o contrasinal gardado para <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string> - <string name="get_dialog_title_single_tap_for" msgid="2057945648748859483">"Usa o bloqueo de pantalla para iniciar sesión en <xliff:g id="APP_NAME">%1$s</xliff:g> con <xliff:g id="USERNAME">%2$s</xliff:g>"</string> - <string name="get_dialog_title_use_sign_in_for" msgid="790049858275131785">"Queres usar o teu inicio de sesión para <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string> - <string name="get_dialog_title_unlock_options_for" msgid="7605568190597632433">"Queres desbloquear as opcións de inicio de sesión para <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string> + <string name="get_dialog_title_use_passkey_for" msgid="479261099705979148">"Usa a clave de acceso gardada para <xliff:g id="APP_NAME">%1$s</xliff:g>"</string> + <string name="get_dialog_title_use_password_for" msgid="688557784207167647">"Usa o contrasinal gardado para <xliff:g id="APP_NAME">%1$s</xliff:g>"</string> + <string name="get_dialog_title_use_sign_in_for" msgid="4233553937542583226">"Usa a túa conta para <xliff:g id="APP_NAME">%1$s</xliff:g>"</string> + <!-- no translation found for get_dialog_description_single_tap (2797059565126030879) --> + <skip /> + <string name="get_dialog_title_unlock_options_for" msgid="7096423827682163270">"Desbloquea as opcións de inicio de sesión para <xliff:g id="APP_NAME">%1$s</xliff:g>"</string> <string name="get_dialog_title_choose_passkey_for" msgid="9175997688078538490">"Escolle unha clave de acceso gardada para <xliff:g id="APP_NAME">%1$s</xliff:g>"</string> <string name="get_dialog_title_choose_password_for" msgid="1724435823820819221">"Escolle un contrasinal gardado para <xliff:g id="APP_NAME">%1$s</xliff:g>"</string> <string name="get_dialog_title_choose_saved_sign_in_for" msgid="2420298653461652728">"Escolle un inicio de sesión gardado para <xliff:g id="APP_NAME">%1$s</xliff:g>"</string> - <string name="get_dialog_title_choose_sign_in_for" msgid="3048870756117876514">"Escolle un inicio de sesión para <xliff:g id="APP_NAME">%1$s</xliff:g>"</string> + <string name="get_dialog_title_choose_sign_in_for" msgid="645728947702442421">"Escolle unha conta para <xliff:g id="APP_NAME">%1$s</xliff:g>"</string> <string name="get_dialog_title_choose_option_for" msgid="4976380044745029107">"Queres escoller unha opción para <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string> <string name="get_dialog_title_use_info_on" msgid="8863708099535435146">"Queres usar esta información en <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string> <string name="get_dialog_use_saved_passkey_for" msgid="4618100798664888512">"Iniciar sesión doutra forma"</string> diff --git a/packages/CredentialManager/res/values-gu/strings.xml b/packages/CredentialManager/res/values-gu/strings.xml index ed081288bffb..23204c82c6eb 100644 --- a/packages/CredentialManager/res/values-gu/strings.xml +++ b/packages/CredentialManager/res/values-gu/strings.xml @@ -42,9 +42,6 @@ <string name="choose_create_option_passkey_title" msgid="8762295821604276511">"<xliff:g id="APP_NAME">%1$s</xliff:g>માં સાઇન ઇન કરવા માટે પાસકી બનાવીએ?"</string> <string name="choose_create_option_password_title" msgid="4481366993598649224">"<xliff:g id="APP_NAME">%1$s</xliff:g>માં સાઇન ઇન કરવા માટે પાસવર્ડ સાચવીએ?"</string> <string name="choose_create_option_sign_in_title" msgid="7092914088455358079">"<xliff:g id="APP_NAME">%1$s</xliff:g> માટે સાઇન-ઇન કરવાની માહિતી સાચવીએ?"</string> - <string name="choose_create_single_tap_passkey_title" msgid="3872793514041774218">"<xliff:g id="APP_NAME">%1$s</xliff:g> માટે કોઈ પાસકી બનાવવા માટે, શું તમારા સ્ક્રીન લૉકનો ઉપયોગ કરીએ?"</string> - <string name="choose_create_single_tap_password_title" msgid="5231871886818921622">"<xliff:g id="APP_NAME">%1$s</xliff:g> માટે કોઈ પાસવર્ડ બનાવવા માટે, શું તમારા સ્ક્રીન લૉકનો ઉપયોગ કરીએ?"</string> - <string name="choose_create_single_tap_sign_in_title" msgid="256498714574099587">"<xliff:g id="APP_NAME">%1$s</xliff:g> માટે સાઇન ઇનની માહિતી સાચવવા માટે, શું તમારા સ્ક્રીન લૉકનો ઉપયોગ કરીએ?"</string> <string name="passkey" msgid="632353688396759522">"પાસકી"</string> <string name="password" msgid="6738570945182936667">"પાસવર્ડ"</string> <string name="passkeys" msgid="5733880786866559847">"પાસકી"</string> @@ -71,15 +68,16 @@ <string name="accessibility_back_arrow_button" msgid="3233198183497842492">"પાછલા પેજ પર પરત જાઓ"</string> <string name="accessibility_close_button" msgid="1163435587545377687">"બંધ કરો"</string> <string name="accessibility_snackbar_dismiss" msgid="3456598374801836120">"છોડી દો"</string> - <string name="get_dialog_title_use_passkey_for" msgid="6236608872708021767">"<xliff:g id="APP_NAME">%1$s</xliff:g> માટે શું તમારી સાચવેલી પાસકીનો ઉપયોગ કરીએ?"</string> - <string name="get_dialog_title_use_password_for" msgid="625828023234318484">"શું <xliff:g id="APP_NAME">%1$s</xliff:g> માટે તમારા સાચવેલા પાસવર્ડનો ઉપયોગ કરીએ?"</string> - <string name="get_dialog_title_single_tap_for" msgid="2057945648748859483">"<xliff:g id="USERNAME">%2$s</xliff:g> વડે <xliff:g id="APP_NAME">%1$s</xliff:g>માં સાઇન ઇન કરવા માટે તમારા સ્ક્રીન લૉકનો ઉપયોગ કરો"</string> - <string name="get_dialog_title_use_sign_in_for" msgid="790049858275131785">"શું <xliff:g id="APP_NAME">%1$s</xliff:g>માં સાઇન ઇન કરવા માટે તમારી આ લૉગ ઇન વિગતોનો ઉપયોગ કરીએ?"</string> - <string name="get_dialog_title_unlock_options_for" msgid="7605568190597632433">"<xliff:g id="APP_NAME">%1$s</xliff:g> માટે સાઇન ઇન વિકલ્પો અનલૉક કરીએ?"</string> + <string name="get_dialog_title_use_passkey_for" msgid="479261099705979148">"<xliff:g id="APP_NAME">%1$s</xliff:g> માટે તમારી સાચવેલી પાસકીનો ઉપયોગ કરો"</string> + <string name="get_dialog_title_use_password_for" msgid="688557784207167647">"<xliff:g id="APP_NAME">%1$s</xliff:g> માટે તમારા સાચવેલા પાસવર્ડનો ઉપયોગ કરો"</string> + <string name="get_dialog_title_use_sign_in_for" msgid="4233553937542583226">"<xliff:g id="APP_NAME">%1$s</xliff:g> માટે તમારા એકાઉન્ટનો ઉપયોગ કરો"</string> + <!-- no translation found for get_dialog_description_single_tap (2797059565126030879) --> + <skip /> + <string name="get_dialog_title_unlock_options_for" msgid="7096423827682163270">"<xliff:g id="APP_NAME">%1$s</xliff:g> માટે સાઇન ઇન વિકલ્પો અનલૉક કરો"</string> <string name="get_dialog_title_choose_passkey_for" msgid="9175997688078538490">"<xliff:g id="APP_NAME">%1$s</xliff:g> માટે કોઈ સાચવેલી પાસકી પસંદ કરો"</string> <string name="get_dialog_title_choose_password_for" msgid="1724435823820819221">"<xliff:g id="APP_NAME">%1$s</xliff:g> માટે કોઈ સાચવેલો પાસવર્ડ પસંદ કરો"</string> <string name="get_dialog_title_choose_saved_sign_in_for" msgid="2420298653461652728">"<xliff:g id="APP_NAME">%1$s</xliff:g> માટે કોઈ સાચવેલું સાઇન-ઇન પસંદ કરો"</string> - <string name="get_dialog_title_choose_sign_in_for" msgid="3048870756117876514">"<xliff:g id="APP_NAME">%1$s</xliff:g>માં સાઇન ઇન કરવાની કોઈ રીત પસંદ કરો"</string> + <string name="get_dialog_title_choose_sign_in_for" msgid="645728947702442421">"<xliff:g id="APP_NAME">%1$s</xliff:g> માટે કોઈ એકાઉન્ટ પસંદ કરો"</string> <string name="get_dialog_title_choose_option_for" msgid="4976380044745029107">"<xliff:g id="APP_NAME">%1$s</xliff:g>નો વિકલ્પ પસંદ કરીએ?"</string> <string name="get_dialog_title_use_info_on" msgid="8863708099535435146">"<xliff:g id="APP_NAME">%1$s</xliff:g> પર આ માહિતીનો ઉપયોગ કરીએ?"</string> <string name="get_dialog_use_saved_passkey_for" msgid="4618100798664888512">"કોઈ અન્ય રીતે સાઇન ઇન કરો"</string> diff --git a/packages/CredentialManager/res/values-hi/strings.xml b/packages/CredentialManager/res/values-hi/strings.xml index 16f04c5432b2..c829c6b1b752 100644 --- a/packages/CredentialManager/res/values-hi/strings.xml +++ b/packages/CredentialManager/res/values-hi/strings.xml @@ -42,9 +42,6 @@ <string name="choose_create_option_passkey_title" msgid="8762295821604276511">"क्या आपको <xliff:g id="APP_NAME">%1$s</xliff:g> में साइन इन करने के लिए पासकी बनानी है?"</string> <string name="choose_create_option_password_title" msgid="4481366993598649224">"क्या आपको <xliff:g id="APP_NAME">%1$s</xliff:g> में साइन इन करने के लिए पासवर्ड सेव करना है?"</string> <string name="choose_create_option_sign_in_title" msgid="7092914088455358079">"क्या आपको <xliff:g id="APP_NAME">%1$s</xliff:g> के लिए साइन-इन की जानकारी सेव करनी है?"</string> - <string name="choose_create_single_tap_passkey_title" msgid="3872793514041774218">"क्या स्क्रीन लॉक का इस्तेमाल करके, <xliff:g id="APP_NAME">%1$s</xliff:g> के लिए पासकी बनानी है?"</string> - <string name="choose_create_single_tap_password_title" msgid="5231871886818921622">"क्या स्क्रीन लॉक का इस्तेमाल करके, <xliff:g id="APP_NAME">%1$s</xliff:g> के लिए पासवर्ड बनाना है?"</string> - <string name="choose_create_single_tap_sign_in_title" msgid="256498714574099587">"क्या स्क्रीन लॉक का इस्तेमाल करके, <xliff:g id="APP_NAME">%1$s</xliff:g> में साइन इन करने की जानकारी सेव करनी है?"</string> <string name="passkey" msgid="632353688396759522">"पासकी"</string> <string name="password" msgid="6738570945182936667">"पासवर्ड"</string> <string name="passkeys" msgid="5733880786866559847">"पासकी"</string> @@ -71,15 +68,16 @@ <string name="accessibility_back_arrow_button" msgid="3233198183497842492">"पिछले पेज पर वापस जाएं"</string> <string name="accessibility_close_button" msgid="1163435587545377687">"बंद करें"</string> <string name="accessibility_snackbar_dismiss" msgid="3456598374801836120">"खारिज करें"</string> - <string name="get_dialog_title_use_passkey_for" msgid="6236608872708021767">"क्या आपको <xliff:g id="APP_NAME">%1$s</xliff:g> पर साइन इन करने के लिए, सेव की गई पासकी का इस्तेमाल करना है?"</string> - <string name="get_dialog_title_use_password_for" msgid="625828023234318484">"क्या आपको <xliff:g id="APP_NAME">%1$s</xliff:g> के लिए सेव किया हुआ पासवर्ड इस्तेमाल करना है?"</string> - <string name="get_dialog_title_single_tap_for" msgid="2057945648748859483">"<xliff:g id="USERNAME">%2$s</xliff:g> से <xliff:g id="APP_NAME">%1$s</xliff:g> में साइन इन करने के लिए, स्क्रीन लॉक का इस्तेमाल करें"</string> - <string name="get_dialog_title_use_sign_in_for" msgid="790049858275131785">"क्या आपको <xliff:g id="APP_NAME">%1$s</xliff:g> के लिए अपने साइन-इन क्रेडेंशियल का इस्तेमाल करना है?"</string> - <string name="get_dialog_title_unlock_options_for" msgid="7605568190597632433">"क्या आपको <xliff:g id="APP_NAME">%1$s</xliff:g> में साइन इन करने के विकल्पों को अनलॉक करना है?"</string> + <string name="get_dialog_title_use_passkey_for" msgid="479261099705979148">"<xliff:g id="APP_NAME">%1$s</xliff:g> में साइन इन करने के लिए, सेव की गई पासकी का इस्तेमाल करें"</string> + <string name="get_dialog_title_use_password_for" msgid="688557784207167647">"<xliff:g id="APP_NAME">%1$s</xliff:g> में साइन इन करने के लिए सेव किया हुआ पासवर्ड इस्तेमाल करें"</string> + <string name="get_dialog_title_use_sign_in_for" msgid="4233553937542583226">"<xliff:g id="APP_NAME">%1$s</xliff:g> में साइन करने के लिए अपने खाते का इस्तेमाल करें"</string> + <!-- no translation found for get_dialog_description_single_tap (2797059565126030879) --> + <skip /> + <string name="get_dialog_title_unlock_options_for" msgid="7096423827682163270">"<xliff:g id="APP_NAME">%1$s</xliff:g> में साइन इन करने के लिए, विकल्पों को अनलॉक करें"</string> <string name="get_dialog_title_choose_passkey_for" msgid="9175997688078538490">"<xliff:g id="APP_NAME">%1$s</xliff:g> के लिए सेव की गई पासकी चुनें"</string> <string name="get_dialog_title_choose_password_for" msgid="1724435823820819221">"<xliff:g id="APP_NAME">%1$s</xliff:g> के लिए सेव किया गया पासवर्ड चुनें"</string> <string name="get_dialog_title_choose_saved_sign_in_for" msgid="2420298653461652728">"<xliff:g id="APP_NAME">%1$s</xliff:g> के लिए सेव किया गया क्रेडेंशियल चुनें"</string> - <string name="get_dialog_title_choose_sign_in_for" msgid="3048870756117876514">"<xliff:g id="APP_NAME">%1$s</xliff:g> के लिए साइन-इन क्रेडेंशियल चुनें"</string> + <string name="get_dialog_title_choose_sign_in_for" msgid="645728947702442421">"<xliff:g id="APP_NAME">%1$s</xliff:g> में साइन इन करने के लिए कोई खाता चुनें"</string> <string name="get_dialog_title_choose_option_for" msgid="4976380044745029107">"<xliff:g id="APP_NAME">%1$s</xliff:g> में साइन इन करने के लिए सेव किए गए विकल्पों में से किसी को चुनना है?"</string> <string name="get_dialog_title_use_info_on" msgid="8863708099535435146">"<xliff:g id="APP_NAME">%1$s</xliff:g> के लिए, क्या इस जानकारी का इस्तेमाल करना है?"</string> <string name="get_dialog_use_saved_passkey_for" msgid="4618100798664888512">"किसी दूसरे तरीके से साइन इन करें"</string> diff --git a/packages/CredentialManager/res/values-hr/strings.xml b/packages/CredentialManager/res/values-hr/strings.xml index 2c10c2122ce3..5facb15a5dba 100644 --- a/packages/CredentialManager/res/values-hr/strings.xml +++ b/packages/CredentialManager/res/values-hr/strings.xml @@ -42,9 +42,6 @@ <string name="choose_create_option_passkey_title" msgid="8762295821604276511">"Želite li izraditi pristupni ključ za prijavu u aplikaciju <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string> <string name="choose_create_option_password_title" msgid="4481366993598649224">"Želite li spremiti zaporku za prijavu u aplikaciju <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string> <string name="choose_create_option_sign_in_title" msgid="7092914088455358079">"Želite li spremiti informacije o prijavi za <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string> - <string name="choose_create_single_tap_passkey_title" msgid="3872793514041774218">"Želite li upotrijebiti zaključavanje zaslona za izradu pristupnog ključa za aplikaciju <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string> - <string name="choose_create_single_tap_password_title" msgid="5231871886818921622">"Želite li upotrijebiti zaključavanje zaslona za izradu zaporke za aplikaciju <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string> - <string name="choose_create_single_tap_sign_in_title" msgid="256498714574099587">"Želite li upotrijebiti zaključavanje zaslona za spremanje podataka za prijavu za aplikaciju <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string> <string name="passkey" msgid="632353688396759522">"pristupni ključ"</string> <string name="password" msgid="6738570945182936667">"zaporka"</string> <string name="passkeys" msgid="5733880786866559847">"pristupni ključevi"</string> @@ -71,15 +68,16 @@ <string name="accessibility_back_arrow_button" msgid="3233198183497842492">"Vratite se na prethodnu stranicu"</string> <string name="accessibility_close_button" msgid="1163435587545377687">"Zatvori"</string> <string name="accessibility_snackbar_dismiss" msgid="3456598374801836120">"Odbaci"</string> - <string name="get_dialog_title_use_passkey_for" msgid="6236608872708021767">"Želite li upotrijebiti spremljeni pristupni ključ za aplikaciju <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string> - <string name="get_dialog_title_use_password_for" msgid="625828023234318484">"Želite li upotrijebiti spremljenu zaporku za aplikaciju <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string> - <string name="get_dialog_title_single_tap_for" msgid="2057945648748859483">"Upotrijebite zaključavanje zaslona da biste se prijavili u aplikaciju <xliff:g id="APP_NAME">%1$s</xliff:g> korisničkim imenom <xliff:g id="USERNAME">%2$s</xliff:g>"</string> - <string name="get_dialog_title_use_sign_in_for" msgid="790049858275131785">"Želite li upotrijebiti prijavu za aplikaciju <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string> - <string name="get_dialog_title_unlock_options_for" msgid="7605568190597632433">"Želite li otključati opcije za prijavu za aplikaciju <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string> + <string name="get_dialog_title_use_passkey_for" msgid="479261099705979148">"Upotrijebite spremljeni pristupni ključ za aplikaciju <xliff:g id="APP_NAME">%1$s</xliff:g>"</string> + <string name="get_dialog_title_use_password_for" msgid="688557784207167647">"Upotrijebite spremljenu zaporku za aplikaciju <xliff:g id="APP_NAME">%1$s</xliff:g>"</string> + <string name="get_dialog_title_use_sign_in_for" msgid="4233553937542583226">"Upotrijebite račun za aplikaciju <xliff:g id="APP_NAME">%1$s</xliff:g>"</string> + <!-- no translation found for get_dialog_description_single_tap (2797059565126030879) --> + <skip /> + <string name="get_dialog_title_unlock_options_for" msgid="7096423827682163270">"Otključajte opcije za prijavu za aplikaciju <xliff:g id="APP_NAME">%1$s</xliff:g>"</string> <string name="get_dialog_title_choose_passkey_for" msgid="9175997688078538490">"Odaberite spremljeni pristupni ključ za aplikaciju <xliff:g id="APP_NAME">%1$s</xliff:g>"</string> <string name="get_dialog_title_choose_password_for" msgid="1724435823820819221">"Odaberite spremljenu zaporku za aplikaciju <xliff:g id="APP_NAME">%1$s</xliff:g>"</string> <string name="get_dialog_title_choose_saved_sign_in_for" msgid="2420298653461652728">"Odaberite spremljene podatke za prijavu za aplikaciju <xliff:g id="APP_NAME">%1$s</xliff:g>"</string> - <string name="get_dialog_title_choose_sign_in_for" msgid="3048870756117876514">"Odaberite prijavu za aplikaciju <xliff:g id="APP_NAME">%1$s</xliff:g>"</string> + <string name="get_dialog_title_choose_sign_in_for" msgid="645728947702442421">"Odaberite račun za aplikaciju <xliff:g id="APP_NAME">%1$s</xliff:g>"</string> <string name="get_dialog_title_choose_option_for" msgid="4976380044745029107">"Želite li odabrati opciju za <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string> <string name="get_dialog_title_use_info_on" msgid="8863708099535435146">"Želite li koristiti te podatke u aplikaciji <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string> <string name="get_dialog_use_saved_passkey_for" msgid="4618100798664888512">"Prijavite se na neki drugi način"</string> diff --git a/packages/CredentialManager/res/values-hu/strings.xml b/packages/CredentialManager/res/values-hu/strings.xml index 46b80da6181b..14153c09cd97 100644 --- a/packages/CredentialManager/res/values-hu/strings.xml +++ b/packages/CredentialManager/res/values-hu/strings.xml @@ -42,9 +42,6 @@ <string name="choose_create_option_passkey_title" msgid="8762295821604276511">"Létrehoz azonosítókulcsot a következőbe való bejelentkezéshez: <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string> <string name="choose_create_option_password_title" msgid="4481366993598649224">"Menti a jelszót a következőbe való bejelentkezéshez: <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string> <string name="choose_create_option_sign_in_title" msgid="7092914088455358079">"Menti a bejelentkezési adatokat a következőhöz: <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string> - <string name="choose_create_single_tap_passkey_title" msgid="3872793514041774218">"Képernyőzár használatával hoz létre azonosítókulcsot a következőhöz: <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string> - <string name="choose_create_single_tap_password_title" msgid="5231871886818921622">"Képernyőzár használatával hoz létre jelszót a következőhöz: <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string> - <string name="choose_create_single_tap_sign_in_title" msgid="256498714574099587">"Képernyőzár használatával menti a bejelentkezési adatokat a következőhöz: <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string> <string name="passkey" msgid="632353688396759522">"azonosítókulcs"</string> <string name="password" msgid="6738570945182936667">"jelszó"</string> <string name="passkeys" msgid="5733880786866559847">"azonosítókulcsait"</string> @@ -71,15 +68,16 @@ <string name="accessibility_back_arrow_button" msgid="3233198183497842492">"Vissza az előző oldalra"</string> <string name="accessibility_close_button" msgid="1163435587545377687">"Bezárás"</string> <string name="accessibility_snackbar_dismiss" msgid="3456598374801836120">"Elvetés"</string> - <string name="get_dialog_title_use_passkey_for" msgid="6236608872708021767">"Szeretné a(z) <xliff:g id="APP_NAME">%1$s</xliff:g> alkalmazáshoz mentett azonosítókulcsot használni?"</string> - <string name="get_dialog_title_use_password_for" msgid="625828023234318484">"Szeretné az elmentett jelszavát használni a(z) <xliff:g id="APP_NAME">%1$s</xliff:g> alkalmazáshoz?"</string> - <string name="get_dialog_title_single_tap_for" msgid="2057945648748859483">"A képernyőzár használata a(z) <xliff:g id="APP_NAME">%1$s</xliff:g> alkalmazásba való bejelentkezéshez a következő felhasználónévvel: <xliff:g id="USERNAME">%2$s</xliff:g>"</string> - <string name="get_dialog_title_use_sign_in_for" msgid="790049858275131785">"Szeretné használni bejelentkezési adatait a következőhöz: <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string> - <string name="get_dialog_title_unlock_options_for" msgid="7605568190597632433">"Feloldja a(z) <xliff:g id="APP_NAME">%1$s</xliff:g> bejelentkezési lehetőségeit?"</string> + <string name="get_dialog_title_use_passkey_for" msgid="479261099705979148">"Mentett azonosítókulcs használata a(z) <xliff:g id="APP_NAME">%1$s</xliff:g> alkalmazáshoz"</string> + <string name="get_dialog_title_use_password_for" msgid="688557784207167647">"Mentett jelszó használata a(z) <xliff:g id="APP_NAME">%1$s</xliff:g> alkalmazáshoz"</string> + <string name="get_dialog_title_use_sign_in_for" msgid="4233553937542583226">"Fiók használata a(z) <xliff:g id="APP_NAME">%1$s</xliff:g> alkalmazáshoz"</string> + <!-- no translation found for get_dialog_description_single_tap (2797059565126030879) --> + <skip /> + <string name="get_dialog_title_unlock_options_for" msgid="7096423827682163270">"Feloldja a(z) <xliff:g id="APP_NAME">%1$s</xliff:g> bejelentkezési lehetőségeit?"</string> <string name="get_dialog_title_choose_passkey_for" msgid="9175997688078538490">"Mentett azonosítókulcs kiválasztása a(z) <xliff:g id="APP_NAME">%1$s</xliff:g> alkalmazáshoz"</string> <string name="get_dialog_title_choose_password_for" msgid="1724435823820819221">"Mentett jelszó kiválasztása a(z) <xliff:g id="APP_NAME">%1$s</xliff:g> alkalmazáshoz"</string> <string name="get_dialog_title_choose_saved_sign_in_for" msgid="2420298653461652728">"Mentett bejelentkezési adatok kiválasztása – <xliff:g id="APP_NAME">%1$s</xliff:g>"</string> - <string name="get_dialog_title_choose_sign_in_for" msgid="3048870756117876514">"Válasszon bejelentkezési adatokat – <xliff:g id="APP_NAME">%1$s</xliff:g>"</string> + <string name="get_dialog_title_choose_sign_in_for" msgid="645728947702442421">"Válasszon fiókot a(z) <xliff:g id="APP_NAME">%1$s</xliff:g> alkalmazáshoz"</string> <string name="get_dialog_title_choose_option_for" msgid="4976380044745029107">"Kiválaszt egy lehetőséget a következőbe való bejelentkezéshez: <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string> <string name="get_dialog_title_use_info_on" msgid="8863708099535435146">"Használni szeretná ezt az információt a(z) <xliff:g id="APP_NAME">%1$s</xliff:g> alkalmazásban?"</string> <string name="get_dialog_use_saved_passkey_for" msgid="4618100798664888512">"Bejelentkezés más módon"</string> diff --git a/packages/CredentialManager/res/values-hy/strings.xml b/packages/CredentialManager/res/values-hy/strings.xml index 2a8784cd52f1..af97aa72129d 100644 --- a/packages/CredentialManager/res/values-hy/strings.xml +++ b/packages/CredentialManager/res/values-hy/strings.xml @@ -42,9 +42,6 @@ <string name="choose_create_option_passkey_title" msgid="8762295821604276511">"Ստեղծե՞լ անցաբառ՝ <xliff:g id="APP_NAME">%1$s</xliff:g> հավելված մուտք գործելու համար"</string> <string name="choose_create_option_password_title" msgid="4481366993598649224">"Պահե՞լ գաղտնաբառը՝ <xliff:g id="APP_NAME">%1$s</xliff:g> հավելված մուտք գործելու համար"</string> <string name="choose_create_option_sign_in_title" msgid="7092914088455358079">"Պահե՞լ «<xliff:g id="APP_NAME">%1$s</xliff:g>» հավելվածի մուտքի տվյալները"</string> - <string name="choose_create_single_tap_passkey_title" msgid="3872793514041774218">"Օգտագործե՞լ էկրանի կողպումը՝ <xliff:g id="APP_NAME">%1$s</xliff:g> հավելվածի մուտքի բանալի ստեղծելու համար"</string> - <string name="choose_create_single_tap_password_title" msgid="5231871886818921622">"Օգտագործե՞լ էկրանի կողպումը՝ <xliff:g id="APP_NAME">%1$s</xliff:g> հավելվածի գաղտնաբառ ստեղծելու համար"</string> - <string name="choose_create_single_tap_sign_in_title" msgid="256498714574099587">"Օգտագործե՞լ էկրանի կողպումը՝ <xliff:g id="APP_NAME">%1$s</xliff:g> հավելվածի մուտքի տվյալները պահելու համար"</string> <string name="passkey" msgid="632353688396759522">"անցաբառ"</string> <string name="password" msgid="6738570945182936667">"գաղտնաբառ"</string> <string name="passkeys" msgid="5733880786866559847">"անցաբառեր"</string> @@ -71,15 +68,16 @@ <string name="accessibility_back_arrow_button" msgid="3233198183497842492">"Անցնել նախորդ էջ"</string> <string name="accessibility_close_button" msgid="1163435587545377687">"Փակել"</string> <string name="accessibility_snackbar_dismiss" msgid="3456598374801836120">"Փակել"</string> - <string name="get_dialog_title_use_passkey_for" msgid="6236608872708021767">"Օգտագործե՞լ պահված անցաբառը <xliff:g id="APP_NAME">%1$s</xliff:g> հավելվածի համար"</string> - <string name="get_dialog_title_use_password_for" msgid="625828023234318484">"Օգտագործե՞լ <xliff:g id="APP_NAME">%1$s</xliff:g> հավելվածի համար պահված ձեր գաղտնաբառը"</string> - <string name="get_dialog_title_single_tap_for" msgid="2057945648748859483">"Օգտագործեք ձեր էկրանի կողպումը՝ <xliff:g id="USERNAME">%2$s</xliff:g> հաշվի միջոցով <xliff:g id="APP_NAME">%1$s</xliff:g> հավելված մուտք գործելու համար"</string> - <string name="get_dialog_title_use_sign_in_for" msgid="790049858275131785">"Օգտագործե՞լ այս տվյալները <xliff:g id="APP_NAME">%1$s</xliff:g> հավելված մուտք գործելու համար"</string> - <string name="get_dialog_title_unlock_options_for" msgid="7605568190597632433">"Ապակողպե՞լ մուտքի տարբերակներ <xliff:g id="APP_NAME">%1$s</xliff:g> հավելվածի համար"</string> + <string name="get_dialog_title_use_passkey_for" msgid="479261099705979148">"Օգտագործեք <xliff:g id="APP_NAME">%1$s</xliff:g> հավելվածի համար պահված ձեր մուտքի բանալին"</string> + <string name="get_dialog_title_use_password_for" msgid="688557784207167647">"Օգտագործեք <xliff:g id="APP_NAME">%1$s</xliff:g> հավելվածի համար պահված ձեր գաղտնաբառը"</string> + <string name="get_dialog_title_use_sign_in_for" msgid="4233553937542583226">"Օգտագործեք ձեր հաշիվը՝ <xliff:g id="APP_NAME">%1$s</xliff:g> հավելված մուտք գործելու համար"</string> + <!-- no translation found for get_dialog_description_single_tap (2797059565126030879) --> + <skip /> + <string name="get_dialog_title_unlock_options_for" msgid="7096423827682163270">"Ապակողպեք մուտք գործելու տարբերակներ <xliff:g id="APP_NAME">%1$s</xliff:g> հավելվածի համար"</string> <string name="get_dialog_title_choose_passkey_for" msgid="9175997688078538490">"Ընտրեք պահված անցաբառ <xliff:g id="APP_NAME">%1$s</xliff:g> հավելվածի համար"</string> <string name="get_dialog_title_choose_password_for" msgid="1724435823820819221">"Ընտրեք պահված գաղտնաբառ <xliff:g id="APP_NAME">%1$s</xliff:g> հավելվածի համար"</string> <string name="get_dialog_title_choose_saved_sign_in_for" msgid="2420298653461652728">"Ընտրեք մուտքի պահված տվյալներ <xliff:g id="APP_NAME">%1$s</xliff:g> հավելվածի համար"</string> - <string name="get_dialog_title_choose_sign_in_for" msgid="3048870756117876514">"Ընտրեք, թե ինչպես եք ուզում մուտք գործել <xliff:g id="APP_NAME">%1$s</xliff:g>"</string> + <string name="get_dialog_title_choose_sign_in_for" msgid="645728947702442421">"Ընտրեք հաշիվ <xliff:g id="APP_NAME">%1$s</xliff:g> հավելվածի համար"</string> <string name="get_dialog_title_choose_option_for" msgid="4976380044745029107">"Ընտրե՞լ տարբերակ <xliff:g id="APP_NAME">%1$s</xliff:g> հավելվածի համար"</string> <string name="get_dialog_title_use_info_on" msgid="8863708099535435146">"Օգտագործե՞լ այս տեղեկությունները <xliff:g id="APP_NAME">%1$s</xliff:g> մտնելու համար"</string> <string name="get_dialog_use_saved_passkey_for" msgid="4618100798664888512">"Մուտք գործել այլ եղանակով"</string> diff --git a/packages/CredentialManager/res/values-in/strings.xml b/packages/CredentialManager/res/values-in/strings.xml index 3eac6e97f986..7564afac0326 100644 --- a/packages/CredentialManager/res/values-in/strings.xml +++ b/packages/CredentialManager/res/values-in/strings.xml @@ -42,9 +42,6 @@ <string name="choose_create_option_passkey_title" msgid="8762295821604276511">"Buat kunci sandi untuk login ke <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string> <string name="choose_create_option_password_title" msgid="4481366993598649224">"Simpan sandi untuk login ke <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string> <string name="choose_create_option_sign_in_title" msgid="7092914088455358079">"Simpan info login untuk <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string> - <string name="choose_create_single_tap_passkey_title" msgid="3872793514041774218">"Gunakan kunci layar Anda untuk membuat kunci sandi untuk <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string> - <string name="choose_create_single_tap_password_title" msgid="5231871886818921622">"Gunakan kunci layar Anda untuk membuat sandi untuk <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string> - <string name="choose_create_single_tap_sign_in_title" msgid="256498714574099587">"Gunakan kunci layar Anda untuk menyimpan info login untuk <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string> <string name="passkey" msgid="632353688396759522">"kunci sandi"</string> <string name="password" msgid="6738570945182936667">"sandi"</string> <string name="passkeys" msgid="5733880786866559847">"kunci sandi"</string> @@ -71,15 +68,16 @@ <string name="accessibility_back_arrow_button" msgid="3233198183497842492">"Kembali ke halaman sebelumnya"</string> <string name="accessibility_close_button" msgid="1163435587545377687">"Tutup"</string> <string name="accessibility_snackbar_dismiss" msgid="3456598374801836120">"Tutup"</string> - <string name="get_dialog_title_use_passkey_for" msgid="6236608872708021767">"Gunakan kunci sandi tersimpan untuk <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string> - <string name="get_dialog_title_use_password_for" msgid="625828023234318484">"Gunakan sandi tersimpan untuk <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string> - <string name="get_dialog_title_single_tap_for" msgid="2057945648748859483">"Gunakan kunci layar untuk login ke <xliff:g id="APP_NAME">%1$s</xliff:g> dengan <xliff:g id="USERNAME">%2$s</xliff:g>"</string> - <string name="get_dialog_title_use_sign_in_for" msgid="790049858275131785">"Gunakan login Anda untuk <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string> - <string name="get_dialog_title_unlock_options_for" msgid="7605568190597632433">"Autentikasi opsi login untuk <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string> + <string name="get_dialog_title_use_passkey_for" msgid="479261099705979148">"Gunakan kunci sandi tersimpan untuk <xliff:g id="APP_NAME">%1$s</xliff:g>"</string> + <string name="get_dialog_title_use_password_for" msgid="688557784207167647">"Gunakan sandi tersimpan untuk <xliff:g id="APP_NAME">%1$s</xliff:g>"</string> + <string name="get_dialog_title_use_sign_in_for" msgid="4233553937542583226">"Gunakan akun Anda untuk <xliff:g id="APP_NAME">%1$s</xliff:g>"</string> + <!-- no translation found for get_dialog_description_single_tap (2797059565126030879) --> + <skip /> + <string name="get_dialog_title_unlock_options_for" msgid="7096423827682163270">"Autentikasi opsi login untuk <xliff:g id="APP_NAME">%1$s</xliff:g>"</string> <string name="get_dialog_title_choose_passkey_for" msgid="9175997688078538490">"Pilih kunci sandi tersimpan untuk <xliff:g id="APP_NAME">%1$s</xliff:g>"</string> <string name="get_dialog_title_choose_password_for" msgid="1724435823820819221">"Pilih sandi tersimpan untuk <xliff:g id="APP_NAME">%1$s</xliff:g>"</string> <string name="get_dialog_title_choose_saved_sign_in_for" msgid="2420298653461652728">"Pilih info login tersimpan untuk <xliff:g id="APP_NAME">%1$s</xliff:g>"</string> - <string name="get_dialog_title_choose_sign_in_for" msgid="3048870756117876514">"Pilih login untuk <xliff:g id="APP_NAME">%1$s</xliff:g>"</string> + <string name="get_dialog_title_choose_sign_in_for" msgid="645728947702442421">"Pilih akun untuk <xliff:g id="APP_NAME">%1$s</xliff:g>"</string> <string name="get_dialog_title_choose_option_for" msgid="4976380044745029107">"Pilih opsi untuk <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string> <string name="get_dialog_title_use_info_on" msgid="8863708099535435146">"Gunakan info ini di <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string> <string name="get_dialog_use_saved_passkey_for" msgid="4618100798664888512">"Login dengan cara lain"</string> diff --git a/packages/CredentialManager/res/values-is/strings.xml b/packages/CredentialManager/res/values-is/strings.xml index 9fd552b11568..cc405b412208 100644 --- a/packages/CredentialManager/res/values-is/strings.xml +++ b/packages/CredentialManager/res/values-is/strings.xml @@ -42,9 +42,6 @@ <string name="choose_create_option_passkey_title" msgid="8762295821604276511">"Búa til aðgangslykil til að skrá þig inn á <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string> <string name="choose_create_option_password_title" msgid="4481366993598649224">"Vista aðgangsorð til að skrá þig inn á <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string> <string name="choose_create_option_sign_in_title" msgid="7092914088455358079">"Viltu vista innskráningarupplýsingar fyrir <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string> - <string name="choose_create_single_tap_passkey_title" msgid="3872793514041774218">"Nota skjálásinn til að búa til aðgangslykil fyrir <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string> - <string name="choose_create_single_tap_password_title" msgid="5231871886818921622">"Nota skjálásinn til að búa til aðgangsorð fyrir <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string> - <string name="choose_create_single_tap_sign_in_title" msgid="256498714574099587">"Nota skjálásinn til að vista innskráningarupplýsingar fyrir <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string> <string name="passkey" msgid="632353688396759522">"aðgangslykill"</string> <string name="password" msgid="6738570945182936667">"aðgangsorð"</string> <string name="passkeys" msgid="5733880786866559847">"aðgangslykla"</string> @@ -71,15 +68,16 @@ <string name="accessibility_back_arrow_button" msgid="3233198183497842492">"Fara aftur á fyrri síðu"</string> <string name="accessibility_close_button" msgid="1163435587545377687">"Loka"</string> <string name="accessibility_snackbar_dismiss" msgid="3456598374801836120">"Hunsa"</string> - <string name="get_dialog_title_use_passkey_for" msgid="6236608872708021767">"Nota vistaðan aðgangslykil fyrir <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string> - <string name="get_dialog_title_use_password_for" msgid="625828023234318484">"Nota vistaða aðgangsorðið þitt fyrir <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string> - <string name="get_dialog_title_single_tap_for" msgid="2057945648748859483">"Notaðu skjálásinn þinn til að skrá þig inn á <xliff:g id="APP_NAME">%1$s</xliff:g> með <xliff:g id="USERNAME">%2$s</xliff:g>"</string> - <string name="get_dialog_title_use_sign_in_for" msgid="790049858275131785">"Nota innskráningu fyrir <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string> - <string name="get_dialog_title_unlock_options_for" msgid="7605568190597632433">"Opna fyrir innskráningarvalkosti fyrir <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string> + <string name="get_dialog_title_use_passkey_for" msgid="479261099705979148">"Nota vistaðan aðgangslykil fyrir <xliff:g id="APP_NAME">%1$s</xliff:g>"</string> + <string name="get_dialog_title_use_password_for" msgid="688557784207167647">"Nota vistað aðgangsorð fyrir <xliff:g id="APP_NAME">%1$s</xliff:g>"</string> + <string name="get_dialog_title_use_sign_in_for" msgid="4233553937542583226">"Nota reikninginn þinn fyrir <xliff:g id="APP_NAME">%1$s</xliff:g>"</string> + <!-- no translation found for get_dialog_description_single_tap (2797059565126030879) --> + <skip /> + <string name="get_dialog_title_unlock_options_for" msgid="7096423827682163270">"Opna innskráningaraðferð fyrir <xliff:g id="APP_NAME">%1$s</xliff:g>"</string> <string name="get_dialog_title_choose_passkey_for" msgid="9175997688078538490">"Veldu vistaðan aðgangslykil fyrir <xliff:g id="APP_NAME">%1$s</xliff:g>"</string> <string name="get_dialog_title_choose_password_for" msgid="1724435823820819221">"Veldu vistað aðgangsorð fyrir <xliff:g id="APP_NAME">%1$s</xliff:g>"</string> <string name="get_dialog_title_choose_saved_sign_in_for" msgid="2420298653461652728">"Veldu vistaða innskráningu fyrir <xliff:g id="APP_NAME">%1$s</xliff:g>"</string> - <string name="get_dialog_title_choose_sign_in_for" msgid="3048870756117876514">"Veldu innskráningu fyrir <xliff:g id="APP_NAME">%1$s</xliff:g>"</string> + <string name="get_dialog_title_choose_sign_in_for" msgid="645728947702442421">"Veldu reikning fyrir <xliff:g id="APP_NAME">%1$s</xliff:g>"</string> <string name="get_dialog_title_choose_option_for" msgid="4976380044745029107">"Velja valkost fyrir <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string> <string name="get_dialog_title_use_info_on" msgid="8863708099535435146">"Nota þessar upplýsingar í <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string> <string name="get_dialog_use_saved_passkey_for" msgid="4618100798664888512">"Skrá inn með öðrum hætti"</string> diff --git a/packages/CredentialManager/res/values-it/strings.xml b/packages/CredentialManager/res/values-it/strings.xml index 0d6f8390e4c1..94f90e2b6fec 100644 --- a/packages/CredentialManager/res/values-it/strings.xml +++ b/packages/CredentialManager/res/values-it/strings.xml @@ -42,9 +42,6 @@ <string name="choose_create_option_passkey_title" msgid="8762295821604276511">"Creare passkey per accedere all\'app <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string> <string name="choose_create_option_password_title" msgid="4481366993598649224">"Salvare password per accedere all\'app <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string> <string name="choose_create_option_sign_in_title" msgid="7092914088455358079">"Vuoi salvare i dati di accesso di <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string> - <string name="choose_create_single_tap_passkey_title" msgid="3872793514041774218">"Usare il blocco schermo per creare una passkey per <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string> - <string name="choose_create_single_tap_password_title" msgid="5231871886818921622">"Usare il blocco schermo per creare una password per <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string> - <string name="choose_create_single_tap_sign_in_title" msgid="256498714574099587">"Usare il blocco schermo per salvare le informazioni di accesso per <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string> <string name="passkey" msgid="632353688396759522">"passkey"</string> <string name="password" msgid="6738570945182936667">"password"</string> <string name="passkeys" msgid="5733880786866559847">"passkey"</string> @@ -71,15 +68,16 @@ <string name="accessibility_back_arrow_button" msgid="3233198183497842492">"Torna alla pagina precedente"</string> <string name="accessibility_close_button" msgid="1163435587545377687">"Chiudi"</string> <string name="accessibility_snackbar_dismiss" msgid="3456598374801836120">"Chiudi"</string> - <string name="get_dialog_title_use_passkey_for" msgid="6236608872708021767">"Vuoi usare la passkey salvata per <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string> - <string name="get_dialog_title_use_password_for" msgid="625828023234318484">"Vuoi usare la password salvata per <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string> - <string name="get_dialog_title_single_tap_for" msgid="2057945648748859483">"Usa il blocco schermo per accedere a <xliff:g id="APP_NAME">%1$s</xliff:g> con <xliff:g id="USERNAME">%2$s</xliff:g>"</string> - <string name="get_dialog_title_use_sign_in_for" msgid="790049858275131785">"Vuoi usare il tuo accesso per <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string> - <string name="get_dialog_title_unlock_options_for" msgid="7605568190597632433">"Vuoi sbloccare le opzioni di accesso per <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string> + <string name="get_dialog_title_use_passkey_for" msgid="479261099705979148">"Usa la passkey salvata per <xliff:g id="APP_NAME">%1$s</xliff:g>"</string> + <string name="get_dialog_title_use_password_for" msgid="688557784207167647">"Usa la password salvata per <xliff:g id="APP_NAME">%1$s</xliff:g>"</string> + <string name="get_dialog_title_use_sign_in_for" msgid="4233553937542583226">"Usa il tuo account per <xliff:g id="APP_NAME">%1$s</xliff:g>"</string> + <!-- no translation found for get_dialog_description_single_tap (2797059565126030879) --> + <skip /> + <string name="get_dialog_title_unlock_options_for" msgid="7096423827682163270">"Sblocca le opzioni di accesso per <xliff:g id="APP_NAME">%1$s</xliff:g>"</string> <string name="get_dialog_title_choose_passkey_for" msgid="9175997688078538490">"Scegli una passkey salvata per <xliff:g id="APP_NAME">%1$s</xliff:g>"</string> <string name="get_dialog_title_choose_password_for" msgid="1724435823820819221">"Scegli una password salvata per <xliff:g id="APP_NAME">%1$s</xliff:g>"</string> <string name="get_dialog_title_choose_saved_sign_in_for" msgid="2420298653461652728">"Scegli un accesso salvato per <xliff:g id="APP_NAME">%1$s</xliff:g>"</string> - <string name="get_dialog_title_choose_sign_in_for" msgid="3048870756117876514">"Scegli un accesso per <xliff:g id="APP_NAME">%1$s</xliff:g>"</string> + <string name="get_dialog_title_choose_sign_in_for" msgid="645728947702442421">"Scegli un account per <xliff:g id="APP_NAME">%1$s</xliff:g>"</string> <string name="get_dialog_title_choose_option_for" msgid="4976380044745029107">"Vuoi scegliere un\'opzione per <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string> <string name="get_dialog_title_use_info_on" msgid="8863708099535435146">"Vuoi usare questi dati su <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string> <string name="get_dialog_use_saved_passkey_for" msgid="4618100798664888512">"Accedi in un altro modo"</string> diff --git a/packages/CredentialManager/res/values-iw/strings.xml b/packages/CredentialManager/res/values-iw/strings.xml index 7d24825581cc..a7aa0232aefc 100644 --- a/packages/CredentialManager/res/values-iw/strings.xml +++ b/packages/CredentialManager/res/values-iw/strings.xml @@ -42,9 +42,6 @@ <string name="choose_create_option_passkey_title" msgid="8762295821604276511">"ליצור מפתח גישה כדי להיכנס לחשבון ב-<xliff:g id="APP_NAME">%1$s</xliff:g>?"</string> <string name="choose_create_option_password_title" msgid="4481366993598649224">"לשמור את הסיסמה כדי להיכנס לחשבון ב-<xliff:g id="APP_NAME">%1$s</xliff:g>?"</string> <string name="choose_create_option_sign_in_title" msgid="7092914088455358079">"לשמור את פרטי הכניסה של <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string> - <string name="choose_create_single_tap_passkey_title" msgid="3872793514041774218">"להשתמש בנעילת המסך כדי ליצור מפתח גישה בשביל <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string> - <string name="choose_create_single_tap_password_title" msgid="5231871886818921622">"להשתמש בנעילת המסך כדי ליצור סיסמה בשביל <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string> - <string name="choose_create_single_tap_sign_in_title" msgid="256498714574099587">"להשתמש בנעילת המסך כדי לשמור את פרטי הכניסה בשביל <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string> <string name="passkey" msgid="632353688396759522">"מפתח גישה"</string> <string name="password" msgid="6738570945182936667">"סיסמה"</string> <string name="passkeys" msgid="5733880786866559847">"מפתחות גישה"</string> @@ -71,15 +68,16 @@ <string name="accessibility_back_arrow_button" msgid="3233198183497842492">"חזרה לדף הקודם"</string> <string name="accessibility_close_button" msgid="1163435587545377687">"סגירה"</string> <string name="accessibility_snackbar_dismiss" msgid="3456598374801836120">"סגירה"</string> - <string name="get_dialog_title_use_passkey_for" msgid="6236608872708021767">"להשתמש במפתח גישה שנשמר עבור <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string> - <string name="get_dialog_title_use_password_for" msgid="625828023234318484">"להשתמש בסיסמה השמורה של <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string> - <string name="get_dialog_title_single_tap_for" msgid="2057945648748859483">"שימוש בשיטה לביטול נעילת המסך כדי להיכנס לחשבון של <xliff:g id="USERNAME">%2$s</xliff:g> ב-<xliff:g id="APP_NAME">%1$s</xliff:g>"</string> - <string name="get_dialog_title_use_sign_in_for" msgid="790049858275131785">"להשתמש בחשבון שלך כדי להיכנס אל <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string> - <string name="get_dialog_title_unlock_options_for" msgid="7605568190597632433">"לבטל את הנעילה של אפשרויות הכניסה אל <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string> + <string name="get_dialog_title_use_passkey_for" msgid="479261099705979148">"שימוש במפתח הגישה השמור של <xliff:g id="APP_NAME">%1$s</xliff:g>"</string> + <string name="get_dialog_title_use_password_for" msgid="688557784207167647">"שימוש בסיסמה השמורה של <xliff:g id="APP_NAME">%1$s</xliff:g>"</string> + <string name="get_dialog_title_use_sign_in_for" msgid="4233553937542583226">"שימוש בחשבון של <xliff:g id="APP_NAME">%1$s</xliff:g>"</string> + <!-- no translation found for get_dialog_description_single_tap (2797059565126030879) --> + <skip /> + <string name="get_dialog_title_unlock_options_for" msgid="7096423827682163270">"ביטול הנעילה של אמצעי הכניסה אל <xliff:g id="APP_NAME">%1$s</xliff:g>"</string> <string name="get_dialog_title_choose_passkey_for" msgid="9175997688078538490">"בחירת מפתח גישה שמור ל-<xliff:g id="APP_NAME">%1$s</xliff:g>"</string> <string name="get_dialog_title_choose_password_for" msgid="1724435823820819221">"בחירת סיסמה שמורה ל-<xliff:g id="APP_NAME">%1$s</xliff:g>"</string> <string name="get_dialog_title_choose_saved_sign_in_for" msgid="2420298653461652728">"בחירת פרטי כניסה שמורים ל-<xliff:g id="APP_NAME">%1$s</xliff:g>"</string> - <string name="get_dialog_title_choose_sign_in_for" msgid="3048870756117876514">"בחירת חשבון לכניסה אל <xliff:g id="APP_NAME">%1$s</xliff:g>"</string> + <string name="get_dialog_title_choose_sign_in_for" msgid="645728947702442421">"צריך לבחור חשבון לכניסה אל <xliff:g id="APP_NAME">%1$s</xliff:g>"</string> <string name="get_dialog_title_choose_option_for" msgid="4976380044745029107">"רוצה לבחור אפשרות עבור <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string> <string name="get_dialog_title_use_info_on" msgid="8863708099535435146">"להשתמש במידע הזה בשביל <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string> <string name="get_dialog_use_saved_passkey_for" msgid="4618100798664888512">"כניסה בדרך אחרת"</string> diff --git a/packages/CredentialManager/res/values-ja/strings.xml b/packages/CredentialManager/res/values-ja/strings.xml index 16e3195e345e..8664ef68ca77 100644 --- a/packages/CredentialManager/res/values-ja/strings.xml +++ b/packages/CredentialManager/res/values-ja/strings.xml @@ -42,9 +42,6 @@ <string name="choose_create_option_passkey_title" msgid="8762295821604276511">"<xliff:g id="APP_NAME">%1$s</xliff:g> にログインするためにパスキーを作成しますか?"</string> <string name="choose_create_option_password_title" msgid="4481366993598649224">"<xliff:g id="APP_NAME">%1$s</xliff:g> にログインするためにパスワードを保存しますか?"</string> <string name="choose_create_option_sign_in_title" msgid="7092914088455358079">"<xliff:g id="APP_NAME">%1$s</xliff:g> のログイン情報を保存しますか?"</string> - <string name="choose_create_single_tap_passkey_title" msgid="3872793514041774218">"画面ロックを使用して <xliff:g id="APP_NAME">%1$s</xliff:g> のパスキーを作成しますか?"</string> - <string name="choose_create_single_tap_password_title" msgid="5231871886818921622">"画面ロックを使用して <xliff:g id="APP_NAME">%1$s</xliff:g> のパスワードを作成しますか?"</string> - <string name="choose_create_single_tap_sign_in_title" msgid="256498714574099587">"画面ロックを使用して <xliff:g id="APP_NAME">%1$s</xliff:g> のログイン情報を保存しますか?"</string> <string name="passkey" msgid="632353688396759522">"パスキー"</string> <string name="password" msgid="6738570945182936667">"パスワード"</string> <string name="passkeys" msgid="5733880786866559847">"パスキー"</string> @@ -71,15 +68,16 @@ <string name="accessibility_back_arrow_button" msgid="3233198183497842492">"前のページに戻ります"</string> <string name="accessibility_close_button" msgid="1163435587545377687">"閉じる"</string> <string name="accessibility_snackbar_dismiss" msgid="3456598374801836120">"閉じる"</string> - <string name="get_dialog_title_use_passkey_for" msgid="6236608872708021767">"<xliff:g id="APP_NAME">%1$s</xliff:g> の保存したパスキーを使用しますか?"</string> - <string name="get_dialog_title_use_password_for" msgid="625828023234318484">"<xliff:g id="APP_NAME">%1$s</xliff:g> の保存したパスワードを使用しますか?"</string> - <string name="get_dialog_title_single_tap_for" msgid="2057945648748859483">"画面ロックを使用して <xliff:g id="USERNAME">%2$s</xliff:g> で <xliff:g id="APP_NAME">%1$s</xliff:g> にログインできます"</string> - <string name="get_dialog_title_use_sign_in_for" msgid="790049858275131785">"この認証情報を使用して <xliff:g id="APP_NAME">%1$s</xliff:g> にログインしますか?"</string> - <string name="get_dialog_title_unlock_options_for" msgid="7605568190597632433">"<xliff:g id="APP_NAME">%1$s</xliff:g> がログイン方法を使用できるようにしますか?"</string> + <string name="get_dialog_title_use_passkey_for" msgid="479261099705979148">"保存したパスキーを <xliff:g id="APP_NAME">%1$s</xliff:g> に使用する"</string> + <string name="get_dialog_title_use_password_for" msgid="688557784207167647">"保存したパスワードを <xliff:g id="APP_NAME">%1$s</xliff:g> に使用する"</string> + <string name="get_dialog_title_use_sign_in_for" msgid="4233553937542583226">"アカウントを <xliff:g id="APP_NAME">%1$s</xliff:g> に使用する"</string> + <!-- no translation found for get_dialog_description_single_tap (2797059565126030879) --> + <skip /> + <string name="get_dialog_title_unlock_options_for" msgid="7096423827682163270">"<xliff:g id="APP_NAME">%1$s</xliff:g> がログイン方法を使用できるようにする"</string> <string name="get_dialog_title_choose_passkey_for" msgid="9175997688078538490">"<xliff:g id="APP_NAME">%1$s</xliff:g> に使用するパスキーを選択してください"</string> <string name="get_dialog_title_choose_password_for" msgid="1724435823820819221">"<xliff:g id="APP_NAME">%1$s</xliff:g> に使用するパスワードを選択してください"</string> <string name="get_dialog_title_choose_saved_sign_in_for" msgid="2420298653461652728">"<xliff:g id="APP_NAME">%1$s</xliff:g> に使用するログイン情報を選択してください"</string> - <string name="get_dialog_title_choose_sign_in_for" msgid="3048870756117876514">"<xliff:g id="APP_NAME">%1$s</xliff:g> のログインに使用する認証情報の選択"</string> + <string name="get_dialog_title_choose_sign_in_for" msgid="645728947702442421">"<xliff:g id="APP_NAME">%1$s</xliff:g> 用のアカウントを選択する"</string> <string name="get_dialog_title_choose_option_for" msgid="4976380044745029107">"<xliff:g id="APP_NAME">%1$s</xliff:g> のオプションを選択しますか?"</string> <string name="get_dialog_title_use_info_on" msgid="8863708099535435146">"<xliff:g id="APP_NAME">%1$s</xliff:g> でこの情報を使用しますか?"</string> <string name="get_dialog_use_saved_passkey_for" msgid="4618100798664888512">"別の方法でログイン"</string> diff --git a/packages/CredentialManager/res/values-ka/strings.xml b/packages/CredentialManager/res/values-ka/strings.xml index a852f1c3654a..208b816fd756 100644 --- a/packages/CredentialManager/res/values-ka/strings.xml +++ b/packages/CredentialManager/res/values-ka/strings.xml @@ -42,9 +42,6 @@ <string name="choose_create_option_passkey_title" msgid="8762295821604276511">"შესასვლელად წვდომის გასაღების შექმნა: <xliff:g id="APP_NAME">%1$s</xliff:g>"</string> <string name="choose_create_option_password_title" msgid="4481366993598649224">"შესასვლელი პაროლის შენახვა: <xliff:g id="APP_NAME">%1$s</xliff:g>"</string> <string name="choose_create_option_sign_in_title" msgid="7092914088455358079">"აპში შესვლის ინფორმაციის შენახვა: <xliff:g id="APP_NAME">%1$s</xliff:g>"</string> - <string name="choose_create_single_tap_passkey_title" msgid="3872793514041774218">"გსურთ თქვენი ეკრანის დაბლოკვის გამოყენება <xliff:g id="APP_NAME">%1$s</xliff:g>-ისთვის წვდომის გასაღების შესაქმნელად?"</string> - <string name="choose_create_single_tap_password_title" msgid="5231871886818921622">"გსურთ თქვენი ეკრანის დაბლოკვის გამოყენება <xliff:g id="APP_NAME">%1$s</xliff:g>-ისთვის პაროლის შესაქმნელად?"</string> - <string name="choose_create_single_tap_sign_in_title" msgid="256498714574099587">"გსურთ თქვენი ეკრანის დაბლოკვის გამოყენება შესვლის ინფორმაციის შესანახად <xliff:g id="APP_NAME">%1$s</xliff:g>-ისთვის?"</string> <string name="passkey" msgid="632353688396759522">"წვდომის გასაღები"</string> <string name="password" msgid="6738570945182936667">"პაროლი"</string> <string name="passkeys" msgid="5733880786866559847">"წვდომის გასაღები"</string> @@ -71,15 +68,16 @@ <string name="accessibility_back_arrow_button" msgid="3233198183497842492">"წინა გვერდზე დაბრუნება"</string> <string name="accessibility_close_button" msgid="1163435587545377687">"დახურვა"</string> <string name="accessibility_snackbar_dismiss" msgid="3456598374801836120">"დახურვა"</string> - <string name="get_dialog_title_use_passkey_for" msgid="6236608872708021767">"გსურთ თქვენი დამახსოვრებული წვდომის გასაღების გამოყენება აპისთვის: <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string> - <string name="get_dialog_title_use_password_for" msgid="625828023234318484">"გამოიყენებთ შენახულ პაროლს <xliff:g id="APP_NAME">%1$s</xliff:g>-სთვის?"</string> - <string name="get_dialog_title_single_tap_for" msgid="2057945648748859483">"გამოიყენეთ თქვენი ეკრანის დაბლოკვის ფუნქცია <xliff:g id="APP_NAME">%1$s</xliff:g>-ში <xliff:g id="USERNAME">%2$s</xliff:g>-ით შესასვლელად"</string> - <string name="get_dialog_title_use_sign_in_for" msgid="790049858275131785">"გსურთ შესვლის <xliff:g id="APP_NAME">%1$s</xliff:g>-ისთვის გამოყენება?"</string> - <string name="get_dialog_title_unlock_options_for" msgid="7605568190597632433">"გსურთ შესვლის ვარიანტების განბლოკვა <xliff:g id="APP_NAME">%1$s</xliff:g>-სთვის?"</string> + <string name="get_dialog_title_use_passkey_for" msgid="479261099705979148">"თქვენი დამახსოვრებული წვდომის გასაღების გამოყენება <xliff:g id="APP_NAME">%1$s</xliff:g>-ისთვის"</string> + <string name="get_dialog_title_use_password_for" msgid="688557784207167647">"გამოიყენეთ შენახული პაროლი <xliff:g id="APP_NAME">%1$s</xliff:g>-ისთვის"</string> + <string name="get_dialog_title_use_sign_in_for" msgid="4233553937542583226">"გამოიყენეთ თქვენი ანგარიში <xliff:g id="APP_NAME">%1$s</xliff:g>-ისთვის"</string> + <!-- no translation found for get_dialog_description_single_tap (2797059565126030879) --> + <skip /> + <string name="get_dialog_title_unlock_options_for" msgid="7096423827682163270">"შესვლის ვარიანტების განბლოკვა <xliff:g id="APP_NAME">%1$s</xliff:g>-ისთვის"</string> <string name="get_dialog_title_choose_passkey_for" msgid="9175997688078538490">"აირჩიეთ შენახული წვდომის გასაღები <xliff:g id="APP_NAME">%1$s</xliff:g>-სთვის"</string> <string name="get_dialog_title_choose_password_for" msgid="1724435823820819221">"აირჩიეთ შენახული პაროლი <xliff:g id="APP_NAME">%1$s</xliff:g>-სთვის"</string> <string name="get_dialog_title_choose_saved_sign_in_for" msgid="2420298653461652728">"აირჩიეთ სისტემაში შესვლის ინფორმაცია <xliff:g id="APP_NAME">%1$s</xliff:g>-სთვის"</string> - <string name="get_dialog_title_choose_sign_in_for" msgid="3048870756117876514">"აირჩიეთ შესვლა <xliff:g id="APP_NAME">%1$s</xliff:g>-ისთვის"</string> + <string name="get_dialog_title_choose_sign_in_for" msgid="645728947702442421">"აირჩიეთ ანგარიში <xliff:g id="APP_NAME">%1$s</xliff:g>-ისთვის"</string> <string name="get_dialog_title_choose_option_for" msgid="4976380044745029107">"გსურთ აირჩიოთ ვარიანტი <xliff:g id="APP_NAME">%1$s</xliff:g>-ისთვის?"</string> <string name="get_dialog_title_use_info_on" msgid="8863708099535435146">"გსურთ ამ ინფორმაციის გამოყენება <xliff:g id="APP_NAME">%1$s</xliff:g>-ში?"</string> <string name="get_dialog_use_saved_passkey_for" msgid="4618100798664888512">"სხვა ხერხით შესვლა"</string> diff --git a/packages/CredentialManager/res/values-kk/strings.xml b/packages/CredentialManager/res/values-kk/strings.xml index 03eb9d2eb5f3..97506ec7746b 100644 --- a/packages/CredentialManager/res/values-kk/strings.xml +++ b/packages/CredentialManager/res/values-kk/strings.xml @@ -42,9 +42,6 @@ <string name="choose_create_option_passkey_title" msgid="8762295821604276511">"<xliff:g id="APP_NAME">%1$s</xliff:g> қолданбасына кіру үшін кіру кілті жасалсын ба?"</string> <string name="choose_create_option_password_title" msgid="4481366993598649224">"<xliff:g id="APP_NAME">%1$s</xliff:g> қолданбасына кіру үшін құпия сөз сақталсын ба?"</string> <string name="choose_create_option_sign_in_title" msgid="7092914088455358079">"<xliff:g id="APP_NAME">%1$s</xliff:g> үшін кіру мәліметін сақтау керек пе?"</string> - <string name="choose_create_single_tap_passkey_title" msgid="3872793514041774218">"<xliff:g id="APP_NAME">%1$s</xliff:g> кіру кілтін жасау үшін экран құлпын пайдаланасыз ба?"</string> - <string name="choose_create_single_tap_password_title" msgid="5231871886818921622">"<xliff:g id="APP_NAME">%1$s</xliff:g> құпия сөзін жасау үшін экран құлпын пайдаланасыз ба?"</string> - <string name="choose_create_single_tap_sign_in_title" msgid="256498714574099587">"<xliff:g id="APP_NAME">%1$s</xliff:g> қолданбасындағы аккаунтқа кіру ақпаратын сақтау үшін экран құлпын пайдаланасыз ба?"</string> <string name="passkey" msgid="632353688396759522">"Кіру кілті"</string> <string name="password" msgid="6738570945182936667">"құпия сөз"</string> <string name="passkeys" msgid="5733880786866559847">"кіру кілттері"</string> @@ -71,15 +68,16 @@ <string name="accessibility_back_arrow_button" msgid="3233198183497842492">"Алдыңғы бетке оралу"</string> <string name="accessibility_close_button" msgid="1163435587545377687">"Жабу"</string> <string name="accessibility_snackbar_dismiss" msgid="3456598374801836120">"Жабу"</string> - <string name="get_dialog_title_use_passkey_for" msgid="6236608872708021767">"<xliff:g id="APP_NAME">%1$s</xliff:g> үшін сақталған кіру кілті пайдаланылсын ба?"</string> - <string name="get_dialog_title_use_password_for" msgid="625828023234318484">"<xliff:g id="APP_NAME">%1$s</xliff:g> үшін сақталған құпия сөзіңізді пайдаланасыз ба?"</string> - <string name="get_dialog_title_single_tap_for" msgid="2057945648748859483">"<xliff:g id="APP_NAME">%1$s</xliff:g> қолданбасына <xliff:g id="USERNAME">%2$s</xliff:g> аккаунтымен кіру үшін экран құлпын қолданыңыз."</string> - <string name="get_dialog_title_use_sign_in_for" msgid="790049858275131785">"<xliff:g id="APP_NAME">%1$s</xliff:g> қолданбасына кіру деректерін пайдаланасыз ба?"</string> - <string name="get_dialog_title_unlock_options_for" msgid="7605568190597632433">"<xliff:g id="APP_NAME">%1$s</xliff:g> үшін кіру опциялары ашылсын ба?"</string> + <string name="get_dialog_title_use_passkey_for" msgid="479261099705979148">"<xliff:g id="APP_NAME">%1$s</xliff:g> үшін сақталған кіру кілті пайдаланыңыз"</string> + <string name="get_dialog_title_use_password_for" msgid="688557784207167647">"<xliff:g id="APP_NAME">%1$s</xliff:g> үшін сақталған құпия сөзді пайдаланыңыз"</string> + <string name="get_dialog_title_use_sign_in_for" msgid="4233553937542583226">"<xliff:g id="APP_NAME">%1$s</xliff:g> үшін аккаунтыңызды пайдаланыңыз"</string> + <!-- no translation found for get_dialog_description_single_tap (2797059565126030879) --> + <skip /> + <string name="get_dialog_title_unlock_options_for" msgid="7096423827682163270">"<xliff:g id="APP_NAME">%1$s</xliff:g> үшін аккаунтқа кіру әдістерін ашыңыз"</string> <string name="get_dialog_title_choose_passkey_for" msgid="9175997688078538490">"<xliff:g id="APP_NAME">%1$s</xliff:g> үшін сақталған кіру кілтін таңдаңыз"</string> <string name="get_dialog_title_choose_password_for" msgid="1724435823820819221">"<xliff:g id="APP_NAME">%1$s</xliff:g> үшін сақталған құпия сөзді таңдаңыз"</string> <string name="get_dialog_title_choose_saved_sign_in_for" msgid="2420298653461652728">"<xliff:g id="APP_NAME">%1$s</xliff:g> үшін сақталған кіру деректерін таңдаңыз"</string> - <string name="get_dialog_title_choose_sign_in_for" msgid="3048870756117876514">"<xliff:g id="APP_NAME">%1$s</xliff:g> қолданбасына кіру деректерін таңдаңыз"</string> + <string name="get_dialog_title_choose_sign_in_for" msgid="645728947702442421">"<xliff:g id="APP_NAME">%1$s</xliff:g> үшін аккаунт таңдаңыз"</string> <string name="get_dialog_title_choose_option_for" msgid="4976380044745029107">"<xliff:g id="APP_NAME">%1$s</xliff:g> үшін опция таңдайсыз ба?"</string> <string name="get_dialog_title_use_info_on" msgid="8863708099535435146">"Бұл ақпарат <xliff:g id="APP_NAME">%1$s</xliff:g> қолданбасында сақталсын ба?"</string> <string name="get_dialog_use_saved_passkey_for" msgid="4618100798664888512">"Басқаша кіру"</string> diff --git a/packages/CredentialManager/res/values-km/strings.xml b/packages/CredentialManager/res/values-km/strings.xml index 279474f96cb1..a7a1cf27173e 100644 --- a/packages/CredentialManager/res/values-km/strings.xml +++ b/packages/CredentialManager/res/values-km/strings.xml @@ -42,9 +42,6 @@ <string name="choose_create_option_passkey_title" msgid="8762295821604276511">"បង្កើតកូដសម្ងាត់ ដើម្បីចូលគណនី <xliff:g id="APP_NAME">%1$s</xliff:g> ឬ?"</string> <string name="choose_create_option_password_title" msgid="4481366993598649224">"រក្សាទុកពាក្យសម្ងាត់ ដើម្បីចូលគណនី <xliff:g id="APP_NAME">%1$s</xliff:g> ឬ?"</string> <string name="choose_create_option_sign_in_title" msgid="7092914088455358079">"រក្សាទុកព័ត៌មានចូលគណនីសម្រាប់ <xliff:g id="APP_NAME">%1$s</xliff:g> ឬ?"</string> - <string name="choose_create_single_tap_passkey_title" msgid="3872793514041774218">"ប្រើមុខងារចាក់សោអេក្រង់របស់អ្នក ដើម្បីបង្កើតកូដសម្ងាត់សម្រាប់ <xliff:g id="APP_NAME">%1$s</xliff:g> ឬ?"</string> - <string name="choose_create_single_tap_password_title" msgid="5231871886818921622">"ប្រើមុខងារចាក់សោអេក្រង់របស់អ្នក ដើម្បីបង្កើតពាក្យសម្ងាត់សម្រាប់ <xliff:g id="APP_NAME">%1$s</xliff:g> ឬ?"</string> - <string name="choose_create_single_tap_sign_in_title" msgid="256498714574099587">"ប្រើមុខងារចាក់សោអេក្រង់របស់អ្នក ដើម្បីរក្សាទុកព័ត៌មានចូលគណនីសម្រាប់ <xliff:g id="APP_NAME">%1$s</xliff:g> ឬ?"</string> <string name="passkey" msgid="632353688396759522">"កូដសម្ងាត់"</string> <string name="password" msgid="6738570945182936667">"ពាក្យសម្ងាត់"</string> <string name="passkeys" msgid="5733880786866559847">"កូដសម្ងាត់"</string> @@ -71,15 +68,16 @@ <string name="accessibility_back_arrow_button" msgid="3233198183497842492">"ត្រឡប់ទៅទំព័រមុនវិញ"</string> <string name="accessibility_close_button" msgid="1163435587545377687">"បិទ"</string> <string name="accessibility_snackbar_dismiss" msgid="3456598374801836120">"ច្រានចោល"</string> - <string name="get_dialog_title_use_passkey_for" msgid="6236608872708021767">"ប្រើកូដសម្ងាត់ដែលបានរក្សាទុករបស់អ្នកសម្រាប់ <xliff:g id="APP_NAME">%1$s</xliff:g> ឬ?"</string> - <string name="get_dialog_title_use_password_for" msgid="625828023234318484">"ប្រើពាក្យសម្ងាត់ដែលអ្នកបានរក្សាទុកសម្រាប់ <xliff:g id="APP_NAME">%1$s</xliff:g> ឬ?"</string> - <string name="get_dialog_title_single_tap_for" msgid="2057945648748859483">"ប្រើមុខងារចាក់សោអេក្រង់របស់អ្នក ដើម្បីចូល <xliff:g id="APP_NAME">%1$s</xliff:g> ដោយប្រើ <xliff:g id="USERNAME">%2$s</xliff:g>"</string> - <string name="get_dialog_title_use_sign_in_for" msgid="790049858275131785">"ប្រើការចូលគណនីរបស់អ្នកសម្រាប់ <xliff:g id="APP_NAME">%1$s</xliff:g> ឬ?"</string> - <string name="get_dialog_title_unlock_options_for" msgid="7605568190597632433">"ដោះសោជម្រើសចូលគណនីសម្រាប់ <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string> + <string name="get_dialog_title_use_passkey_for" msgid="479261099705979148">"ប្រើកូដសម្ងាត់ដែលអ្នកបានរក្សាទុកសម្រាប់ <xliff:g id="APP_NAME">%1$s</xliff:g>"</string> + <string name="get_dialog_title_use_password_for" msgid="688557784207167647">"ប្រើពាក្យសម្ងាត់ដែលអ្នកបានរក្សាទុកសម្រាប់ <xliff:g id="APP_NAME">%1$s</xliff:g>"</string> + <string name="get_dialog_title_use_sign_in_for" msgid="4233553937542583226">"ប្រើគណនីរបស់អ្នកសម្រាប់ <xliff:g id="APP_NAME">%1$s</xliff:g>"</string> + <!-- no translation found for get_dialog_description_single_tap (2797059565126030879) --> + <skip /> + <string name="get_dialog_title_unlock_options_for" msgid="7096423827682163270">"ដោះសោជម្រើសចូលគណនីសម្រាប់ <xliff:g id="APP_NAME">%1$s</xliff:g>"</string> <string name="get_dialog_title_choose_passkey_for" msgid="9175997688078538490">"ជ្រើសរើសកូដសម្ងាត់ដែលបានរក្សាទុកសម្រាប់ <xliff:g id="APP_NAME">%1$s</xliff:g>"</string> <string name="get_dialog_title_choose_password_for" msgid="1724435823820819221">"ជ្រើសរើសពាក្យសម្ងាត់ដែលបានរក្សាទុកសម្រាប់ <xliff:g id="APP_NAME">%1$s</xliff:g>"</string> <string name="get_dialog_title_choose_saved_sign_in_for" msgid="2420298653461652728">"ជ្រើសរើសការចូលគណនីដែលបានរក្សាទុកសម្រាប់ <xliff:g id="APP_NAME">%1$s</xliff:g>"</string> - <string name="get_dialog_title_choose_sign_in_for" msgid="3048870756117876514">"ជ្រើសរើសការចូលគណនីសម្រាប់ <xliff:g id="APP_NAME">%1$s</xliff:g>"</string> + <string name="get_dialog_title_choose_sign_in_for" msgid="645728947702442421">"ជ្រើសរើសគណនីសម្រាប់ <xliff:g id="APP_NAME">%1$s</xliff:g>"</string> <string name="get_dialog_title_choose_option_for" msgid="4976380044745029107">"ជ្រើសរើសជម្រើសសម្រាប់ <xliff:g id="APP_NAME">%1$s</xliff:g> ឬ?"</string> <string name="get_dialog_title_use_info_on" msgid="8863708099535435146">"ប្រើព័ត៌មាននេះនៅលើ <xliff:g id="APP_NAME">%1$s</xliff:g> ឬ?"</string> <string name="get_dialog_use_saved_passkey_for" msgid="4618100798664888512">"ចូលគណនីដោយប្រើវិធីផ្សេងទៀត"</string> diff --git a/packages/CredentialManager/res/values-kn/strings.xml b/packages/CredentialManager/res/values-kn/strings.xml index 2f090e4e3478..2d46093a525d 100644 --- a/packages/CredentialManager/res/values-kn/strings.xml +++ b/packages/CredentialManager/res/values-kn/strings.xml @@ -42,9 +42,6 @@ <string name="choose_create_option_passkey_title" msgid="8762295821604276511">"<xliff:g id="APP_NAME">%1$s</xliff:g> ಗೆ ಸೈನ್ ಇನ್ ಮಾಡಲು ಪಾಸ್ಕೀ ಯನ್ನು ರಚಿಸಬೇಕೇ?"</string> <string name="choose_create_option_password_title" msgid="4481366993598649224">"<xliff:g id="APP_NAME">%1$s</xliff:g> ಗೆ ಸೈನ್ ಇನ್ ಮಾಡಲು ಪಾಸ್ವರ್ಡ್ ಅನ್ನು ಸೇವ್ ಮಾಡಬೇಕೇ?"</string> <string name="choose_create_option_sign_in_title" msgid="7092914088455358079">"<xliff:g id="APP_NAME">%1$s</xliff:g> ಗಾಗಿ ಸೈನ್-ಇನ್ ಮಾಹಿತಿಯನ್ನು ಸೇವ್ ಮಾಡಬೇಕೇ?"</string> - <string name="choose_create_single_tap_passkey_title" msgid="3872793514041774218">"<xliff:g id="APP_NAME">%1$s</xliff:g> ಗಾಗಿ ಪಾಸ್ಕೀಯನ್ನು ರಚಿಸಲು ನಿಮ್ಮ ಸ್ಕ್ರೀನ್ ಲಾಕ್ ಅನ್ನು ಬಳಸುವುದೇ?"</string> - <string name="choose_create_single_tap_password_title" msgid="5231871886818921622">"<xliff:g id="APP_NAME">%1$s</xliff:g> ಗಾಗಿ ಪಾಸ್ವರ್ಡ್ ಅನ್ನು ರಚಿಸಲು ನಿಮ್ಮ ಸ್ಕ್ರೀನ್ ಲಾಕ್ ಅನ್ನು ಬಳಸುವುದೇ?"</string> - <string name="choose_create_single_tap_sign_in_title" msgid="256498714574099587">"<xliff:g id="APP_NAME">%1$s</xliff:g> ಗಾಗಿ ಸೈನ್ ಇನ್ ಮಾಹಿತಿಯನ್ನು ಸೇವ್ ಮಾಡಲು ನಿಮ್ಮ ಸ್ಕ್ರೀನ್ ಲಾಕ್ ಅನ್ನು ಬಳಸುವುದೇ?"</string> <string name="passkey" msgid="632353688396759522">"ಪಾಸ್ಕೀ"</string> <string name="password" msgid="6738570945182936667">"ಪಾಸ್ವರ್ಡ್"</string> <string name="passkeys" msgid="5733880786866559847">"ಪಾಸ್ಕೀಗಳು"</string> @@ -71,15 +68,16 @@ <string name="accessibility_back_arrow_button" msgid="3233198183497842492">"ಹಿಂದಿನ ಪುಟಕ್ಕೆ ಹಿಂದಿರುಗಿ"</string> <string name="accessibility_close_button" msgid="1163435587545377687">"ಮುಚ್ಚಿರಿ"</string> <string name="accessibility_snackbar_dismiss" msgid="3456598374801836120">"ವಜಾಗೊಳಿಸಿ"</string> - <string name="get_dialog_title_use_passkey_for" msgid="6236608872708021767">"<xliff:g id="APP_NAME">%1$s</xliff:g> ಗಾಗಿ ಉಳಿಸಲಾದ ನಿಮ್ಮ ಪಾಸ್ಕೀ ಅನ್ನು ಬಳಸಬೇಕೆ?"</string> - <string name="get_dialog_title_use_password_for" msgid="625828023234318484">"<xliff:g id="APP_NAME">%1$s</xliff:g> ಗಾಗಿ ನಿಮ್ಮ ಉಳಿಸಲಾದ ಪಾಸ್ವರ್ಡ್ ಅನ್ನು ಬಳಸಬೇಕೇ?"</string> - <string name="get_dialog_title_single_tap_for" msgid="2057945648748859483">"<xliff:g id="APP_NAME">%1$s</xliff:g> ಗೆ <xliff:g id="USERNAME">%2$s</xliff:g> ಮೂಲಕ ಸೈನ್ ಇನ್ ಮಾಡಲು ನಿಮ್ಮ ಸ್ಕ್ರೀನ್ ಲಾಕ್ ಅನ್ನು ಬಳಸಿ"</string> - <string name="get_dialog_title_use_sign_in_for" msgid="790049858275131785">"<xliff:g id="APP_NAME">%1$s</xliff:g> ಗಾಗಿ ನಿಮ್ಮ ಸೈನ್ ಇನ್ ಅನ್ನು ಬಳಸಬೇಕೇ?"</string> - <string name="get_dialog_title_unlock_options_for" msgid="7605568190597632433">"<xliff:g id="APP_NAME">%1$s</xliff:g> ಗಾಗಿ ಸೈನ್-ಇನ್ ಆಯ್ಕೆಗಳನ್ನು ಅನ್ಲಾಕ್ ಮಾಡಬೇಕೇ?"</string> + <string name="get_dialog_title_use_passkey_for" msgid="479261099705979148">"<xliff:g id="APP_NAME">%1$s</xliff:g> ಗಾಗಿ ಸೇವ್ ಮಾಡಿದ ನಿಮ್ಮ ಪಾಸ್ಕೀ ಅನ್ನು ಬಳಸಿ"</string> + <string name="get_dialog_title_use_password_for" msgid="688557784207167647">"<xliff:g id="APP_NAME">%1$s</xliff:g> ಗಾಗಿ ಸೇವ್ ಮಾಡಿದ ನಿಮ್ಮ ಪಾಸ್ವರ್ಡ್ ಅನ್ನು ಬಳಸಿ"</string> + <string name="get_dialog_title_use_sign_in_for" msgid="4233553937542583226">"<xliff:g id="APP_NAME">%1$s</xliff:g> ಗಾಗಿ ನಿಮ್ಮ ಖಾತೆಯನ್ನು ಬಳಸಿ"</string> + <!-- no translation found for get_dialog_description_single_tap (2797059565126030879) --> + <skip /> + <string name="get_dialog_title_unlock_options_for" msgid="7096423827682163270">"<xliff:g id="APP_NAME">%1$s</xliff:g> ಗಾಗಿ ಸೈನ್ ಇನ್ ಆಯ್ಕೆಗಳನ್ನು ಅನ್ಲಾಕ್ ಮಾಡಿ"</string> <string name="get_dialog_title_choose_passkey_for" msgid="9175997688078538490">"<xliff:g id="APP_NAME">%1$s</xliff:g> ಗಾಗಿ ಉಳಿಸಲಾದ ಪಾಸ್ಕೀ ಅನ್ನು ಆರಿಸಿ"</string> <string name="get_dialog_title_choose_password_for" msgid="1724435823820819221">"<xliff:g id="APP_NAME">%1$s</xliff:g> ಗಾಗಿ ಉಳಿಸಲಾದ ಪಾಸ್ವರ್ಡ್ ಅನ್ನು ಆರಿಸಿ"</string> <string name="get_dialog_title_choose_saved_sign_in_for" msgid="2420298653461652728">"<xliff:g id="APP_NAME">%1$s</xliff:g> ಗಾಗಿ ಉಳಿಸಲಾದ ಸೈನ್-ಇನ್ ಮಾಹಿತಿಯನ್ನು ಆಯ್ಕೆಮಾಡಿ"</string> - <string name="get_dialog_title_choose_sign_in_for" msgid="3048870756117876514">"<xliff:g id="APP_NAME">%1$s</xliff:g> ಗಾಗಿ ಸೈನ್ ಇನ್ ಅನ್ನು ಆರಿಸಿ"</string> + <string name="get_dialog_title_choose_sign_in_for" msgid="645728947702442421">"<xliff:g id="APP_NAME">%1$s</xliff:g> ಗಾಗಿ ಒಂದು ಖಾತೆಯನ್ನು ಆಯ್ಕೆಮಾಡಿ"</string> <string name="get_dialog_title_choose_option_for" msgid="4976380044745029107">"<xliff:g id="APP_NAME">%1$s</xliff:g> ಗಾಗಿ ಆಯ್ಕೆಯನ್ನು ಆರಿಸಬೇಕೆ?"</string> <string name="get_dialog_title_use_info_on" msgid="8863708099535435146">"ಈ ಮಾಹಿತಿಯನ್ನು <xliff:g id="APP_NAME">%1$s</xliff:g> ನಲ್ಲಿ ಬಳಸಬೇಕೆ?"</string> <string name="get_dialog_use_saved_passkey_for" msgid="4618100798664888512">"ಬೇರೆ ವಿಧಾನದಲ್ಲಿ ಸೈನ್ ಇನ್ ಮಾಡಿ"</string> diff --git a/packages/CredentialManager/res/values-ko/strings.xml b/packages/CredentialManager/res/values-ko/strings.xml index f2ead8582e76..0465c1353910 100644 --- a/packages/CredentialManager/res/values-ko/strings.xml +++ b/packages/CredentialManager/res/values-ko/strings.xml @@ -42,9 +42,6 @@ <string name="choose_create_option_passkey_title" msgid="8762295821604276511">"<xliff:g id="APP_NAME">%1$s</xliff:g>의 패스키를 생성할까요?"</string> <string name="choose_create_option_password_title" msgid="4481366993598649224">"비밀번호를 저장하여 <xliff:g id="APP_NAME">%1$s</xliff:g>에 로그인하시겠습니까?"</string> <string name="choose_create_option_sign_in_title" msgid="7092914088455358079">"<xliff:g id="APP_NAME">%1$s</xliff:g>의 로그인 정보를 저장하시겠습니까?"</string> - <string name="choose_create_single_tap_passkey_title" msgid="3872793514041774218">"<xliff:g id="APP_NAME">%1$s</xliff:g>용 패스키를 생성하기 위해 화면 잠금을 사용하시겠습니까?"</string> - <string name="choose_create_single_tap_password_title" msgid="5231871886818921622">"<xliff:g id="APP_NAME">%1$s</xliff:g>용 패스키를 생성하기 위해 비밀번호를 사용하시겠습니까?"</string> - <string name="choose_create_single_tap_sign_in_title" msgid="256498714574099587">"<xliff:g id="APP_NAME">%1$s</xliff:g>용 로그인 정보를 저장하기 위해 화면 잠금을 사용하시겠습니까?"</string> <string name="passkey" msgid="632353688396759522">"패스키"</string> <string name="password" msgid="6738570945182936667">"비밀번호"</string> <string name="passkeys" msgid="5733880786866559847">"패스키"</string> @@ -71,15 +68,16 @@ <string name="accessibility_back_arrow_button" msgid="3233198183497842492">"이전 페이지로 돌아가기"</string> <string name="accessibility_close_button" msgid="1163435587545377687">"닫기"</string> <string name="accessibility_snackbar_dismiss" msgid="3456598374801836120">"닫기"</string> - <string name="get_dialog_title_use_passkey_for" msgid="6236608872708021767">"<xliff:g id="APP_NAME">%1$s</xliff:g> 앱용으로 저장된 패스키를 사용하시겠습니까?"</string> - <string name="get_dialog_title_use_password_for" msgid="625828023234318484">"저장된 비밀번호를 <xliff:g id="APP_NAME">%1$s</xliff:g>에 사용할까요?"</string> - <string name="get_dialog_title_single_tap_for" msgid="2057945648748859483">"화면 잠금을 사용하여 <xliff:g id="USERNAME">%2$s</xliff:g> 계정으로 <xliff:g id="APP_NAME">%1$s</xliff:g>에 로그인합니다."</string> - <string name="get_dialog_title_use_sign_in_for" msgid="790049858275131785">"<xliff:g id="APP_NAME">%1$s</xliff:g>에 로그인을 사용하시겠습니까?"</string> - <string name="get_dialog_title_unlock_options_for" msgid="7605568190597632433">"<xliff:g id="APP_NAME">%1$s</xliff:g>에 대해 로그인 옵션을 잠금 해제하시겠습니까?"</string> + <string name="get_dialog_title_use_passkey_for" msgid="479261099705979148">"<xliff:g id="APP_NAME">%1$s</xliff:g> 앱에 대해 저장된 패스키를 사용하시겠습니까?"</string> + <string name="get_dialog_title_use_password_for" msgid="688557784207167647">"<xliff:g id="APP_NAME">%1$s</xliff:g> 앱에 대해 저장된 비밀번호를 사용하시겠습니까?"</string> + <string name="get_dialog_title_use_sign_in_for" msgid="4233553937542583226">"<xliff:g id="APP_NAME">%1$s</xliff:g> 앱에 계정을 사용하시겠습니까?"</string> + <!-- no translation found for get_dialog_description_single_tap (2797059565126030879) --> + <skip /> + <string name="get_dialog_title_unlock_options_for" msgid="7096423827682163270">"<xliff:g id="APP_NAME">%1$s</xliff:g> 앱에 대해 로그인 옵션을 잠금 해제하시겠습니까?"</string> <string name="get_dialog_title_choose_passkey_for" msgid="9175997688078538490">"<xliff:g id="APP_NAME">%1$s</xliff:g>에 대해 저장된 패스키 선택"</string> <string name="get_dialog_title_choose_password_for" msgid="1724435823820819221">"<xliff:g id="APP_NAME">%1$s</xliff:g>에 대해 저장된 비밀번호 선택"</string> <string name="get_dialog_title_choose_saved_sign_in_for" msgid="2420298653461652728">"<xliff:g id="APP_NAME">%1$s</xliff:g>에 대해 저장된 로그인 정보 선택"</string> - <string name="get_dialog_title_choose_sign_in_for" msgid="3048870756117876514">"<xliff:g id="APP_NAME">%1$s</xliff:g>에 사용할 로그인 선택"</string> + <string name="get_dialog_title_choose_sign_in_for" msgid="645728947702442421">"<xliff:g id="APP_NAME">%1$s</xliff:g> 앱에 사용할 계정 선택"</string> <string name="get_dialog_title_choose_option_for" msgid="4976380044745029107">"<xliff:g id="APP_NAME">%1$s</xliff:g> 앱의 옵션을 선택하시겠습니까?"</string> <string name="get_dialog_title_use_info_on" msgid="8863708099535435146">"<xliff:g id="APP_NAME">%1$s</xliff:g>에서 이 정보를 사용하시나요?"</string> <string name="get_dialog_use_saved_passkey_for" msgid="4618100798664888512">"다른 방법으로 로그인"</string> diff --git a/packages/CredentialManager/res/values-ky/strings.xml b/packages/CredentialManager/res/values-ky/strings.xml index 4e3fed1e1874..49f946de36da 100644 --- a/packages/CredentialManager/res/values-ky/strings.xml +++ b/packages/CredentialManager/res/values-ky/strings.xml @@ -42,9 +42,6 @@ <string name="choose_create_option_passkey_title" msgid="8762295821604276511">"<xliff:g id="APP_NAME">%1$s</xliff:g> колдонмосуна кирүү үчүн киргизүүчү ачкычты түзөсүзбү?"</string> <string name="choose_create_option_password_title" msgid="4481366993598649224">"<xliff:g id="APP_NAME">%1$s</xliff:g> колдонмосуна кирүү үчүн сырсөздү сактайсызбы?"</string> <string name="choose_create_option_sign_in_title" msgid="7092914088455358079">"<xliff:g id="APP_NAME">%1$s</xliff:g> үчүн кирүү маалыматы сакталсынбы?"</string> - <string name="choose_create_single_tap_passkey_title" msgid="3872793514041774218">"<xliff:g id="APP_NAME">%1$s</xliff:g> колдонмосу үчүн киргизүүчү ачкыч катары экрандын кулпусун колдоносузбу?"</string> - <string name="choose_create_single_tap_password_title" msgid="5231871886818921622">"<xliff:g id="APP_NAME">%1$s</xliff:g> колдонмосу үчүн сырсөз катары экрандын кулпусун колдоносузбу?"</string> - <string name="choose_create_single_tap_sign_in_title" msgid="256498714574099587">"<xliff:g id="APP_NAME">%1$s</xliff:g> колдонмосу үчүн кирүү маалыматы катары экрандын кулпусун колдоносузбу?"</string> <string name="passkey" msgid="632353688396759522">"киргизүүчү ачкыч"</string> <string name="password" msgid="6738570945182936667">"сырсөз"</string> <string name="passkeys" msgid="5733880786866559847">"киргизүүчү ачкычтар"</string> @@ -71,15 +68,16 @@ <string name="accessibility_back_arrow_button" msgid="3233198183497842492">"Мурунку бетке кайтуу"</string> <string name="accessibility_close_button" msgid="1163435587545377687">"Жабуу"</string> <string name="accessibility_snackbar_dismiss" msgid="3456598374801836120">"Жабуу"</string> - <string name="get_dialog_title_use_passkey_for" msgid="6236608872708021767">"<xliff:g id="APP_NAME">%1$s</xliff:g> колдонмосуна кирүү үчүн сакталган ачкычты колдоносузбу?"</string> - <string name="get_dialog_title_use_password_for" msgid="625828023234318484">"<xliff:g id="APP_NAME">%1$s</xliff:g> үчүн сакталган сырсөздү колдоносузбу?"</string> - <string name="get_dialog_title_single_tap_for" msgid="2057945648748859483">"<xliff:g id="APP_NAME">%1$s</xliff:g> колдонмосуна <xliff:g id="USERNAME">%2$s</xliff:g> аккаунту менен кирүү үчүн экрандын кулпусун колдонуңуз"</string> - <string name="get_dialog_title_use_sign_in_for" msgid="790049858275131785">"<xliff:g id="APP_NAME">%1$s</xliff:g> колдонмосуна төмөнкү аккаунт менен киресизби?"</string> - <string name="get_dialog_title_unlock_options_for" msgid="7605568190597632433">"<xliff:g id="APP_NAME">%1$s</xliff:g> үчүн кирүү параметрлеринин кулпусу ачылсынбы?"</string> + <string name="get_dialog_title_use_passkey_for" msgid="479261099705979148">"<xliff:g id="APP_NAME">%1$s</xliff:g> үчүн сакталган киргизүүчү ачкычты колдонуңуз"</string> + <string name="get_dialog_title_use_password_for" msgid="688557784207167647">"<xliff:g id="APP_NAME">%1$s</xliff:g> үчүн сакталган сырсөздү колдонуңуз"</string> + <string name="get_dialog_title_use_sign_in_for" msgid="4233553937542583226">"<xliff:g id="APP_NAME">%1$s</xliff:g> үчүн аккаунтуңузду колдонуңуз"</string> + <!-- no translation found for get_dialog_description_single_tap (2797059565126030879) --> + <skip /> + <string name="get_dialog_title_unlock_options_for" msgid="7096423827682163270">"<xliff:g id="APP_NAME">%1$s</xliff:g> үчүн кирүү параметрлеринин кулпусун ачыңыз"</string> <string name="get_dialog_title_choose_passkey_for" msgid="9175997688078538490">"<xliff:g id="APP_NAME">%1$s</xliff:g> үчүн сакталган киргизүүчү ачкычты тандаңыз"</string> <string name="get_dialog_title_choose_password_for" msgid="1724435823820819221">"<xliff:g id="APP_NAME">%1$s</xliff:g> үчүн сакталган сырсөздү тандаңыз"</string> <string name="get_dialog_title_choose_saved_sign_in_for" msgid="2420298653461652728">"<xliff:g id="APP_NAME">%1$s</xliff:g> үчүн кирүү маалыматын тандаңыз"</string> - <string name="get_dialog_title_choose_sign_in_for" msgid="3048870756117876514">"<xliff:g id="APP_NAME">%1$s</xliff:g> колдонмосуна кайсы аккаунт менен киресиз:"</string> + <string name="get_dialog_title_choose_sign_in_for" msgid="645728947702442421">"<xliff:g id="APP_NAME">%1$s</xliff:g> үчүн аккаунт тандаңыз"</string> <string name="get_dialog_title_choose_option_for" msgid="4976380044745029107">"<xliff:g id="APP_NAME">%1$s</xliff:g> үчүн параметр тандайсызбы?"</string> <string name="get_dialog_title_use_info_on" msgid="8863708099535435146">"Бул маалыматты <xliff:g id="APP_NAME">%1$s</xliff:g> колдонмосунда пайдаланасызбы?"</string> <string name="get_dialog_use_saved_passkey_for" msgid="4618100798664888512">"Башка жол менен кирүү"</string> diff --git a/packages/CredentialManager/res/values-lo/strings.xml b/packages/CredentialManager/res/values-lo/strings.xml index e0f8839f1465..efb0cbee48c9 100644 --- a/packages/CredentialManager/res/values-lo/strings.xml +++ b/packages/CredentialManager/res/values-lo/strings.xml @@ -42,9 +42,6 @@ <string name="choose_create_option_passkey_title" msgid="8762295821604276511">"ສ້າງກະແຈຜ່ານເພື່ອເຂົ້າສູ່ລະບົບ <xliff:g id="APP_NAME">%1$s</xliff:g> ບໍ?"</string> <string name="choose_create_option_password_title" msgid="4481366993598649224">"ບັນທຶກລະຫັດຜ່ານເພື່ອເຂົ້າສູ່ລະບົບ <xliff:g id="APP_NAME">%1$s</xliff:g> ບໍ?"</string> <string name="choose_create_option_sign_in_title" msgid="7092914088455358079">"ບັນທຶກຂໍ້ມູນການເຂົ້າສູ່ລະບົບສຳລັບ <xliff:g id="APP_NAME">%1$s</xliff:g> ບໍ?"</string> - <string name="choose_create_single_tap_passkey_title" msgid="3872793514041774218">"ໃຊ້ລັອກໜ້າຈໍຂອງທ່ານເພື່ອສ້າງກະແຈຜ່ານສຳລັບ <xliff:g id="APP_NAME">%1$s</xliff:g> ບໍ?"</string> - <string name="choose_create_single_tap_password_title" msgid="5231871886818921622">"ໃຊ້ລັອກໜ້າຈໍຂອງທ່ານເພື່ອສ້າງລະຫັດຜ່ານສຳລັບ <xliff:g id="APP_NAME">%1$s</xliff:g> ບໍ?"</string> - <string name="choose_create_single_tap_sign_in_title" msgid="256498714574099587">"ໃຊ້ລັອກໜ້າຈໍຂອງທ່ານເພື່ອບັນທຶກຂໍ້ມູນການເຂົ້າສູ່ລະບົບສຳລັບ<xliff:g id="APP_NAME">%1$s</xliff:g> ບໍ?"</string> <string name="passkey" msgid="632353688396759522">"ກະແຈຜ່ານ"</string> <string name="password" msgid="6738570945182936667">"ລະຫັດຜ່ານ"</string> <string name="passkeys" msgid="5733880786866559847">"ກະແຈຜ່ານ"</string> @@ -71,15 +68,16 @@ <string name="accessibility_back_arrow_button" msgid="3233198183497842492">"ກັບຄືນໄປຫາໜ້າກ່ອນໜ້ານີ້"</string> <string name="accessibility_close_button" msgid="1163435587545377687">"ປິດ"</string> <string name="accessibility_snackbar_dismiss" msgid="3456598374801836120">"ປິດໄວ້"</string> - <string name="get_dialog_title_use_passkey_for" msgid="6236608872708021767">"ໃຊ້ກະແຈຜ່ານທີ່ບັນທຶກໄວ້ຂອງທ່ານສຳລັບ <xliff:g id="APP_NAME">%1$s</xliff:g> ບໍ?"</string> - <string name="get_dialog_title_use_password_for" msgid="625828023234318484">"ໃຊ້ລະຫັດຜ່ານທີ່ບັນທຶກໄວ້ຂອງທ່ານສຳລັບ <xliff:g id="APP_NAME">%1$s</xliff:g> ບໍ?"</string> - <string name="get_dialog_title_single_tap_for" msgid="2057945648748859483">"ໃຊ້ການລັອກໜ້າຈໍຂອງທ່ານເພື່ອເຂົ້າສູ່ລະບົບ <xliff:g id="APP_NAME">%1$s</xliff:g> ດ້ວຍ <xliff:g id="USERNAME">%2$s</xliff:g>"</string> - <string name="get_dialog_title_use_sign_in_for" msgid="790049858275131785">"ເລືອກການເຂົ້າສູ່ລະບົບຂອງທ່ານສຳລັບ <xliff:g id="APP_NAME">%1$s</xliff:g> ບໍ?"</string> - <string name="get_dialog_title_unlock_options_for" msgid="7605568190597632433">"ປົດລັອກຕົວເລືອກການເຂົ້າສູ່ລະບົບສຳລັບ <xliff:g id="APP_NAME">%1$s</xliff:g> ບໍ?"</string> + <string name="get_dialog_title_use_passkey_for" msgid="479261099705979148">"ໃຊ້ກະແຈຜ່ານທີ່ບັນທຶກໄວ້ຂອງທ່ານສຳລັບ <xliff:g id="APP_NAME">%1$s</xliff:g>"</string> + <string name="get_dialog_title_use_password_for" msgid="688557784207167647">"ໃຊ້ລະຫັດຜ່ານທີ່ບັນທຶກໄວ້ຂອງທ່ານສຳລັບ <xliff:g id="APP_NAME">%1$s</xliff:g>"</string> + <string name="get_dialog_title_use_sign_in_for" msgid="4233553937542583226">"ໃຊ້ບັນຊີຂອງທ່ານສຳລັບ <xliff:g id="APP_NAME">%1$s</xliff:g>"</string> + <!-- no translation found for get_dialog_description_single_tap (2797059565126030879) --> + <skip /> + <string name="get_dialog_title_unlock_options_for" msgid="7096423827682163270">"ປົດລັອກຕົວເລືອກການເຂົ້າສູ່ລະບົບສຳລັບ <xliff:g id="APP_NAME">%1$s</xliff:g>"</string> <string name="get_dialog_title_choose_passkey_for" msgid="9175997688078538490">"ເລືອກກະແຈຜ່ານທີ່ບັນທຶກໄວ້ສຳລັບ <xliff:g id="APP_NAME">%1$s</xliff:g>"</string> <string name="get_dialog_title_choose_password_for" msgid="1724435823820819221">"ເລືອກລະຫັດຜ່ານທີ່ບັນທຶກໄວ້ສຳລັບ <xliff:g id="APP_NAME">%1$s</xliff:g>"</string> <string name="get_dialog_title_choose_saved_sign_in_for" msgid="2420298653461652728">"ເລືອກການເຂົ້າສູ່ລະບົບທີ່ບັນທຶກໄວ້ສຳລັບ <xliff:g id="APP_NAME">%1$s</xliff:g>"</string> - <string name="get_dialog_title_choose_sign_in_for" msgid="3048870756117876514">"ເລືອກການເຂົ້າສູ່ລະບົບສຳລັບ <xliff:g id="APP_NAME">%1$s</xliff:g>"</string> + <string name="get_dialog_title_choose_sign_in_for" msgid="645728947702442421">"ເລືອກບັນຊີສຳລັບ <xliff:g id="APP_NAME">%1$s</xliff:g>"</string> <string name="get_dialog_title_choose_option_for" msgid="4976380044745029107">"ເລືອກຕົວເລືອກສຳລັບ <xliff:g id="APP_NAME">%1$s</xliff:g> ບໍ?"</string> <string name="get_dialog_title_use_info_on" msgid="8863708099535435146">"ໃຊ້ຂໍ້ມູນນີ້ຢູ່ <xliff:g id="APP_NAME">%1$s</xliff:g> ບໍ?"</string> <string name="get_dialog_use_saved_passkey_for" msgid="4618100798664888512">"ເຂົ້າສູ່ລະບົບດ້ວຍວິທີອື່ນ"</string> diff --git a/packages/CredentialManager/res/values-lt/strings.xml b/packages/CredentialManager/res/values-lt/strings.xml index 5e0fbe07f61b..b476e2cdf898 100644 --- a/packages/CredentialManager/res/values-lt/strings.xml +++ b/packages/CredentialManager/res/values-lt/strings.xml @@ -42,9 +42,6 @@ <string name="choose_create_option_passkey_title" msgid="8762295821604276511">"Sukurti prieigos raktą, skirtą prisijungti prie „<xliff:g id="APP_NAME">%1$s</xliff:g>“?"</string> <string name="choose_create_option_password_title" msgid="4481366993598649224">"Sukurti slaptažodį, skirtą prisijungti prie „<xliff:g id="APP_NAME">%1$s</xliff:g>“?"</string> <string name="choose_create_option_sign_in_title" msgid="7092914088455358079">"Išsaugoti prisijungimo prie „<xliff:g id="APP_NAME">%1$s</xliff:g>“ informaciją?"</string> - <string name="choose_create_single_tap_passkey_title" msgid="3872793514041774218">"Sukurti „<xliff:g id="APP_NAME">%1$s</xliff:g>“ prieigos raktą naudojant ekrano užraktą?"</string> - <string name="choose_create_single_tap_password_title" msgid="5231871886818921622">"Sukurti „<xliff:g id="APP_NAME">%1$s</xliff:g>“ slaptažodį naudojant ekrano užraktą?"</string> - <string name="choose_create_single_tap_sign_in_title" msgid="256498714574099587">"Naudoti ekrano užraktą norint išsaugoti „<xliff:g id="APP_NAME">%1$s</xliff:g>“ prisijungimo informaciją?"</string> <string name="passkey" msgid="632353688396759522">"„passkey“"</string> <string name="password" msgid="6738570945182936667">"slaptažodis"</string> <string name="passkeys" msgid="5733880786866559847">"prieigos raktas"</string> @@ -71,15 +68,16 @@ <string name="accessibility_back_arrow_button" msgid="3233198183497842492">"Grįžti į ankstesnį puslapį"</string> <string name="accessibility_close_button" msgid="1163435587545377687">"Uždaryti"</string> <string name="accessibility_snackbar_dismiss" msgid="3456598374801836120">"Atsisakyti"</string> - <string name="get_dialog_title_use_passkey_for" msgid="6236608872708021767">"Naudoti išsaugotą „passkey“ programai „<xliff:g id="APP_NAME">%1$s</xliff:g>“?"</string> - <string name="get_dialog_title_use_password_for" msgid="625828023234318484">"Naudoti išsaugotą slaptažodį programai „<xliff:g id="APP_NAME">%1$s</xliff:g>“?"</string> - <string name="get_dialog_title_single_tap_for" msgid="2057945648748859483">"Naudodami ekrano užraktą prisijunkite prie „<xliff:g id="APP_NAME">%1$s</xliff:g>“ kaip <xliff:g id="USERNAME">%2$s</xliff:g>"</string> - <string name="get_dialog_title_use_sign_in_for" msgid="790049858275131785">"Naudoti prisijungimo informaciją programai „<xliff:g id="APP_NAME">%1$s</xliff:g>“?"</string> - <string name="get_dialog_title_unlock_options_for" msgid="7605568190597632433">"Atrakinti prisijungimo prie „<xliff:g id="APP_NAME">%1$s</xliff:g>“ parinktis?"</string> + <string name="get_dialog_title_use_passkey_for" msgid="479261099705979148">"Naudokite išsaugotą prieigos raktą, skirtą programai „<xliff:g id="APP_NAME">%1$s</xliff:g>“"</string> + <string name="get_dialog_title_use_password_for" msgid="688557784207167647">"Naudokite išsaugotą slaptažodį, skirtą programai „<xliff:g id="APP_NAME">%1$s</xliff:g>“"</string> + <string name="get_dialog_title_use_sign_in_for" msgid="4233553937542583226">"Naudokite paskyrą, skirtą programai „<xliff:g id="APP_NAME">%1$s</xliff:g>“"</string> + <!-- no translation found for get_dialog_description_single_tap (2797059565126030879) --> + <skip /> + <string name="get_dialog_title_unlock_options_for" msgid="7096423827682163270">"Atrakinkite prisijungimo parinktis, skirtas programai „<xliff:g id="APP_NAME">%1$s</xliff:g>“"</string> <string name="get_dialog_title_choose_passkey_for" msgid="9175997688078538490">"Išsaugoto prieigos rakto, skirto „<xliff:g id="APP_NAME">%1$s</xliff:g>“, pasirinkimas"</string> <string name="get_dialog_title_choose_password_for" msgid="1724435823820819221">"Išsaugoto slaptažodžio, skirto „<xliff:g id="APP_NAME">%1$s</xliff:g>“, pasirinkimas"</string> <string name="get_dialog_title_choose_saved_sign_in_for" msgid="2420298653461652728">"Pasirinkite išsaugotą prisijungimo informaciją programai „<xliff:g id="APP_NAME">%1$s</xliff:g>“"</string> - <string name="get_dialog_title_choose_sign_in_for" msgid="3048870756117876514">"Pasirinkite prisijungimo informaciją programai „<xliff:g id="APP_NAME">%1$s</xliff:g>“"</string> + <string name="get_dialog_title_choose_sign_in_for" msgid="645728947702442421">"Pasirinkite paskyrą, skirtą „<xliff:g id="APP_NAME">%1$s</xliff:g>“"</string> <string name="get_dialog_title_choose_option_for" msgid="4976380044745029107">"Pasirinkti parinktį programai „<xliff:g id="APP_NAME">%1$s</xliff:g>“?"</string> <string name="get_dialog_title_use_info_on" msgid="8863708099535435146">"Naudoti šią informaciją programoje „<xliff:g id="APP_NAME">%1$s</xliff:g>“?"</string> <string name="get_dialog_use_saved_passkey_for" msgid="4618100798664888512">"Prisijungti kitu būdu"</string> diff --git a/packages/CredentialManager/res/values-lv/strings.xml b/packages/CredentialManager/res/values-lv/strings.xml index f56d7f145d3d..b3a733b25aa0 100644 --- a/packages/CredentialManager/res/values-lv/strings.xml +++ b/packages/CredentialManager/res/values-lv/strings.xml @@ -42,9 +42,6 @@ <string name="choose_create_option_passkey_title" msgid="8762295821604276511">"Vai izveidot piekļuves atslēgu, lai pierakstītos lietotnē <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string> <string name="choose_create_option_password_title" msgid="4481366993598649224">"Vai saglabāt paroli, lai pierakstītos lietotnē <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string> <string name="choose_create_option_sign_in_title" msgid="7092914088455358079">"Vai saglabāt pierakstīšanās informāciju lietotnei <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string> - <string name="choose_create_single_tap_passkey_title" msgid="3872793514041774218">"Vai izmantot ekrāna bloķēšanas opciju, lai izveidotu piekļuves atslēgu lietotnei <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string> - <string name="choose_create_single_tap_password_title" msgid="5231871886818921622">"Vai izmantot ekrāna bloķēšanas opciju, lai izveidotu paroli lietotnei <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string> - <string name="choose_create_single_tap_sign_in_title" msgid="256498714574099587">"Vai izmantot ekrāna bloķēšanas opciju, lai saglabātu pierakstīšanās informāciju lietotnei <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string> <string name="passkey" msgid="632353688396759522">"piekļuves atslēga"</string> <string name="password" msgid="6738570945182936667">"parole"</string> <string name="passkeys" msgid="5733880786866559847">"piekļuves atslēgas"</string> @@ -71,15 +68,16 @@ <string name="accessibility_back_arrow_button" msgid="3233198183497842492">"Atgriezties iepriekšējā lapā"</string> <string name="accessibility_close_button" msgid="1163435587545377687">"Aizvērt"</string> <string name="accessibility_snackbar_dismiss" msgid="3456598374801836120">"Nerādīt"</string> - <string name="get_dialog_title_use_passkey_for" msgid="6236608872708021767">"Vai izmantot saglabāto piekļuves atslēgu lietotnei <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string> - <string name="get_dialog_title_use_password_for" msgid="625828023234318484">"Vai izmantot jūsu saglabāto paroli lietotnei <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string> - <string name="get_dialog_title_single_tap_for" msgid="2057945648748859483">"Izmantot ekrāna bloķēšanu, lai lietotnē <xliff:g id="APP_NAME">%1$s</xliff:g> pierakstītos ar kontu <xliff:g id="USERNAME">%2$s</xliff:g>"</string> - <string name="get_dialog_title_use_sign_in_for" msgid="790049858275131785">"Vai izmantot jūsu pierakstīšanās informāciju lietotnei <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string> - <string name="get_dialog_title_unlock_options_for" msgid="7605568190597632433">"Vai vēlaties atbloķēt lietotnes <xliff:g id="APP_NAME">%1$s</xliff:g> pierakstīšanās opcijas?"</string> + <string name="get_dialog_title_use_passkey_for" msgid="479261099705979148">"Saglabātās piekļuves atslēgas izmantošana lietotnei <xliff:g id="APP_NAME">%1$s</xliff:g>"</string> + <string name="get_dialog_title_use_password_for" msgid="688557784207167647">"Saglabātās paroles izmantošana lietotnei <xliff:g id="APP_NAME">%1$s</xliff:g>"</string> + <string name="get_dialog_title_use_sign_in_for" msgid="4233553937542583226">"Sava konta izmantošana lietotnei <xliff:g id="APP_NAME">%1$s</xliff:g>"</string> + <!-- no translation found for get_dialog_description_single_tap (2797059565126030879) --> + <skip /> + <string name="get_dialog_title_unlock_options_for" msgid="7096423827682163270">"Lietotnes <xliff:g id="APP_NAME">%1$s</xliff:g> pierakstīšanās opciju atbloķēšana"</string> <string name="get_dialog_title_choose_passkey_for" msgid="9175997688078538490">"Saglabātas piekļuves atslēgas izvēle lietotnei <xliff:g id="APP_NAME">%1$s</xliff:g>"</string> <string name="get_dialog_title_choose_password_for" msgid="1724435823820819221">"Saglabātas paroles izvēle lietotnei <xliff:g id="APP_NAME">%1$s</xliff:g>"</string> <string name="get_dialog_title_choose_saved_sign_in_for" msgid="2420298653461652728">"Saglabātas pierakstīšanās informācijas izvēle lietotnei <xliff:g id="APP_NAME">%1$s</xliff:g>"</string> - <string name="get_dialog_title_choose_sign_in_for" msgid="3048870756117876514">"Pierakstīšanās informācijas izvēle lietotnei <xliff:g id="APP_NAME">%1$s</xliff:g>"</string> + <string name="get_dialog_title_choose_sign_in_for" msgid="645728947702442421">"Konta izvēle izmantošanai lietotnē <xliff:g id="APP_NAME">%1$s</xliff:g>"</string> <string name="get_dialog_title_choose_option_for" msgid="4976380044745029107">"Vai izvēlēties opciju lietotnei <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string> <string name="get_dialog_title_use_info_on" msgid="8863708099535435146">"Vai izmantot šo informāciju lietotnē <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string> <string name="get_dialog_use_saved_passkey_for" msgid="4618100798664888512">"Pierakstīties citā veidā"</string> diff --git a/packages/CredentialManager/res/values-mk/strings.xml b/packages/CredentialManager/res/values-mk/strings.xml index ec4df567ef07..e7e8185b36a9 100644 --- a/packages/CredentialManager/res/values-mk/strings.xml +++ b/packages/CredentialManager/res/values-mk/strings.xml @@ -42,9 +42,6 @@ <string name="choose_create_option_passkey_title" msgid="8762295821604276511">"Да се создаде криптографски клуч за најавување на <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string> <string name="choose_create_option_password_title" msgid="4481366993598649224">"Да се зачува лозинката за најавување на <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string> <string name="choose_create_option_sign_in_title" msgid="7092914088455358079">"Да се зачуваат податоците за најавување за <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string> - <string name="choose_create_single_tap_passkey_title" msgid="3872793514041774218">"Да се користи заклучувањето екран за создавање криптографски клуч за <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string> - <string name="choose_create_single_tap_password_title" msgid="5231871886818921622">"Да се користи заклучувањето екран за создавање лозинка за <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string> - <string name="choose_create_single_tap_sign_in_title" msgid="256498714574099587">"Да се користи заклучувањето екран за зачувување на податоците за најавување за <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string> <string name="passkey" msgid="632353688396759522">"криптографски клуч"</string> <string name="password" msgid="6738570945182936667">"лозинка"</string> <string name="passkeys" msgid="5733880786866559847">"криптографски клучеви"</string> @@ -71,15 +68,16 @@ <string name="accessibility_back_arrow_button" msgid="3233198183497842492">"Врати се на претходната страница"</string> <string name="accessibility_close_button" msgid="1163435587545377687">"Затвори"</string> <string name="accessibility_snackbar_dismiss" msgid="3456598374801836120">"Отфрли"</string> - <string name="get_dialog_title_use_passkey_for" msgid="6236608872708021767">"Да се користи вашиот зачуван криптографски клуч за <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string> - <string name="get_dialog_title_use_password_for" msgid="625828023234318484">"Да се користат зачуваните лозинки за <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string> - <string name="get_dialog_title_single_tap_for" msgid="2057945648748859483">"Користете го заклучувањето екран за да се најавувате на <xliff:g id="APP_NAME">%1$s</xliff:g> со <xliff:g id="USERNAME">%2$s</xliff:g>"</string> - <string name="get_dialog_title_use_sign_in_for" msgid="790049858275131785">"Да се користи вашето најавување за <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string> - <string name="get_dialog_title_unlock_options_for" msgid="7605568190597632433">"Да се отклучат опциите за најавување за <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string> + <string name="get_dialog_title_use_passkey_for" msgid="479261099705979148">"Користете го зачуваниот криптографски клуч за <xliff:g id="APP_NAME">%1$s</xliff:g>"</string> + <string name="get_dialog_title_use_password_for" msgid="688557784207167647">"Користете ја зачуваната лозинка за <xliff:g id="APP_NAME">%1$s</xliff:g>"</string> + <string name="get_dialog_title_use_sign_in_for" msgid="4233553937542583226">"Користете ја вашата сметка за <xliff:g id="APP_NAME">%1$s</xliff:g>"</string> + <!-- no translation found for get_dialog_description_single_tap (2797059565126030879) --> + <skip /> + <string name="get_dialog_title_unlock_options_for" msgid="7096423827682163270">"Отклучете ги опциите за најавување за <xliff:g id="APP_NAME">%1$s</xliff:g>"</string> <string name="get_dialog_title_choose_passkey_for" msgid="9175997688078538490">"Изберете зачуван криптографски клуч за <xliff:g id="APP_NAME">%1$s</xliff:g>"</string> <string name="get_dialog_title_choose_password_for" msgid="1724435823820819221">"Изберете зачувана лозинка за <xliff:g id="APP_NAME">%1$s</xliff:g>"</string> <string name="get_dialog_title_choose_saved_sign_in_for" msgid="2420298653461652728">"Изберете зачувано најавување за <xliff:g id="APP_NAME">%1$s</xliff:g>"</string> - <string name="get_dialog_title_choose_sign_in_for" msgid="3048870756117876514">"Изберете најавување за <xliff:g id="APP_NAME">%1$s</xliff:g>"</string> + <string name="get_dialog_title_choose_sign_in_for" msgid="645728947702442421">"Изберете сметка за <xliff:g id="APP_NAME">%1$s</xliff:g>"</string> <string name="get_dialog_title_choose_option_for" msgid="4976380044745029107">"Избери опција за <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string> <string name="get_dialog_title_use_info_on" msgid="8863708099535435146">"Да се користат овие информации на <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string> <string name="get_dialog_use_saved_passkey_for" msgid="4618100798664888512">"Најавете се на друг начин"</string> diff --git a/packages/CredentialManager/res/values-ml/strings.xml b/packages/CredentialManager/res/values-ml/strings.xml index f7d74fe2b05a..49a58f730792 100644 --- a/packages/CredentialManager/res/values-ml/strings.xml +++ b/packages/CredentialManager/res/values-ml/strings.xml @@ -42,9 +42,6 @@ <string name="choose_create_option_passkey_title" msgid="8762295821604276511">"<xliff:g id="APP_NAME">%1$s</xliff:g> എന്നതിലേക്ക് സൈൻ ഇൻ ചെയ്യാൻ പാസ്കീ സൃഷ്ടിക്കണോ?"</string> <string name="choose_create_option_password_title" msgid="4481366993598649224">"<xliff:g id="APP_NAME">%1$s</xliff:g> എന്നതിലേക്ക് സൈൻ ഇൻ ചെയ്യാൻ പാസ്വേഡ് സംരക്ഷിക്കണോ?"</string> <string name="choose_create_option_sign_in_title" msgid="7092914088455358079">"<xliff:g id="APP_NAME">%1$s</xliff:g> എന്നതിനായി സൈൻ ഇൻ വിവരങ്ങൾ സംരക്ഷിക്കണോ?"</string> - <string name="choose_create_single_tap_passkey_title" msgid="3872793514041774218">"<xliff:g id="APP_NAME">%1$s</xliff:g> എന്നതിനായി പാസ്കീ സൃഷ്ടിക്കാൻ നിങ്ങളുടെ സ്ക്രീൻ ലോക്ക് ഉപയോഗിക്കണോ?"</string> - <string name="choose_create_single_tap_password_title" msgid="5231871886818921622">"<xliff:g id="APP_NAME">%1$s</xliff:g> എന്നതിനായി പാസ്വേഡ് സൃഷ്ടിക്കാൻ നിങ്ങളുടെ സ്ക്രീൻ ലോക്ക് ഉപയോഗിക്കണോ?"</string> - <string name="choose_create_single_tap_sign_in_title" msgid="256498714574099587">"<xliff:g id="APP_NAME">%1$s</xliff:g> എന്നതിനായി സൈൻ ഇൻ വിവരങ്ങൾ സംരക്ഷിക്കാൻ നിങ്ങളുടെ സ്ക്രീൻ ലോക്ക് ഉപയോഗിക്കണോ?"</string> <string name="passkey" msgid="632353688396759522">"പാസ്കീ"</string> <string name="password" msgid="6738570945182936667">"പാസ്വേഡ്"</string> <string name="passkeys" msgid="5733880786866559847">"പാസ്കീകൾ"</string> @@ -71,15 +68,16 @@ <string name="accessibility_back_arrow_button" msgid="3233198183497842492">"മുമ്പത്തെ പേജിലേക്ക് മടങ്ങുക"</string> <string name="accessibility_close_button" msgid="1163435587545377687">"അടയ്ക്കുക"</string> <string name="accessibility_snackbar_dismiss" msgid="3456598374801836120">"ഡിസ്മിസ് ചെയ്യുക"</string> - <string name="get_dialog_title_use_passkey_for" msgid="6236608872708021767">"<xliff:g id="APP_NAME">%1$s</xliff:g> എന്നതിനായി നിങ്ങൾ സംരക്ഷിച്ച പാസ്കീ ഉപയോഗിക്കണോ?"</string> - <string name="get_dialog_title_use_password_for" msgid="625828023234318484">"<xliff:g id="APP_NAME">%1$s</xliff:g> എന്നതിനായി നിങ്ങളുടെ സംരക്ഷിച്ച പാസ്വേഡ് ഉപയോഗിക്കണോ?"</string> - <string name="get_dialog_title_single_tap_for" msgid="2057945648748859483">"<xliff:g id="USERNAME">%2$s</xliff:g> എന്നയാളായി <xliff:g id="APP_NAME">%1$s</xliff:g> എന്നതിലേക്ക് സൈൻ ഇൻ ചെയ്യാൻ നിങ്ങളുടെ സ്ക്രീൻ ലോക്ക് ഉപയോഗിക്കുക"</string> - <string name="get_dialog_title_use_sign_in_for" msgid="790049858275131785">"<xliff:g id="APP_NAME">%1$s</xliff:g> ആപ്പിനുള്ള നിങ്ങളുടെ സൈൻ ഇൻ ക്രെഡൻഷ്യലുകൾ ഉപയോഗിക്കണോ?"</string> - <string name="get_dialog_title_unlock_options_for" msgid="7605568190597632433">"<xliff:g id="APP_NAME">%1$s</xliff:g> എന്നതിനായി സൈൻ ഇൻ ഓപ്ഷനുകൾ അൺലോക്ക് ചെയ്യണോ?"</string> + <string name="get_dialog_title_use_passkey_for" msgid="479261099705979148">"<xliff:g id="APP_NAME">%1$s</xliff:g> ആപ്പിനായി നിങ്ങളുടെ സംരക്ഷിച്ച പാസ്കീ ഉപയോഗിക്കുക"</string> + <string name="get_dialog_title_use_password_for" msgid="688557784207167647">"<xliff:g id="APP_NAME">%1$s</xliff:g> ആപ്പിനായി നിങ്ങളുടെ സംരക്ഷിച്ച പാസ്വേഡ് ഉപയോഗിക്കുക"</string> + <string name="get_dialog_title_use_sign_in_for" msgid="4233553937542583226">"<xliff:g id="APP_NAME">%1$s</xliff:g> ആപ്പിനായി നിങ്ങളുടെ അക്കൗണ്ട് ഉപയോഗിക്കുക"</string> + <!-- no translation found for get_dialog_description_single_tap (2797059565126030879) --> + <skip /> + <string name="get_dialog_title_unlock_options_for" msgid="7096423827682163270">"<xliff:g id="APP_NAME">%1$s</xliff:g> ആപ്പിനായി സൈൻ ഇൻ ചെയ്യൽ ഓപ്ഷനുകൾ അൺലോക്ക് ചെയ്യുക"</string> <string name="get_dialog_title_choose_passkey_for" msgid="9175997688078538490">"<xliff:g id="APP_NAME">%1$s</xliff:g> എന്നതിനായി ഒരു സംരക്ഷിച്ച പാസ്കീ തിരഞ്ഞെടുക്കുക"</string> <string name="get_dialog_title_choose_password_for" msgid="1724435823820819221">"<xliff:g id="APP_NAME">%1$s</xliff:g> എന്നതിനായി ഒരു സംരക്ഷിച്ച പാസ്വേഡ് തിരഞ്ഞെടുക്കുക"</string> <string name="get_dialog_title_choose_saved_sign_in_for" msgid="2420298653461652728">"<xliff:g id="APP_NAME">%1$s</xliff:g> എന്നതിനായി ഒരു സംരക്ഷിച്ച സൈൻ ഇൻ തിരഞ്ഞെടുക്കുക"</string> - <string name="get_dialog_title_choose_sign_in_for" msgid="3048870756117876514">"<xliff:g id="APP_NAME">%1$s</xliff:g> ആപ്പിനുള്ള സൈൻ ഇൻ ക്രെഡൻഷ്യലുകൾ തിരഞ്ഞെടുക്കുക"</string> + <string name="get_dialog_title_choose_sign_in_for" msgid="645728947702442421">"<xliff:g id="APP_NAME">%1$s</xliff:g> ആപ്പിനായി ഒരു അക്കൗണ്ട് തിരഞ്ഞെടുക്കുക"</string> <string name="get_dialog_title_choose_option_for" msgid="4976380044745029107">"<xliff:g id="APP_NAME">%1$s</xliff:g> എന്ന ആപ്പിനായി ഒരു ഓപ്ഷൻ തിരഞ്ഞെടുക്കണോ?"</string> <string name="get_dialog_title_use_info_on" msgid="8863708099535435146">"<xliff:g id="APP_NAME">%1$s</xliff:g> എന്നതിൽ ഈ വിവരങ്ങൾ ഉപയോഗിക്കണോ?"</string> <string name="get_dialog_use_saved_passkey_for" msgid="4618100798664888512">"മറ്റൊരു രീതിയിൽ സൈൻ ഇൻ ചെയ്യുക"</string> diff --git a/packages/CredentialManager/res/values-mn/strings.xml b/packages/CredentialManager/res/values-mn/strings.xml index 093baab33716..987d003a3a46 100644 --- a/packages/CredentialManager/res/values-mn/strings.xml +++ b/packages/CredentialManager/res/values-mn/strings.xml @@ -42,9 +42,6 @@ <string name="choose_create_option_passkey_title" msgid="8762295821604276511">"<xliff:g id="APP_NAME">%1$s</xliff:g>-д нэвтрэхийн тулд нэвтрэх түлхүүр үүсгэх үү?"</string> <string name="choose_create_option_password_title" msgid="4481366993598649224">"<xliff:g id="APP_NAME">%1$s</xliff:g>-д нэвтрэхийн тулд нууц үгийг хадгалах уу?"</string> <string name="choose_create_option_sign_in_title" msgid="7092914088455358079">"<xliff:g id="APP_NAME">%1$s</xliff:g>-н нэвтрэх мэдээллийг хадгалах уу?"</string> - <string name="choose_create_single_tap_passkey_title" msgid="3872793514041774218">"<xliff:g id="APP_NAME">%1$s</xliff:g>-д нэвтрэх түлхүүр үүсгэхийн тулд дэлгэцийн түгжээгээ ашиглах уу?"</string> - <string name="choose_create_single_tap_password_title" msgid="5231871886818921622">"<xliff:g id="APP_NAME">%1$s</xliff:g>-д нууц үг үүсгэхийн тулд дэлгэцийн түгжээгээ ашиглах уу?"</string> - <string name="choose_create_single_tap_sign_in_title" msgid="256498714574099587">"<xliff:g id="APP_NAME">%1$s</xliff:g>-д нэвтрэх мэдээлэл хадгалахын тулд дэлгэцийн түгжээгээ ашиглах уу?"</string> <string name="passkey" msgid="632353688396759522">"passkey"</string> <string name="password" msgid="6738570945182936667">"нууц үг"</string> <string name="passkeys" msgid="5733880786866559847">"нэвтрэх түлхүүрүүд"</string> @@ -71,15 +68,16 @@ <string name="accessibility_back_arrow_button" msgid="3233198183497842492">"Өмнөх хуудас руу буцах"</string> <string name="accessibility_close_button" msgid="1163435587545377687">"Хаах"</string> <string name="accessibility_snackbar_dismiss" msgid="3456598374801836120">"Хаах"</string> - <string name="get_dialog_title_use_passkey_for" msgid="6236608872708021767">"<xliff:g id="APP_NAME">%1$s</xliff:g>-д өөрийн хадгалсан passkey-г ашиглах уу?"</string> - <string name="get_dialog_title_use_password_for" msgid="625828023234318484">"<xliff:g id="APP_NAME">%1$s</xliff:g>-д хадгалсан нууц үгээ ашиглах уу?"</string> - <string name="get_dialog_title_single_tap_for" msgid="2057945648748859483">"<xliff:g id="APP_NAME">%1$s</xliff:g>-д <xliff:g id="USERNAME">%2$s</xliff:g>-р нэвтрэхийн тулд дэлгэцийн түгжээгээ ашиглана уу"</string> - <string name="get_dialog_title_use_sign_in_for" msgid="790049858275131785">"<xliff:g id="APP_NAME">%1$s</xliff:g>-н нэвтрэлтээ ашиглах уу?"</string> - <string name="get_dialog_title_unlock_options_for" msgid="7605568190597632433">"<xliff:g id="APP_NAME">%1$s</xliff:g>-д нэвтрэлтийн сонголтын түгжээг тайлах уу?"</string> + <string name="get_dialog_title_use_passkey_for" msgid="479261099705979148">"<xliff:g id="APP_NAME">%1$s</xliff:g>-д хадгалсан нэвтрэх түлхүүрээ ашиглана уу"</string> + <string name="get_dialog_title_use_password_for" msgid="688557784207167647">"<xliff:g id="APP_NAME">%1$s</xliff:g>-д хадгалсан нууц үгээ ашиглана уу"</string> + <string name="get_dialog_title_use_sign_in_for" msgid="4233553937542583226">"<xliff:g id="APP_NAME">%1$s</xliff:g>-д нэвтрэх бүртгэлээ ашиглана уу"</string> + <!-- no translation found for get_dialog_description_single_tap (2797059565126030879) --> + <skip /> + <string name="get_dialog_title_unlock_options_for" msgid="7096423827682163270">"<xliff:g id="APP_NAME">%1$s</xliff:g>-д нэвтрэх сонголтын түгжээг тайлна уу"</string> <string name="get_dialog_title_choose_passkey_for" msgid="9175997688078538490">"<xliff:g id="APP_NAME">%1$s</xliff:g>-д хадгалсан нэвтрэх түлхүүр сонгоно уу"</string> <string name="get_dialog_title_choose_password_for" msgid="1724435823820819221">"<xliff:g id="APP_NAME">%1$s</xliff:g>-д хадгалсан нууц үг сонгоно уу"</string> <string name="get_dialog_title_choose_saved_sign_in_for" msgid="2420298653461652728">"<xliff:g id="APP_NAME">%1$s</xliff:g>-д хадгалсан нэвтрэх мэдээллийг сонгоно уу"</string> - <string name="get_dialog_title_choose_sign_in_for" msgid="3048870756117876514">"<xliff:g id="APP_NAME">%1$s</xliff:g>-н нэвтрэлтийг сонгоно уу"</string> + <string name="get_dialog_title_choose_sign_in_for" msgid="645728947702442421">"<xliff:g id="APP_NAME">%1$s</xliff:g>-д нэвтрэх бүртгэл сонгоно уу"</string> <string name="get_dialog_title_choose_option_for" msgid="4976380044745029107">"<xliff:g id="APP_NAME">%1$s</xliff:g>-д сонголт хийх үү?"</string> <string name="get_dialog_title_use_info_on" msgid="8863708099535435146">"Энэ мэдээллийг <xliff:g id="APP_NAME">%1$s</xliff:g>-д ашиглах уу?"</string> <string name="get_dialog_use_saved_passkey_for" msgid="4618100798664888512">"Өөр аргаар нэвтрэх"</string> diff --git a/packages/CredentialManager/res/values-mr/strings.xml b/packages/CredentialManager/res/values-mr/strings.xml index cc52617b2e1b..3a2e73a7b6dc 100644 --- a/packages/CredentialManager/res/values-mr/strings.xml +++ b/packages/CredentialManager/res/values-mr/strings.xml @@ -42,9 +42,6 @@ <string name="choose_create_option_passkey_title" msgid="8762295821604276511">"<xliff:g id="APP_NAME">%1$s</xliff:g> मध्ये साइन इन करण्यासाठी पासकी तयार करायची आहे का?"</string> <string name="choose_create_option_password_title" msgid="4481366993598649224">"<xliff:g id="APP_NAME">%1$s</xliff:g> मध्ये साइन इन करण्यासाठी पासवर्ड सेव्ह करायचा आहे का?"</string> <string name="choose_create_option_sign_in_title" msgid="7092914088455358079">"<xliff:g id="APP_NAME">%1$s</xliff:g> साठी साइन-इनसंबंधित माहिती सेव्ह करायची का?"</string> - <string name="choose_create_single_tap_passkey_title" msgid="3872793514041774218">"<xliff:g id="APP_NAME">%1$s</xliff:g> साठी पासकी तयार करण्याकरिता तुमचे स्क्रीन लॉक वापरायचे आहे का?"</string> - <string name="choose_create_single_tap_password_title" msgid="5231871886818921622">"<xliff:g id="APP_NAME">%1$s</xliff:g> साठी पासवर्ड तयार करण्याकरिता तुमचे स्क्रीन लॉक वापरायचे आहे का?"</string> - <string name="choose_create_single_tap_sign_in_title" msgid="256498714574099587">"<xliff:g id="APP_NAME">%1$s</xliff:g> साठी साइन-इनसंबंधित माहिती सेव्ह करण्याकरिता तुमचे स्क्रीन लॉक वापरायचे आहे का?"</string> <string name="passkey" msgid="632353688396759522">"पासकी"</string> <string name="password" msgid="6738570945182936667">"पासवर्ड"</string> <string name="passkeys" msgid="5733880786866559847">"पासकी"</string> @@ -71,15 +68,16 @@ <string name="accessibility_back_arrow_button" msgid="3233198183497842492">"मागील पेजवर परत जा"</string> <string name="accessibility_close_button" msgid="1163435587545377687">"बंद करा"</string> <string name="accessibility_snackbar_dismiss" msgid="3456598374801836120">"डिसमिस करा"</string> - <string name="get_dialog_title_use_passkey_for" msgid="6236608872708021767">"<xliff:g id="APP_NAME">%1$s</xliff:g> साठी तुमची सेव्ह केलेली पासकी वापरायची का?"</string> - <string name="get_dialog_title_use_password_for" msgid="625828023234318484">"तुमचा सेव्ह केलेला पासवर्ड <xliff:g id="APP_NAME">%1$s</xliff:g> साठी वापरायचा आहे का?"</string> - <string name="get_dialog_title_single_tap_for" msgid="2057945648748859483">"<xliff:g id="USERNAME">%2$s</xliff:g> सह <xliff:g id="APP_NAME">%1$s</xliff:g> मध्ये साइन इन करण्यासाठी तुमचे स्क्रीन लॉक वापरा"</string> - <string name="get_dialog_title_use_sign_in_for" msgid="790049858275131785">"<xliff:g id="APP_NAME">%1$s</xliff:g> साठी तुमचे साइन-इन वापरायचे आहे का?"</string> - <string name="get_dialog_title_unlock_options_for" msgid="7605568190597632433">"<xliff:g id="APP_NAME">%1$s</xliff:g> साठी साइन-इन पर्याय अनलॉक करायचे आहेत का?"</string> + <string name="get_dialog_title_use_passkey_for" msgid="479261099705979148">"<xliff:g id="APP_NAME">%1$s</xliff:g> साठी तुमची सेव्ह केलेली पासकी वापरा"</string> + <string name="get_dialog_title_use_password_for" msgid="688557784207167647">"<xliff:g id="APP_NAME">%1$s</xliff:g> साठी तुमचा सेव्ह केलेला पासवर्ड वापरा"</string> + <string name="get_dialog_title_use_sign_in_for" msgid="4233553937542583226">"<xliff:g id="APP_NAME">%1$s</xliff:g> साठी तुमचे खाते वापरा"</string> + <!-- no translation found for get_dialog_description_single_tap (2797059565126030879) --> + <skip /> + <string name="get_dialog_title_unlock_options_for" msgid="7096423827682163270">"<xliff:g id="APP_NAME">%1$s</xliff:g> साठी साइन-इन पर्याय अनलॉक करा"</string> <string name="get_dialog_title_choose_passkey_for" msgid="9175997688078538490">"<xliff:g id="APP_NAME">%1$s</xliff:g> साठी सेव्ह केलेली पासकी निवडा"</string> <string name="get_dialog_title_choose_password_for" msgid="1724435823820819221">"<xliff:g id="APP_NAME">%1$s</xliff:g> साठी सेव्ह केलेला पासवर्ड निवडा"</string> <string name="get_dialog_title_choose_saved_sign_in_for" msgid="2420298653461652728">"<xliff:g id="APP_NAME">%1$s</xliff:g> साठी सेव्ह केलेले साइन-इन निवडा"</string> - <string name="get_dialog_title_choose_sign_in_for" msgid="3048870756117876514">"<xliff:g id="APP_NAME">%1$s</xliff:g> साठी साइन-इन निवडा"</string> + <string name="get_dialog_title_choose_sign_in_for" msgid="645728947702442421">"<xliff:g id="APP_NAME">%1$s</xliff:g> साठी खाते निवडा"</string> <string name="get_dialog_title_choose_option_for" msgid="4976380044745029107">"<xliff:g id="APP_NAME">%1$s</xliff:g> साठी पर्याय निवडा?"</string> <string name="get_dialog_title_use_info_on" msgid="8863708099535435146">"ही माहिती <xliff:g id="APP_NAME">%1$s</xliff:g> वर वापरायची का?"</string> <string name="get_dialog_use_saved_passkey_for" msgid="4618100798664888512">"दुसऱ्या मार्गाने साइन इन करा"</string> diff --git a/packages/CredentialManager/res/values-ms/strings.xml b/packages/CredentialManager/res/values-ms/strings.xml index 62a7deb2f553..ebf4ee4dc7d9 100644 --- a/packages/CredentialManager/res/values-ms/strings.xml +++ b/packages/CredentialManager/res/values-ms/strings.xml @@ -42,9 +42,6 @@ <string name="choose_create_option_passkey_title" msgid="8762295821604276511">"Buat kunci laluan untuk log masuk ke <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string> <string name="choose_create_option_password_title" msgid="4481366993598649224">"Simpan kata laluan untuk log masuk ke <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string> <string name="choose_create_option_sign_in_title" msgid="7092914088455358079">"Simpan maklumat log masuk untuk <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string> - <string name="choose_create_single_tap_passkey_title" msgid="3872793514041774218">"Gunakan kunci skrin anda untuk membuat kunci laluan bagi <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string> - <string name="choose_create_single_tap_password_title" msgid="5231871886818921622">"Gunakan kunci skrin anda untuk membuat kata laluan bagi <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string> - <string name="choose_create_single_tap_sign_in_title" msgid="256498714574099587">"Gunakan kunci skrin anda untuk menyimpan maklumat log masuk bagi <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string> <string name="passkey" msgid="632353688396759522">"kunci laluan"</string> <string name="password" msgid="6738570945182936667">"kata laluan"</string> <string name="passkeys" msgid="5733880786866559847">"kunci laluan"</string> @@ -71,15 +68,16 @@ <string name="accessibility_back_arrow_button" msgid="3233198183497842492">"Kembali ke halaman sebelumnya"</string> <string name="accessibility_close_button" msgid="1163435587545377687">"Tutup"</string> <string name="accessibility_snackbar_dismiss" msgid="3456598374801836120">"Ketepikan"</string> - <string name="get_dialog_title_use_passkey_for" msgid="6236608872708021767">"Gunakan kunci laluan anda yang telah disimpan untuk <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string> - <string name="get_dialog_title_use_password_for" msgid="625828023234318484">"Gunakan kata laluan anda yang disimpan untuk <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string> - <string name="get_dialog_title_single_tap_for" msgid="2057945648748859483">"Gunakan kunci skrin anda untuk log masuk ke <xliff:g id="APP_NAME">%1$s</xliff:g> dengan <xliff:g id="USERNAME">%2$s</xliff:g>"</string> - <string name="get_dialog_title_use_sign_in_for" msgid="790049858275131785">"Gunakan log masuk anda untuk <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string> - <string name="get_dialog_title_unlock_options_for" msgid="7605568190597632433">"Buka kunci pilihan log masuk untuk <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string> + <string name="get_dialog_title_use_passkey_for" msgid="479261099705979148">"Gunakan kunci laluan anda yang telah disimpan untuk <xliff:g id="APP_NAME">%1$s</xliff:g>"</string> + <string name="get_dialog_title_use_password_for" msgid="688557784207167647">"Gunakan kata laluan anda yang disimpan untuk <xliff:g id="APP_NAME">%1$s</xliff:g>"</string> + <string name="get_dialog_title_use_sign_in_for" msgid="4233553937542583226">"Gunakan akaun anda untuk <xliff:g id="APP_NAME">%1$s</xliff:g>"</string> + <!-- no translation found for get_dialog_description_single_tap (2797059565126030879) --> + <skip /> + <string name="get_dialog_title_unlock_options_for" msgid="7096423827682163270">"Buka kunci pilihan log masuk untuk <xliff:g id="APP_NAME">%1$s</xliff:g>"</string> <string name="get_dialog_title_choose_passkey_for" msgid="9175997688078538490">"Pilih kunci laluan yang disimpan untuk <xliff:g id="APP_NAME">%1$s</xliff:g>"</string> <string name="get_dialog_title_choose_password_for" msgid="1724435823820819221">"Pilih kata laluan yang disimpan untuk <xliff:g id="APP_NAME">%1$s</xliff:g>"</string> <string name="get_dialog_title_choose_saved_sign_in_for" msgid="2420298653461652728">"Pilih log masuk yang disimpan untuk <xliff:g id="APP_NAME">%1$s</xliff:g>"</string> - <string name="get_dialog_title_choose_sign_in_for" msgid="3048870756117876514">"Pilih log masuk untuk <xliff:g id="APP_NAME">%1$s</xliff:g>"</string> + <string name="get_dialog_title_choose_sign_in_for" msgid="645728947702442421">"Pilih akaun untuk <xliff:g id="APP_NAME">%1$s</xliff:g>"</string> <string name="get_dialog_title_choose_option_for" msgid="4976380044745029107">"Pilih satu pilihan untuk <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string> <string name="get_dialog_title_use_info_on" msgid="8863708099535435146">"Gunakan maklumat ini pada <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string> <string name="get_dialog_use_saved_passkey_for" msgid="4618100798664888512">"Log masuk menggunakan cara lain"</string> diff --git a/packages/CredentialManager/res/values-my/strings.xml b/packages/CredentialManager/res/values-my/strings.xml index aa08aa7f8690..cf224da7fa02 100644 --- a/packages/CredentialManager/res/values-my/strings.xml +++ b/packages/CredentialManager/res/values-my/strings.xml @@ -42,9 +42,6 @@ <string name="choose_create_option_passkey_title" msgid="8762295821604276511">"<xliff:g id="APP_NAME">%1$s</xliff:g> သို့ လက်မှတ်ထိုးဝင်ရန် လျှို့ဝှက်ကီး ပြုလုပ်မလား။"</string> <string name="choose_create_option_password_title" msgid="4481366993598649224">"<xliff:g id="APP_NAME">%1$s</xliff:g> သို့ လက်မှတ်ထိုးဝင်ရန် စကားဝှက်ကို သိမ်းမလား။"</string> <string name="choose_create_option_sign_in_title" msgid="7092914088455358079">"<xliff:g id="APP_NAME">%1$s</xliff:g> အတွက် လက်မှတ်ထိုးဝင်ရန် အချက်အလက်ကို သိမ်းမလား။"</string> - <string name="choose_create_single_tap_passkey_title" msgid="3872793514041774218">"<xliff:g id="APP_NAME">%1$s</xliff:g> အတွက် လျှို့ဝှက်ကီးပြုလုပ်ရန် သင့်ဖန်သားပြင်လော့ခ်ကို သုံးမလား။"</string> - <string name="choose_create_single_tap_password_title" msgid="5231871886818921622">"<xliff:g id="APP_NAME">%1$s</xliff:g> အတွက် စကားဝှက်ပြုလုပ်ရန် သင့်ဖန်သားပြင်လော့ခ်ကို သုံးမလား။"</string> - <string name="choose_create_single_tap_sign_in_title" msgid="256498714574099587">"<xliff:g id="APP_NAME">%1$s</xliff:g> အတွက် လက်မှတ်ထိုးဝင်ရန် အချက်အလက်များ သိမ်းရန် သင့်ဖန်သားပြင်လော့ခ်ကို သုံးမလား။"</string> <string name="passkey" msgid="632353688396759522">"လျှို့ဝှက်ကီး"</string> <string name="password" msgid="6738570945182936667">"စကားဝှက်"</string> <string name="passkeys" msgid="5733880786866559847">"လျှို့ဝှက်ကီးများ"</string> @@ -71,15 +68,16 @@ <string name="accessibility_back_arrow_button" msgid="3233198183497842492">"ယခင်စာမျက်နှာကို ပြန်သွားပါ"</string> <string name="accessibility_close_button" msgid="1163435587545377687">"ပိတ်ရန်"</string> <string name="accessibility_snackbar_dismiss" msgid="3456598374801836120">"ပယ်ရန်"</string> - <string name="get_dialog_title_use_passkey_for" msgid="6236608872708021767">"သိမ်းထားသောလျှို့ဝှက်ကီးကို <xliff:g id="APP_NAME">%1$s</xliff:g> အတွက် သုံးမလား။"</string> - <string name="get_dialog_title_use_password_for" msgid="625828023234318484">"<xliff:g id="APP_NAME">%1$s</xliff:g> အတွက် သိမ်းထားသောစကားဝှက် သုံးမလား။"</string> - <string name="get_dialog_title_single_tap_for" msgid="2057945648748859483">"<xliff:g id="APP_NAME">%1$s</xliff:g> သို့ <xliff:g id="USERNAME">%2$s</xliff:g> ဖြင့် လက်မှတ်ထိုးဝင်ရန် သင့်ဖန်သားပြင်လော့ခ်ကို သုံးနိုင်သည်"</string> - <string name="get_dialog_title_use_sign_in_for" msgid="790049858275131785">"<xliff:g id="APP_NAME">%1$s</xliff:g> အတွက် သင့်လက်မှတ်ထိုးဝင်မှုကို သုံးမလား။"</string> - <string name="get_dialog_title_unlock_options_for" msgid="7605568190597632433">"<xliff:g id="APP_NAME">%1$s</xliff:g> အတွက် လက်မှတ်ထိုးဝင်မှု ရွေးစရာကို ဖွင့်မလား။"</string> + <string name="get_dialog_title_use_passkey_for" msgid="479261099705979148">"<xliff:g id="APP_NAME">%1$s</xliff:g> အတွက် သင်သိမ်းထားသော လျှို့ဝှက်ကီးကို သုံးပါ"</string> + <string name="get_dialog_title_use_password_for" msgid="688557784207167647">"<xliff:g id="APP_NAME">%1$s</xliff:g> အတွက် သင်သိမ်းထားသော စကားဝှက်ကို သုံးပါ"</string> + <string name="get_dialog_title_use_sign_in_for" msgid="4233553937542583226">"<xliff:g id="APP_NAME">%1$s</xliff:g> အတွက် သင့်အကောင့်ကို သုံးပါ"</string> + <!-- no translation found for get_dialog_description_single_tap (2797059565126030879) --> + <skip /> + <string name="get_dialog_title_unlock_options_for" msgid="7096423827682163270">"<xliff:g id="APP_NAME">%1$s</xliff:g> အတွက် လက်မှတ်ထိုးဝင်မှု ရွေးစရာကို ဖွင့်ပါ"</string> <string name="get_dialog_title_choose_passkey_for" msgid="9175997688078538490">"<xliff:g id="APP_NAME">%1$s</xliff:g> အတွက် သိမ်းထားသော လျှို့ဝှက်ကီး ရွေးပါ"</string> <string name="get_dialog_title_choose_password_for" msgid="1724435823820819221">"<xliff:g id="APP_NAME">%1$s</xliff:g> အတွက် သိမ်းထားသော စကားဝှက် ရွေးပါ"</string> <string name="get_dialog_title_choose_saved_sign_in_for" msgid="2420298653461652728">"<xliff:g id="APP_NAME">%1$s</xliff:g> အတွက် သိမ်းထားသော လက်မှတ်ထိုးဝင်မှုကို ရွေးပါ"</string> - <string name="get_dialog_title_choose_sign_in_for" msgid="3048870756117876514">"<xliff:g id="APP_NAME">%1$s</xliff:g> အတွက် လက်မှတ်ထိုးဝင်မှု ရွေးခြင်း"</string> + <string name="get_dialog_title_choose_sign_in_for" msgid="645728947702442421">"<xliff:g id="APP_NAME">%1$s</xliff:g> အတွက် အကောင့်တစ်ခု ရွေးပါ"</string> <string name="get_dialog_title_choose_option_for" msgid="4976380044745029107">"<xliff:g id="APP_NAME">%1$s</xliff:g> အတွက် တစ်ခုကိုရွေးမလား။"</string> <string name="get_dialog_title_use_info_on" msgid="8863708099535435146">"<xliff:g id="APP_NAME">%1$s</xliff:g> တွင် ဤအချက်အလက်ကို သုံးမလား။"</string> <string name="get_dialog_use_saved_passkey_for" msgid="4618100798664888512">"နောက်တစ်နည်းဖြင့် လက်မှတ်ထိုးဝင်ရန်"</string> diff --git a/packages/CredentialManager/res/values-nb/strings.xml b/packages/CredentialManager/res/values-nb/strings.xml index 8cf344429fa4..9fbb7ec5521b 100644 --- a/packages/CredentialManager/res/values-nb/strings.xml +++ b/packages/CredentialManager/res/values-nb/strings.xml @@ -42,9 +42,6 @@ <string name="choose_create_option_passkey_title" msgid="8762295821604276511">"Vil du opprette en passnøkkel for å logge på <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string> <string name="choose_create_option_password_title" msgid="4481366993598649224">"Vil du lagre passordet for å logge på <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string> <string name="choose_create_option_sign_in_title" msgid="7092914088455358079">"Vil du lagre påloggingsinformasjon for <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string> - <string name="choose_create_single_tap_passkey_title" msgid="3872793514041774218">"Vil du bruke skjermlåsen til å opprette en passnøkkel for <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string> - <string name="choose_create_single_tap_password_title" msgid="5231871886818921622">"Vil du bruke skjermlåsen til å opprette et passord for <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string> - <string name="choose_create_single_tap_sign_in_title" msgid="256498714574099587">"Vil du bruke skjermlåsen til å lagre påloggingsinformasjon for <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string> <string name="passkey" msgid="632353688396759522">"passnøkkel"</string> <string name="password" msgid="6738570945182936667">"passord"</string> <string name="passkeys" msgid="5733880786866559847">"passnøkler"</string> @@ -71,15 +68,16 @@ <string name="accessibility_back_arrow_button" msgid="3233198183497842492">"Gå tilbake til den forrige siden"</string> <string name="accessibility_close_button" msgid="1163435587545377687">"Lukk"</string> <string name="accessibility_snackbar_dismiss" msgid="3456598374801836120">"Lukk"</string> - <string name="get_dialog_title_use_passkey_for" msgid="6236608872708021767">"Vil du bruke den lagrede tilgangsnøkkelen for <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string> - <string name="get_dialog_title_use_password_for" msgid="625828023234318484">"Vil du bruke det lagrede passordet ditt for <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string> - <string name="get_dialog_title_single_tap_for" msgid="2057945648748859483">"Bruk skjermlåsen til å logge på <xliff:g id="APP_NAME">%1$s</xliff:g> med <xliff:g id="USERNAME">%2$s</xliff:g>"</string> - <string name="get_dialog_title_use_sign_in_for" msgid="790049858275131785">"Vil du bruke påloggingen for <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string> - <string name="get_dialog_title_unlock_options_for" msgid="7605568190597632433">"Vil du låse opp påloggingsalternativene for <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string> + <string name="get_dialog_title_use_passkey_for" msgid="479261099705979148">"Bruk den lagrede passnøkkelen din for <xliff:g id="APP_NAME">%1$s</xliff:g>"</string> + <string name="get_dialog_title_use_password_for" msgid="688557784207167647">"Bruk det lagrede passordet ditt for <xliff:g id="APP_NAME">%1$s</xliff:g>"</string> + <string name="get_dialog_title_use_sign_in_for" msgid="4233553937542583226">"Bruk kontoen din for <xliff:g id="APP_NAME">%1$s</xliff:g>"</string> + <!-- no translation found for get_dialog_description_single_tap (2797059565126030879) --> + <skip /> + <string name="get_dialog_title_unlock_options_for" msgid="7096423827682163270">"Lås opp påloggingsalternativene for <xliff:g id="APP_NAME">%1$s</xliff:g>"</string> <string name="get_dialog_title_choose_passkey_for" msgid="9175997688078538490">"Velg en lagret passnøkkel for <xliff:g id="APP_NAME">%1$s</xliff:g>"</string> <string name="get_dialog_title_choose_password_for" msgid="1724435823820819221">"Velg et lagret passord for <xliff:g id="APP_NAME">%1$s</xliff:g>"</string> <string name="get_dialog_title_choose_saved_sign_in_for" msgid="2420298653461652728">"Velg en lagret pålogging for <xliff:g id="APP_NAME">%1$s</xliff:g>"</string> - <string name="get_dialog_title_choose_sign_in_for" msgid="3048870756117876514">"Velg pålogging for <xliff:g id="APP_NAME">%1$s</xliff:g>"</string> + <string name="get_dialog_title_choose_sign_in_for" msgid="645728947702442421">"Velg en konto for <xliff:g id="APP_NAME">%1$s</xliff:g>"</string> <string name="get_dialog_title_choose_option_for" msgid="4976380044745029107">"Vil du velge et alternativ for <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string> <string name="get_dialog_title_use_info_on" msgid="8863708099535435146">"Vil du bruke denne informasjonen i <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string> <string name="get_dialog_use_saved_passkey_for" msgid="4618100798664888512">"Bruk en annen påloggingsmetode"</string> diff --git a/packages/CredentialManager/res/values-ne/strings.xml b/packages/CredentialManager/res/values-ne/strings.xml index 161a16d6dbc5..a3537841e228 100644 --- a/packages/CredentialManager/res/values-ne/strings.xml +++ b/packages/CredentialManager/res/values-ne/strings.xml @@ -42,9 +42,6 @@ <string name="choose_create_option_passkey_title" msgid="8762295821604276511">"<xliff:g id="APP_NAME">%1$s</xliff:g> मा साइन इन गर्न पासकी बनाउने हो?"</string> <string name="choose_create_option_password_title" msgid="4481366993598649224">"<xliff:g id="APP_NAME">%1$s</xliff:g> मा साइन इन गर्न पासवर्ड सेभ गर्ने हो?"</string> <string name="choose_create_option_sign_in_title" msgid="7092914088455358079">"<xliff:g id="APP_NAME">%1$s</xliff:g> मा साइन गर्न प्रयोग गरिने जानकारी सेभ गर्ने हो?"</string> - <string name="choose_create_single_tap_passkey_title" msgid="3872793514041774218">"<xliff:g id="APP_NAME">%1$s</xliff:g> मा पासकी बनाउन आफ्नो स्क्रिन लक प्रयोग गर्ने हो?"</string> - <string name="choose_create_single_tap_password_title" msgid="5231871886818921622">"<xliff:g id="APP_NAME">%1$s</xliff:g> मा पासवर्ड राख्न आफ्नो स्क्रिन लक प्रयोग गर्ने हो?"</string> - <string name="choose_create_single_tap_sign_in_title" msgid="256498714574099587">"<xliff:g id="APP_NAME">%1$s</xliff:g> मा साइन इनसम्बन्धी जानकारी सेभ गर्न आफ्नो स्क्रिन लक प्रयोग गर्ने हो?"</string> <string name="passkey" msgid="632353688396759522">"पासकी"</string> <string name="password" msgid="6738570945182936667">"पासवर्ड"</string> <string name="passkeys" msgid="5733880786866559847">"पासकीहरू"</string> @@ -71,15 +68,16 @@ <string name="accessibility_back_arrow_button" msgid="3233198183497842492">"अघिल्लो पेजमा फर्कनुहोस्"</string> <string name="accessibility_close_button" msgid="1163435587545377687">"बन्द गर्नुहोस्"</string> <string name="accessibility_snackbar_dismiss" msgid="3456598374801836120">"हटाउनुहोस्"</string> - <string name="get_dialog_title_use_passkey_for" msgid="6236608872708021767">"आफूले सेभ गरेको पासकी प्रयोग गरी <xliff:g id="APP_NAME">%1$s</xliff:g> मा साइन इन गर्ने हो?"</string> - <string name="get_dialog_title_use_password_for" msgid="625828023234318484">"<xliff:g id="APP_NAME">%1$s</xliff:g> मा साइन इन गर्न सेभ गरिएको पासवर्ड प्रयोग गर्ने हो?"</string> - <string name="get_dialog_title_single_tap_for" msgid="2057945648748859483">"<xliff:g id="USERNAME">%2$s</xliff:g> प्रयोग गरी <xliff:g id="APP_NAME">%1$s</xliff:g> मा साइन इन गर्न आफ्नो स्क्रिन लक प्रयोग गर्नुहोस्"</string> - <string name="get_dialog_title_use_sign_in_for" msgid="790049858275131785">"<xliff:g id="APP_NAME">%1$s</xliff:g> मा साइन इन गर्नका लागि तपाईंका क्रिडेन्सियलहरू प्रयोग गर्ने हो?"</string> - <string name="get_dialog_title_unlock_options_for" msgid="7605568190597632433">"<xliff:g id="APP_NAME">%1$s</xliff:g> का साइन इनसम्बन्धी विकल्पहरू अनलक गर्ने हो?"</string> + <string name="get_dialog_title_use_passkey_for" msgid="479261099705979148">"<xliff:g id="APP_NAME">%1$s</xliff:g> चलाउन सेभ गरिएको पासकी प्रयोग गर्नुहोस्"</string> + <string name="get_dialog_title_use_password_for" msgid="688557784207167647">"<xliff:g id="APP_NAME">%1$s</xliff:g> चलाउन सेभ गरिएको पासवर्ड प्रयोग गर्नुहोस्"</string> + <string name="get_dialog_title_use_sign_in_for" msgid="4233553937542583226">"<xliff:g id="APP_NAME">%1$s</xliff:g> चलाउन आफ्नो खाता प्रयोग गर्नुहोस्"</string> + <!-- no translation found for get_dialog_description_single_tap (2797059565126030879) --> + <skip /> + <string name="get_dialog_title_unlock_options_for" msgid="7096423827682163270">"<xliff:g id="APP_NAME">%1$s</xliff:g> चलाउन साइन इनसम्बन्धी विकल्पहरू प्राप्त गर्नुहोस्"</string> <string name="get_dialog_title_choose_passkey_for" msgid="9175997688078538490">"<xliff:g id="APP_NAME">%1$s</xliff:g> मा साइन इन गर्न सेभ गरिएको पासकी छनौट गर्नुहोस्"</string> <string name="get_dialog_title_choose_password_for" msgid="1724435823820819221">"<xliff:g id="APP_NAME">%1$s</xliff:g> मा साइन इन गर्न सेभ गरिएको पासवर्ड छनौट गर्नुहोस्"</string> <string name="get_dialog_title_choose_saved_sign_in_for" msgid="2420298653461652728">"<xliff:g id="APP_NAME">%1$s</xliff:g> मा साइन इन गर्न सेभ गरिएका क्रिडेन्सियल छनौट गर्नुहोस्"</string> - <string name="get_dialog_title_choose_sign_in_for" msgid="3048870756117876514">"<xliff:g id="APP_NAME">%1$s</xliff:g> मा साइन इन गर्न प्रयोग गरिने क्रिडेन्सियलहरू छनौट गर्नुहोस्"</string> + <string name="get_dialog_title_choose_sign_in_for" msgid="645728947702442421">"<xliff:g id="APP_NAME">%1$s</xliff:g> चलाउन कुनै खाता छनौट गर्नुहोस्"</string> <string name="get_dialog_title_choose_option_for" msgid="4976380044745029107">"<xliff:g id="APP_NAME">%1$s</xliff:g> मा साइन गर्न प्रयोग गरिने क्रिडेन्सियल छनौट गर्ने हो?"</string> <string name="get_dialog_title_use_info_on" msgid="8863708099535435146">"<xliff:g id="APP_NAME">%1$s</xliff:g> मा साइन गर्न गर्नका निम्ति यो जानकारी प्रयोग गर्ने हो?"</string> <string name="get_dialog_use_saved_passkey_for" msgid="4618100798664888512">"अर्कै विधि प्रयोग गरी साइन इन गर्नुहोस्"</string> diff --git a/packages/CredentialManager/res/values-nl/strings.xml b/packages/CredentialManager/res/values-nl/strings.xml index 6707ff092dda..a7c714571e2e 100644 --- a/packages/CredentialManager/res/values-nl/strings.xml +++ b/packages/CredentialManager/res/values-nl/strings.xml @@ -42,9 +42,6 @@ <string name="choose_create_option_passkey_title" msgid="8762295821604276511">"Toegangssleutel maken om in te loggen bij <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string> <string name="choose_create_option_password_title" msgid="4481366993598649224">"Wachtwoord opslaan om in te loggen bij <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string> <string name="choose_create_option_sign_in_title" msgid="7092914088455358079">"Inloggegevens opslaan voor <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string> - <string name="choose_create_single_tap_passkey_title" msgid="3872793514041774218">"Je schermvergrendeling gebruiken om een toegangssleutel voor <xliff:g id="APP_NAME">%1$s</xliff:g> te maken?"</string> - <string name="choose_create_single_tap_password_title" msgid="5231871886818921622">"Je schermvergrendeling gebruiken om een wachtwoord voor <xliff:g id="APP_NAME">%1$s</xliff:g> te maken?"</string> - <string name="choose_create_single_tap_sign_in_title" msgid="256498714574099587">"Je schermvergrendeling gebruiken om inloggegevens voor <xliff:g id="APP_NAME">%1$s</xliff:g> op te slaan?"</string> <string name="passkey" msgid="632353688396759522">"Toegangssleutel"</string> <string name="password" msgid="6738570945182936667">"wachtwoord"</string> <string name="passkeys" msgid="5733880786866559847">"toegangssleutels"</string> @@ -71,15 +68,16 @@ <string name="accessibility_back_arrow_button" msgid="3233198183497842492">"Ga terug naar de vorige pagina"</string> <string name="accessibility_close_button" msgid="1163435587545377687">"Sluiten"</string> <string name="accessibility_snackbar_dismiss" msgid="3456598374801836120">"Sluiten"</string> - <string name="get_dialog_title_use_passkey_for" msgid="6236608872708021767">"Je opgeslagen toegangssleutel gebruiken voor <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string> - <string name="get_dialog_title_use_password_for" msgid="625828023234318484">"Je opgeslagen wachtwoord voor <xliff:g id="APP_NAME">%1$s</xliff:g> gebruiken?"</string> - <string name="get_dialog_title_single_tap_for" msgid="2057945648748859483">"Gebruik je schermvergrendeling om in te loggen bij <xliff:g id="APP_NAME">%1$s</xliff:g> met <xliff:g id="USERNAME">%2$s</xliff:g>"</string> - <string name="get_dialog_title_use_sign_in_for" msgid="790049858275131785">"Je login voor <xliff:g id="APP_NAME">%1$s</xliff:g> gebruiken?"</string> - <string name="get_dialog_title_unlock_options_for" msgid="7605568190597632433">"Inlogopties voor <xliff:g id="APP_NAME">%1$s</xliff:g> ontgrendelen?"</string> + <string name="get_dialog_title_use_passkey_for" msgid="479261099705979148">"Gebruik je opgeslagen toegangssleutel voor <xliff:g id="APP_NAME">%1$s</xliff:g>"</string> + <string name="get_dialog_title_use_password_for" msgid="688557784207167647">"Gebruik je opgeslagen wachtwoord voor <xliff:g id="APP_NAME">%1$s</xliff:g>"</string> + <string name="get_dialog_title_use_sign_in_for" msgid="4233553937542583226">"Gebruik je account voor <xliff:g id="APP_NAME">%1$s</xliff:g>"</string> + <!-- no translation found for get_dialog_description_single_tap (2797059565126030879) --> + <skip /> + <string name="get_dialog_title_unlock_options_for" msgid="7096423827682163270">"Ontgrendel inlogopties voor <xliff:g id="APP_NAME">%1$s</xliff:g>"</string> <string name="get_dialog_title_choose_passkey_for" msgid="9175997688078538490">"Opgeslagen toegangssleutel kiezen voor <xliff:g id="APP_NAME">%1$s</xliff:g>"</string> <string name="get_dialog_title_choose_password_for" msgid="1724435823820819221">"Opgeslagen wachtwoord kiezen voor <xliff:g id="APP_NAME">%1$s</xliff:g>"</string> <string name="get_dialog_title_choose_saved_sign_in_for" msgid="2420298653461652728">"Opgeslagen login kiezen voor <xliff:g id="APP_NAME">%1$s</xliff:g>"</string> - <string name="get_dialog_title_choose_sign_in_for" msgid="3048870756117876514">"Kies een login voor <xliff:g id="APP_NAME">%1$s</xliff:g>"</string> + <string name="get_dialog_title_choose_sign_in_for" msgid="645728947702442421">"Kies een account voor <xliff:g id="APP_NAME">%1$s</xliff:g>"</string> <string name="get_dialog_title_choose_option_for" msgid="4976380044745029107">"Een optie kiezen voor <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string> <string name="get_dialog_title_use_info_on" msgid="8863708099535435146">"Deze informatie gebruiken in <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string> <string name="get_dialog_use_saved_passkey_for" msgid="4618100798664888512">"Op een andere manier inloggen"</string> diff --git a/packages/CredentialManager/res/values-or/strings.xml b/packages/CredentialManager/res/values-or/strings.xml index 9781c49d945c..1e2bbe85e706 100644 --- a/packages/CredentialManager/res/values-or/strings.xml +++ b/packages/CredentialManager/res/values-or/strings.xml @@ -42,9 +42,6 @@ <string name="choose_create_option_passkey_title" msgid="8762295821604276511">"<xliff:g id="APP_NAME">%1$s</xliff:g>ରେ ସାଇନ ଇନ କରିବାକୁ ପାସକୀ ତିଆରି କରିବେ?"</string> <string name="choose_create_option_password_title" msgid="4481366993598649224">"<xliff:g id="APP_NAME">%1$s</xliff:g>ରେ ସାଇନ ଇନ କରିବାକୁ ପାସୱାର୍ଡ ସେଭ କରିବେ?"</string> <string name="choose_create_option_sign_in_title" msgid="7092914088455358079">"<xliff:g id="APP_NAME">%1$s</xliff:g> ପାଇଁ ସାଇନ-ଇନର ସୂଚନା ସେଭ କରିବେ?"</string> - <string name="choose_create_single_tap_passkey_title" msgid="3872793514041774218">"<xliff:g id="APP_NAME">%1$s</xliff:g> ପାଇଁ ଏକ ପାସକୀ ତିଆରି କରିବାକୁ ଆପଣଙ୍କ ସ୍କ୍ରିନ ଲକ ବ୍ୟବହାର କରିବେ?"</string> - <string name="choose_create_single_tap_password_title" msgid="5231871886818921622">"<xliff:g id="APP_NAME">%1$s</xliff:g> ପାଇଁ ଏକ ପାସୱାର୍ଡ ତିଆରି କରିବାକୁ ଆପଣଙ୍କ ସ୍କ୍ରିନ ଲକ ବ୍ୟବହାର କରିବେ?"</string> - <string name="choose_create_single_tap_sign_in_title" msgid="256498714574099587">"<xliff:g id="APP_NAME">%1$s</xliff:g> ପାଇଁ ସାଇନ ଇନ ସୂଚନା ସେଭ କରିବାକୁ ଆପଣଙ୍କ ସ୍କ୍ରିନ ଲକ ବ୍ୟବହାର କରିବେ?"</string> <string name="passkey" msgid="632353688396759522">"ପାସକୀ"</string> <string name="password" msgid="6738570945182936667">"ପାସୱାର୍ଡ"</string> <string name="passkeys" msgid="5733880786866559847">"ପାସକୀଗୁଡ଼ିକ"</string> @@ -71,15 +68,16 @@ <string name="accessibility_back_arrow_button" msgid="3233198183497842492">"ପୂର୍ବବର୍ତ୍ତୀ ପୃଷ୍ଠାକୁ ଫେରନ୍ତୁ"</string> <string name="accessibility_close_button" msgid="1163435587545377687">"ବନ୍ଦ କରନ୍ତୁ"</string> <string name="accessibility_snackbar_dismiss" msgid="3456598374801836120">"ଖାରଜ କରନ୍ତୁ"</string> - <string name="get_dialog_title_use_passkey_for" msgid="6236608872708021767">"<xliff:g id="APP_NAME">%1$s</xliff:g> ପାଇଁ ସେଭ କରାଯାଇଥିବା ଆପଣଙ୍କ ପାସକୀ ବ୍ୟବହାର କରିବେ?"</string> - <string name="get_dialog_title_use_password_for" msgid="625828023234318484">"<xliff:g id="APP_NAME">%1$s</xliff:g> ପାଇଁ ଆପଣଙ୍କ ସେଭ କରାଯାଇଥିବା ପାସୱାର୍ଡକୁ ବ୍ୟବହାର କରିବେ?"</string> - <string name="get_dialog_title_single_tap_for" msgid="2057945648748859483">"<xliff:g id="USERNAME">%2$s</xliff:g> ମାଧ୍ୟମରେ <xliff:g id="APP_NAME">%1$s</xliff:g>ରେ ସାଇନ ଇନ କରିବା ପାଇଁ ଆପଣଙ୍କ ସ୍କ୍ରିନ ଲକ ବ୍ୟବହାର କରନ୍ତୁ"</string> - <string name="get_dialog_title_use_sign_in_for" msgid="790049858275131785">"<xliff:g id="APP_NAME">%1$s</xliff:g> ପାଇଁ ଆପଣଙ୍କ ସାଇନ-ଇନ ବ୍ୟବହାର କରିବେ?"</string> - <string name="get_dialog_title_unlock_options_for" msgid="7605568190597632433">"<xliff:g id="APP_NAME">%1$s</xliff:g> ପାଇଁ ସାଇନ-ଇନ ବିକଳ୍ପଗୁଡ଼ିକୁ ଅନଲକ କରିବେ?"</string> + <string name="get_dialog_title_use_passkey_for" msgid="479261099705979148">"<xliff:g id="APP_NAME">%1$s</xliff:g> ପାଇଁ ଆପଣଙ୍କ ସେଭ କରାଯାଇଥିବା ପାସକୀ ବ୍ୟବହାର କରନ୍ତୁ"</string> + <string name="get_dialog_title_use_password_for" msgid="688557784207167647">"<xliff:g id="APP_NAME">%1$s</xliff:g> ପାଇଁ ଆପଣଙ୍କ ସେଭ କରାଯାଇଥିବା ପାସୱାର୍ଡ ବ୍ୟବହାର କରନ୍ତୁ"</string> + <string name="get_dialog_title_use_sign_in_for" msgid="4233553937542583226">"<xliff:g id="APP_NAME">%1$s</xliff:g> ପାଇଁ ଆପଣଙ୍କ ଆକାଉଣ୍ଟ ବ୍ୟବହାର କରନ୍ତୁ"</string> + <!-- no translation found for get_dialog_description_single_tap (2797059565126030879) --> + <skip /> + <string name="get_dialog_title_unlock_options_for" msgid="7096423827682163270">"<xliff:g id="APP_NAME">%1$s</xliff:g> ପାଇଁ ସାଇନ-ଇନ ବିକଳ୍ପକୁ ଅନଲକ କରନ୍ତୁ"</string> <string name="get_dialog_title_choose_passkey_for" msgid="9175997688078538490">"<xliff:g id="APP_NAME">%1$s</xliff:g> ପାଇଁ ସେଭ କରାଯାଇଥିବା ଏକ ପାସକୀ ବାଛନ୍ତୁ"</string> <string name="get_dialog_title_choose_password_for" msgid="1724435823820819221">"<xliff:g id="APP_NAME">%1$s</xliff:g> ପାଇଁ ସେଭ କରାଯାଇଥିବା ଏକ ପାସୱାର୍ଡ ବାଛନ୍ତୁ"</string> <string name="get_dialog_title_choose_saved_sign_in_for" msgid="2420298653461652728">"<xliff:g id="APP_NAME">%1$s</xliff:g> ପାଇଁ ସେଭ କରାଯାଇଥିବା ଏକ ସାଇନ-ଇନ ବାଛନ୍ତୁ"</string> - <string name="get_dialog_title_choose_sign_in_for" msgid="3048870756117876514">"<xliff:g id="APP_NAME">%1$s</xliff:g> ପାଇଁ ଏକ ସାଇନ-ଇନ ବାଛନ୍ତୁ"</string> + <string name="get_dialog_title_choose_sign_in_for" msgid="645728947702442421">"<xliff:g id="APP_NAME">%1$s</xliff:g> ପାଇଁ ଏକ ଆକାଉଣ୍ଟ ବାଛନ୍ତୁ"</string> <string name="get_dialog_title_choose_option_for" msgid="4976380044745029107">"<xliff:g id="APP_NAME">%1$s</xliff:g> ପାଇଁ ଏକ ବିକଳ୍ପ ବାଛିବେ?"</string> <string name="get_dialog_title_use_info_on" msgid="8863708099535435146">"<xliff:g id="APP_NAME">%1$s</xliff:g>ରେ ଏହି ସୂଚନାକୁ ବ୍ୟବହାର କରିବେ?"</string> <string name="get_dialog_use_saved_passkey_for" msgid="4618100798664888512">"ଅନ୍ୟ ଏକ ଉପାୟରେ ସାଇନ ଇନ କରନ୍ତୁ"</string> diff --git a/packages/CredentialManager/res/values-pa/strings.xml b/packages/CredentialManager/res/values-pa/strings.xml index a5aceb7a11c7..1caec50e4625 100644 --- a/packages/CredentialManager/res/values-pa/strings.xml +++ b/packages/CredentialManager/res/values-pa/strings.xml @@ -42,9 +42,6 @@ <string name="choose_create_option_passkey_title" msgid="8762295821604276511">"ਕੀ <xliff:g id="APP_NAME">%1$s</xliff:g> ਵਿੱਚ ਸਾਈਨ-ਇਨ ਕਰਨ ਲਈ ਪਾਸਕੀ ਬਣਾਉਣੀ ਹੈ?"</string> <string name="choose_create_option_password_title" msgid="4481366993598649224">"ਕੀ <xliff:g id="APP_NAME">%1$s</xliff:g> ਵਿੱਚ ਸਾਈਨ-ਇਨ ਕਰਨ ਲਈ ਪਾਸਵਰਡ ਰੱਖਿਅਤ ਕਰਨਾ ਹੈ?"</string> <string name="choose_create_option_sign_in_title" msgid="7092914088455358079">"ਕੀ <xliff:g id="APP_NAME">%1$s</xliff:g> ਲਈ ਸਾਈਨ-ਇਨ ਜਾਣਕਾਰੀ ਰੱਖਿਅਤ ਕਰਨੀ ਹੈ?"</string> - <string name="choose_create_single_tap_passkey_title" msgid="3872793514041774218">"ਕੀ <xliff:g id="APP_NAME">%1$s</xliff:g> ਲਈ ਪਾਸਕੀ ਬਣਾਉਣ ਵਾਸਤੇ ਆਪਣੇ ਸਕ੍ਰੀਨ ਲਾਕ ਦੀ ਵਰਤੋਂ ਕਰਨੀ ਹੈ?"</string> - <string name="choose_create_single_tap_password_title" msgid="5231871886818921622">"ਕੀ <xliff:g id="APP_NAME">%1$s</xliff:g> ਲਈ ਪਾਸਵਰਡ ਬਣਾਉਣ ਵਾਸਤੇ ਆਪਣੇ ਸਕ੍ਰੀਨ ਲਾਕ ਦੀ ਵਰਤੋਂ ਕਰਨੀ ਹੈ?"</string> - <string name="choose_create_single_tap_sign_in_title" msgid="256498714574099587">"ਕੀ <xliff:g id="APP_NAME">%1$s</xliff:g> ਲਈ ਸਾਈਨ-ਇਨ ਜਾਣਕਾਰੀ ਰੱਖਿਅਤ ਕਰਨ ਵਾਸਤੇ ਆਪਣੇ ਸਕ੍ਰੀਨ ਲਾਕ ਦੀ ਵਰਤੋਂ ਕਰਨੀ ਹੈ?"</string> <string name="passkey" msgid="632353688396759522">"ਪਾਸਕੀ"</string> <string name="password" msgid="6738570945182936667">"ਪਾਸਵਰਡ"</string> <string name="passkeys" msgid="5733880786866559847">"ਪਾਸਕੀਆਂ"</string> @@ -71,15 +68,16 @@ <string name="accessibility_back_arrow_button" msgid="3233198183497842492">"ਪਿਛਲੇ ਪੰਨੇ \'ਤੇ ਵਾਪਸ ਜਾਓ"</string> <string name="accessibility_close_button" msgid="1163435587545377687">"ਬੰਦ ਕਰੋ"</string> <string name="accessibility_snackbar_dismiss" msgid="3456598374801836120">"ਖਾਰਜ ਕਰੋ"</string> - <string name="get_dialog_title_use_passkey_for" msgid="6236608872708021767">"ਕੀ <xliff:g id="APP_NAME">%1$s</xliff:g> ਲਈ ਆਪਣੀ ਰੱਖਿਅਤ ਕੀਤੀ ਪਾਸਕੀ ਦੀ ਵਰਤੋਂ ਕਰਨੀ ਹੈ?"</string> - <string name="get_dialog_title_use_password_for" msgid="625828023234318484">"ਕੀ <xliff:g id="APP_NAME">%1$s</xliff:g> ਲਈ ਤੁਹਾਡਾ ਰੱਖਿਅਤ ਕੀਤਾ ਪਾਸਵਰਡ ਵਰਤਣਾ ਹੈ?"</string> - <string name="get_dialog_title_single_tap_for" msgid="2057945648748859483">"<xliff:g id="USERNAME">%2$s</xliff:g> ਨਾਲ <xliff:g id="APP_NAME">%1$s</xliff:g> ਵਿੱਚ ਸਾਈਨ-ਇਨ ਕਰਨ ਲਈ ਆਪਣੇ ਸਕ੍ਰੀਨ ਲਾਕ ਦੀ ਵਰਤੋਂ ਕਰੋ"</string> - <string name="get_dialog_title_use_sign_in_for" msgid="790049858275131785">"ਕੀ <xliff:g id="APP_NAME">%1$s</xliff:g> ਲਈ ਆਪਣਾ ਸਾਈਨ-ਇਨ ਕਰਨ ਦਾ ਵਿਕਲਪ ਵਰਤਣਾ ਹੈ?"</string> - <string name="get_dialog_title_unlock_options_for" msgid="7605568190597632433">"ਕੀ <xliff:g id="APP_NAME">%1$s</xliff:g> ਲਈ ਸਾਈਨ-ਇਨ ਵਿਕਲਪਾਂ ਨੂੰ ਅਣਲਾਕ ਕਰਨਾ ਹੈ?"</string> + <string name="get_dialog_title_use_passkey_for" msgid="479261099705979148">"<xliff:g id="APP_NAME">%1$s</xliff:g> ਲਈ ਆਪਣੀ ਰੱਖਿਅਤ ਕੀਤੀ ਪਾਸਕੀ ਵਰਤੋ"</string> + <string name="get_dialog_title_use_password_for" msgid="688557784207167647">"<xliff:g id="APP_NAME">%1$s</xliff:g> ਲਈ ਆਪਣਾ ਰੱਖਿਅਤ ਕੀਤਾ ਪਾਸਵਰਡ ਵਰਤੋ"</string> + <string name="get_dialog_title_use_sign_in_for" msgid="4233553937542583226">"<xliff:g id="APP_NAME">%1$s</xliff:g> ਲਈ ਆਪਣਾ ਖਾਤਾ ਵਰਤੋ"</string> + <!-- no translation found for get_dialog_description_single_tap (2797059565126030879) --> + <skip /> + <string name="get_dialog_title_unlock_options_for" msgid="7096423827682163270">"<xliff:g id="APP_NAME">%1$s</xliff:g> ਲਈ ਸਾਈਨ-ਇਨ ਵਿਕਲਪਾਂ ਨੂੰ ਅਣਲਾਕ ਕਰੋ"</string> <string name="get_dialog_title_choose_passkey_for" msgid="9175997688078538490">"<xliff:g id="APP_NAME">%1$s</xliff:g> ਲਈ ਕੋਈ ਰੱਖਿਅਤ ਕੀਤੀ ਪਾਸਕੀ ਚੁਣੋ"</string> <string name="get_dialog_title_choose_password_for" msgid="1724435823820819221">"<xliff:g id="APP_NAME">%1$s</xliff:g> ਲਈ ਕੋਈ ਰੱਖਿਅਤ ਕੀਤਾ ਪਾਸਵਰਡ ਚੁਣੋ"</string> <string name="get_dialog_title_choose_saved_sign_in_for" msgid="2420298653461652728">"<xliff:g id="APP_NAME">%1$s</xliff:g> ਲਈ ਕੋਈ ਰੱਖਿਅਤ ਕੀਤੀ ਸਾਈਨ-ਇਨ ਜਾਣਕਾਰੀ ਚੁਣੋ"</string> - <string name="get_dialog_title_choose_sign_in_for" msgid="3048870756117876514">"<xliff:g id="APP_NAME">%1$s</xliff:g> ਲਈ ਸਾਈਨ-ਇਨ ਕਰਨ ਦਾ ਵਿਕਲਪ ਚੁਣੋ"</string> + <string name="get_dialog_title_choose_sign_in_for" msgid="645728947702442421">"<xliff:g id="APP_NAME">%1$s</xliff:g> ਲਈ ਕੋਈ ਖਾਤਾ ਚੁਣੋ"</string> <string name="get_dialog_title_choose_option_for" msgid="4976380044745029107">"ਕੀ <xliff:g id="APP_NAME">%1$s</xliff:g> ਲਈ ਕਿਸੇ ਵਿਕਲਪ ਦੀ ਚੋਣ ਕਰਨੀ ਹੈ?"</string> <string name="get_dialog_title_use_info_on" msgid="8863708099535435146">"ਕੀ <xliff:g id="APP_NAME">%1$s</xliff:g> \'ਤੇ ਇਸ ਜਾਣਕਾਰੀ ਦੀ ਵਰਤੋਂ ਕਰਨੀ ਹੈ?"</string> <string name="get_dialog_use_saved_passkey_for" msgid="4618100798664888512">"ਕਿਸੇ ਹੋਰ ਤਰੀਕੇ ਨਾਲ ਸਾਈਨ-ਇਨ ਕਰੋ"</string> diff --git a/packages/CredentialManager/res/values-pl/strings.xml b/packages/CredentialManager/res/values-pl/strings.xml index eca8699d0a55..8840eeedc68f 100644 --- a/packages/CredentialManager/res/values-pl/strings.xml +++ b/packages/CredentialManager/res/values-pl/strings.xml @@ -42,9 +42,6 @@ <string name="choose_create_option_passkey_title" msgid="8762295821604276511">"Utworzyć klucz dostępu do logowania w aplikacji <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string> <string name="choose_create_option_password_title" msgid="4481366993598649224">"Zapisać hasło do logowania w aplikacji <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string> <string name="choose_create_option_sign_in_title" msgid="7092914088455358079">"Zapisać dane używane do logowania w aplikacji <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string> - <string name="choose_create_single_tap_passkey_title" msgid="3872793514041774218">"Użyć metody odblokowania ekranu do utworzenia klucza dostępu do aplikacji <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string> - <string name="choose_create_single_tap_password_title" msgid="5231871886818921622">"Użyć metody odblokowania ekranu do utworzenia hasła do aplikacji <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string> - <string name="choose_create_single_tap_sign_in_title" msgid="256498714574099587">"Użyć metody odblokowania ekranu do zapisania danych logowania do aplikacji <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string> <string name="passkey" msgid="632353688396759522">"klucz"</string> <string name="password" msgid="6738570945182936667">"hasło"</string> <string name="passkeys" msgid="5733880786866559847">"klucze dostępu"</string> @@ -71,15 +68,16 @@ <string name="accessibility_back_arrow_button" msgid="3233198183497842492">"Wróć do poprzedniej strony"</string> <string name="accessibility_close_button" msgid="1163435587545377687">"Zamknij"</string> <string name="accessibility_snackbar_dismiss" msgid="3456598374801836120">"Zamknij"</string> - <string name="get_dialog_title_use_passkey_for" msgid="6236608872708021767">"Użyć zapisanego klucza dla aplikacji <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string> - <string name="get_dialog_title_use_password_for" msgid="625828023234318484">"Użyć zapisanego hasła do aplikacji <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string> - <string name="get_dialog_title_single_tap_for" msgid="2057945648748859483">"Używaj metody odblokowywania ekranu, aby logować się do aplikacji <xliff:g id="APP_NAME">%1$s</xliff:g> za pomocą nazwy użytkownika <xliff:g id="USERNAME">%2$s</xliff:g>"</string> - <string name="get_dialog_title_use_sign_in_for" msgid="790049858275131785">"Użyć tych danych logowania do aplikacji <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string> - <string name="get_dialog_title_unlock_options_for" msgid="7605568190597632433">"Odblokować opcje logowania do aplikacji <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string> + <string name="get_dialog_title_use_passkey_for" msgid="479261099705979148">"Użyj zapisanego klucza dostępu do aplikacji <xliff:g id="APP_NAME">%1$s</xliff:g>"</string> + <string name="get_dialog_title_use_password_for" msgid="688557784207167647">"Użyj zapisanego hasła do aplikacji <xliff:g id="APP_NAME">%1$s</xliff:g>"</string> + <string name="get_dialog_title_use_sign_in_for" msgid="4233553937542583226">"Użyj swojego konta w aplikacji <xliff:g id="APP_NAME">%1$s</xliff:g>"</string> + <!-- no translation found for get_dialog_description_single_tap (2797059565126030879) --> + <skip /> + <string name="get_dialog_title_unlock_options_for" msgid="7096423827682163270">"Odblokuj opcje logowania w aplikacji <xliff:g id="APP_NAME">%1$s</xliff:g>"</string> <string name="get_dialog_title_choose_passkey_for" msgid="9175997688078538490">"Wybierz zapisany klucz dostępu do aplikacji <xliff:g id="APP_NAME">%1$s</xliff:g>"</string> <string name="get_dialog_title_choose_password_for" msgid="1724435823820819221">"Wybierz zapisane hasło do aplikacji <xliff:g id="APP_NAME">%1$s</xliff:g>"</string> <string name="get_dialog_title_choose_saved_sign_in_for" msgid="2420298653461652728">"Wybierz zapisane dane logowania do aplikacji <xliff:g id="APP_NAME">%1$s</xliff:g>"</string> - <string name="get_dialog_title_choose_sign_in_for" msgid="3048870756117876514">"Wybierz dane logowania do aplikacji <xliff:g id="APP_NAME">%1$s</xliff:g>"</string> + <string name="get_dialog_title_choose_sign_in_for" msgid="645728947702442421">"Wybierz konto dla aplikacji <xliff:g id="APP_NAME">%1$s</xliff:g>"</string> <string name="get_dialog_title_choose_option_for" msgid="4976380044745029107">"Wybrać opcję dla aplikacji <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string> <string name="get_dialog_title_use_info_on" msgid="8863708099535435146">"Użyć tych informacji w aplikacji <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string> <string name="get_dialog_use_saved_passkey_for" msgid="4618100798664888512">"Zaloguj się w inny sposób"</string> diff --git a/packages/CredentialManager/res/values-pt-rBR/strings.xml b/packages/CredentialManager/res/values-pt-rBR/strings.xml index b508af975c4d..2a1b6a67dfe7 100644 --- a/packages/CredentialManager/res/values-pt-rBR/strings.xml +++ b/packages/CredentialManager/res/values-pt-rBR/strings.xml @@ -42,9 +42,6 @@ <string name="choose_create_option_passkey_title" msgid="8762295821604276511">"Criar chave de acesso para fazer login no app <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string> <string name="choose_create_option_password_title" msgid="4481366993598649224">"Salvar senha para fazer login no app <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string> <string name="choose_create_option_sign_in_title" msgid="7092914088455358079">"Salvar informações de login do app <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string> - <string name="choose_create_single_tap_passkey_title" msgid="3872793514041774218">"Usar o bloqueio de tela para criar uma chave de acesso para o app <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string> - <string name="choose_create_single_tap_password_title" msgid="5231871886818921622">"Usar o bloqueio de tela para criar uma senha para o app <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string> - <string name="choose_create_single_tap_sign_in_title" msgid="256498714574099587">"Usar o bloqueio de tela para salvar as informações de login do app <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string> <string name="passkey" msgid="632353688396759522">"chave de acesso"</string> <string name="password" msgid="6738570945182936667">"senha"</string> <string name="passkeys" msgid="5733880786866559847">"chaves de acesso"</string> @@ -71,15 +68,16 @@ <string name="accessibility_back_arrow_button" msgid="3233198183497842492">"Voltar à página anterior"</string> <string name="accessibility_close_button" msgid="1163435587545377687">"Fechar"</string> <string name="accessibility_snackbar_dismiss" msgid="3456598374801836120">"Dispensar"</string> - <string name="get_dialog_title_use_passkey_for" msgid="6236608872708021767">"Usar sua chave de acesso salva para o app <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string> - <string name="get_dialog_title_use_password_for" msgid="625828023234318484">"Usar a senha salva para o app <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string> - <string name="get_dialog_title_single_tap_for" msgid="2057945648748859483">"Use o bloqueio de tela para fazer login no app <xliff:g id="APP_NAME">%1$s</xliff:g> com a conta <xliff:g id="USERNAME">%2$s</xliff:g>"</string> - <string name="get_dialog_title_use_sign_in_for" msgid="790049858275131785">"Usar seu login para o app <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string> - <string name="get_dialog_title_unlock_options_for" msgid="7605568190597632433">"Desbloquear opções de login para o app <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string> + <string name="get_dialog_title_use_passkey_for" msgid="479261099705979148">"Usar sua chave de acesso salva para o app <xliff:g id="APP_NAME">%1$s</xliff:g>"</string> + <string name="get_dialog_title_use_password_for" msgid="688557784207167647">"Usar a senha salva para o app <xliff:g id="APP_NAME">%1$s</xliff:g>"</string> + <string name="get_dialog_title_use_sign_in_for" msgid="4233553937542583226">"Usar sua conta para o app <xliff:g id="APP_NAME">%1$s</xliff:g>"</string> + <!-- no translation found for get_dialog_description_single_tap (2797059565126030879) --> + <skip /> + <string name="get_dialog_title_unlock_options_for" msgid="7096423827682163270">"Desbloquear opções de login para o app <xliff:g id="APP_NAME">%1$s</xliff:g>"</string> <string name="get_dialog_title_choose_passkey_for" msgid="9175997688078538490">"Escolha uma chave de acesso salva para o app <xliff:g id="APP_NAME">%1$s</xliff:g>"</string> <string name="get_dialog_title_choose_password_for" msgid="1724435823820819221">"Escolha uma senha salva para o app <xliff:g id="APP_NAME">%1$s</xliff:g>"</string> <string name="get_dialog_title_choose_saved_sign_in_for" msgid="2420298653461652728">"Escolha uma credencial de login salva para o app <xliff:g id="APP_NAME">%1$s</xliff:g>"</string> - <string name="get_dialog_title_choose_sign_in_for" msgid="3048870756117876514">"Escolha uma opção de login para o app <xliff:g id="APP_NAME">%1$s</xliff:g>"</string> + <string name="get_dialog_title_choose_sign_in_for" msgid="645728947702442421">"Escolha uma conta para o app <xliff:g id="APP_NAME">%1$s</xliff:g>"</string> <string name="get_dialog_title_choose_option_for" msgid="4976380044745029107">"Escolher uma opção para o app <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string> <string name="get_dialog_title_use_info_on" msgid="8863708099535435146">"Usar estas informações no app <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string> <string name="get_dialog_use_saved_passkey_for" msgid="4618100798664888512">"Fazer login de outra forma"</string> diff --git a/packages/CredentialManager/res/values-pt-rPT/strings.xml b/packages/CredentialManager/res/values-pt-rPT/strings.xml index 8b6b2b2e6450..a81a8ef673c7 100644 --- a/packages/CredentialManager/res/values-pt-rPT/strings.xml +++ b/packages/CredentialManager/res/values-pt-rPT/strings.xml @@ -42,9 +42,6 @@ <string name="choose_create_option_passkey_title" msgid="8762295821604276511">"Criar a chave de acesso para iniciar sessão na app <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string> <string name="choose_create_option_password_title" msgid="4481366993598649224">"Guardar a palavra-passe para iniciar sessão na app <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string> <string name="choose_create_option_sign_in_title" msgid="7092914088455358079">"Guardar as informações de início de sessão da app <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string> - <string name="choose_create_single_tap_passkey_title" msgid="3872793514041774218">"Usar o bloqueio de ecrã para criar uma chave de acesso para a app <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string> - <string name="choose_create_single_tap_password_title" msgid="5231871886818921622">"Usar o bloqueio de ecrã para criar uma palavra-passe para a app <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string> - <string name="choose_create_single_tap_sign_in_title" msgid="256498714574099587">"Usar o bloqueio de ecrã para guardar as informações de início de sessão para a app <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string> <string name="passkey" msgid="632353688396759522">"chave de acesso"</string> <string name="password" msgid="6738570945182936667">"palavra-passe"</string> <string name="passkeys" msgid="5733880786866559847">"chaves de acesso"</string> @@ -71,15 +68,16 @@ <string name="accessibility_back_arrow_button" msgid="3233198183497842492">"Volte à página anterior"</string> <string name="accessibility_close_button" msgid="1163435587545377687">"Fechar"</string> <string name="accessibility_snackbar_dismiss" msgid="3456598374801836120">"Ignorar"</string> - <string name="get_dialog_title_use_passkey_for" msgid="6236608872708021767">"Usar a sua chave de acesso guardada na app <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string> - <string name="get_dialog_title_use_password_for" msgid="625828023234318484">"Usar a sua palavra-passe guardada para a app <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string> - <string name="get_dialog_title_single_tap_for" msgid="2057945648748859483">"Use o seu bloqueio de ecrã para iniciar sessão na app <xliff:g id="APP_NAME">%1$s</xliff:g> com <xliff:g id="USERNAME">%2$s</xliff:g>"</string> - <string name="get_dialog_title_use_sign_in_for" msgid="790049858275131785">"Usar o seu início de sessão para a app <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string> - <string name="get_dialog_title_unlock_options_for" msgid="7605568190597632433">"Desbloquear as opções de início de sessão para a app <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string> + <string name="get_dialog_title_use_passkey_for" msgid="479261099705979148">"Use a sua chave de acesso guardada na app <xliff:g id="APP_NAME">%1$s</xliff:g>"</string> + <string name="get_dialog_title_use_password_for" msgid="688557784207167647">"Use a sua palavra-passe guardada na app <xliff:g id="APP_NAME">%1$s</xliff:g>"</string> + <string name="get_dialog_title_use_sign_in_for" msgid="4233553937542583226">"Use sua conta na app <xliff:g id="APP_NAME">%1$s</xliff:g>"</string> + <!-- no translation found for get_dialog_description_single_tap (2797059565126030879) --> + <skip /> + <string name="get_dialog_title_unlock_options_for" msgid="7096423827682163270">"Desbloqueie as opções de início de sessão para a app <xliff:g id="APP_NAME">%1$s</xliff:g>"</string> <string name="get_dialog_title_choose_passkey_for" msgid="9175997688078538490">"Escolha uma chave de acesso guardada para a app <xliff:g id="APP_NAME">%1$s</xliff:g>"</string> <string name="get_dialog_title_choose_password_for" msgid="1724435823820819221">"Escolha uma palavra-passe guardada para a app <xliff:g id="APP_NAME">%1$s</xliff:g>"</string> <string name="get_dialog_title_choose_saved_sign_in_for" msgid="2420298653461652728">"Escolha um início de sessão guardado para a app <xliff:g id="APP_NAME">%1$s</xliff:g>"</string> - <string name="get_dialog_title_choose_sign_in_for" msgid="3048870756117876514">"Escolha um início de sessão para a app <xliff:g id="APP_NAME">%1$s</xliff:g>"</string> + <string name="get_dialog_title_choose_sign_in_for" msgid="645728947702442421">"Escolha uma conta para a app <xliff:g id="APP_NAME">%1$s</xliff:g>"</string> <string name="get_dialog_title_choose_option_for" msgid="4976380044745029107">"Escolher uma opção para a app <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string> <string name="get_dialog_title_use_info_on" msgid="8863708099535435146">"Usar estas informações na app <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string> <string name="get_dialog_use_saved_passkey_for" msgid="4618100798664888512">"Iniciar sessão de outra forma"</string> diff --git a/packages/CredentialManager/res/values-pt/strings.xml b/packages/CredentialManager/res/values-pt/strings.xml index b508af975c4d..2a1b6a67dfe7 100644 --- a/packages/CredentialManager/res/values-pt/strings.xml +++ b/packages/CredentialManager/res/values-pt/strings.xml @@ -42,9 +42,6 @@ <string name="choose_create_option_passkey_title" msgid="8762295821604276511">"Criar chave de acesso para fazer login no app <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string> <string name="choose_create_option_password_title" msgid="4481366993598649224">"Salvar senha para fazer login no app <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string> <string name="choose_create_option_sign_in_title" msgid="7092914088455358079">"Salvar informações de login do app <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string> - <string name="choose_create_single_tap_passkey_title" msgid="3872793514041774218">"Usar o bloqueio de tela para criar uma chave de acesso para o app <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string> - <string name="choose_create_single_tap_password_title" msgid="5231871886818921622">"Usar o bloqueio de tela para criar uma senha para o app <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string> - <string name="choose_create_single_tap_sign_in_title" msgid="256498714574099587">"Usar o bloqueio de tela para salvar as informações de login do app <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string> <string name="passkey" msgid="632353688396759522">"chave de acesso"</string> <string name="password" msgid="6738570945182936667">"senha"</string> <string name="passkeys" msgid="5733880786866559847">"chaves de acesso"</string> @@ -71,15 +68,16 @@ <string name="accessibility_back_arrow_button" msgid="3233198183497842492">"Voltar à página anterior"</string> <string name="accessibility_close_button" msgid="1163435587545377687">"Fechar"</string> <string name="accessibility_snackbar_dismiss" msgid="3456598374801836120">"Dispensar"</string> - <string name="get_dialog_title_use_passkey_for" msgid="6236608872708021767">"Usar sua chave de acesso salva para o app <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string> - <string name="get_dialog_title_use_password_for" msgid="625828023234318484">"Usar a senha salva para o app <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string> - <string name="get_dialog_title_single_tap_for" msgid="2057945648748859483">"Use o bloqueio de tela para fazer login no app <xliff:g id="APP_NAME">%1$s</xliff:g> com a conta <xliff:g id="USERNAME">%2$s</xliff:g>"</string> - <string name="get_dialog_title_use_sign_in_for" msgid="790049858275131785">"Usar seu login para o app <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string> - <string name="get_dialog_title_unlock_options_for" msgid="7605568190597632433">"Desbloquear opções de login para o app <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string> + <string name="get_dialog_title_use_passkey_for" msgid="479261099705979148">"Usar sua chave de acesso salva para o app <xliff:g id="APP_NAME">%1$s</xliff:g>"</string> + <string name="get_dialog_title_use_password_for" msgid="688557784207167647">"Usar a senha salva para o app <xliff:g id="APP_NAME">%1$s</xliff:g>"</string> + <string name="get_dialog_title_use_sign_in_for" msgid="4233553937542583226">"Usar sua conta para o app <xliff:g id="APP_NAME">%1$s</xliff:g>"</string> + <!-- no translation found for get_dialog_description_single_tap (2797059565126030879) --> + <skip /> + <string name="get_dialog_title_unlock_options_for" msgid="7096423827682163270">"Desbloquear opções de login para o app <xliff:g id="APP_NAME">%1$s</xliff:g>"</string> <string name="get_dialog_title_choose_passkey_for" msgid="9175997688078538490">"Escolha uma chave de acesso salva para o app <xliff:g id="APP_NAME">%1$s</xliff:g>"</string> <string name="get_dialog_title_choose_password_for" msgid="1724435823820819221">"Escolha uma senha salva para o app <xliff:g id="APP_NAME">%1$s</xliff:g>"</string> <string name="get_dialog_title_choose_saved_sign_in_for" msgid="2420298653461652728">"Escolha uma credencial de login salva para o app <xliff:g id="APP_NAME">%1$s</xliff:g>"</string> - <string name="get_dialog_title_choose_sign_in_for" msgid="3048870756117876514">"Escolha uma opção de login para o app <xliff:g id="APP_NAME">%1$s</xliff:g>"</string> + <string name="get_dialog_title_choose_sign_in_for" msgid="645728947702442421">"Escolha uma conta para o app <xliff:g id="APP_NAME">%1$s</xliff:g>"</string> <string name="get_dialog_title_choose_option_for" msgid="4976380044745029107">"Escolher uma opção para o app <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string> <string name="get_dialog_title_use_info_on" msgid="8863708099535435146">"Usar estas informações no app <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string> <string name="get_dialog_use_saved_passkey_for" msgid="4618100798664888512">"Fazer login de outra forma"</string> diff --git a/packages/CredentialManager/res/values-ro/strings.xml b/packages/CredentialManager/res/values-ro/strings.xml index ccbf22885731..2fd84cf63e5e 100644 --- a/packages/CredentialManager/res/values-ro/strings.xml +++ b/packages/CredentialManager/res/values-ro/strings.xml @@ -42,9 +42,6 @@ <string name="choose_create_option_passkey_title" msgid="8762295821604276511">"Creezi o cheie de acces pentru a te conecta la <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string> <string name="choose_create_option_password_title" msgid="4481366993598649224">"Salvezi parola pentru a te conecta la <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string> <string name="choose_create_option_sign_in_title" msgid="7092914088455358079">"Salvezi informațiile de conectare pentru <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string> - <string name="choose_create_single_tap_passkey_title" msgid="3872793514041774218">"Folosești blocarea ecranului ca să creezi o cheie de acces pentru <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string> - <string name="choose_create_single_tap_password_title" msgid="5231871886818921622">"Folosești blocarea ecranului ca să creezi o parolă pentru <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string> - <string name="choose_create_single_tap_sign_in_title" msgid="256498714574099587">"Folosești blocarea ecranului ca să salvezi informațiile de conectare pentru <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string> <string name="passkey" msgid="632353688396759522">"cheia de acces"</string> <string name="password" msgid="6738570945182936667">"parolă"</string> <string name="passkeys" msgid="5733880786866559847">"cheile de acces"</string> @@ -71,15 +68,16 @@ <string name="accessibility_back_arrow_button" msgid="3233198183497842492">"Revino la pagina precedentă"</string> <string name="accessibility_close_button" msgid="1163435587545377687">"Închide"</string> <string name="accessibility_snackbar_dismiss" msgid="3456598374801836120">"Închide"</string> - <string name="get_dialog_title_use_passkey_for" msgid="6236608872708021767">"Folosești cheia de acces salvată pentru <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string> - <string name="get_dialog_title_use_password_for" msgid="625828023234318484">"Folosești parola salvată pentru <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string> - <string name="get_dialog_title_single_tap_for" msgid="2057945648748859483">"Folosește blocarea ecranului ca să te conectezi la <xliff:g id="APP_NAME">%1$s</xliff:g> cu <xliff:g id="USERNAME">%2$s</xliff:g>"</string> - <string name="get_dialog_title_use_sign_in_for" msgid="790049858275131785">"Folosești datele de conectare pentru <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string> - <string name="get_dialog_title_unlock_options_for" msgid="7605568190597632433">"Deblochezi opțiunile de conectare pentru <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string> + <string name="get_dialog_title_use_passkey_for" msgid="479261099705979148">"Folosește cheia de acces salvată pentru <xliff:g id="APP_NAME">%1$s</xliff:g>"</string> + <string name="get_dialog_title_use_password_for" msgid="688557784207167647">"Folosește parola salvată pentru <xliff:g id="APP_NAME">%1$s</xliff:g>"</string> + <string name="get_dialog_title_use_sign_in_for" msgid="4233553937542583226">"Folosește-ți contul pentru <xliff:g id="APP_NAME">%1$s</xliff:g>"</string> + <!-- no translation found for get_dialog_description_single_tap (2797059565126030879) --> + <skip /> + <string name="get_dialog_title_unlock_options_for" msgid="7096423827682163270">"Deblochează opțiunile de conectare pentru <xliff:g id="APP_NAME">%1$s</xliff:g>"</string> <string name="get_dialog_title_choose_passkey_for" msgid="9175997688078538490">"Alege o cheie de acces salvată pentru <xliff:g id="APP_NAME">%1$s</xliff:g>"</string> <string name="get_dialog_title_choose_password_for" msgid="1724435823820819221">"Alege o parolă salvată pentru <xliff:g id="APP_NAME">%1$s</xliff:g>"</string> <string name="get_dialog_title_choose_saved_sign_in_for" msgid="2420298653461652728">"Alege o conectare salvată pentru <xliff:g id="APP_NAME">%1$s</xliff:g>"</string> - <string name="get_dialog_title_choose_sign_in_for" msgid="3048870756117876514">"Alege un set de date conectare pentru <xliff:g id="APP_NAME">%1$s</xliff:g>"</string> + <string name="get_dialog_title_choose_sign_in_for" msgid="645728947702442421">"Alege un cont pentru <xliff:g id="APP_NAME">%1$s</xliff:g>"</string> <string name="get_dialog_title_choose_option_for" msgid="4976380044745029107">"Alegi o opțiune pentru <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string> <string name="get_dialog_title_use_info_on" msgid="8863708099535435146">"Folosești aceste informații în <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string> <string name="get_dialog_use_saved_passkey_for" msgid="4618100798664888512">"Conectează-te altfel"</string> diff --git a/packages/CredentialManager/res/values-ru/strings.xml b/packages/CredentialManager/res/values-ru/strings.xml index c9c8dcccfbf0..690af936d489 100644 --- a/packages/CredentialManager/res/values-ru/strings.xml +++ b/packages/CredentialManager/res/values-ru/strings.xml @@ -42,9 +42,6 @@ <string name="choose_create_option_passkey_title" msgid="8762295821604276511">"Создать ключ доступа для входа в приложение \"<xliff:g id="APP_NAME">%1$s</xliff:g>\"?"</string> <string name="choose_create_option_password_title" msgid="4481366993598649224">"Сохранить пароль для входа в приложение \"<xliff:g id="APP_NAME">%1$s</xliff:g>\"?"</string> <string name="choose_create_option_sign_in_title" msgid="7092914088455358079">"Сохранить данные для входа в приложение \"<xliff:g id="APP_NAME">%1$s</xliff:g>\"?"</string> - <string name="choose_create_single_tap_passkey_title" msgid="3872793514041774218">"Использовать способ разблокировки экрана, чтобы создать ключ доступа для приложения \"<xliff:g id="APP_NAME">%1$s</xliff:g>\"?"</string> - <string name="choose_create_single_tap_password_title" msgid="5231871886818921622">"Использовать способ разблокировки экрана, чтобы создать пароль для приложения \"<xliff:g id="APP_NAME">%1$s</xliff:g>\"?"</string> - <string name="choose_create_single_tap_sign_in_title" msgid="256498714574099587">"Использовать способ разблокировки экрана, чтобы сохранить данные для входа в приложение \"<xliff:g id="APP_NAME">%1$s</xliff:g>\"?"</string> <string name="passkey" msgid="632353688396759522">"ключ доступа"</string> <string name="password" msgid="6738570945182936667">"пароль"</string> <string name="passkeys" msgid="5733880786866559847">"ключи доступа"</string> @@ -71,15 +68,16 @@ <string name="accessibility_back_arrow_button" msgid="3233198183497842492">"Вернуться на предыдущую страницу"</string> <string name="accessibility_close_button" msgid="1163435587545377687">"Закрыть"</string> <string name="accessibility_snackbar_dismiss" msgid="3456598374801836120">"Закрыть"</string> - <string name="get_dialog_title_use_passkey_for" msgid="6236608872708021767">"Использовать сохраненный ключ доступа для приложения \"<xliff:g id="APP_NAME">%1$s</xliff:g>\"?"</string> - <string name="get_dialog_title_use_password_for" msgid="625828023234318484">"Использовать сохраненный пароль для приложения \"<xliff:g id="APP_NAME">%1$s</xliff:g>\"?"</string> - <string name="get_dialog_title_single_tap_for" msgid="2057945648748859483">"Используйте способ разблокировки экрана для входа в приложение \"<xliff:g id="APP_NAME">%1$s</xliff:g>\" (<xliff:g id="USERNAME">%2$s</xliff:g>)."</string> - <string name="get_dialog_title_use_sign_in_for" msgid="790049858275131785">"Войти в приложение \"<xliff:g id="APP_NAME">%1$s</xliff:g>\" с этими данными?"</string> - <string name="get_dialog_title_unlock_options_for" msgid="7605568190597632433">"Разблокировать варианты входа для приложения \"<xliff:g id="APP_NAME">%1$s</xliff:g>\"?"</string> + <string name="get_dialog_title_use_passkey_for" msgid="479261099705979148">"Используйте сохраненный ключ доступа для приложения \"<xliff:g id="APP_NAME">%1$s</xliff:g>\""</string> + <string name="get_dialog_title_use_password_for" msgid="688557784207167647">"Используйте сохраненный пароль для приложения \"<xliff:g id="APP_NAME">%1$s</xliff:g>\""</string> + <string name="get_dialog_title_use_sign_in_for" msgid="4233553937542583226">"Используйте аккаунт для входа в приложение \"<xliff:g id="APP_NAME">%1$s</xliff:g>\""</string> + <!-- no translation found for get_dialog_description_single_tap (2797059565126030879) --> + <skip /> + <string name="get_dialog_title_unlock_options_for" msgid="7096423827682163270">"Разблокируйте способы входа для приложения \"<xliff:g id="APP_NAME">%1$s</xliff:g>\""</string> <string name="get_dialog_title_choose_passkey_for" msgid="9175997688078538490">"Выберите сохраненный ключ доступа для приложения \"<xliff:g id="APP_NAME">%1$s</xliff:g>\""</string> <string name="get_dialog_title_choose_password_for" msgid="1724435823820819221">"Выберите сохраненный пароль для приложения \"<xliff:g id="APP_NAME">%1$s</xliff:g>\""</string> <string name="get_dialog_title_choose_saved_sign_in_for" msgid="2420298653461652728">"Выберите сохраненные учетные данные для приложения \"<xliff:g id="APP_NAME">%1$s</xliff:g>\""</string> - <string name="get_dialog_title_choose_sign_in_for" msgid="3048870756117876514">"Как вы хотите войти в приложение \"<xliff:g id="APP_NAME">%1$s</xliff:g>\"?"</string> + <string name="get_dialog_title_choose_sign_in_for" msgid="645728947702442421">"Выберите аккаунт для приложения \"<xliff:g id="APP_NAME">%1$s</xliff:g>\""</string> <string name="get_dialog_title_choose_option_for" msgid="4976380044745029107">"Выберите данные для входа в приложение \"<xliff:g id="APP_NAME">%1$s</xliff:g>\""</string> <string name="get_dialog_title_use_info_on" msgid="8863708099535435146">"Использовать эту информацию для входа в приложение \"<xliff:g id="APP_NAME">%1$s</xliff:g>\"?"</string> <string name="get_dialog_use_saved_passkey_for" msgid="4618100798664888512">"Войти другим способом"</string> diff --git a/packages/CredentialManager/res/values-si/strings.xml b/packages/CredentialManager/res/values-si/strings.xml index 0acc6555fc77..f5696f7ba7f9 100644 --- a/packages/CredentialManager/res/values-si/strings.xml +++ b/packages/CredentialManager/res/values-si/strings.xml @@ -42,9 +42,6 @@ <string name="choose_create_option_passkey_title" msgid="8762295821604276511">"<xliff:g id="APP_NAME">%1$s</xliff:g> වෙත පුරනය වීමට මුරයතුරක් තනන්න ද?"</string> <string name="choose_create_option_password_title" msgid="4481366993598649224">"<xliff:g id="APP_NAME">%1$s</xliff:g> වෙත පුරනය වීමට මුරපදය සුරකින්න ද?"</string> <string name="choose_create_option_sign_in_title" msgid="7092914088455358079">"<xliff:g id="APP_NAME">%1$s</xliff:g> සඳහා පුරනය වීමේ තතු සුරකින්න ද?"</string> - <string name="choose_create_single_tap_passkey_title" msgid="3872793514041774218">"<xliff:g id="APP_NAME">%1$s</xliff:g> සඳහා මුරපදයක් තැනීමට ඔබේ තිර අගුල භාවිත කරන්න ද?"</string> - <string name="choose_create_single_tap_password_title" msgid="5231871886818921622">"<xliff:g id="APP_NAME">%1$s</xliff:g> සඳහා මුරපදයක් තැනීමට ඔබේ තිර අගුල භාවිත කරන්න ද?"</string> - <string name="choose_create_single_tap_sign_in_title" msgid="256498714574099587">"<xliff:g id="APP_NAME">%1$s</xliff:g> සඳහා පුරනය වීමේ තතු සුරැකීමට ඔබේ තිර අගුල භාවිතා කරන්න ද?"</string> <string name="passkey" msgid="632353688396759522">"මුරයතුර"</string> <string name="password" msgid="6738570945182936667">"මුරපදය"</string> <string name="passkeys" msgid="5733880786866559847">"මුරයතුරු"</string> @@ -71,15 +68,16 @@ <string name="accessibility_back_arrow_button" msgid="3233198183497842492">"පෙර පිටුවට ආපසු යන්න"</string> <string name="accessibility_close_button" msgid="1163435587545377687">"වසන්න"</string> <string name="accessibility_snackbar_dismiss" msgid="3456598374801836120">"අස් කරන්න"</string> - <string name="get_dialog_title_use_passkey_for" msgid="6236608872708021767">"<xliff:g id="APP_NAME">%1$s</xliff:g> සඳහා ඔබේ සුරැකි මුරයතුර භාවිතා කරන්න ද?"</string> - <string name="get_dialog_title_use_password_for" msgid="625828023234318484">"<xliff:g id="APP_NAME">%1$s</xliff:g> සඳහා ඔබේ සුරැකි මුරපදය භාවිත කරන්න ද?"</string> - <string name="get_dialog_title_single_tap_for" msgid="2057945648748859483">"<xliff:g id="USERNAME">%2$s</xliff:g> සමඟින් <xliff:g id="APP_NAME">%1$s</xliff:g> වෙත පුරනය වීමට ඔබේ තිර අගුල භාවිත කරන්න"</string> - <string name="get_dialog_title_use_sign_in_for" msgid="790049858275131785">"<xliff:g id="APP_NAME">%1$s</xliff:g> සඳහා ඔබේ පුරනය වීම භාවිතා කරන්න ද?"</string> - <string name="get_dialog_title_unlock_options_for" msgid="7605568190597632433">"<xliff:g id="APP_NAME">%1$s</xliff:g> සඳහා පුරන විකල්ප අගුලු හරින්න ද?"</string> + <string name="get_dialog_title_use_passkey_for" msgid="479261099705979148">"<xliff:g id="APP_NAME">%1$s</xliff:g> සඳහා ඔබේ සුරැකි මුරයතුර භාවිතා කරන්න"</string> + <string name="get_dialog_title_use_password_for" msgid="688557784207167647">"<xliff:g id="APP_NAME">%1$s</xliff:g> සඳහා ඔබේ සුරැකි මුරපදය භාවිතා කරන්න"</string> + <string name="get_dialog_title_use_sign_in_for" msgid="4233553937542583226">"<xliff:g id="APP_NAME">%1$s</xliff:g> සඳහා ඔබේ ගිණුම භාවිතා කරන්න"</string> + <!-- no translation found for get_dialog_description_single_tap (2797059565126030879) --> + <skip /> + <string name="get_dialog_title_unlock_options_for" msgid="7096423827682163270">"<xliff:g id="APP_NAME">%1$s</xliff:g> සඳහා පුරනය වීමේ විකල්ප අගුළු හරින්න"</string> <string name="get_dialog_title_choose_passkey_for" msgid="9175997688078538490">"<xliff:g id="APP_NAME">%1$s</xliff:g> සඳහා සුරකින ලද මුරයතුරක් තෝරන්න"</string> <string name="get_dialog_title_choose_password_for" msgid="1724435823820819221">"<xliff:g id="APP_NAME">%1$s</xliff:g> සඳහා සුරකින ලද මුරපදයක් තෝරන්න"</string> <string name="get_dialog_title_choose_saved_sign_in_for" msgid="2420298653461652728">"<xliff:g id="APP_NAME">%1$s</xliff:g> සඳහා සුරැකි පුරනයක් තෝරා ගන්න"</string> - <string name="get_dialog_title_choose_sign_in_for" msgid="3048870756117876514">"<xliff:g id="APP_NAME">%1$s</xliff:g> සඳහා පුරනය වීමක් තෝරා ගන්න"</string> + <string name="get_dialog_title_choose_sign_in_for" msgid="645728947702442421">"<xliff:g id="APP_NAME">%1$s</xliff:g> සඳහා ගිණුමක් තෝරා ගන්න"</string> <string name="get_dialog_title_choose_option_for" msgid="4976380044745029107">"<xliff:g id="APP_NAME">%1$s</xliff:g> සඳහා විකල්පයක් තෝරන්නද?"</string> <string name="get_dialog_title_use_info_on" msgid="8863708099535435146">"<xliff:g id="APP_NAME">%1$s</xliff:g> මත මෙම තතු භාවිතා කරන්න ද?"</string> <string name="get_dialog_use_saved_passkey_for" msgid="4618100798664888512">"වෙනත් ආකාරයකින් පුරන්න"</string> diff --git a/packages/CredentialManager/res/values-sk/strings.xml b/packages/CredentialManager/res/values-sk/strings.xml index c2626eaebeca..4029c5335e0a 100644 --- a/packages/CredentialManager/res/values-sk/strings.xml +++ b/packages/CredentialManager/res/values-sk/strings.xml @@ -42,9 +42,6 @@ <string name="choose_create_option_passkey_title" msgid="8762295821604276511">"Chcete vytvoriť prístupový kľúč na prihlasovanie do aplikácie <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string> <string name="choose_create_option_password_title" msgid="4481366993598649224">"Chcete uložiť heslo na prihlasovanie do aplikácie <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string> <string name="choose_create_option_sign_in_title" msgid="7092914088455358079">"Chcete uložiť prihlasovacie údaje pre aplikáciu <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string> - <string name="choose_create_single_tap_passkey_title" msgid="3872793514041774218">"Chcete pomocou zámky obrazovky vytvoriť prístupový kľúč pre <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string> - <string name="choose_create_single_tap_password_title" msgid="5231871886818921622">"Chcete pomocou zámky obrazovky vytvoriť heslo pre <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string> - <string name="choose_create_single_tap_sign_in_title" msgid="256498714574099587">"Chcete pomocou zámky obrazovky uložiť prihlasovacie údaje pre <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string> <string name="passkey" msgid="632353688396759522">"prístupový kľúč"</string> <string name="password" msgid="6738570945182936667">"heslo"</string> <string name="passkeys" msgid="5733880786866559847">"prístupové kľúče"</string> @@ -71,15 +68,16 @@ <string name="accessibility_back_arrow_button" msgid="3233198183497842492">"Prejsť späť na predchádzajúcu stránku"</string> <string name="accessibility_close_button" msgid="1163435587545377687">"Zavrieť"</string> <string name="accessibility_snackbar_dismiss" msgid="3456598374801836120">"Zavrieť"</string> - <string name="get_dialog_title_use_passkey_for" msgid="6236608872708021767">"Chcete pre aplikáciu <xliff:g id="APP_NAME">%1$s</xliff:g> použiť uložený prístupový kľúč?"</string> - <string name="get_dialog_title_use_password_for" msgid="625828023234318484">"Chcete použiť uložené heslo aplikácie <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string> - <string name="get_dialog_title_single_tap_for" msgid="2057945648748859483">"Pomocou zámky obrazovky sa prihláste do aplikácie <xliff:g id="APP_NAME">%1$s</xliff:g> používateľským menom <xliff:g id="USERNAME">%2$s</xliff:g>"</string> - <string name="get_dialog_title_use_sign_in_for" msgid="790049858275131785">"Chcete použiť svoje prihlásenie pre aplikáciu <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string> - <string name="get_dialog_title_unlock_options_for" msgid="7605568190597632433">"Chcete odomknúť možnosti prihlásenia pre aplikáciu <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string> + <string name="get_dialog_title_use_passkey_for" msgid="479261099705979148">"Použite svoj uložený prístupový kľúč pre aplikáciu <xliff:g id="APP_NAME">%1$s</xliff:g>"</string> + <string name="get_dialog_title_use_password_for" msgid="688557784207167647">"Použite uložené heslo pre aplikáciu <xliff:g id="APP_NAME">%1$s</xliff:g>"</string> + <string name="get_dialog_title_use_sign_in_for" msgid="4233553937542583226">"Použite svoj účet pre aplikáciu <xliff:g id="APP_NAME">%1$s</xliff:g>"</string> + <!-- no translation found for get_dialog_description_single_tap (2797059565126030879) --> + <skip /> + <string name="get_dialog_title_unlock_options_for" msgid="7096423827682163270">"Odomknite možnosti prihlásenia pre aplikáciu <xliff:g id="APP_NAME">%1$s</xliff:g>"</string> <string name="get_dialog_title_choose_passkey_for" msgid="9175997688078538490">"Vyberte uložený prístupový kľúč pre aplikáciu <xliff:g id="APP_NAME">%1$s</xliff:g>"</string> <string name="get_dialog_title_choose_password_for" msgid="1724435823820819221">"Vyberte uložené heslo pre aplikáciu <xliff:g id="APP_NAME">%1$s</xliff:g>"</string> <string name="get_dialog_title_choose_saved_sign_in_for" msgid="2420298653461652728">"Vyberte uložené prihlasovacie údaje pre aplikáciu <xliff:g id="APP_NAME">%1$s</xliff:g>"</string> - <string name="get_dialog_title_choose_sign_in_for" msgid="3048870756117876514">"Vyberte prihlásenie pre aplikáciu <xliff:g id="APP_NAME">%1$s</xliff:g>"</string> + <string name="get_dialog_title_choose_sign_in_for" msgid="645728947702442421">"Vyberte účet pre aplikáciu <xliff:g id="APP_NAME">%1$s</xliff:g>"</string> <string name="get_dialog_title_choose_option_for" msgid="4976380044745029107">"Chcete pre aplikáciu <xliff:g id="APP_NAME">%1$s</xliff:g> vybrať možnosť?"</string> <string name="get_dialog_title_use_info_on" msgid="8863708099535435146">"Chcete použiť tieto informácie v aplikácii <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string> <string name="get_dialog_use_saved_passkey_for" msgid="4618100798664888512">"Prihlásiť sa inak"</string> diff --git a/packages/CredentialManager/res/values-sl/strings.xml b/packages/CredentialManager/res/values-sl/strings.xml index 79c8c72d2f94..c9c1091cb7b6 100644 --- a/packages/CredentialManager/res/values-sl/strings.xml +++ b/packages/CredentialManager/res/values-sl/strings.xml @@ -42,9 +42,6 @@ <string name="choose_create_option_passkey_title" msgid="8762295821604276511">"Želite ustvariti ključ za dostop za prijavo v aplikacijo <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string> <string name="choose_create_option_password_title" msgid="4481366993598649224">"Želite shraniti geslo za prijavo v aplikacijo <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string> <string name="choose_create_option_sign_in_title" msgid="7092914088455358079">"Želite shraniti podatke za prijavo za aplikacijo <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string> - <string name="choose_create_single_tap_passkey_title" msgid="3872793514041774218">"Želite uporabiti zaklepanje zaslona za ustvarjanje ključa za dostop za aplikacijo <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string> - <string name="choose_create_single_tap_password_title" msgid="5231871886818921622">"Želite uporabiti zaklepanje zaslona za ustvarjanje gesla za aplikacijo <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string> - <string name="choose_create_single_tap_sign_in_title" msgid="256498714574099587">"Želite uporabiti zaklepanje zaslona za shranjevanje podatkov za prijavo za aplikacijo <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string> <string name="passkey" msgid="632353688396759522">"ključ za dostop"</string> <string name="password" msgid="6738570945182936667">"geslo"</string> <string name="passkeys" msgid="5733880786866559847">"ključi za dostop"</string> @@ -71,15 +68,16 @@ <string name="accessibility_back_arrow_button" msgid="3233198183497842492">"Nazaj na prejšnjo stran"</string> <string name="accessibility_close_button" msgid="1163435587545377687">"Zapri"</string> <string name="accessibility_snackbar_dismiss" msgid="3456598374801836120">"Opusti"</string> - <string name="get_dialog_title_use_passkey_for" msgid="6236608872708021767">"Želite uporabiti shranjeni ključ za dostop do aplikacije <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string> - <string name="get_dialog_title_use_password_for" msgid="625828023234318484">"Ali želite uporabiti shranjeno geslo za aplikacijo <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string> - <string name="get_dialog_title_single_tap_for" msgid="2057945648748859483">"Uporabite zaklepanje zaslona za prijavo v aplikacijo <xliff:g id="APP_NAME">%1$s</xliff:g> z uporabniškim imenom <xliff:g id="USERNAME">%2$s</xliff:g>"</string> - <string name="get_dialog_title_use_sign_in_for" msgid="790049858275131785">"Želite uporabiti svojo prijavo za aplikacijo <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string> - <string name="get_dialog_title_unlock_options_for" msgid="7605568190597632433">"Želite odkleniti možnosti prijave za aplikacijo <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string> + <string name="get_dialog_title_use_passkey_for" msgid="479261099705979148">"Uporaba shranjenega ključa za dostop za aplikacijo <xliff:g id="APP_NAME">%1$s</xliff:g>"</string> + <string name="get_dialog_title_use_password_for" msgid="688557784207167647">"Uporaba shranjenega gesla za aplikacijo <xliff:g id="APP_NAME">%1$s</xliff:g>"</string> + <string name="get_dialog_title_use_sign_in_for" msgid="4233553937542583226">"Uporaba vašega računa za aplikacijo <xliff:g id="APP_NAME">%1$s</xliff:g>"</string> + <!-- no translation found for get_dialog_description_single_tap (2797059565126030879) --> + <skip /> + <string name="get_dialog_title_unlock_options_for" msgid="7096423827682163270">"Odklepanje možnosti prijave za aplikacijo <xliff:g id="APP_NAME">%1$s</xliff:g>"</string> <string name="get_dialog_title_choose_passkey_for" msgid="9175997688078538490">"Izberite shranjeni ključ za dostop za aplikacijo <xliff:g id="APP_NAME">%1$s</xliff:g>"</string> <string name="get_dialog_title_choose_password_for" msgid="1724435823820819221">"Izberite shranjeno geslo za aplikacijo <xliff:g id="APP_NAME">%1$s</xliff:g>"</string> <string name="get_dialog_title_choose_saved_sign_in_for" msgid="2420298653461652728">"Izberite shranjene podatke za prijavo za aplikacijo <xliff:g id="APP_NAME">%1$s</xliff:g>"</string> - <string name="get_dialog_title_choose_sign_in_for" msgid="3048870756117876514">"Izberite prijavo za aplikacijo <xliff:g id="APP_NAME">%1$s</xliff:g>"</string> + <string name="get_dialog_title_choose_sign_in_for" msgid="645728947702442421">"Izbira računa za aplikacijo <xliff:g id="APP_NAME">%1$s</xliff:g>"</string> <string name="get_dialog_title_choose_option_for" msgid="4976380044745029107">"Izberite možnost za aplikacijo <xliff:g id="APP_NAME">%1$s</xliff:g>"</string> <string name="get_dialog_title_use_info_on" msgid="8863708099535435146">"Želite te podatke uporabiti v aplikaciji <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string> <string name="get_dialog_use_saved_passkey_for" msgid="4618100798664888512">"Prijava na drug način"</string> diff --git a/packages/CredentialManager/res/values-sq/strings.xml b/packages/CredentialManager/res/values-sq/strings.xml index 722bee641595..73ac0b387cd8 100644 --- a/packages/CredentialManager/res/values-sq/strings.xml +++ b/packages/CredentialManager/res/values-sq/strings.xml @@ -42,9 +42,6 @@ <string name="choose_create_option_passkey_title" msgid="8762295821604276511">"Të krijohet një çelës kalimi për t\'u identifikuar në <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string> <string name="choose_create_option_password_title" msgid="4481366993598649224">"Të ruhet fjalëkalimi për t\'u identifikuar në <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string> <string name="choose_create_option_sign_in_title" msgid="7092914088455358079">"Të ruhen informacionet e identifikimit për <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string> - <string name="choose_create_single_tap_passkey_title" msgid="3872793514041774218">"Të përdoret kyçja e ekranit për të krijuar një çelës kalimi për <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string> - <string name="choose_create_single_tap_password_title" msgid="5231871886818921622">"Të përdoret kyçja e ekranit për të krijuar një fjalëkalim për <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string> - <string name="choose_create_single_tap_sign_in_title" msgid="256498714574099587">"Të përdoret kyçja e ekranit për të ruajtur informacionet e identifikimit për <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string> <string name="passkey" msgid="632353688396759522">"çelësin e kalimit"</string> <string name="password" msgid="6738570945182936667">"fjalëkalimi"</string> <string name="passkeys" msgid="5733880786866559847">"çelësat e kalimit"</string> @@ -71,15 +68,16 @@ <string name="accessibility_back_arrow_button" msgid="3233198183497842492">"Kthehu te faqja e mëparshme"</string> <string name="accessibility_close_button" msgid="1163435587545377687">"Mbyll"</string> <string name="accessibility_snackbar_dismiss" msgid="3456598374801836120">"Hiq"</string> - <string name="get_dialog_title_use_passkey_for" msgid="6236608872708021767">"Të përdoret fjalëkalimi yt i ruajtur për <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string> - <string name="get_dialog_title_use_password_for" msgid="625828023234318484">"Të përdoret fjalëkalimi i ruajtur për <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string> - <string name="get_dialog_title_single_tap_for" msgid="2057945648748859483">"Përdor kyçjen e ekranit për t\'u identifikuar në <xliff:g id="APP_NAME">%1$s</xliff:g> me <xliff:g id="USERNAME">%2$s</xliff:g>"</string> - <string name="get_dialog_title_use_sign_in_for" msgid="790049858275131785">"Të përdoret identifikimi yt për <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string> - <string name="get_dialog_title_unlock_options_for" msgid="7605568190597632433">"Të shkyçen opsionet e identifikimit për <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string> + <string name="get_dialog_title_use_passkey_for" msgid="479261099705979148">"Përdor fjalëkalimin tënd të ruajtur për <xliff:g id="APP_NAME">%1$s</xliff:g>"</string> + <string name="get_dialog_title_use_password_for" msgid="688557784207167647">"Përdor fjalëkalimin tënd të ruajtur për <xliff:g id="APP_NAME">%1$s</xliff:g>"</string> + <string name="get_dialog_title_use_sign_in_for" msgid="4233553937542583226">"Përdor llogarinë tënde për <xliff:g id="APP_NAME">%1$s</xliff:g>"</string> + <!-- no translation found for get_dialog_description_single_tap (2797059565126030879) --> + <skip /> + <string name="get_dialog_title_unlock_options_for" msgid="7096423827682163270">"Shkyç opsionet e identifikimit për <xliff:g id="APP_NAME">%1$s</xliff:g>"</string> <string name="get_dialog_title_choose_passkey_for" msgid="9175997688078538490">"Zgjidh një çelës kalimi të ruajtur për <xliff:g id="APP_NAME">%1$s</xliff:g>"</string> <string name="get_dialog_title_choose_password_for" msgid="1724435823820819221">"Zgjidh një fjalëkalim të ruajtur për <xliff:g id="APP_NAME">%1$s</xliff:g>"</string> <string name="get_dialog_title_choose_saved_sign_in_for" msgid="2420298653461652728">"Zgjidh një identifikim të ruajtur për <xliff:g id="APP_NAME">%1$s</xliff:g>"</string> - <string name="get_dialog_title_choose_sign_in_for" msgid="3048870756117876514">"Zgjidh një identifikim për <xliff:g id="APP_NAME">%1$s</xliff:g>"</string> + <string name="get_dialog_title_choose_sign_in_for" msgid="645728947702442421">"Zgjidh një llogari për <xliff:g id="APP_NAME">%1$s</xliff:g>"</string> <string name="get_dialog_title_choose_option_for" msgid="4976380044745029107">"Të zgjidhet një opsion për <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string> <string name="get_dialog_title_use_info_on" msgid="8863708099535435146">"Të përdoren këto informacione në <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string> <string name="get_dialog_use_saved_passkey_for" msgid="4618100798664888512">"Identifikohu me një mënyrë tjetër"</string> diff --git a/packages/CredentialManager/res/values-sr/strings.xml b/packages/CredentialManager/res/values-sr/strings.xml index 58110aacdc36..a87636bfc341 100644 --- a/packages/CredentialManager/res/values-sr/strings.xml +++ b/packages/CredentialManager/res/values-sr/strings.xml @@ -42,9 +42,6 @@ <string name="choose_create_option_passkey_title" msgid="8762295821604276511">"Желите да направите приступни кључ да бисте се пријавили у <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string> <string name="choose_create_option_password_title" msgid="4481366993598649224">"Желите да сачувате лозинку да бисте се пријавили у <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string> <string name="choose_create_option_sign_in_title" msgid="7092914088455358079">"Желите да сачувате податке за пријављивање за: <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string> - <string name="choose_create_single_tap_passkey_title" msgid="3872793514041774218">"Желите да користите откључавање екрана да бисте направили приступни кључ за: <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string> - <string name="choose_create_single_tap_password_title" msgid="5231871886818921622">"Желите да користите откључавање екрана да бисте направили лозинку за: <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string> - <string name="choose_create_single_tap_sign_in_title" msgid="256498714574099587">"Желите да користите откључавање екрана да бисте сачували податке за пријављивање за: <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string> <string name="passkey" msgid="632353688396759522">"приступни кôд"</string> <string name="password" msgid="6738570945182936667">"лозинка"</string> <string name="passkeys" msgid="5733880786866559847">"приступни кодови"</string> @@ -71,15 +68,16 @@ <string name="accessibility_back_arrow_button" msgid="3233198183497842492">"Вратите се на претходну страницу"</string> <string name="accessibility_close_button" msgid="1163435587545377687">"Затворите"</string> <string name="accessibility_snackbar_dismiss" msgid="3456598374801836120">"Одбаци"</string> - <string name="get_dialog_title_use_passkey_for" msgid="6236608872708021767">"Желите да користите сачувани приступни кôд за: <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string> - <string name="get_dialog_title_use_password_for" msgid="625828023234318484">"Желите да користите сачувану лозинку за: <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string> - <string name="get_dialog_title_single_tap_for" msgid="2057945648748859483">"Користите откључавање екрана да бисте се пријавили у <xliff:g id="APP_NAME">%1$s</xliff:g> као <xliff:g id="USERNAME">%2$s</xliff:g>"</string> - <string name="get_dialog_title_use_sign_in_for" msgid="790049858275131785">"Желите ли да користите своје податке за пријављивање за апликацију <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string> - <string name="get_dialog_title_unlock_options_for" msgid="7605568190597632433">"Желите да откључате опције пријављивања за: <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string> + <string name="get_dialog_title_use_passkey_for" msgid="479261099705979148">"Користите сачувани приступни кључ за: <xliff:g id="APP_NAME">%1$s</xliff:g>"</string> + <string name="get_dialog_title_use_password_for" msgid="688557784207167647">"Користите сачувану лозинку за: <xliff:g id="APP_NAME">%1$s</xliff:g>"</string> + <string name="get_dialog_title_use_sign_in_for" msgid="4233553937542583226">"Користите налог за: <xliff:g id="APP_NAME">%1$s</xliff:g>"</string> + <!-- no translation found for get_dialog_description_single_tap (2797059565126030879) --> + <skip /> + <string name="get_dialog_title_unlock_options_for" msgid="7096423827682163270">"Откључајте опције пријављивања за: <xliff:g id="APP_NAME">%1$s</xliff:g>"</string> <string name="get_dialog_title_choose_passkey_for" msgid="9175997688078538490">"Изаберите сачуван приступни кључ за: <xliff:g id="APP_NAME">%1$s</xliff:g>"</string> <string name="get_dialog_title_choose_password_for" msgid="1724435823820819221">"Изаберите сачувану лозинку за: <xliff:g id="APP_NAME">%1$s</xliff:g>"</string> <string name="get_dialog_title_choose_saved_sign_in_for" msgid="2420298653461652728">"Изаберите сачуване податке за пријављивање за: <xliff:g id="APP_NAME">%1$s</xliff:g>"</string> - <string name="get_dialog_title_choose_sign_in_for" msgid="3048870756117876514">"Одаберите податке за пријављивање за апликацију <xliff:g id="APP_NAME">%1$s</xliff:g>"</string> + <string name="get_dialog_title_choose_sign_in_for" msgid="645728947702442421">"Одаберите налог за: <xliff:g id="APP_NAME">%1$s</xliff:g>"</string> <string name="get_dialog_title_choose_option_for" msgid="4976380044745029107">"Желите да одаберете опцију за апликацију <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string> <string name="get_dialog_title_use_info_on" msgid="8863708099535435146">"Желите да користите те податке у апликацији <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string> <string name="get_dialog_use_saved_passkey_for" msgid="4618100798664888512">"Пријавите се на други начин"</string> diff --git a/packages/CredentialManager/res/values-sv/strings.xml b/packages/CredentialManager/res/values-sv/strings.xml index 331b124343a4..4f0cd121ba97 100644 --- a/packages/CredentialManager/res/values-sv/strings.xml +++ b/packages/CredentialManager/res/values-sv/strings.xml @@ -42,9 +42,6 @@ <string name="choose_create_option_passkey_title" msgid="8762295821604276511">"Vill du skapa en nyckel för att logga in i <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string> <string name="choose_create_option_password_title" msgid="4481366993598649224">"Vill du spara lösenordet för att logga in i <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string> <string name="choose_create_option_sign_in_title" msgid="7092914088455358079">"Vill du spara inloggningsuppgifterna för <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string> - <string name="choose_create_single_tap_passkey_title" msgid="3872793514041774218">"Vill du använda skärmlåset för att skapa en nyckel för <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string> - <string name="choose_create_single_tap_password_title" msgid="5231871886818921622">"Vill du använda skärmlåset för att skapa ett lösenord för <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string> - <string name="choose_create_single_tap_sign_in_title" msgid="256498714574099587">"Vill du använda skärmlåset för att spara inloggningsuppgifter för <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string> <string name="passkey" msgid="632353688396759522">"nyckel"</string> <string name="password" msgid="6738570945182936667">"lösenord"</string> <string name="passkeys" msgid="5733880786866559847">"nycklar"</string> @@ -71,15 +68,16 @@ <string name="accessibility_back_arrow_button" msgid="3233198183497842492">"Gå tillbaka till föregående sida"</string> <string name="accessibility_close_button" msgid="1163435587545377687">"Stäng"</string> <string name="accessibility_snackbar_dismiss" msgid="3456598374801836120">"Stäng"</string> - <string name="get_dialog_title_use_passkey_for" msgid="6236608872708021767">"Vill du använda din sparade nyckel för <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string> - <string name="get_dialog_title_use_password_for" msgid="625828023234318484">"Vill du använda det sparade lösenordet för <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string> - <string name="get_dialog_title_single_tap_for" msgid="2057945648748859483">"Använd skärmlåset för att logga in i <xliff:g id="APP_NAME">%1$s</xliff:g> med <xliff:g id="USERNAME">%2$s</xliff:g>"</string> - <string name="get_dialog_title_use_sign_in_for" msgid="790049858275131785">"Vill du använda din inloggning för <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string> - <string name="get_dialog_title_unlock_options_for" msgid="7605568190597632433">"Vill du låsa upp inloggningsalternativ för <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string> + <string name="get_dialog_title_use_passkey_for" msgid="479261099705979148">"Använd den sparade nyckeln för <xliff:g id="APP_NAME">%1$s</xliff:g>"</string> + <string name="get_dialog_title_use_password_for" msgid="688557784207167647">"Använd det sparade lösenordet för <xliff:g id="APP_NAME">%1$s</xliff:g>"</string> + <string name="get_dialog_title_use_sign_in_for" msgid="4233553937542583226">"Använd kontot för <xliff:g id="APP_NAME">%1$s</xliff:g>"</string> + <!-- no translation found for get_dialog_description_single_tap (2797059565126030879) --> + <skip /> + <string name="get_dialog_title_unlock_options_for" msgid="7096423827682163270">"Lås upp inloggningsalternativ för <xliff:g id="APP_NAME">%1$s</xliff:g>"</string> <string name="get_dialog_title_choose_passkey_for" msgid="9175997688078538490">"Välj en sparad nyckel för <xliff:g id="APP_NAME">%1$s</xliff:g>"</string> <string name="get_dialog_title_choose_password_for" msgid="1724435823820819221">"Välj ett sparat lösenord för <xliff:g id="APP_NAME">%1$s</xliff:g>"</string> <string name="get_dialog_title_choose_saved_sign_in_for" msgid="2420298653461652728">"Välj en sparad inloggning för <xliff:g id="APP_NAME">%1$s</xliff:g>"</string> - <string name="get_dialog_title_choose_sign_in_for" msgid="3048870756117876514">"Välj en inloggning för <xliff:g id="APP_NAME">%1$s</xliff:g>"</string> + <string name="get_dialog_title_choose_sign_in_for" msgid="645728947702442421">"Välj ett konto för <xliff:g id="APP_NAME">%1$s</xliff:g>"</string> <string name="get_dialog_title_choose_option_for" msgid="4976380044745029107">"Vill du välja ett alternativ för <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string> <string name="get_dialog_title_use_info_on" msgid="8863708099535435146">"Vill du använda den här informationen på <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string> <string name="get_dialog_use_saved_passkey_for" msgid="4618100798664888512">"Logga in på ett annat sätt"</string> diff --git a/packages/CredentialManager/res/values-sw/strings.xml b/packages/CredentialManager/res/values-sw/strings.xml index 888b01c7550c..e5480a463d68 100644 --- a/packages/CredentialManager/res/values-sw/strings.xml +++ b/packages/CredentialManager/res/values-sw/strings.xml @@ -42,9 +42,6 @@ <string name="choose_create_option_passkey_title" msgid="8762295821604276511">"Ungependa kubuni ufunguo wa siri wa kuingia katika akaunti ya <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string> <string name="choose_create_option_password_title" msgid="4481366993598649224">"Ungependa kuhifadhi nenosiri la kuingia katika akaunti ya <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string> <string name="choose_create_option_sign_in_title" msgid="7092914088455358079">"Ungependa kuhifadhi maelezo ya kuingia katika akaunti ya <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string> - <string name="choose_create_single_tap_passkey_title" msgid="3872793514041774218">"Ungependa kutumia mbinu yako ya kufunga skrini kubuni ufunguo wa siri wa <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string> - <string name="choose_create_single_tap_password_title" msgid="5231871886818921622">"Ungependa kutumia mbinu yako ya kufunga skrini kubuni nenosiri la <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string> - <string name="choose_create_single_tap_sign_in_title" msgid="256498714574099587">"Ungependa kutumia mbinu yako ya kufunga skrini kuhifadhi maelezo ya kuingia katika akaunti ya <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string> <string name="passkey" msgid="632353688396759522">"ufunguo wa siri"</string> <string name="password" msgid="6738570945182936667">"nenosiri"</string> <string name="passkeys" msgid="5733880786866559847">"funguo za siri"</string> @@ -71,15 +68,16 @@ <string name="accessibility_back_arrow_button" msgid="3233198183497842492">"Rudi kwenye ukurasa uliotangulia"</string> <string name="accessibility_close_button" msgid="1163435587545377687">"Funga"</string> <string name="accessibility_snackbar_dismiss" msgid="3456598374801836120">"Ondoa"</string> - <string name="get_dialog_title_use_passkey_for" msgid="6236608872708021767">"Ungependa kutumia ufunguo wa siri uliohifadhiwa wa <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string> - <string name="get_dialog_title_use_password_for" msgid="625828023234318484">"Je, ungependa kutumia nenosiri lako lililohifadhiwa kuingia katika <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string> - <string name="get_dialog_title_single_tap_for" msgid="2057945648748859483">"Tumia mbinu yako ya kufunga skrini kuingia katika akaunti ya <xliff:g id="APP_NAME">%1$s</xliff:g> ukitumia <xliff:g id="USERNAME">%2$s</xliff:g>"</string> - <string name="get_dialog_title_use_sign_in_for" msgid="790049858275131785">"Ungependa kutumia kitambulisho chako cha kuingia katika akaunti ya <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string> - <string name="get_dialog_title_unlock_options_for" msgid="7605568190597632433">"Je, ungependa kuona chaguo za kuingia katika <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string> + <string name="get_dialog_title_use_passkey_for" msgid="479261099705979148">"Tumia ufunguo wako wa siri uliohifadhi wa <xliff:g id="APP_NAME">%1$s</xliff:g>"</string> + <string name="get_dialog_title_use_password_for" msgid="688557784207167647">"Tumia nenosiri lako ulilohifadhi la <xliff:g id="APP_NAME">%1$s</xliff:g>"</string> + <string name="get_dialog_title_use_sign_in_for" msgid="4233553937542583226">"Tumia akaunti yako ya <xliff:g id="APP_NAME">%1$s</xliff:g>"</string> + <!-- no translation found for get_dialog_description_single_tap (2797059565126030879) --> + <skip /> + <string name="get_dialog_title_unlock_options_for" msgid="7096423827682163270">"Fungua chaguo za kuingia katika akaunti ya <xliff:g id="APP_NAME">%1$s</xliff:g>"</string> <string name="get_dialog_title_choose_passkey_for" msgid="9175997688078538490">"Chagua ufunguo wa siri uliohifadhiwa ambao ungependa kutumia kuingia katika <xliff:g id="APP_NAME">%1$s</xliff:g>"</string> <string name="get_dialog_title_choose_password_for" msgid="1724435823820819221">"Chagua nenosiri lililohifadhiwa ambalo ungependa kutumia kuingia katika <xliff:g id="APP_NAME">%1$s</xliff:g>"</string> <string name="get_dialog_title_choose_saved_sign_in_for" msgid="2420298653461652728">"Chagua vitambulisho vilivyohifadhiwa ambavyo ungependa kutumia kuingia katika <xliff:g id="APP_NAME">%1$s</xliff:g>"</string> - <string name="get_dialog_title_choose_sign_in_for" msgid="3048870756117876514">"Chagua kitambulisho cha kuingia katika akaunti ya <xliff:g id="APP_NAME">%1$s</xliff:g>"</string> + <string name="get_dialog_title_choose_sign_in_for" msgid="645728947702442421">"Chagua akaunti ya <xliff:g id="APP_NAME">%1$s</xliff:g>"</string> <string name="get_dialog_title_choose_option_for" msgid="4976380044745029107">"Ungependa kuteua chaguo la <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string> <string name="get_dialog_title_use_info_on" msgid="8863708099535435146">"Ungependa kutumia maelezo haya kwenye <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string> <string name="get_dialog_use_saved_passkey_for" msgid="4618100798664888512">"Ingia katika akaunti kwa kutumia njia nyingine"</string> diff --git a/packages/CredentialManager/res/values-ta/strings.xml b/packages/CredentialManager/res/values-ta/strings.xml index ba1eb60a1c26..85080a4418ec 100644 --- a/packages/CredentialManager/res/values-ta/strings.xml +++ b/packages/CredentialManager/res/values-ta/strings.xml @@ -42,9 +42,6 @@ <string name="choose_create_option_passkey_title" msgid="8762295821604276511">"<xliff:g id="APP_NAME">%1$s</xliff:g> ஆப்ஸில் உள்நுழைய கடவுச்சாவியை உருவாக்கவா?"</string> <string name="choose_create_option_password_title" msgid="4481366993598649224">"<xliff:g id="APP_NAME">%1$s</xliff:g> ஆப்ஸில் உள்நுழைய கடவுச்சொல்லைச் சேமிக்கவா?"</string> <string name="choose_create_option_sign_in_title" msgid="7092914088455358079">"<xliff:g id="APP_NAME">%1$s</xliff:g> ஆப்ஸுக்கான உள்நுழைவுத் தகவலைச் சேமிக்கவா?"</string> - <string name="choose_create_single_tap_passkey_title" msgid="3872793514041774218">"<xliff:g id="APP_NAME">%1$s</xliff:g> ஆப்ஸுக்கான கடவுச்சாவியை உருவாக்க உங்கள் திரைப் பூட்டைப் பயன்படுத்தவா?"</string> - <string name="choose_create_single_tap_password_title" msgid="5231871886818921622">"<xliff:g id="APP_NAME">%1$s</xliff:g> ஆப்ஸுக்கான கடவுச்சொல்லை உருவாக்க உங்கள் திரைப் பூட்டைப் பயன்படுத்தவா?"</string> - <string name="choose_create_single_tap_sign_in_title" msgid="256498714574099587">"<xliff:g id="APP_NAME">%1$s</xliff:g> ஆப்ஸுக்கான உள்நுழைவுத் தகவலைச் சேமிக்க உங்கள் திரைப் பூட்டைப் பயன்படுத்தவா?"</string> <string name="passkey" msgid="632353688396759522">"கடவுச்சாவி"</string> <string name="password" msgid="6738570945182936667">"கடவுச்சொல்"</string> <string name="passkeys" msgid="5733880786866559847">"கடவுச்சாவிகள்"</string> @@ -71,15 +68,16 @@ <string name="accessibility_back_arrow_button" msgid="3233198183497842492">"முந்தைய பக்கத்திற்குச் செல்லும்"</string> <string name="accessibility_close_button" msgid="1163435587545377687">"மூடும்"</string> <string name="accessibility_snackbar_dismiss" msgid="3456598374801836120">"நிராகரிக்கும்"</string> - <string name="get_dialog_title_use_passkey_for" msgid="6236608872708021767">"<xliff:g id="APP_NAME">%1$s</xliff:g> ஆப்ஸுக்கு ஏற்கெனவே சேமிக்கப்பட்ட கடவுக்குறியீட்டைப் பயன்படுத்தவா?"</string> - <string name="get_dialog_title_use_password_for" msgid="625828023234318484">"<xliff:g id="APP_NAME">%1$s</xliff:g> ஆப்ஸுக்குச் சேமித்த கடவுச்சொல்லைப் பயன்படுத்தவா?"</string> - <string name="get_dialog_title_single_tap_for" msgid="2057945648748859483">"<xliff:g id="USERNAME">%2$s</xliff:g> ஐப் பயன்படுத்தி <xliff:g id="APP_NAME">%1$s</xliff:g> ஆப்ஸில் உள்நுழைய உங்கள் திரைப் பூட்டைப் பயன்படுத்துங்கள்"</string> - <string name="get_dialog_title_use_sign_in_for" msgid="790049858275131785">"<xliff:g id="APP_NAME">%1$s</xliff:g> ஆப்ஸுக்கு உங்கள் உள்நுழைவு விவரங்களைப் பயன்படுத்தவா?"</string> - <string name="get_dialog_title_unlock_options_for" msgid="7605568190597632433">"<xliff:g id="APP_NAME">%1$s</xliff:g> ஆப்ஸுக்கான உள்நுழைவு விருப்பங்களை அன்லாக் செய்யவா?"</string> + <string name="get_dialog_title_use_passkey_for" msgid="479261099705979148">"<xliff:g id="APP_NAME">%1$s</xliff:g> ஆப்ஸுக்கான சேமிக்கப்பட்ட கடவுச்சாவியைப் பயன்படுத்துங்கள்"</string> + <string name="get_dialog_title_use_password_for" msgid="688557784207167647">"<xliff:g id="APP_NAME">%1$s</xliff:g> ஆப்ஸுக்கான சேமிக்கப்பட்ட கடவுச்சொல்லைப் பயன்படுத்துங்கள்"</string> + <string name="get_dialog_title_use_sign_in_for" msgid="4233553937542583226">"<xliff:g id="APP_NAME">%1$s</xliff:g> ஆப்ஸுக்கான உங்கள் கணக்கைப் பயன்படுத்துங்கள்"</string> + <!-- no translation found for get_dialog_description_single_tap (2797059565126030879) --> + <skip /> + <string name="get_dialog_title_unlock_options_for" msgid="7096423827682163270">"<xliff:g id="APP_NAME">%1$s</xliff:g> ஆப்ஸுக்கான உள்நுழைவு விருப்பங்களை அன்லாக் செய்யுங்கள்"</string> <string name="get_dialog_title_choose_passkey_for" msgid="9175997688078538490">"<xliff:g id="APP_NAME">%1$s</xliff:g> ஆப்ஸுக்கான சேமிக்கப்பட்ட கடவுச்சாவியைத் தேர்ந்தெடுங்கள்"</string> <string name="get_dialog_title_choose_password_for" msgid="1724435823820819221">"<xliff:g id="APP_NAME">%1$s</xliff:g> ஆப்ஸுக்கான சேமிக்கப்பட்ட கடவுச்சொல்லைத் தேர்ந்தெடுங்கள்"</string> <string name="get_dialog_title_choose_saved_sign_in_for" msgid="2420298653461652728">"<xliff:g id="APP_NAME">%1$s</xliff:g> ஆப்ஸுக்கான சேமிக்கப்பட்ட உள்நுழைவுத் தகவல்களைத் தேர்ந்தெடுங்கள்"</string> - <string name="get_dialog_title_choose_sign_in_for" msgid="3048870756117876514">"<xliff:g id="APP_NAME">%1$s</xliff:g> ஆப்ஸுக்கான உள்நுழைவு விவரங்களைத் தேர்வுசெய்யுங்கள்"</string> + <string name="get_dialog_title_choose_sign_in_for" msgid="645728947702442421">"<xliff:g id="APP_NAME">%1$s</xliff:g> ஆப்ஸுக்கான கணக்கைத் தேர்வுசெய்யுங்கள்"</string> <string name="get_dialog_title_choose_option_for" msgid="4976380044745029107">"<xliff:g id="APP_NAME">%1$s</xliff:g> ஆப்ஸுக்கான விருப்பத்தைத் தேர்வுசெய்யவா?"</string> <string name="get_dialog_title_use_info_on" msgid="8863708099535435146">"<xliff:g id="APP_NAME">%1$s</xliff:g> ஆப்ஸில் இந்தத் தகவல்களைப் பயன்படுத்தவா?"</string> <string name="get_dialog_use_saved_passkey_for" msgid="4618100798664888512">"வேறு முறையில் உள்நுழைக"</string> diff --git a/packages/CredentialManager/res/values-te/strings.xml b/packages/CredentialManager/res/values-te/strings.xml index e2e362bb37aa..59b86eb082fc 100644 --- a/packages/CredentialManager/res/values-te/strings.xml +++ b/packages/CredentialManager/res/values-te/strings.xml @@ -42,9 +42,6 @@ <string name="choose_create_option_passkey_title" msgid="8762295821604276511">"<xliff:g id="APP_NAME">%1$s</xliff:g>కు సైన్ ఇన్ చేయడానికి పాస్-కీని క్రియేట్ చేయాలా?"</string> <string name="choose_create_option_password_title" msgid="4481366993598649224">"<xliff:g id="APP_NAME">%1$s</xliff:g>కు సైన్ ఇన్ చేయడానికి పాస్వర్డ్ను సేవ్ చేయాలా?"</string> <string name="choose_create_option_sign_in_title" msgid="7092914088455358079">"<xliff:g id="APP_NAME">%1$s</xliff:g> కోసం సైన్ ఇన్ సమాచారాన్ని సేవ్ చేయాలా?"</string> - <string name="choose_create_single_tap_passkey_title" msgid="3872793514041774218">"మీ స్క్రీన్ లాక్ను ఉపయోగించి <xliff:g id="APP_NAME">%1$s</xliff:g>కు పాస్-కీని క్రియేట్ చేయాలా?"</string> - <string name="choose_create_single_tap_password_title" msgid="5231871886818921622">"మీ స్క్రీన్ లాక్ను ఉపయోగించి <xliff:g id="APP_NAME">%1$s</xliff:g>కు పాస్వర్డ్ను క్రియేట్ చేయాలా?"</string> - <string name="choose_create_single_tap_sign_in_title" msgid="256498714574099587">"మీ స్క్రీన్ లాక్ను ఉపయోగించి <xliff:g id="APP_NAME">%1$s</xliff:g>కు సంబంధించిన సైన్-ఇన్ సమాచారాన్ని సేవ్ చేయాలా?"</string> <string name="passkey" msgid="632353688396759522">"పాస్-కీ"</string> <string name="password" msgid="6738570945182936667">"పాస్వర్డ్"</string> <string name="passkeys" msgid="5733880786866559847">"పాస్-కీలు"</string> @@ -71,15 +68,16 @@ <string name="accessibility_back_arrow_button" msgid="3233198183497842492">"మునుపటి పేజీకి తిరిగి వెళ్లండి"</string> <string name="accessibility_close_button" msgid="1163435587545377687">"మూసివేయండి"</string> <string name="accessibility_snackbar_dismiss" msgid="3456598374801836120">"విస్మరించండి"</string> - <string name="get_dialog_title_use_passkey_for" msgid="6236608872708021767">"<xliff:g id="APP_NAME">%1$s</xliff:g> కోసం మీ సేవ్ చేసిన పాస్-కీని ఉపయోగించాలా?"</string> - <string name="get_dialog_title_use_password_for" msgid="625828023234318484">"<xliff:g id="APP_NAME">%1$s</xliff:g> కోసం మీ సేవ్ చేసిన పాస్వర్డ్ను ఉపయోగించాలా?"</string> - <string name="get_dialog_title_single_tap_for" msgid="2057945648748859483">"మీ స్క్రీన్ లాక్ను ఉపయోగించి <xliff:g id="USERNAME">%2$s</xliff:g>తో <xliff:g id="APP_NAME">%1$s</xliff:g>కు సైన్ ఇన్ చేయండి"</string> - <string name="get_dialog_title_use_sign_in_for" msgid="790049858275131785">"<xliff:g id="APP_NAME">%1$s</xliff:g> కోసం మీ సైన్ ఇన్ వివరాలను ఉపయోగించాలా?"</string> - <string name="get_dialog_title_unlock_options_for" msgid="7605568190597632433">"<xliff:g id="APP_NAME">%1$s</xliff:g> కోసం సైన్ ఇన్ ఆప్షన్లను అన్లాక్ చేయాలా?"</string> + <string name="get_dialog_title_use_passkey_for" msgid="479261099705979148">"<xliff:g id="APP_NAME">%1$s</xliff:g> కోసం మీ సేవ్ చేసిన పాస్-కీ వివరాలను ఉపయోగించండి"</string> + <string name="get_dialog_title_use_password_for" msgid="688557784207167647">"<xliff:g id="APP_NAME">%1$s</xliff:g> కోసం మీ సేవ్ చేసిన పాస్వర్డ్ను ఉపయోగించండి"</string> + <string name="get_dialog_title_use_sign_in_for" msgid="4233553937542583226">"<xliff:g id="APP_NAME">%1$s</xliff:g> కోసం మీ ఖాతాను ఉపయోగించండి"</string> + <!-- no translation found for get_dialog_description_single_tap (2797059565126030879) --> + <skip /> + <string name="get_dialog_title_unlock_options_for" msgid="7096423827682163270">"<xliff:g id="APP_NAME">%1$s</xliff:g> కోసం సైన్ ఇన్ ఆప్షన్లను అన్లాక్ చేయండి"</string> <string name="get_dialog_title_choose_passkey_for" msgid="9175997688078538490">"<xliff:g id="APP_NAME">%1$s</xliff:g> కోసం సేవ్ చేసిన పాస్-కీని ఎంచుకోండి"</string> <string name="get_dialog_title_choose_password_for" msgid="1724435823820819221">"<xliff:g id="APP_NAME">%1$s</xliff:g> కోసం సేవ్ చేసిన పాస్వర్డ్ను ఎంచుకోండి"</string> <string name="get_dialog_title_choose_saved_sign_in_for" msgid="2420298653461652728">"<xliff:g id="APP_NAME">%1$s</xliff:g> కోసం సేవ్ చేసిన సైన్ ఇన్ వివరాలను ఎంచుకోండి"</string> - <string name="get_dialog_title_choose_sign_in_for" msgid="3048870756117876514">"<xliff:g id="APP_NAME">%1$s</xliff:g> కోసం సైన్ ఇన్ వివరాలను ఎంచుకోండి"</string> + <string name="get_dialog_title_choose_sign_in_for" msgid="645728947702442421">"<xliff:g id="APP_NAME">%1$s</xliff:g> కోసం ఖాతాను ఎంచుకోండి"</string> <string name="get_dialog_title_choose_option_for" msgid="4976380044745029107">"<xliff:g id="APP_NAME">%1$s</xliff:g> కోసం ఏదైనా ఆప్షన్ను ఎంచుకోవాలనుకుంటున్నారా?"</string> <string name="get_dialog_title_use_info_on" msgid="8863708099535435146">"ఈ సమాచారాన్ని <xliff:g id="APP_NAME">%1$s</xliff:g>లో ఉపయోగించాలా?"</string> <string name="get_dialog_use_saved_passkey_for" msgid="4618100798664888512">"మరొక పద్ధతిలో సైన్ ఇన్ చేయండి"</string> diff --git a/packages/CredentialManager/res/values-th/strings.xml b/packages/CredentialManager/res/values-th/strings.xml index 876371a9c7f5..e8058e831903 100644 --- a/packages/CredentialManager/res/values-th/strings.xml +++ b/packages/CredentialManager/res/values-th/strings.xml @@ -42,9 +42,6 @@ <string name="choose_create_option_passkey_title" msgid="8762295821604276511">"สร้างพาสคีย์เพื่อลงชื่อเข้าใช้ <xliff:g id="APP_NAME">%1$s</xliff:g> ไหม"</string> <string name="choose_create_option_password_title" msgid="4481366993598649224">"บันทึกรหัสผ่านเพื่อลงชื่อเข้าใช้ <xliff:g id="APP_NAME">%1$s</xliff:g> ไหม"</string> <string name="choose_create_option_sign_in_title" msgid="7092914088455358079">"บันทึกข้อมูลการลงชื่อเข้าใช้สำหรับ <xliff:g id="APP_NAME">%1$s</xliff:g> ไหม"</string> - <string name="choose_create_single_tap_passkey_title" msgid="3872793514041774218">"ต้องการใช้ฟีเจอร์ล็อกหน้าจอเพื่อสร้างพาสคีย์สำหรับ <xliff:g id="APP_NAME">%1$s</xliff:g> ใช่ไหม"</string> - <string name="choose_create_single_tap_password_title" msgid="5231871886818921622">"ต้องการใช้ฟีเจอร์ล็อกหน้าจอเพื่อสร้างรหัสผ่านสำหรับ <xliff:g id="APP_NAME">%1$s</xliff:g> ใช่ไหม"</string> - <string name="choose_create_single_tap_sign_in_title" msgid="256498714574099587">"ต้องการใช้ฟีเจอร์ล็อกหน้าจอเพื่อบันทึกข้อมูลการลงชื่อเข้าใช้สำหรับ <xliff:g id="APP_NAME">%1$s</xliff:g> ใช่ไหม"</string> <string name="passkey" msgid="632353688396759522">"พาสคีย์"</string> <string name="password" msgid="6738570945182936667">"รหัสผ่าน"</string> <string name="passkeys" msgid="5733880786866559847">"พาสคีย์"</string> @@ -71,15 +68,16 @@ <string name="accessibility_back_arrow_button" msgid="3233198183497842492">"กลับไปยังหน้าก่อนหน้า"</string> <string name="accessibility_close_button" msgid="1163435587545377687">"ปิด"</string> <string name="accessibility_snackbar_dismiss" msgid="3456598374801836120">"ปิด"</string> - <string name="get_dialog_title_use_passkey_for" msgid="6236608872708021767">"ใช้พาสคีย์ที่บันทึกไว้สำหรับ <xliff:g id="APP_NAME">%1$s</xliff:g> ใช่ไหม"</string> - <string name="get_dialog_title_use_password_for" msgid="625828023234318484">"ใช้รหัสผ่านที่บันทึกไว้สำหรับ <xliff:g id="APP_NAME">%1$s</xliff:g> ใช่ไหม"</string> - <string name="get_dialog_title_single_tap_for" msgid="2057945648748859483">"ใช้การล็อกหน้าจอเพื่อลงชื่อเข้าใช้ <xliff:g id="APP_NAME">%1$s</xliff:g> ด้วย <xliff:g id="USERNAME">%2$s</xliff:g>"</string> - <string name="get_dialog_title_use_sign_in_for" msgid="790049858275131785">"ใช้การลงชื่อเข้าใช้สำหรับ <xliff:g id="APP_NAME">%1$s</xliff:g> ใช่ไหม"</string> - <string name="get_dialog_title_unlock_options_for" msgid="7605568190597632433">"ปลดล็อกตัวเลือกการลงชื่อเข้าใช้สำหรับ <xliff:g id="APP_NAME">%1$s</xliff:g> ใช่ไหม"</string> + <string name="get_dialog_title_use_passkey_for" msgid="479261099705979148">"ใช้พาสคีย์ที่บันทึกไว้สำหรับ <xliff:g id="APP_NAME">%1$s</xliff:g>"</string> + <string name="get_dialog_title_use_password_for" msgid="688557784207167647">"ใช้รหัสผ่านที่บันทึกไว้สำหรับ <xliff:g id="APP_NAME">%1$s</xliff:g>"</string> + <string name="get_dialog_title_use_sign_in_for" msgid="4233553937542583226">"ใช้บัญชีสำหรับ <xliff:g id="APP_NAME">%1$s</xliff:g>"</string> + <!-- no translation found for get_dialog_description_single_tap (2797059565126030879) --> + <skip /> + <string name="get_dialog_title_unlock_options_for" msgid="7096423827682163270">"ปลดล็อกตัวเลือกการลงชื่อเข้าใช้สำหรับ <xliff:g id="APP_NAME">%1$s</xliff:g>"</string> <string name="get_dialog_title_choose_passkey_for" msgid="9175997688078538490">"เลือกพาสคีย์ที่บันทึกไว้สำหรับ <xliff:g id="APP_NAME">%1$s</xliff:g>"</string> <string name="get_dialog_title_choose_password_for" msgid="1724435823820819221">"เลือกรหัสผ่านที่บันทึกไว้สำหรับ <xliff:g id="APP_NAME">%1$s</xliff:g>"</string> <string name="get_dialog_title_choose_saved_sign_in_for" msgid="2420298653461652728">"เลือกการลงชื่อเข้าใช้ที่บันทึกไว้สำหรับ \"<xliff:g id="APP_NAME">%1$s</xliff:g>\""</string> - <string name="get_dialog_title_choose_sign_in_for" msgid="3048870756117876514">"เลือกการลงชื่อเข้าใช้สำหรับ <xliff:g id="APP_NAME">%1$s</xliff:g>"</string> + <string name="get_dialog_title_choose_sign_in_for" msgid="645728947702442421">"เลือกบัญชีสำหรับ <xliff:g id="APP_NAME">%1$s</xliff:g>"</string> <string name="get_dialog_title_choose_option_for" msgid="4976380044745029107">"ต้องการเลือกตัวเลือกสำหรับ <xliff:g id="APP_NAME">%1$s</xliff:g> ไหม"</string> <string name="get_dialog_title_use_info_on" msgid="8863708099535435146">"ใช้ข้อมูลนี้กับ <xliff:g id="APP_NAME">%1$s</xliff:g> ไหม"</string> <string name="get_dialog_use_saved_passkey_for" msgid="4618100798664888512">"ลงชื่อเข้าใช้ด้วยวิธีอื่น"</string> diff --git a/packages/CredentialManager/res/values-tl/strings.xml b/packages/CredentialManager/res/values-tl/strings.xml index 163e93aaf4f9..ebc2f4d5fc2e 100644 --- a/packages/CredentialManager/res/values-tl/strings.xml +++ b/packages/CredentialManager/res/values-tl/strings.xml @@ -42,9 +42,6 @@ <string name="choose_create_option_passkey_title" msgid="8762295821604276511">"Gumawa ng passkey para mag-sign in sa <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string> <string name="choose_create_option_password_title" msgid="4481366993598649224">"I-save ang password para mag-sign in sa <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string> <string name="choose_create_option_sign_in_title" msgid="7092914088455358079">"I-save ang impormasyon sa pag-sign in para sa <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string> - <string name="choose_create_single_tap_passkey_title" msgid="3872793514041774218">"Gamitin ang iyong lock ng screen para gumawa ng passkey para sa <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string> - <string name="choose_create_single_tap_password_title" msgid="5231871886818921622">"Gamitin ang iyong lock ng screen para gumawa ng password para sa <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string> - <string name="choose_create_single_tap_sign_in_title" msgid="256498714574099587">"Gamitin ang iyong lock ng screen para mag-save ng impormasyon sa pag-sign in para sa <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string> <string name="passkey" msgid="632353688396759522">"passkey"</string> <string name="password" msgid="6738570945182936667">"password"</string> <string name="passkeys" msgid="5733880786866559847">"mga passkey"</string> @@ -71,15 +68,15 @@ <string name="accessibility_back_arrow_button" msgid="3233198183497842492">"Bumalik sa nakaraang page"</string> <string name="accessibility_close_button" msgid="1163435587545377687">"Isara"</string> <string name="accessibility_snackbar_dismiss" msgid="3456598374801836120">"I-dismiss"</string> - <string name="get_dialog_title_use_passkey_for" msgid="6236608872708021767">"Gamitin ang iyong naka-save na passkey para sa <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string> - <string name="get_dialog_title_use_password_for" msgid="625828023234318484">"Gamitin ang iyong naka-save na password para sa <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string> - <string name="get_dialog_title_single_tap_for" msgid="2057945648748859483">"Gamitin ang iyong lock ng screen para mag-sign in sa <xliff:g id="APP_NAME">%1$s</xliff:g> gamit ang <xliff:g id="USERNAME">%2$s</xliff:g>"</string> - <string name="get_dialog_title_use_sign_in_for" msgid="790049858275131785">"Gamitin ang iyong sign-in para sa <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string> - <string name="get_dialog_title_unlock_options_for" msgid="7605568190597632433">"I-unlock ang mga opsyon sa pag-sign in para sa <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string> + <string name="get_dialog_title_use_passkey_for" msgid="479261099705979148">"Gamitin ang iyong naka-save na passkey para sa <xliff:g id="APP_NAME">%1$s</xliff:g>"</string> + <string name="get_dialog_title_use_password_for" msgid="688557784207167647">"Gamitin ang iyong naka-save na password para sa <xliff:g id="APP_NAME">%1$s</xliff:g>"</string> + <string name="get_dialog_title_use_sign_in_for" msgid="4233553937542583226">"Gamitin ang iyong account para sa <xliff:g id="APP_NAME">%1$s</xliff:g>"</string> + <string name="get_dialog_description_single_tap" msgid="2797059565126030879">"Gamitin ang iyong lock ng screen para mag-sign in sa <xliff:g id="APP_NAME">%1$s</xliff:g> gamit ang <xliff:g id="USERNAME">%2$s</xliff:g>"</string> + <string name="get_dialog_title_unlock_options_for" msgid="7096423827682163270">"I-unlock ang mga opsyon sa pag-sign in para sa <xliff:g id="APP_NAME">%1$s</xliff:g>"</string> <string name="get_dialog_title_choose_passkey_for" msgid="9175997688078538490">"Pumili ng naka-save na passkey para sa <xliff:g id="APP_NAME">%1$s</xliff:g>"</string> <string name="get_dialog_title_choose_password_for" msgid="1724435823820819221">"Pumili ng naka-save na password para sa <xliff:g id="APP_NAME">%1$s</xliff:g>"</string> <string name="get_dialog_title_choose_saved_sign_in_for" msgid="2420298653461652728">"Pumili ng naka-save na sign-in para sa <xliff:g id="APP_NAME">%1$s</xliff:g>"</string> - <string name="get_dialog_title_choose_sign_in_for" msgid="3048870756117876514">"Pumili ng sign-in para sa <xliff:g id="APP_NAME">%1$s</xliff:g>"</string> + <string name="get_dialog_title_choose_sign_in_for" msgid="645728947702442421">"Pumili ng account para sa <xliff:g id="APP_NAME">%1$s</xliff:g>"</string> <string name="get_dialog_title_choose_option_for" msgid="4976380044745029107">"Pumili ng opsyon para sa <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string> <string name="get_dialog_title_use_info_on" msgid="8863708099535435146">"Gamitin ang impormasyong ito sa <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string> <string name="get_dialog_use_saved_passkey_for" msgid="4618100798664888512">"Mag-sign in sa ibang paraan"</string> diff --git a/packages/CredentialManager/res/values-tr/strings.xml b/packages/CredentialManager/res/values-tr/strings.xml index b11ca074f4a2..cf6b2e39bd69 100644 --- a/packages/CredentialManager/res/values-tr/strings.xml +++ b/packages/CredentialManager/res/values-tr/strings.xml @@ -42,9 +42,6 @@ <string name="choose_create_option_passkey_title" msgid="8762295821604276511">"<xliff:g id="APP_NAME">%1$s</xliff:g> uygulamasında oturum açmak için geçiş anahtarı oluşturulsun mu?"</string> <string name="choose_create_option_password_title" msgid="4481366993598649224">"<xliff:g id="APP_NAME">%1$s</xliff:g> uygulamasında oturum açmak için şifre kaydedilsin mi?"</string> <string name="choose_create_option_sign_in_title" msgid="7092914088455358079">"<xliff:g id="APP_NAME">%1$s</xliff:g> için oturum açma bilgileri kaydedilsin mi?"</string> - <string name="choose_create_single_tap_passkey_title" msgid="3872793514041774218">"<xliff:g id="APP_NAME">%1$s</xliff:g> geçiş anahtarı oluşturmak için ekran kilidiniz kullanılsın mı?"</string> - <string name="choose_create_single_tap_password_title" msgid="5231871886818921622">"<xliff:g id="APP_NAME">%1$s</xliff:g> şifresi oluşturmak için ekran kilidiniz kullanılsın mı?"</string> - <string name="choose_create_single_tap_sign_in_title" msgid="256498714574099587">"<xliff:g id="APP_NAME">%1$s</xliff:g> oturum açma bilgilerini kaydetmek için ekran kilidiniz kullanılsın mı?"</string> <string name="passkey" msgid="632353688396759522">"Geçiş anahtarı"</string> <string name="password" msgid="6738570945182936667">"Şifre"</string> <string name="passkeys" msgid="5733880786866559847">"Geçiş anahtarlarınızın"</string> @@ -71,15 +68,16 @@ <string name="accessibility_back_arrow_button" msgid="3233198183497842492">"Önceki sayfaya geri dön"</string> <string name="accessibility_close_button" msgid="1163435587545377687">"Kapat"</string> <string name="accessibility_snackbar_dismiss" msgid="3456598374801836120">"Kapat"</string> - <string name="get_dialog_title_use_passkey_for" msgid="6236608872708021767">"<xliff:g id="APP_NAME">%1$s</xliff:g> için kayıtlı geçiş anahtarınız kullanılsın mı?"</string> - <string name="get_dialog_title_use_password_for" msgid="625828023234318484">"<xliff:g id="APP_NAME">%1$s</xliff:g> için kayıtlı şifreniz kullanılsın mı?"</string> - <string name="get_dialog_title_single_tap_for" msgid="2057945648748859483">"<xliff:g id="APP_NAME">%1$s</xliff:g> uygulamasında <xliff:g id="USERNAME">%2$s</xliff:g> hesabıyla oturum açmak için ekran kilidinizi kullanın"</string> - <string name="get_dialog_title_use_sign_in_for" msgid="790049858275131785">"<xliff:g id="APP_NAME">%1$s</xliff:g> için oturum açma bilgileriniz kullanılsın mı?"</string> - <string name="get_dialog_title_unlock_options_for" msgid="7605568190597632433">"<xliff:g id="APP_NAME">%1$s</xliff:g> için oturum açma seçeneklerine izin verilsin mi?"</string> + <string name="get_dialog_title_use_passkey_for" msgid="479261099705979148">"<xliff:g id="APP_NAME">%1$s</xliff:g> için kayıtlı geçiş anahtarınızı kullanın"</string> + <string name="get_dialog_title_use_password_for" msgid="688557784207167647">"<xliff:g id="APP_NAME">%1$s</xliff:g> için kayıtlı şifrenizi kullanın"</string> + <string name="get_dialog_title_use_sign_in_for" msgid="4233553937542583226">"<xliff:g id="APP_NAME">%1$s</xliff:g> için hesabınızı kullanın"</string> + <!-- no translation found for get_dialog_description_single_tap (2797059565126030879) --> + <skip /> + <string name="get_dialog_title_unlock_options_for" msgid="7096423827682163270">"<xliff:g id="APP_NAME">%1$s</xliff:g> için oturum açma seçeneklerinin kilidini açın"</string> <string name="get_dialog_title_choose_passkey_for" msgid="9175997688078538490">"<xliff:g id="APP_NAME">%1$s</xliff:g> için kayıtlı bir geçiş anahtarı kullanın"</string> <string name="get_dialog_title_choose_password_for" msgid="1724435823820819221">"<xliff:g id="APP_NAME">%1$s</xliff:g> için kayıtlı bir şifre kullanın"</string> <string name="get_dialog_title_choose_saved_sign_in_for" msgid="2420298653461652728">"<xliff:g id="APP_NAME">%1$s</xliff:g> için kayıtlı oturum açma bilgilerini kullanın"</string> - <string name="get_dialog_title_choose_sign_in_for" msgid="3048870756117876514">"<xliff:g id="APP_NAME">%1$s</xliff:g> için oturum açma bilgilerini seçin"</string> + <string name="get_dialog_title_choose_sign_in_for" msgid="645728947702442421">"<xliff:g id="APP_NAME">%1$s</xliff:g> uygulaması için bir hesap seçin"</string> <string name="get_dialog_title_choose_option_for" msgid="4976380044745029107">"<xliff:g id="APP_NAME">%1$s</xliff:g> için bir seçim yapmak ister misiniz?"</string> <string name="get_dialog_title_use_info_on" msgid="8863708099535435146">"Bu bilgiler <xliff:g id="APP_NAME">%1$s</xliff:g> uygulamasında kullanılsın mı?"</string> <string name="get_dialog_use_saved_passkey_for" msgid="4618100798664888512">"Başka bir yöntemle oturum aç"</string> diff --git a/packages/CredentialManager/res/values-uk/strings.xml b/packages/CredentialManager/res/values-uk/strings.xml index cbc67d9d4cfd..6b0590a87f6b 100644 --- a/packages/CredentialManager/res/values-uk/strings.xml +++ b/packages/CredentialManager/res/values-uk/strings.xml @@ -42,9 +42,6 @@ <string name="choose_create_option_passkey_title" msgid="8762295821604276511">"Створити ключ доступу для входу в додаток <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string> <string name="choose_create_option_password_title" msgid="4481366993598649224">"Зберегти пароль для входу в додаток <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string> <string name="choose_create_option_sign_in_title" msgid="7092914088455358079">"Зберегти дані для входу для додатка <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string> - <string name="choose_create_single_tap_passkey_title" msgid="3872793514041774218">"Використати спосіб розблокування екрана, щоб створити ключ доступу для додатка <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string> - <string name="choose_create_single_tap_password_title" msgid="5231871886818921622">"Використати спосіб розблокування екрана, щоб створити пароль для додатка <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string> - <string name="choose_create_single_tap_sign_in_title" msgid="256498714574099587">"Використати спосіб розблокування екрана, щоб зберегти дані для входу в додаток <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string> <string name="passkey" msgid="632353688396759522">"ключ доступу"</string> <string name="password" msgid="6738570945182936667">"пароль"</string> <string name="passkeys" msgid="5733880786866559847">"ключі доступу"</string> @@ -71,15 +68,16 @@ <string name="accessibility_back_arrow_button" msgid="3233198183497842492">"Повернутися на попередню сторінку"</string> <string name="accessibility_close_button" msgid="1163435587545377687">"Закрити"</string> <string name="accessibility_snackbar_dismiss" msgid="3456598374801836120">"Закрити"</string> - <string name="get_dialog_title_use_passkey_for" msgid="6236608872708021767">"Використати збережений ключ доступу для додатка <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string> - <string name="get_dialog_title_use_password_for" msgid="625828023234318484">"Використати ваш збережений пароль для додатка <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string> - <string name="get_dialog_title_single_tap_for" msgid="2057945648748859483">"Використовуйте свій спосіб розблокування екрана, щоб входити в додаток <xliff:g id="APP_NAME">%1$s</xliff:g> як користувач <xliff:g id="USERNAME">%2$s</xliff:g>"</string> - <string name="get_dialog_title_use_sign_in_for" msgid="790049858275131785">"Використовувати ваші дані для входу в додаток <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string> - <string name="get_dialog_title_unlock_options_for" msgid="7605568190597632433">"Розблокувати опції входу для додатка <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string> + <string name="get_dialog_title_use_passkey_for" msgid="479261099705979148">"Використайте свій збережений ключ доступу для додатка <xliff:g id="APP_NAME">%1$s</xliff:g>"</string> + <string name="get_dialog_title_use_password_for" msgid="688557784207167647">"Використайте свій збережений пароль для додатка <xliff:g id="APP_NAME">%1$s</xliff:g>"</string> + <string name="get_dialog_title_use_sign_in_for" msgid="4233553937542583226">"Використайте свій обліковий запис для додатка <xliff:g id="APP_NAME">%1$s</xliff:g>"</string> + <!-- no translation found for get_dialog_description_single_tap (2797059565126030879) --> + <skip /> + <string name="get_dialog_title_unlock_options_for" msgid="7096423827682163270">"Розблокуйте способи входу для додатка <xliff:g id="APP_NAME">%1$s</xliff:g>"</string> <string name="get_dialog_title_choose_passkey_for" msgid="9175997688078538490">"Виберіть збережений ключ доступу для додатка <xliff:g id="APP_NAME">%1$s</xliff:g>"</string> <string name="get_dialog_title_choose_password_for" msgid="1724435823820819221">"Виберіть збережений пароль для додатка <xliff:g id="APP_NAME">%1$s</xliff:g>"</string> <string name="get_dialog_title_choose_saved_sign_in_for" msgid="2420298653461652728">"Виберіть збережені дані для входу в додаток <xliff:g id="APP_NAME">%1$s</xliff:g>"</string> - <string name="get_dialog_title_choose_sign_in_for" msgid="3048870756117876514">"Виберіть дані для входу в додаток <xliff:g id="APP_NAME">%1$s</xliff:g>"</string> + <string name="get_dialog_title_choose_sign_in_for" msgid="645728947702442421">"Виберіть обліковий запис для додатка <xliff:g id="APP_NAME">%1$s</xliff:g>"</string> <string name="get_dialog_title_choose_option_for" msgid="4976380044745029107">"Вибрати варіант для додатка <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string> <string name="get_dialog_title_use_info_on" msgid="8863708099535435146">"Використовувати ці дані в додатку <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string> <string name="get_dialog_use_saved_passkey_for" msgid="4618100798664888512">"Увійти іншим способом"</string> diff --git a/packages/CredentialManager/res/values-ur/strings.xml b/packages/CredentialManager/res/values-ur/strings.xml index 67cf20ae7ae2..ff3f0d31ea33 100644 --- a/packages/CredentialManager/res/values-ur/strings.xml +++ b/packages/CredentialManager/res/values-ur/strings.xml @@ -42,9 +42,6 @@ <string name="choose_create_option_passkey_title" msgid="8762295821604276511">"<xliff:g id="APP_NAME">%1$s</xliff:g> میں سائن ان کرنے کیلئے پاس کی تخلیق کریں؟"</string> <string name="choose_create_option_password_title" msgid="4481366993598649224">"<xliff:g id="APP_NAME">%1$s</xliff:g> میں سائن ان کرنے کیلئے پاس ورڈ محفوظ کریں؟"</string> <string name="choose_create_option_sign_in_title" msgid="7092914088455358079">"<xliff:g id="APP_NAME">%1$s</xliff:g> کے لیے سائن ان کی معلومات محفوظ کریں؟"</string> - <string name="choose_create_single_tap_passkey_title" msgid="3872793514041774218">"<xliff:g id="APP_NAME">%1$s</xliff:g> کے لیے پاس کی بنانے کے لیے اپنا اسکرین لاک استعمال کریں؟"</string> - <string name="choose_create_single_tap_password_title" msgid="5231871886818921622">"<xliff:g id="APP_NAME">%1$s</xliff:g> کا پاس ورڈ بنانے کے لیے اپنا اسکرین لاک استعمال کریں؟"</string> - <string name="choose_create_single_tap_sign_in_title" msgid="256498714574099587">"<xliff:g id="APP_NAME">%1$s</xliff:g> کی سائن ان کی معلومات محفوظ کرنے کے لیے اپنا اسکرین لاک استعمال کریں؟"</string> <string name="passkey" msgid="632353688396759522">"پاس کی"</string> <string name="password" msgid="6738570945182936667">"پاس ورڈ"</string> <string name="passkeys" msgid="5733880786866559847">"پاس کیز"</string> @@ -71,15 +68,16 @@ <string name="accessibility_back_arrow_button" msgid="3233198183497842492">"گزشتہ صفحے پر واپس جائیں"</string> <string name="accessibility_close_button" msgid="1163435587545377687">"بند کریں"</string> <string name="accessibility_snackbar_dismiss" msgid="3456598374801836120">"برخاست کریں"</string> - <string name="get_dialog_title_use_passkey_for" msgid="6236608872708021767">"<xliff:g id="APP_NAME">%1$s</xliff:g> کے لیے اپنی محفوظ کردہ پاس کی استعمال کریں؟"</string> - <string name="get_dialog_title_use_password_for" msgid="625828023234318484">"<xliff:g id="APP_NAME">%1$s</xliff:g> کے لیے آپ کا محفوظ کردہ پاس ورڈ استعمال کریں؟"</string> - <string name="get_dialog_title_single_tap_for" msgid="2057945648748859483">"<xliff:g id="USERNAME">%2$s</xliff:g> کے ساتھ <xliff:g id="APP_NAME">%1$s</xliff:g> میں سائن ان کرنے کے لیے اپنا اسکرین لاک استعمال کریں"</string> - <string name="get_dialog_title_use_sign_in_for" msgid="790049858275131785">"<xliff:g id="APP_NAME">%1$s</xliff:g> کے لیے آپ کی سائن ان تفصیلات استعمال کریں؟"</string> - <string name="get_dialog_title_unlock_options_for" msgid="7605568190597632433">"<xliff:g id="APP_NAME">%1$s</xliff:g> کے لیے سائن ان کے اختیارات کو غیر مقفل کریں؟"</string> + <string name="get_dialog_title_use_passkey_for" msgid="479261099705979148">"<xliff:g id="APP_NAME">%1$s</xliff:g> کے لیے اپنی محفوظ کردہ پاس کی استعمال کریں"</string> + <string name="get_dialog_title_use_password_for" msgid="688557784207167647">"<xliff:g id="APP_NAME">%1$s</xliff:g> کیلئے آپ کا محفوظ کردہ پاس ورڈ استعمال کریں"</string> + <string name="get_dialog_title_use_sign_in_for" msgid="4233553937542583226">"<xliff:g id="APP_NAME">%1$s</xliff:g> کے لیے اپنا اکاؤنٹ استعمال کریں"</string> + <!-- no translation found for get_dialog_description_single_tap (2797059565126030879) --> + <skip /> + <string name="get_dialog_title_unlock_options_for" msgid="7096423827682163270">"<xliff:g id="APP_NAME">%1$s</xliff:g> کے لیے سائن ان کے اختیارات کو غیر مقفل کریں"</string> <string name="get_dialog_title_choose_passkey_for" msgid="9175997688078538490">"<xliff:g id="APP_NAME">%1$s</xliff:g> کے لیے ایک محفوظ کردہ پاس کی منتخب کریں"</string> <string name="get_dialog_title_choose_password_for" msgid="1724435823820819221">"<xliff:g id="APP_NAME">%1$s</xliff:g> کے لیے ایک محفوظ کردہ پاس ورڈ منتخب کریں"</string> <string name="get_dialog_title_choose_saved_sign_in_for" msgid="2420298653461652728">"<xliff:g id="APP_NAME">%1$s</xliff:g> کے لیے محفوظ کردہ سائن ان منتخب کریں"</string> - <string name="get_dialog_title_choose_sign_in_for" msgid="3048870756117876514">"<xliff:g id="APP_NAME">%1$s</xliff:g> کے لیے سائن ان منتخب کریں"</string> + <string name="get_dialog_title_choose_sign_in_for" msgid="645728947702442421">"<xliff:g id="APP_NAME">%1$s</xliff:g> کیلئے ایک اکاؤنٹ منتخب کریں"</string> <string name="get_dialog_title_choose_option_for" msgid="4976380044745029107">"<xliff:g id="APP_NAME">%1$s</xliff:g> کے لیے ایک اختیار منتخب کریں؟"</string> <string name="get_dialog_title_use_info_on" msgid="8863708099535435146">"<xliff:g id="APP_NAME">%1$s</xliff:g> پر اس معلومات کا استعمال کریں؟"</string> <string name="get_dialog_use_saved_passkey_for" msgid="4618100798664888512">"دوسرے طریقے سے سائن ان کریں"</string> diff --git a/packages/CredentialManager/res/values-uz/strings.xml b/packages/CredentialManager/res/values-uz/strings.xml index ae7f06e2b0f1..7bb974a90333 100644 --- a/packages/CredentialManager/res/values-uz/strings.xml +++ b/packages/CredentialManager/res/values-uz/strings.xml @@ -42,9 +42,6 @@ <string name="choose_create_option_passkey_title" msgid="8762295821604276511">"<xliff:g id="APP_NAME">%1$s</xliff:g> ilovasiga kirish uchun kirish kaliti yaratilsinmi?"</string> <string name="choose_create_option_password_title" msgid="4481366993598649224">"<xliff:g id="APP_NAME">%1$s</xliff:g> ilovasiga kirish uchun parol saqlansinmi?"</string> <string name="choose_create_option_sign_in_title" msgid="7092914088455358079">"<xliff:g id="APP_NAME">%1$s</xliff:g> uchun kirish maʼlumoti saqlansinmi?"</string> - <string name="choose_create_single_tap_passkey_title" msgid="3872793514041774218">"<xliff:g id="APP_NAME">%1$s</xliff:g> ilovasida kirish kaliti yaratish uchun ekranni qulflashdan foydalanilsinmi?"</string> - <string name="choose_create_single_tap_password_title" msgid="5231871886818921622">"<xliff:g id="APP_NAME">%1$s</xliff:g> ilovasida parol yaratish uchun ekranni qulflashdan foydalanilsinmi?"</string> - <string name="choose_create_single_tap_sign_in_title" msgid="256498714574099587">"<xliff:g id="APP_NAME">%1$s</xliff:g> ilovasiga kirish axborotlarini saqlash uchun ekranni qulflashdan foydalanilsinmi?"</string> <string name="passkey" msgid="632353688396759522">"kalit"</string> <string name="password" msgid="6738570945182936667">"parol"</string> <string name="passkeys" msgid="5733880786866559847">"kalitlar"</string> @@ -71,15 +68,16 @@ <string name="accessibility_back_arrow_button" msgid="3233198183497842492">"Avvalgi sahifaga qaytish"</string> <string name="accessibility_close_button" msgid="1163435587545377687">"Yopish"</string> <string name="accessibility_snackbar_dismiss" msgid="3456598374801836120">"Yopish"</string> - <string name="get_dialog_title_use_passkey_for" msgid="6236608872708021767">"<xliff:g id="APP_NAME">%1$s</xliff:g> uchun saqlangan kalit ishlatilsinmi?"</string> - <string name="get_dialog_title_use_password_for" msgid="625828023234318484">"<xliff:g id="APP_NAME">%1$s</xliff:g> uchun saqlangan parol ishlatilsinmi?"</string> - <string name="get_dialog_title_single_tap_for" msgid="2057945648748859483">"<xliff:g id="APP_NAME">%1$s</xliff:g> ilovasiga <xliff:g id="USERNAME">%2$s</xliff:g> bilan kirish uchun ekran qulfini ishlating"</string> - <string name="get_dialog_title_use_sign_in_for" msgid="790049858275131785">"<xliff:g id="APP_NAME">%1$s</xliff:g> ilovasiga bu maʼlumotlar bilan kirilsinmi?"</string> - <string name="get_dialog_title_unlock_options_for" msgid="7605568190597632433">"<xliff:g id="APP_NAME">%1$s</xliff:g> uchun kirish usullari ochilsinmi?"</string> + <string name="get_dialog_title_use_passkey_for" msgid="479261099705979148">"<xliff:g id="APP_NAME">%1$s</xliff:g> ilovasiga saqlangan kalit orqali kiring"</string> + <string name="get_dialog_title_use_password_for" msgid="688557784207167647">"<xliff:g id="APP_NAME">%1$s</xliff:g> uchun saqlangan parol orqali kiring"</string> + <string name="get_dialog_title_use_sign_in_for" msgid="4233553937542583226">"<xliff:g id="APP_NAME">%1$s</xliff:g> ilovasiga hisobingiz orqali kiring"</string> + <!-- no translation found for get_dialog_description_single_tap (2797059565126030879) --> + <skip /> + <string name="get_dialog_title_unlock_options_for" msgid="7096423827682163270">"<xliff:g id="APP_NAME">%1$s</xliff:g> ilovasiga kirish usulini tasdiqlang"</string> <string name="get_dialog_title_choose_passkey_for" msgid="9175997688078538490">"<xliff:g id="APP_NAME">%1$s</xliff:g> uchun saqlangan kalitni tanlang"</string> <string name="get_dialog_title_choose_password_for" msgid="1724435823820819221">"<xliff:g id="APP_NAME">%1$s</xliff:g> uchun saqlangan parolni tanlang"</string> <string name="get_dialog_title_choose_saved_sign_in_for" msgid="2420298653461652728">"<xliff:g id="APP_NAME">%1$s</xliff:g> uchun hisob maʼlumotlarini tanlang"</string> - <string name="get_dialog_title_choose_sign_in_for" msgid="3048870756117876514">"<xliff:g id="APP_NAME">%1$s</xliff:g> ilovasiga qanday kirishni tanlang"</string> + <string name="get_dialog_title_choose_sign_in_for" msgid="645728947702442421">"<xliff:g id="APP_NAME">%1$s</xliff:g> ilovasiga kirish hisobini tanlang"</string> <string name="get_dialog_title_choose_option_for" msgid="4976380044745029107">"<xliff:g id="APP_NAME">%1$s</xliff:g> ilovasiga kirish uchun maʼlumotlar tanlansinmi?"</string> <string name="get_dialog_title_use_info_on" msgid="8863708099535435146">"Bu axborotdan <xliff:g id="APP_NAME">%1$s</xliff:g> ilovasiga kirish uchun foydalanilsinmi?"</string> <string name="get_dialog_use_saved_passkey_for" msgid="4618100798664888512">"Boshqa usul orqali kirish"</string> diff --git a/packages/CredentialManager/res/values-vi/strings.xml b/packages/CredentialManager/res/values-vi/strings.xml index 2b5985708be4..aa253a486265 100644 --- a/packages/CredentialManager/res/values-vi/strings.xml +++ b/packages/CredentialManager/res/values-vi/strings.xml @@ -42,9 +42,6 @@ <string name="choose_create_option_passkey_title" msgid="8762295821604276511">"Tạo khoá truy cập để đăng nhập vào <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string> <string name="choose_create_option_password_title" msgid="4481366993598649224">"Lưu mật khẩu để đăng nhập vào <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string> <string name="choose_create_option_sign_in_title" msgid="7092914088455358079">"Lưu thông tin đăng nhập cho <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string> - <string name="choose_create_single_tap_passkey_title" msgid="3872793514041774218">"Sử dụng phương thức khoá màn hình để tạo khoá truy cập cho ứng dụng <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string> - <string name="choose_create_single_tap_password_title" msgid="5231871886818921622">"Sử dụng phương thức khoá màn hình để tạo mật khẩu cho ứng dụng <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string> - <string name="choose_create_single_tap_sign_in_title" msgid="256498714574099587">"Sử dụng phương thức khoá màn hình để lưu thông tin đăng nhập cho ứng dụng <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string> <string name="passkey" msgid="632353688396759522">"khoá đăng nhập"</string> <string name="password" msgid="6738570945182936667">"mật khẩu"</string> <string name="passkeys" msgid="5733880786866559847">"khoá truy cập"</string> @@ -71,15 +68,16 @@ <string name="accessibility_back_arrow_button" msgid="3233198183497842492">"Quay lại trang trước"</string> <string name="accessibility_close_button" msgid="1163435587545377687">"Đóng"</string> <string name="accessibility_snackbar_dismiss" msgid="3456598374801836120">"Đóng"</string> - <string name="get_dialog_title_use_passkey_for" msgid="6236608872708021767">"Dùng khoá đăng nhập bạn đã lưu cho <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string> - <string name="get_dialog_title_use_password_for" msgid="625828023234318484">"Sử dụng mật khẩu bạn đã lưu cho <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string> - <string name="get_dialog_title_single_tap_for" msgid="2057945648748859483">"Dùng phương thức khoá màn hình để đăng nhập vào <xliff:g id="APP_NAME">%1$s</xliff:g> bằng <xliff:g id="USERNAME">%2$s</xliff:g>"</string> - <string name="get_dialog_title_use_sign_in_for" msgid="790049858275131785">"Dùng thông tin đăng nhập của bạn cho <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string> - <string name="get_dialog_title_unlock_options_for" msgid="7605568190597632433">"Mở khoá các tuỳ chọn đăng nhập cho <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string> + <string name="get_dialog_title_use_passkey_for" msgid="479261099705979148">"Dùng khoá truy cập bạn đã lưu cho <xliff:g id="APP_NAME">%1$s</xliff:g>"</string> + <string name="get_dialog_title_use_password_for" msgid="688557784207167647">"Dùng mật khẩu bạn đã lưu cho <xliff:g id="APP_NAME">%1$s</xliff:g>"</string> + <string name="get_dialog_title_use_sign_in_for" msgid="4233553937542583226">"Dùng tài khoản của bạn cho <xliff:g id="APP_NAME">%1$s</xliff:g>"</string> + <!-- no translation found for get_dialog_description_single_tap (2797059565126030879) --> + <skip /> + <string name="get_dialog_title_unlock_options_for" msgid="7096423827682163270">"Mở khoá các phương thức đăng nhập cho <xliff:g id="APP_NAME">%1$s</xliff:g>"</string> <string name="get_dialog_title_choose_passkey_for" msgid="9175997688078538490">"Chọn khoá truy cập đã lưu cho <xliff:g id="APP_NAME">%1$s</xliff:g>"</string> <string name="get_dialog_title_choose_password_for" msgid="1724435823820819221">"Chọn mật khẩu đã lưu cho <xliff:g id="APP_NAME">%1$s</xliff:g>"</string> <string name="get_dialog_title_choose_saved_sign_in_for" msgid="2420298653461652728">"Chọn thông tin đăng nhập đã lưu cho <xliff:g id="APP_NAME">%1$s</xliff:g>"</string> - <string name="get_dialog_title_choose_sign_in_for" msgid="3048870756117876514">"Chọn thông tin đăng nhập cho <xliff:g id="APP_NAME">%1$s</xliff:g>"</string> + <string name="get_dialog_title_choose_sign_in_for" msgid="645728947702442421">"Chọn một tài khoản cho <xliff:g id="APP_NAME">%1$s</xliff:g>"</string> <string name="get_dialog_title_choose_option_for" msgid="4976380044745029107">"Chọn một lựa chọn cho <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string> <string name="get_dialog_title_use_info_on" msgid="8863708099535435146">"Sử dụng thông tin này trên <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string> <string name="get_dialog_use_saved_passkey_for" msgid="4618100798664888512">"Đăng nhập bằng cách khác"</string> diff --git a/packages/CredentialManager/res/values-zh-rCN/strings.xml b/packages/CredentialManager/res/values-zh-rCN/strings.xml index 9b7ae0d88a4f..42dbfaf63a99 100644 --- a/packages/CredentialManager/res/values-zh-rCN/strings.xml +++ b/packages/CredentialManager/res/values-zh-rCN/strings.xml @@ -42,9 +42,6 @@ <string name="choose_create_option_passkey_title" msgid="8762295821604276511">"要创建通行密钥以便登录“<xliff:g id="APP_NAME">%1$s</xliff:g>”吗?"</string> <string name="choose_create_option_password_title" msgid="4481366993598649224">"要保存密码以便登录“<xliff:g id="APP_NAME">%1$s</xliff:g>”吗?"</string> <string name="choose_create_option_sign_in_title" msgid="7092914088455358079">"要保存“<xliff:g id="APP_NAME">%1$s</xliff:g>”的登录信息吗?"</string> - <string name="choose_create_single_tap_passkey_title" msgid="3872793514041774218">"要使用屏锁为“<xliff:g id="APP_NAME">%1$s</xliff:g>”创建通行密钥?"</string> - <string name="choose_create_single_tap_password_title" msgid="5231871886818921622">"要使用屏锁为“<xliff:g id="APP_NAME">%1$s</xliff:g>”创建密码?"</string> - <string name="choose_create_single_tap_sign_in_title" msgid="256498714574099587">"要使用屏锁为“<xliff:g id="APP_NAME">%1$s</xliff:g>”保存登录信息?"</string> <string name="passkey" msgid="632353688396759522">"通行密钥"</string> <string name="password" msgid="6738570945182936667">"密码"</string> <string name="passkeys" msgid="5733880786866559847">"通行密钥"</string> @@ -71,15 +68,16 @@ <string name="accessibility_back_arrow_button" msgid="3233198183497842492">"返回上一页"</string> <string name="accessibility_close_button" msgid="1163435587545377687">"关闭"</string> <string name="accessibility_snackbar_dismiss" msgid="3456598374801836120">"忽略"</string> - <string name="get_dialog_title_use_passkey_for" msgid="6236608872708021767">"要使用您为“<xliff:g id="APP_NAME">%1$s</xliff:g>”保存的通行密钥吗?"</string> - <string name="get_dialog_title_use_password_for" msgid="625828023234318484">"要使用已保存的密码登录“<xliff:g id="APP_NAME">%1$s</xliff:g>”吗?"</string> - <string name="get_dialog_title_single_tap_for" msgid="2057945648748859483">"使用您的屏锁以 <xliff:g id="USERNAME">%2$s</xliff:g> 的身份登录“<xliff:g id="APP_NAME">%1$s</xliff:g>”"</string> - <string name="get_dialog_title_use_sign_in_for" msgid="790049858275131785">"是否使用您的<xliff:g id="APP_NAME">%1$s</xliff:g>登录凭据继续?"</string> - <string name="get_dialog_title_unlock_options_for" msgid="7605568190597632433">"要解锁“<xliff:g id="APP_NAME">%1$s</xliff:g>”的登录选项吗?"</string> + <string name="get_dialog_title_use_passkey_for" msgid="479261099705979148">"使用已保存的通行密钥登录“<xliff:g id="APP_NAME">%1$s</xliff:g>”"</string> + <string name="get_dialog_title_use_password_for" msgid="688557784207167647">"使用已保存的密码登录“<xliff:g id="APP_NAME">%1$s</xliff:g>”"</string> + <string name="get_dialog_title_use_sign_in_for" msgid="4233553937542583226">"使用您的账号登录“<xliff:g id="APP_NAME">%1$s</xliff:g>”"</string> + <!-- no translation found for get_dialog_description_single_tap (2797059565126030879) --> + <skip /> + <string name="get_dialog_title_unlock_options_for" msgid="7096423827682163270">"解锁“<xliff:g id="APP_NAME">%1$s</xliff:g>”的登录选项"</string> <string name="get_dialog_title_choose_passkey_for" msgid="9175997688078538490">"选择一个已保存的通行密钥来登录“<xliff:g id="APP_NAME">%1$s</xliff:g>”"</string> <string name="get_dialog_title_choose_password_for" msgid="1724435823820819221">"选择一个已保存的密码来登录“<xliff:g id="APP_NAME">%1$s</xliff:g>”"</string> <string name="get_dialog_title_choose_saved_sign_in_for" msgid="2420298653461652728">"选择一种已保存的登录方式来登录“<xliff:g id="APP_NAME">%1$s</xliff:g>”"</string> - <string name="get_dialog_title_choose_sign_in_for" msgid="3048870756117876514">"选择一种登录<xliff:g id="APP_NAME">%1$s</xliff:g>的方式"</string> + <string name="get_dialog_title_choose_sign_in_for" msgid="645728947702442421">"选择一个账号登录“<xliff:g id="APP_NAME">%1$s</xliff:g>”"</string> <string name="get_dialog_title_choose_option_for" msgid="4976380044745029107">"要为“<xliff:g id="APP_NAME">%1$s</xliff:g>”选择一个选项吗?"</string> <string name="get_dialog_title_use_info_on" msgid="8863708099535435146">"要将此信息用于“<xliff:g id="APP_NAME">%1$s</xliff:g>”吗?"</string> <string name="get_dialog_use_saved_passkey_for" msgid="4618100798664888512">"使用其他登录方式"</string> diff --git a/packages/CredentialManager/res/values-zh-rHK/strings.xml b/packages/CredentialManager/res/values-zh-rHK/strings.xml index 4ff00c3b1ea8..56e0b901c3ee 100644 --- a/packages/CredentialManager/res/values-zh-rHK/strings.xml +++ b/packages/CredentialManager/res/values-zh-rHK/strings.xml @@ -42,9 +42,6 @@ <string name="choose_create_option_passkey_title" msgid="8762295821604276511">"要建立密鑰以登入 <xliff:g id="APP_NAME">%1$s</xliff:g> 嗎?"</string> <string name="choose_create_option_password_title" msgid="4481366993598649224">"要儲存密碼以登入 <xliff:g id="APP_NAME">%1$s</xliff:g> 嗎?"</string> <string name="choose_create_option_sign_in_title" msgid="7092914088455358079">"要儲存 <xliff:g id="APP_NAME">%1$s</xliff:g> 的登入資料嗎?"</string> - <string name="choose_create_single_tap_passkey_title" msgid="3872793514041774218">"要使用螢幕鎖定方式建立「<xliff:g id="APP_NAME">%1$s</xliff:g>」的密鑰嗎?"</string> - <string name="choose_create_single_tap_password_title" msgid="5231871886818921622">"要使用螢幕鎖定方式建立「<xliff:g id="APP_NAME">%1$s</xliff:g>」的密碼嗎?"</string> - <string name="choose_create_single_tap_sign_in_title" msgid="256498714574099587">"要使用螢幕鎖定方式儲存「<xliff:g id="APP_NAME">%1$s</xliff:g>」的登入資料嗎?"</string> <string name="passkey" msgid="632353688396759522">"密鑰"</string> <string name="password" msgid="6738570945182936667">"密碼"</string> <string name="passkeys" msgid="5733880786866559847">"密鑰"</string> @@ -71,15 +68,16 @@ <string name="accessibility_back_arrow_button" msgid="3233198183497842492">"返回上一頁"</string> <string name="accessibility_close_button" msgid="1163435587545377687">"關閉"</string> <string name="accessibility_snackbar_dismiss" msgid="3456598374801836120">"關閉"</string> - <string name="get_dialog_title_use_passkey_for" msgid="6236608872708021767">"要使用已儲存的「<xliff:g id="APP_NAME">%1$s</xliff:g>」密鑰嗎?"</string> - <string name="get_dialog_title_use_password_for" msgid="625828023234318484">"要使用已儲存的「<xliff:g id="APP_NAME">%1$s</xliff:g>」密碼嗎?"</string> - <string name="get_dialog_title_single_tap_for" msgid="2057945648748859483">"使用螢幕鎖定方式以 <xliff:g id="USERNAME">%2$s</xliff:g> 登入 <xliff:g id="APP_NAME">%1$s</xliff:g>"</string> - <string name="get_dialog_title_use_sign_in_for" msgid="790049858275131785">"要以此登入方式使用「<xliff:g id="APP_NAME">%1$s</xliff:g>」嗎?"</string> - <string name="get_dialog_title_unlock_options_for" msgid="7605568190597632433">"要解鎖「<xliff:g id="APP_NAME">%1$s</xliff:g>」的登入選項嗎?"</string> + <string name="get_dialog_title_use_passkey_for" msgid="479261099705979148">"使用已儲存的 <xliff:g id="APP_NAME">%1$s</xliff:g> 密鑰"</string> + <string name="get_dialog_title_use_password_for" msgid="688557784207167647">"使用已儲存的 <xliff:g id="APP_NAME">%1$s</xliff:g> 密碼"</string> + <string name="get_dialog_title_use_sign_in_for" msgid="4233553937542583226">"透過你的帳戶使用 <xliff:g id="APP_NAME">%1$s</xliff:g>"</string> + <!-- no translation found for get_dialog_description_single_tap (2797059565126030879) --> + <skip /> + <string name="get_dialog_title_unlock_options_for" msgid="7096423827682163270">"解鎖 <xliff:g id="APP_NAME">%1$s</xliff:g> 的登入選項"</string> <string name="get_dialog_title_choose_passkey_for" msgid="9175997688078538490">"選擇已儲存的「<xliff:g id="APP_NAME">%1$s</xliff:g>」密鑰"</string> <string name="get_dialog_title_choose_password_for" msgid="1724435823820819221">"選擇已儲存的「<xliff:g id="APP_NAME">%1$s</xliff:g>」密碼"</string> <string name="get_dialog_title_choose_saved_sign_in_for" msgid="2420298653461652728">"選擇已儲存的「<xliff:g id="APP_NAME">%1$s</xliff:g>」登入資料"</string> - <string name="get_dialog_title_choose_sign_in_for" msgid="3048870756117876514">"選擇用於「<xliff:g id="APP_NAME">%1$s</xliff:g>」的登入方式"</string> + <string name="get_dialog_title_choose_sign_in_for" msgid="645728947702442421">"選擇使用 <xliff:g id="APP_NAME">%1$s</xliff:g> 的帳戶"</string> <string name="get_dialog_title_choose_option_for" msgid="4976380044745029107">"要選擇適用於「<xliff:g id="APP_NAME">%1$s</xliff:g>」的項目嗎?"</string> <string name="get_dialog_title_use_info_on" msgid="8863708099535435146">"要在「<xliff:g id="APP_NAME">%1$s</xliff:g>」上使用這些資料嗎?"</string> <string name="get_dialog_use_saved_passkey_for" msgid="4618100798664888512">"使用其他方式登入"</string> diff --git a/packages/CredentialManager/res/values-zh-rTW/strings.xml b/packages/CredentialManager/res/values-zh-rTW/strings.xml index c8bd87d2b61a..59d0607149ca 100644 --- a/packages/CredentialManager/res/values-zh-rTW/strings.xml +++ b/packages/CredentialManager/res/values-zh-rTW/strings.xml @@ -42,9 +42,6 @@ <string name="choose_create_option_passkey_title" msgid="8762295821604276511">"要建立用於登入「<xliff:g id="APP_NAME">%1$s</xliff:g>」的密碼金鑰嗎?"</string> <string name="choose_create_option_password_title" msgid="4481366993598649224">"要儲存用於登入「<xliff:g id="APP_NAME">%1$s</xliff:g>」的密碼嗎?"</string> <string name="choose_create_option_sign_in_title" msgid="7092914088455358079">"要儲存「<xliff:g id="APP_NAME">%1$s</xliff:g>」的登入資訊嗎?"</string> - <string name="choose_create_single_tap_passkey_title" msgid="3872793514041774218">"要使用螢幕鎖定建立「<xliff:g id="APP_NAME">%1$s</xliff:g>」的密碼金鑰嗎?"</string> - <string name="choose_create_single_tap_password_title" msgid="5231871886818921622">"要使用螢幕鎖定建立「<xliff:g id="APP_NAME">%1$s</xliff:g>」的密碼嗎?"</string> - <string name="choose_create_single_tap_sign_in_title" msgid="256498714574099587">"要使用螢幕鎖定儲存「<xliff:g id="APP_NAME">%1$s</xliff:g>」的登入資訊嗎?"</string> <string name="passkey" msgid="632353688396759522">"密碼金鑰"</string> <string name="password" msgid="6738570945182936667">"密碼"</string> <string name="passkeys" msgid="5733880786866559847">"密碼金鑰"</string> @@ -71,15 +68,16 @@ <string name="accessibility_back_arrow_button" msgid="3233198183497842492">"返回上一頁"</string> <string name="accessibility_close_button" msgid="1163435587545377687">"關閉"</string> <string name="accessibility_snackbar_dismiss" msgid="3456598374801836120">"關閉"</string> - <string name="get_dialog_title_use_passkey_for" msgid="6236608872708021767">"要使用已儲存的「<xliff:g id="APP_NAME">%1$s</xliff:g>」密碼金鑰嗎?"</string> - <string name="get_dialog_title_use_password_for" msgid="625828023234318484">"要使用已儲存的「<xliff:g id="APP_NAME">%1$s</xliff:g>」密碼嗎?"</string> - <string name="get_dialog_title_single_tap_for" msgid="2057945648748859483">"用 <xliff:g id="USERNAME">%2$s</xliff:g> 登入「<xliff:g id="APP_NAME">%1$s</xliff:g>」時使用螢幕鎖定功能進行驗證"</string> - <string name="get_dialog_title_use_sign_in_for" msgid="790049858275131785">"要使用你的憑證登入「<xliff:g id="APP_NAME">%1$s</xliff:g>」嗎?"</string> - <string name="get_dialog_title_unlock_options_for" msgid="7605568190597632433">"要解鎖「<xliff:g id="APP_NAME">%1$s</xliff:g>」的登入選項嗎?"</string> + <string name="get_dialog_title_use_passkey_for" msgid="479261099705979148">"使用已儲存的「<xliff:g id="APP_NAME">%1$s</xliff:g>」密碼金鑰"</string> + <string name="get_dialog_title_use_password_for" msgid="688557784207167647">"使用已儲存的「<xliff:g id="APP_NAME">%1$s</xliff:g>」密碼"</string> + <string name="get_dialog_title_use_sign_in_for" msgid="4233553937542583226">"使用「<xliff:g id="APP_NAME">%1$s</xliff:g>」的帳戶"</string> + <!-- no translation found for get_dialog_description_single_tap (2797059565126030879) --> + <skip /> + <string name="get_dialog_title_unlock_options_for" msgid="7096423827682163270">"解鎖「<xliff:g id="APP_NAME">%1$s</xliff:g>」的登入選項"</string> <string name="get_dialog_title_choose_passkey_for" msgid="9175997688078538490">"選擇已儲存的「<xliff:g id="APP_NAME">%1$s</xliff:g>」密碼金鑰"</string> <string name="get_dialog_title_choose_password_for" msgid="1724435823820819221">"選擇已儲存的「<xliff:g id="APP_NAME">%1$s</xliff:g>」密碼"</string> <string name="get_dialog_title_choose_saved_sign_in_for" msgid="2420298653461652728">"選擇已儲存的「<xliff:g id="APP_NAME">%1$s</xliff:g>」登入資訊"</string> - <string name="get_dialog_title_choose_sign_in_for" msgid="3048870756117876514">"選擇用於登入「<xliff:g id="APP_NAME">%1$s</xliff:g>」的憑證"</string> + <string name="get_dialog_title_choose_sign_in_for" msgid="645728947702442421">"選擇要用於「<xliff:g id="APP_NAME">%1$s</xliff:g>」的帳戶"</string> <string name="get_dialog_title_choose_option_for" msgid="4976380044745029107">"要選擇適用於「<xliff:g id="APP_NAME">%1$s</xliff:g>」的項目嗎?"</string> <string name="get_dialog_title_use_info_on" msgid="8863708099535435146">"要在「<xliff:g id="APP_NAME">%1$s</xliff:g>」上使用這項資訊嗎?"</string> <string name="get_dialog_use_saved_passkey_for" msgid="4618100798664888512">"使用其他方式登入"</string> diff --git a/packages/CredentialManager/res/values-zu/strings.xml b/packages/CredentialManager/res/values-zu/strings.xml index 7e6300b5c5b0..2cc6f40500c3 100644 --- a/packages/CredentialManager/res/values-zu/strings.xml +++ b/packages/CredentialManager/res/values-zu/strings.xml @@ -42,9 +42,6 @@ <string name="choose_create_option_passkey_title" msgid="8762295821604276511">"Sungula ukhiye wokudlula ukuze ungene ngemvume ku-<xliff:g id="APP_NAME">%1$s</xliff:g>?"</string> <string name="choose_create_option_password_title" msgid="4481366993598649224">"Londoloza iphasiwedi ukuze ungene ngemvume ku-<xliff:g id="APP_NAME">%1$s</xliff:g>?"</string> <string name="choose_create_option_sign_in_title" msgid="7092914088455358079">"Londoloza ulwazi lokungena lwe-<xliff:g id="APP_NAME">%1$s</xliff:g>?"</string> - <string name="choose_create_single_tap_passkey_title" msgid="3872793514041774218">"Sebenzisa ukukhiya isikrini sakho ukuze usungule ukhiye wokudlula we-<xliff:g id="APP_NAME">%1$s</xliff:g>?"</string> - <string name="choose_create_single_tap_password_title" msgid="5231871886818921622">"Sebenzisa ukukhiya isikrini sakho ukuze usungule iphasiwedi ye-<xliff:g id="APP_NAME">%1$s</xliff:g>?"</string> - <string name="choose_create_single_tap_sign_in_title" msgid="256498714574099587">"Sebenzisa ukukhiya isikrini sakho ukuze ulondoloze ulwazi lokungena ngemvume lwe-<xliff:g id="APP_NAME">%1$s</xliff:g>?"</string> <string name="passkey" msgid="632353688396759522">"ukhiye wokudlula"</string> <string name="password" msgid="6738570945182936667">"iphasiwedi"</string> <string name="passkeys" msgid="5733880786866559847">"okhiye bokudlula"</string> @@ -71,15 +68,16 @@ <string name="accessibility_back_arrow_button" msgid="3233198183497842492">"Buyela emuva ekhasini langaphambilini"</string> <string name="accessibility_close_button" msgid="1163435587545377687">"Vala"</string> <string name="accessibility_snackbar_dismiss" msgid="3456598374801836120">"Chitha"</string> - <string name="get_dialog_title_use_passkey_for" msgid="6236608872708021767">"Sebenzisa ukhiye wakho wokungena olondoloziwe <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string> - <string name="get_dialog_title_use_password_for" msgid="625828023234318484">"Sebenzisa iphasiwedi yakho elondoloziwe ye-<xliff:g id="APP_NAME">%1$s</xliff:g>?"</string> - <string name="get_dialog_title_single_tap_for" msgid="2057945648748859483">"Sebenzisa ukukhiya kwakho kwesikrini ukuze ungene ngemvume ku-<xliff:g id="APP_NAME">%1$s</xliff:g> ngo-<xliff:g id="USERNAME">%2$s</xliff:g>"</string> - <string name="get_dialog_title_use_sign_in_for" msgid="790049858275131785">"Sebenzisa ukungena kwakho ngemvume ku-<xliff:g id="APP_NAME">%1$s</xliff:g>?"</string> - <string name="get_dialog_title_unlock_options_for" msgid="7605568190597632433">"Vula ukungena ngemvume okukhethwa kukho kwe-<xliff:g id="APP_NAME">%1$s</xliff:g>?"</string> + <string name="get_dialog_title_use_passkey_for" msgid="479261099705979148">"Sebenzisa ukhiye wakho wokungena olondoloziwe we-<xliff:g id="APP_NAME">%1$s</xliff:g>"</string> + <string name="get_dialog_title_use_password_for" msgid="688557784207167647">"Sebenzisa iphasiwedi yakho elondoloziwe ye-<xliff:g id="APP_NAME">%1$s</xliff:g>"</string> + <string name="get_dialog_title_use_sign_in_for" msgid="4233553937542583226">"Sebenzisa i-akhawunti yakho ye-<xliff:g id="APP_NAME">%1$s</xliff:g>"</string> + <!-- no translation found for get_dialog_description_single_tap (2797059565126030879) --> + <skip /> + <string name="get_dialog_title_unlock_options_for" msgid="7096423827682163270">"Vula ukungena ngemvume okukhethwa kukho kwe-<xliff:g id="APP_NAME">%1$s</xliff:g>?"</string> <string name="get_dialog_title_choose_passkey_for" msgid="9175997688078538490">"Khetha ukhiye wokudlula olondoloziwe we-<xliff:g id="APP_NAME">%1$s</xliff:g>"</string> <string name="get_dialog_title_choose_password_for" msgid="1724435823820819221">"Khetha iphasiwedi elondoloziwe ye-<xliff:g id="APP_NAME">%1$s</xliff:g>"</string> <string name="get_dialog_title_choose_saved_sign_in_for" msgid="2420298653461652728">"Khetha ukungena ngemvume okulondoloziwe kwe-<xliff:g id="APP_NAME">%1$s</xliff:g>"</string> - <string name="get_dialog_title_choose_sign_in_for" msgid="3048870756117876514">"Khetha ukungenangemvume ku-<xliff:g id="APP_NAME">%1$s</xliff:g>"</string> + <string name="get_dialog_title_choose_sign_in_for" msgid="645728947702442421">"Khetha i-akhawunti ye-<xliff:g id="APP_NAME">%1$s</xliff:g>"</string> <string name="get_dialog_title_choose_option_for" msgid="4976380044745029107">"Khetha ongakhetha kukho kwe-<xliff:g id="APP_NAME">%1$s</xliff:g>?"</string> <string name="get_dialog_title_use_info_on" msgid="8863708099535435146">"Sebenzisa lolu lwazi ku-<xliff:g id="APP_NAME">%1$s</xliff:g>?"</string> <string name="get_dialog_use_saved_passkey_for" msgid="4618100798664888512">"Ngena ngemvume ngenye indlela"</string> diff --git a/packages/CredentialManager/src/com/android/credentialmanager/autofill/CredentialAutofillService.kt b/packages/CredentialManager/src/com/android/credentialmanager/autofill/CredentialAutofillService.kt index 4109079e20a5..50ebdd5e3ce7 100644 --- a/packages/CredentialManager/src/com/android/credentialmanager/autofill/CredentialAutofillService.kt +++ b/packages/CredentialManager/src/com/android/credentialmanager/autofill/CredentialAutofillService.kt @@ -47,9 +47,9 @@ import android.service.autofill.SaveRequest import android.service.credentials.CredentialProviderService import android.util.Log import android.content.Intent +import android.os.IBinder import android.view.autofill.AutofillId import android.view.autofill.AutofillManager -import android.view.autofill.IAutoFillManagerClient import android.widget.RemoteViews import android.widget.inline.InlinePresentationSpec import androidx.autofill.inline.v1.InlineSuggestionUi @@ -95,7 +95,7 @@ class CredentialAutofillService : AutofillService() { request: FillRequest, cancellationSignal: CancellationSignal, callback: FillCallback, - autofillCallback: IAutoFillManagerClient + autofillCallback: IBinder ) { val context = request.fillContexts val structure = context[context.size - 1].structure @@ -160,7 +160,7 @@ class CredentialAutofillService : AutofillService() { CancellationSignal(), Executors.newSingleThreadExecutor(), outcome, - autofillCallback.asBinder() + autofillCallback ) } diff --git a/packages/InputDevices/res/values-af/strings.xml b/packages/InputDevices/res/values-af/strings.xml index 5d0c02211345..72bb640ef499 100644 --- a/packages/InputDevices/res/values-af/strings.xml +++ b/packages/InputDevices/res/values-af/strings.xml @@ -50,6 +50,5 @@ <string name="keyboard_layout_belarusian" msgid="7619281752698687588">"Belarussies"</string> <string name="keyboard_layout_mongolian" msgid="7678483495823936626">"Mongools"</string> <string name="keyboard_layout_georgian" msgid="4596185456863747454">"Georgies"</string> - <!-- no translation found for keyboard_layout_thai_kedmanee (6637147314580760938) --> - <skip /> + <string name="keyboard_layout_thai_kedmanee" msgid="6637147314580760938">"Thai (Kedmanee)"</string> </resources> diff --git a/packages/InputDevices/res/values-as/strings.xml b/packages/InputDevices/res/values-as/strings.xml index 01714424dcfd..3cd707f74708 100644 --- a/packages/InputDevices/res/values-as/strings.xml +++ b/packages/InputDevices/res/values-as/strings.xml @@ -50,6 +50,5 @@ <string name="keyboard_layout_belarusian" msgid="7619281752698687588">"বেলাৰুছিয়ান"</string> <string name="keyboard_layout_mongolian" msgid="7678483495823936626">"Mongolian"</string> <string name="keyboard_layout_georgian" msgid="4596185456863747454">"Georgian"</string> - <!-- no translation found for keyboard_layout_thai_kedmanee (6637147314580760938) --> - <skip /> + <string name="keyboard_layout_thai_kedmanee" msgid="6637147314580760938">"থাই (কেডমানি)"</string> </resources> diff --git a/packages/InputDevices/res/values-az/strings.xml b/packages/InputDevices/res/values-az/strings.xml index 39a12b7daa79..332fd1c5b440 100644 --- a/packages/InputDevices/res/values-az/strings.xml +++ b/packages/InputDevices/res/values-az/strings.xml @@ -50,6 +50,5 @@ <string name="keyboard_layout_belarusian" msgid="7619281752698687588">"Belarus dili"</string> <string name="keyboard_layout_mongolian" msgid="7678483495823936626">"Monqol"</string> <string name="keyboard_layout_georgian" msgid="4596185456863747454">"Gürcü"</string> - <!-- no translation found for keyboard_layout_thai_kedmanee (6637147314580760938) --> - <skip /> + <string name="keyboard_layout_thai_kedmanee" msgid="6637147314580760938">"Tay (Kedmanee)"</string> </resources> diff --git a/packages/InputDevices/res/values-b+sr+Latn/strings.xml b/packages/InputDevices/res/values-b+sr+Latn/strings.xml index 64aa7f63490c..a7ede75bdd53 100644 --- a/packages/InputDevices/res/values-b+sr+Latn/strings.xml +++ b/packages/InputDevices/res/values-b+sr+Latn/strings.xml @@ -50,6 +50,5 @@ <string name="keyboard_layout_belarusian" msgid="7619281752698687588">"beloruski"</string> <string name="keyboard_layout_mongolian" msgid="7678483495823936626">"mongolska"</string> <string name="keyboard_layout_georgian" msgid="4596185456863747454">"gruzijska"</string> - <!-- no translation found for keyboard_layout_thai_kedmanee (6637147314580760938) --> - <skip /> + <string name="keyboard_layout_thai_kedmanee" msgid="6637147314580760938">"tajski (Kedmanee)"</string> </resources> diff --git a/packages/InputDevices/res/values-ca/strings.xml b/packages/InputDevices/res/values-ca/strings.xml index ed04b9434061..573e325b71b1 100644 --- a/packages/InputDevices/res/values-ca/strings.xml +++ b/packages/InputDevices/res/values-ca/strings.xml @@ -50,6 +50,5 @@ <string name="keyboard_layout_belarusian" msgid="7619281752698687588">"Bielorús"</string> <string name="keyboard_layout_mongolian" msgid="7678483495823936626">"Mongol"</string> <string name="keyboard_layout_georgian" msgid="4596185456863747454">"Georgià"</string> - <!-- no translation found for keyboard_layout_thai_kedmanee (6637147314580760938) --> - <skip /> + <string name="keyboard_layout_thai_kedmanee" msgid="6637147314580760938">"Tai (Kedmanee)"</string> </resources> diff --git a/packages/InputDevices/res/values-el/strings.xml b/packages/InputDevices/res/values-el/strings.xml index 7b9651c1f847..15107080578d 100644 --- a/packages/InputDevices/res/values-el/strings.xml +++ b/packages/InputDevices/res/values-el/strings.xml @@ -50,6 +50,5 @@ <string name="keyboard_layout_belarusian" msgid="7619281752698687588">"Λευκορωσικά"</string> <string name="keyboard_layout_mongolian" msgid="7678483495823936626">"Μογγολικά"</string> <string name="keyboard_layout_georgian" msgid="4596185456863747454">"Γεωργιανά"</string> - <!-- no translation found for keyboard_layout_thai_kedmanee (6637147314580760938) --> - <skip /> + <string name="keyboard_layout_thai_kedmanee" msgid="6637147314580760938">"Ταϊλανδικά (Kedmanee)"</string> </resources> diff --git a/packages/InputDevices/res/values-fr-rCA/strings.xml b/packages/InputDevices/res/values-fr-rCA/strings.xml index e176c7ef2ff3..c03fd6df8bdd 100644 --- a/packages/InputDevices/res/values-fr-rCA/strings.xml +++ b/packages/InputDevices/res/values-fr-rCA/strings.xml @@ -50,6 +50,5 @@ <string name="keyboard_layout_belarusian" msgid="7619281752698687588">"Biélorusse"</string> <string name="keyboard_layout_mongolian" msgid="7678483495823936626">"Mongol"</string> <string name="keyboard_layout_georgian" msgid="4596185456863747454">"Géorgien"</string> - <!-- no translation found for keyboard_layout_thai_kedmanee (6637147314580760938) --> - <skip /> + <string name="keyboard_layout_thai_kedmanee" msgid="6637147314580760938">"Thaï (Kedmanee)"</string> </resources> diff --git a/packages/InputDevices/res/values-fr/strings.xml b/packages/InputDevices/res/values-fr/strings.xml index 4388ec1b396b..8c70b0d74688 100644 --- a/packages/InputDevices/res/values-fr/strings.xml +++ b/packages/InputDevices/res/values-fr/strings.xml @@ -50,6 +50,5 @@ <string name="keyboard_layout_belarusian" msgid="7619281752698687588">"Biélorusse"</string> <string name="keyboard_layout_mongolian" msgid="7678483495823936626">"Mongol"</string> <string name="keyboard_layout_georgian" msgid="4596185456863747454">"Géorgien"</string> - <!-- no translation found for keyboard_layout_thai_kedmanee (6637147314580760938) --> - <skip /> + <string name="keyboard_layout_thai_kedmanee" msgid="6637147314580760938">"Thaï (Kedmanee)"</string> </resources> diff --git a/packages/InputDevices/res/values-ja/strings.xml b/packages/InputDevices/res/values-ja/strings.xml index b9bab69cbb98..297f351a883c 100644 --- a/packages/InputDevices/res/values-ja/strings.xml +++ b/packages/InputDevices/res/values-ja/strings.xml @@ -50,6 +50,5 @@ <string name="keyboard_layout_belarusian" msgid="7619281752698687588">"ベラルーシ語"</string> <string name="keyboard_layout_mongolian" msgid="7678483495823936626">"モンゴル語"</string> <string name="keyboard_layout_georgian" msgid="4596185456863747454">"ジョージア語"</string> - <!-- no translation found for keyboard_layout_thai_kedmanee (6637147314580760938) --> - <skip /> + <string name="keyboard_layout_thai_kedmanee" msgid="6637147314580760938">"タイ語(Kedmanee)"</string> </resources> diff --git a/packages/InputDevices/res/values-ka/strings.xml b/packages/InputDevices/res/values-ka/strings.xml index 1610d2679735..c471c44b8cbd 100644 --- a/packages/InputDevices/res/values-ka/strings.xml +++ b/packages/InputDevices/res/values-ka/strings.xml @@ -50,6 +50,5 @@ <string name="keyboard_layout_belarusian" msgid="7619281752698687588">"ბელორუსული"</string> <string name="keyboard_layout_mongolian" msgid="7678483495823936626">"მონღოლური"</string> <string name="keyboard_layout_georgian" msgid="4596185456863747454">"ქართული"</string> - <!-- no translation found for keyboard_layout_thai_kedmanee (6637147314580760938) --> - <skip /> + <string name="keyboard_layout_thai_kedmanee" msgid="6637147314580760938">"ტაილანდური (Kedmanee)"</string> </resources> diff --git a/packages/InputDevices/res/values-km/strings.xml b/packages/InputDevices/res/values-km/strings.xml index eb4324715940..d43fe3609278 100644 --- a/packages/InputDevices/res/values-km/strings.xml +++ b/packages/InputDevices/res/values-km/strings.xml @@ -50,6 +50,5 @@ <string name="keyboard_layout_belarusian" msgid="7619281752698687588">"បេឡារុស"</string> <string name="keyboard_layout_mongolian" msgid="7678483495823936626">"មុងហ្គោលី"</string> <string name="keyboard_layout_georgian" msgid="4596185456863747454">"ហ្សកហ្ស៊ី"</string> - <!-- no translation found for keyboard_layout_thai_kedmanee (6637147314580760938) --> - <skip /> + <string name="keyboard_layout_thai_kedmanee" msgid="6637147314580760938">"ថៃ (Kedmanee)"</string> </resources> diff --git a/packages/InputDevices/res/values-lo/strings.xml b/packages/InputDevices/res/values-lo/strings.xml index ab64e24ae5db..0ffa3ce8c819 100644 --- a/packages/InputDevices/res/values-lo/strings.xml +++ b/packages/InputDevices/res/values-lo/strings.xml @@ -50,6 +50,5 @@ <string name="keyboard_layout_belarusian" msgid="7619281752698687588">"ເບລາຣັສຊຽນ"</string> <string name="keyboard_layout_mongolian" msgid="7678483495823936626">"ມອງໂກລຽນ"</string> <string name="keyboard_layout_georgian" msgid="4596185456863747454">"ຈໍຈຽນ"</string> - <!-- no translation found for keyboard_layout_thai_kedmanee (6637147314580760938) --> - <skip /> + <string name="keyboard_layout_thai_kedmanee" msgid="6637147314580760938">"ໄທ (ເກດມະນີ)"</string> </resources> diff --git a/packages/InputDevices/res/values-ms/strings.xml b/packages/InputDevices/res/values-ms/strings.xml index 9a001260ac7e..6f8f171ae76e 100644 --- a/packages/InputDevices/res/values-ms/strings.xml +++ b/packages/InputDevices/res/values-ms/strings.xml @@ -50,6 +50,5 @@ <string name="keyboard_layout_belarusian" msgid="7619281752698687588">"Bahasa Belarus"</string> <string name="keyboard_layout_mongolian" msgid="7678483495823936626">"Bahasa Mongolia"</string> <string name="keyboard_layout_georgian" msgid="4596185456863747454">"Bahasa Georgia"</string> - <!-- no translation found for keyboard_layout_thai_kedmanee (6637147314580760938) --> - <skip /> + <string name="keyboard_layout_thai_kedmanee" msgid="6637147314580760938">"Thai (Kedmanee)"</string> </resources> diff --git a/packages/InputDevices/res/values-ne/strings.xml b/packages/InputDevices/res/values-ne/strings.xml index 642fc5c73bcc..7a6cbe89481a 100644 --- a/packages/InputDevices/res/values-ne/strings.xml +++ b/packages/InputDevices/res/values-ne/strings.xml @@ -50,6 +50,5 @@ <string name="keyboard_layout_belarusian" msgid="7619281752698687588">"बेलारुसियाली"</string> <string name="keyboard_layout_mongolian" msgid="7678483495823936626">"मङ्गोलियाली"</string> <string name="keyboard_layout_georgian" msgid="4596185456863747454">"जर्जियाली"</string> - <!-- no translation found for keyboard_layout_thai_kedmanee (6637147314580760938) --> - <skip /> + <string name="keyboard_layout_thai_kedmanee" msgid="6637147314580760938">"थाई (केडमानी)"</string> </resources> diff --git a/packages/InputDevices/res/values-pt-rPT/strings.xml b/packages/InputDevices/res/values-pt-rPT/strings.xml index 3d7c603abc79..2cc6a8ce2e99 100644 --- a/packages/InputDevices/res/values-pt-rPT/strings.xml +++ b/packages/InputDevices/res/values-pt-rPT/strings.xml @@ -50,6 +50,5 @@ <string name="keyboard_layout_belarusian" msgid="7619281752698687588">"Bielorrusso"</string> <string name="keyboard_layout_mongolian" msgid="7678483495823936626">"Mongol"</string> <string name="keyboard_layout_georgian" msgid="4596185456863747454">"Georgiano"</string> - <!-- no translation found for keyboard_layout_thai_kedmanee (6637147314580760938) --> - <skip /> + <string name="keyboard_layout_thai_kedmanee" msgid="6637147314580760938">"Tailandês (Kedmanee)"</string> </resources> diff --git a/packages/InputDevices/res/values-si/strings.xml b/packages/InputDevices/res/values-si/strings.xml index 44dfd6038174..e4e47917717b 100644 --- a/packages/InputDevices/res/values-si/strings.xml +++ b/packages/InputDevices/res/values-si/strings.xml @@ -50,6 +50,5 @@ <string name="keyboard_layout_belarusian" msgid="7619281752698687588">"බෙලරුසියානු"</string> <string name="keyboard_layout_mongolian" msgid="7678483495823936626">"මොන්ගෝලියානු"</string> <string name="keyboard_layout_georgian" msgid="4596185456863747454">"ජෝර්ජියානු"</string> - <!-- no translation found for keyboard_layout_thai_kedmanee (6637147314580760938) --> - <skip /> + <string name="keyboard_layout_thai_kedmanee" msgid="6637147314580760938">"තායි (කෙඩ්මනී)"</string> </resources> diff --git a/packages/InputDevices/res/values-sr/strings.xml b/packages/InputDevices/res/values-sr/strings.xml index 88978f65712b..563fe4a1166f 100644 --- a/packages/InputDevices/res/values-sr/strings.xml +++ b/packages/InputDevices/res/values-sr/strings.xml @@ -50,6 +50,5 @@ <string name="keyboard_layout_belarusian" msgid="7619281752698687588">"белоруски"</string> <string name="keyboard_layout_mongolian" msgid="7678483495823936626">"монголска"</string> <string name="keyboard_layout_georgian" msgid="4596185456863747454">"грузијска"</string> - <!-- no translation found for keyboard_layout_thai_kedmanee (6637147314580760938) --> - <skip /> + <string name="keyboard_layout_thai_kedmanee" msgid="6637147314580760938">"тајски (Kedmanee)"</string> </resources> diff --git a/packages/InputDevices/res/values-sw/strings.xml b/packages/InputDevices/res/values-sw/strings.xml index 00979e5fc691..f8cf6c66d379 100644 --- a/packages/InputDevices/res/values-sw/strings.xml +++ b/packages/InputDevices/res/values-sw/strings.xml @@ -50,6 +50,5 @@ <string name="keyboard_layout_belarusian" msgid="7619281752698687588">"Kibelarusi"</string> <string name="keyboard_layout_mongolian" msgid="7678483495823936626">"Kimongolia"</string> <string name="keyboard_layout_georgian" msgid="4596185456863747454">"Kijojia"</string> - <!-- no translation found for keyboard_layout_thai_kedmanee (6637147314580760938) --> - <skip /> + <string name="keyboard_layout_thai_kedmanee" msgid="6637147314580760938">"Kithai (Kedmanee)"</string> </resources> diff --git a/packages/InputDevices/res/values-te/strings.xml b/packages/InputDevices/res/values-te/strings.xml index 1fe885d4d467..6ea08d34c83a 100644 --- a/packages/InputDevices/res/values-te/strings.xml +++ b/packages/InputDevices/res/values-te/strings.xml @@ -50,6 +50,5 @@ <string name="keyboard_layout_belarusian" msgid="7619281752698687588">"బెలారష్యన్"</string> <string name="keyboard_layout_mongolian" msgid="7678483495823936626">"మంగోలియన్"</string> <string name="keyboard_layout_georgian" msgid="4596185456863747454">"జార్జియన్"</string> - <!-- no translation found for keyboard_layout_thai_kedmanee (6637147314580760938) --> - <skip /> + <string name="keyboard_layout_thai_kedmanee" msgid="6637147314580760938">"థాయ్ (కెడ్మనీ)"</string> </resources> diff --git a/packages/InputDevices/res/values-th/strings.xml b/packages/InputDevices/res/values-th/strings.xml index f1b433b7e358..e3c4a7afd947 100644 --- a/packages/InputDevices/res/values-th/strings.xml +++ b/packages/InputDevices/res/values-th/strings.xml @@ -50,6 +50,5 @@ <string name="keyboard_layout_belarusian" msgid="7619281752698687588">"เบลารุส"</string> <string name="keyboard_layout_mongolian" msgid="7678483495823936626">"ภาษามองโกเลีย"</string> <string name="keyboard_layout_georgian" msgid="4596185456863747454">"ภาษาจอร์เจีย"</string> - <!-- no translation found for keyboard_layout_thai_kedmanee (6637147314580760938) --> - <skip /> + <string name="keyboard_layout_thai_kedmanee" msgid="6637147314580760938">"ไทย (เกษมณี)"</string> </resources> diff --git a/packages/InputDevices/res/values-zh-rHK/strings.xml b/packages/InputDevices/res/values-zh-rHK/strings.xml index a0c3c1a52ca5..4f761a42c5db 100644 --- a/packages/InputDevices/res/values-zh-rHK/strings.xml +++ b/packages/InputDevices/res/values-zh-rHK/strings.xml @@ -50,6 +50,5 @@ <string name="keyboard_layout_belarusian" msgid="7619281752698687588">"白俄羅斯文"</string> <string name="keyboard_layout_mongolian" msgid="7678483495823936626">"蒙古文"</string> <string name="keyboard_layout_georgian" msgid="4596185456863747454">"格魯吉亞文"</string> - <!-- no translation found for keyboard_layout_thai_kedmanee (6637147314580760938) --> - <skip /> + <string name="keyboard_layout_thai_kedmanee" msgid="6637147314580760938">"泰文 (Kedmanee)"</string> </resources> diff --git a/packages/InputDevices/res/values-zh-rTW/strings.xml b/packages/InputDevices/res/values-zh-rTW/strings.xml index 1b8484171953..be56620b4d8a 100644 --- a/packages/InputDevices/res/values-zh-rTW/strings.xml +++ b/packages/InputDevices/res/values-zh-rTW/strings.xml @@ -50,6 +50,5 @@ <string name="keyboard_layout_belarusian" msgid="7619281752698687588">"白俄羅斯文"</string> <string name="keyboard_layout_mongolian" msgid="7678483495823936626">"蒙古文"</string> <string name="keyboard_layout_georgian" msgid="4596185456863747454">"喬治亞文"</string> - <!-- no translation found for keyboard_layout_thai_kedmanee (6637147314580760938) --> - <skip /> + <string name="keyboard_layout_thai_kedmanee" msgid="6637147314580760938">"泰文 (Kedmanee)"</string> </resources> diff --git a/packages/SettingsLib/res/values-af/strings.xml b/packages/SettingsLib/res/values-af/strings.xml index e4be79b753a9..dde604124f50 100644 --- a/packages/SettingsLib/res/values-af/strings.xml +++ b/packages/SettingsLib/res/values-af/strings.xml @@ -487,14 +487,10 @@ <string name="power_charging_duration" msgid="6127154952524919719">"<xliff:g id="LEVEL">%1$s</xliff:g> – <xliff:g id="TIME">%2$s</xliff:g> oor tot vol"</string> <string name="power_charging_limited" msgid="8202147604844938236">"<xliff:g id="LEVEL">%1$s</xliff:g> – Laaiproses word geoptimeer"</string> <string name="power_charging_future_paused" msgid="1809543660923642799">"<xliff:g id="LEVEL">%1$s</xliff:g> – Laai tans"</string> - <!-- no translation found for power_fast_charging_duration_v2 (3797735998640359490) --> - <skip /> - <!-- no translation found for power_charging_duration_v2 (2938998284074003248) --> - <skip /> - <!-- no translation found for power_remaining_charging_duration_only_v2 (5358176435722950193) --> - <skip /> - <!-- no translation found for power_remaining_fast_charging_duration_only_v2 (6270950195810579563) --> - <skip /> + <string name="power_fast_charging_duration_v2" msgid="3797735998640359490">"<xliff:g id="LEVEL">%1$s</xliff:g> – <xliff:g id="STATUS">%2$s</xliff:g> – Volgelaai teen <xliff:g id="TIME">%3$s</xliff:g>"</string> + <string name="power_charging_duration_v2" msgid="2938998284074003248">"<xliff:g id="LEVEL">%1$s</xliff:g> – Volgelaai teen <xliff:g id="TIME">%2$s</xliff:g>"</string> + <string name="power_remaining_charging_duration_only_v2" msgid="5358176435722950193">"Volgelaai teen <xliff:g id="TIME">%1$s</xliff:g>"</string> + <string name="power_remaining_fast_charging_duration_only_v2" msgid="6270950195810579563">"Volgelaai teen <xliff:g id="TIME">%1$s</xliff:g>"</string> <string name="battery_info_status_unknown" msgid="268625384868401114">"Onbekend"</string> <string name="battery_info_status_charging" msgid="4279958015430387405">"Laai"</string> <string name="battery_info_status_charging_fast" msgid="8027559755902954885">"Laai tans vinnig"</string> @@ -506,10 +502,8 @@ <string name="battery_info_status_full" msgid="1339002294876531312">"Gelaai"</string> <string name="battery_info_status_full_charged" msgid="3536054261505567948">"Volgelaai"</string> <string name="battery_info_status_charging_on_hold" msgid="6364355145521694438">"Laai wag tans"</string> - <!-- no translation found for battery_info_status_charging_v2 (6118522107222245505) --> - <skip /> - <!-- no translation found for battery_info_status_charging_fast_v2 (1825439848151256589) --> - <skip /> + <string name="battery_info_status_charging_v2" msgid="6118522107222245505">"Laai tans"</string> + <string name="battery_info_status_charging_fast_v2" msgid="1825439848151256589">"Laai vinnig"</string> <string name="disabled_by_admin_summary_text" msgid="5343911767402923057">"Beheer deur administrateur"</string> <string name="disabled_by_app_ops_text" msgid="8373595926549098012">"Beheer deur Beperkte Instellings"</string> <string name="disabled" msgid="8017887509554714950">"Gedeaktiveer"</string> @@ -696,8 +690,7 @@ <string name="accessibility_phone_one_bar" msgid="5719721147018970063">"Foon, een staaf."</string> <string name="accessibility_phone_two_bars" msgid="2531458337458953263">"Foon, twee stawe."</string> <string name="accessibility_phone_three_bars" msgid="1523967995996696619">"Foon, drie stawe."</string> - <!-- no translation found for accessibility_phone_four_bars (4477202400261338403) --> - <skip /> + <string name="accessibility_phone_four_bars" msgid="4477202400261338403">"Foon vier strepies."</string> <string name="accessibility_phone_signal_full" msgid="4302338883816077134">"Foonsein is vol."</string> <string name="accessibility_no_data" msgid="4563181886936931008">"Geen data nie."</string> <string name="accessibility_data_one_bar" msgid="6892888138070752480">"Data, een staaf."</string> diff --git a/packages/SettingsLib/res/values-as/strings.xml b/packages/SettingsLib/res/values-as/strings.xml index b5ea37f4bab5..0ec52d92a018 100644 --- a/packages/SettingsLib/res/values-as/strings.xml +++ b/packages/SettingsLib/res/values-as/strings.xml @@ -487,14 +487,10 @@ <string name="power_charging_duration" msgid="6127154952524919719">"সম্পূৰ্ণ হ’বলৈ <xliff:g id="LEVEL">%1$s</xliff:g> - <xliff:g id="TIME">%2$s</xliff:g> বাকী আছে"</string> <string name="power_charging_limited" msgid="8202147604844938236">"<xliff:g id="LEVEL">%1$s</xliff:g> - চাৰ্জিং অপ্টিমাইজ কৰা হৈছে"</string> <string name="power_charging_future_paused" msgid="1809543660923642799">"<xliff:g id="LEVEL">%1$s</xliff:g> ‑ চাৰ্জ হৈ আছে"</string> - <!-- no translation found for power_fast_charging_duration_v2 (3797735998640359490) --> - <skip /> - <!-- no translation found for power_charging_duration_v2 (2938998284074003248) --> - <skip /> - <!-- no translation found for power_remaining_charging_duration_only_v2 (5358176435722950193) --> - <skip /> - <!-- no translation found for power_remaining_fast_charging_duration_only_v2 (6270950195810579563) --> - <skip /> + <string name="power_fast_charging_duration_v2" msgid="3797735998640359490">"<xliff:g id="LEVEL">%1$s</xliff:g> - <xliff:g id="STATUS">%2$s</xliff:g> - <xliff:g id="TIME">%3$s</xliff:g>ৰ ভিতৰত সম্পূৰ্ণ হ’ব"</string> + <string name="power_charging_duration_v2" msgid="2938998284074003248">"<xliff:g id="LEVEL">%1$s</xliff:g> - <xliff:g id="TIME">%2$s</xliff:g>ৰ ভিতৰত সম্পূৰ্ণৰূপে চাৰ্জ হ’ব"</string> + <string name="power_remaining_charging_duration_only_v2" msgid="5358176435722950193">"<xliff:g id="TIME">%1$s</xliff:g>ৰ ভিতৰত সম্পূৰ্ণৰূপে চাৰ্জ হ’ব"</string> + <string name="power_remaining_fast_charging_duration_only_v2" msgid="6270950195810579563">"<xliff:g id="TIME">%1$s</xliff:g>ৰ ভিতৰত সম্পূৰ্ণ হ’ব"</string> <string name="battery_info_status_unknown" msgid="268625384868401114">"অজ্ঞাত"</string> <string name="battery_info_status_charging" msgid="4279958015430387405">"চাৰ্জ কৰি থকা হৈছে"</string> <string name="battery_info_status_charging_fast" msgid="8027559755902954885">"দ্ৰুততাৰে চাৰ্জ হৈছে"</string> @@ -506,10 +502,8 @@ <string name="battery_info_status_full" msgid="1339002294876531312">"চাৰ্জ হ’ল"</string> <string name="battery_info_status_full_charged" msgid="3536054261505567948">"সম্পূৰ্ণ চাৰ্জ হৈছে"</string> <string name="battery_info_status_charging_on_hold" msgid="6364355145521694438">"চাৰ্জিং স্থগিত ৰখা হৈছে"</string> - <!-- no translation found for battery_info_status_charging_v2 (6118522107222245505) --> - <skip /> - <!-- no translation found for battery_info_status_charging_fast_v2 (1825439848151256589) --> - <skip /> + <string name="battery_info_status_charging_v2" msgid="6118522107222245505">"চাৰ্জ হৈ আছে"</string> + <string name="battery_info_status_charging_fast_v2" msgid="1825439848151256589">"দ্ৰুত চাৰ্জিং"</string> <string name="disabled_by_admin_summary_text" msgid="5343911767402923057">"এডমিনৰ দ্বাৰা নিয়ন্ত্ৰিত"</string> <string name="disabled_by_app_ops_text" msgid="8373595926549098012">"প্ৰতিবন্ধিত ছেটিঙৰ দ্বাৰা নিয়ন্ত্ৰিত"</string> <string name="disabled" msgid="8017887509554714950">"নিষ্ক্ৰিয়"</string> @@ -696,8 +690,7 @@ <string name="accessibility_phone_one_bar" msgid="5719721147018970063">"ফ\'ন ছিগনেলৰ এডাল দণ্ড।"</string> <string name="accessibility_phone_two_bars" msgid="2531458337458953263">"ফ\'ন ছিগনেলৰ দুডাল দণ্ড।"</string> <string name="accessibility_phone_three_bars" msgid="1523967995996696619">"ফ\'নৰ ছিগনেলৰ তিনিডাল দণ্ড আছে।"</string> - <!-- no translation found for accessibility_phone_four_bars (4477202400261338403) --> - <skip /> + <string name="accessibility_phone_four_bars" msgid="4477202400261338403">"ফ’নত চাৰিডাল দণ্ড।"</string> <string name="accessibility_phone_signal_full" msgid="4302338883816077134">"ফ\'নৰ ছিগনেল পূৰা আছে৷"</string> <string name="accessibility_no_data" msgid="4563181886936931008">"কোনো ডেটা নাই।"</string> <string name="accessibility_data_one_bar" msgid="6892888138070752480">"ডেটা ছিগনেলৰ এডাল দণ্ড।"</string> diff --git a/packages/SettingsLib/res/values-az/strings.xml b/packages/SettingsLib/res/values-az/strings.xml index 9324252ee65d..e97f999d7a72 100644 --- a/packages/SettingsLib/res/values-az/strings.xml +++ b/packages/SettingsLib/res/values-az/strings.xml @@ -487,14 +487,10 @@ <string name="power_charging_duration" msgid="6127154952524919719">"<xliff:g id="LEVEL">%1$s</xliff:g> - tam şarj edilənədək <xliff:g id="TIME">%2$s</xliff:g> qalıb"</string> <string name="power_charging_limited" msgid="8202147604844938236">"<xliff:g id="LEVEL">%1$s</xliff:g> - Şarj optimallaşdırılıb"</string> <string name="power_charging_future_paused" msgid="1809543660923642799">"<xliff:g id="LEVEL">%1$s</xliff:g> - Şarj edilir"</string> - <!-- no translation found for power_fast_charging_duration_v2 (3797735998640359490) --> - <skip /> - <!-- no translation found for power_charging_duration_v2 (2938998284074003248) --> - <skip /> - <!-- no translation found for power_remaining_charging_duration_only_v2 (5358176435722950193) --> - <skip /> - <!-- no translation found for power_remaining_fast_charging_duration_only_v2 (6270950195810579563) --> - <skip /> + <string name="power_fast_charging_duration_v2" msgid="3797735998640359490">"<xliff:g id="LEVEL">%1$s</xliff:g> - <xliff:g id="STATUS">%2$s</xliff:g> - <xliff:g id="TIME">%3$s</xliff:g> radələrinə qədər tam dolacaq"</string> + <string name="power_charging_duration_v2" msgid="2938998284074003248">"<xliff:g id="LEVEL">%1$s</xliff:g> - <xliff:g id="TIME">%2$s</xliff:g> radələrinə qədər tam dolacaq"</string> + <string name="power_remaining_charging_duration_only_v2" msgid="5358176435722950193">"<xliff:g id="TIME">%1$s</xliff:g> radələrinə qədər tam dolacaq"</string> + <string name="power_remaining_fast_charging_duration_only_v2" msgid="6270950195810579563">"<xliff:g id="TIME">%1$s</xliff:g> radələrinə qədər tam dolacaq"</string> <string name="battery_info_status_unknown" msgid="268625384868401114">"Naməlum"</string> <string name="battery_info_status_charging" msgid="4279958015430387405">"Enerji doldurma"</string> <string name="battery_info_status_charging_fast" msgid="8027559755902954885">"Sürətlə doldurulur"</string> @@ -506,10 +502,8 @@ <string name="battery_info_status_full" msgid="1339002294876531312">"Şarj edilib"</string> <string name="battery_info_status_full_charged" msgid="3536054261505567948">"Tam şarj edilib"</string> <string name="battery_info_status_charging_on_hold" msgid="6364355145521694438">"Şarj gözlədilir"</string> - <!-- no translation found for battery_info_status_charging_v2 (6118522107222245505) --> - <skip /> - <!-- no translation found for battery_info_status_charging_fast_v2 (1825439848151256589) --> - <skip /> + <string name="battery_info_status_charging_v2" msgid="6118522107222245505">"Şarj"</string> + <string name="battery_info_status_charging_fast_v2" msgid="1825439848151256589">"Sürətli şarj"</string> <string name="disabled_by_admin_summary_text" msgid="5343911767402923057">"Admin tərəfindən nəzarət olunur"</string> <string name="disabled_by_app_ops_text" msgid="8373595926549098012">"Məhdudlaşdırılmış Ayar ilə nəzarət edilir"</string> <string name="disabled" msgid="8017887509554714950">"Deaktiv"</string> @@ -696,8 +690,7 @@ <string name="accessibility_phone_one_bar" msgid="5719721147018970063">"Şəbəkə bir xətdir."</string> <string name="accessibility_phone_two_bars" msgid="2531458337458953263">"Şəbəkə iki xətdir."</string> <string name="accessibility_phone_three_bars" msgid="1523967995996696619">"Şəbəkə üç xətdir."</string> - <!-- no translation found for accessibility_phone_four_bars (4477202400261338403) --> - <skip /> + <string name="accessibility_phone_four_bars" msgid="4477202400261338403">"Telefonda dörd zolaq."</string> <string name="accessibility_phone_signal_full" msgid="4302338883816077134">"Tam şəbəkə."</string> <string name="accessibility_no_data" msgid="4563181886936931008">"Məlumat yoxdur."</string> <string name="accessibility_data_one_bar" msgid="6892888138070752480">"Data bir xətdir."</string> diff --git a/packages/SettingsLib/res/values-b+sr+Latn/strings.xml b/packages/SettingsLib/res/values-b+sr+Latn/strings.xml index 02e5f6954de3..22aa1479bb77 100644 --- a/packages/SettingsLib/res/values-b+sr+Latn/strings.xml +++ b/packages/SettingsLib/res/values-b+sr+Latn/strings.xml @@ -487,14 +487,10 @@ <string name="power_charging_duration" msgid="6127154952524919719">"<xliff:g id="LEVEL">%1$s</xliff:g> – <xliff:g id="TIME">%2$s</xliff:g> do kraja punjenja"</string> <string name="power_charging_limited" msgid="8202147604844938236">"<xliff:g id="LEVEL">%1$s</xliff:g> – punjenje je optimizovano"</string> <string name="power_charging_future_paused" msgid="1809543660923642799">"<xliff:g id="LEVEL">%1$s</xliff:g> – Punjenje"</string> - <!-- no translation found for power_fast_charging_duration_v2 (3797735998640359490) --> - <skip /> - <!-- no translation found for power_charging_duration_v2 (2938998284074003248) --> - <skip /> - <!-- no translation found for power_remaining_charging_duration_only_v2 (5358176435722950193) --> - <skip /> - <!-- no translation found for power_remaining_fast_charging_duration_only_v2 (6270950195810579563) --> - <skip /> + <string name="power_fast_charging_duration_v2" msgid="3797735998640359490">"<xliff:g id="LEVEL">%1$s</xliff:g> – <xliff:g id="STATUS">%2$s</xliff:g> – Potpuno napunjeno do <xliff:g id="TIME">%3$s</xliff:g>"</string> + <string name="power_charging_duration_v2" msgid="2938998284074003248">"<xliff:g id="LEVEL">%1$s</xliff:g> – Potpuno napunjeno do <xliff:g id="TIME">%2$s</xliff:g>"</string> + <string name="power_remaining_charging_duration_only_v2" msgid="5358176435722950193">"Potpuno napunjeno do <xliff:g id="TIME">%1$s</xliff:g>"</string> + <string name="power_remaining_fast_charging_duration_only_v2" msgid="6270950195810579563">"Napunjeno do <xliff:g id="TIME">%1$s</xliff:g>"</string> <string name="battery_info_status_unknown" msgid="268625384868401114">"Nepoznato"</string> <string name="battery_info_status_charging" msgid="4279958015430387405">"Puni se"</string> <string name="battery_info_status_charging_fast" msgid="8027559755902954885">"Brzo se puni"</string> @@ -506,10 +502,8 @@ <string name="battery_info_status_full" msgid="1339002294876531312">"Napunjeno"</string> <string name="battery_info_status_full_charged" msgid="3536054261505567948">"Napunjeno do kraja"</string> <string name="battery_info_status_charging_on_hold" msgid="6364355145521694438">"Punjenje je na čekanju"</string> - <!-- no translation found for battery_info_status_charging_v2 (6118522107222245505) --> - <skip /> - <!-- no translation found for battery_info_status_charging_fast_v2 (1825439848151256589) --> - <skip /> + <string name="battery_info_status_charging_v2" msgid="6118522107222245505">"Punjenje"</string> + <string name="battery_info_status_charging_fast_v2" msgid="1825439848151256589">"Brzo punjenje"</string> <string name="disabled_by_admin_summary_text" msgid="5343911767402923057">"Kontroliše administrator"</string> <string name="disabled_by_app_ops_text" msgid="8373595926549098012">"Kontrolišu ograničena podešavanja"</string> <string name="disabled" msgid="8017887509554714950">"Onemogućeno"</string> @@ -696,8 +690,7 @@ <string name="accessibility_phone_one_bar" msgid="5719721147018970063">"Signal telefona ima jednu crtu."</string> <string name="accessibility_phone_two_bars" msgid="2531458337458953263">"Signal telefona od dve crte."</string> <string name="accessibility_phone_three_bars" msgid="1523967995996696619">"Signal telefona od tri crte."</string> - <!-- no translation found for accessibility_phone_four_bars (4477202400261338403) --> - <skip /> + <string name="accessibility_phone_four_bars" msgid="4477202400261338403">"Telefon ima četiri crte."</string> <string name="accessibility_phone_signal_full" msgid="4302338883816077134">"Signal telefona je pun."</string> <string name="accessibility_no_data" msgid="4563181886936931008">"Nema podataka."</string> <string name="accessibility_data_one_bar" msgid="6892888138070752480">"Signal za podatke ima jednu crtu."</string> diff --git a/packages/SettingsLib/res/values-ca/strings.xml b/packages/SettingsLib/res/values-ca/strings.xml index 8a6c26cc36d9..9ea570f00b6f 100644 --- a/packages/SettingsLib/res/values-ca/strings.xml +++ b/packages/SettingsLib/res/values-ca/strings.xml @@ -487,14 +487,10 @@ <string name="power_charging_duration" msgid="6127154952524919719">"<xliff:g id="LEVEL">%1$s</xliff:g>: <xliff:g id="TIME">%2$s</xliff:g> per completar la càrrega"</string> <string name="power_charging_limited" msgid="8202147604844938236">"<xliff:g id="LEVEL">%1$s</xliff:g>: càrrega optimitzada"</string> <string name="power_charging_future_paused" msgid="1809543660923642799">"<xliff:g id="LEVEL">%1$s</xliff:g>: s\'està carregant"</string> - <!-- no translation found for power_fast_charging_duration_v2 (3797735998640359490) --> - <skip /> - <!-- no translation found for power_charging_duration_v2 (2938998284074003248) --> - <skip /> - <!-- no translation found for power_remaining_charging_duration_only_v2 (5358176435722950193) --> - <skip /> - <!-- no translation found for power_remaining_fast_charging_duration_only_v2 (6270950195810579563) --> - <skip /> + <string name="power_fast_charging_duration_v2" msgid="3797735998640359490">"<xliff:g id="LEVEL">%1$s</xliff:g> - <xliff:g id="STATUS">%2$s</xliff:g> - Càrrega completa a les <xliff:g id="TIME">%3$s</xliff:g>"</string> + <string name="power_charging_duration_v2" msgid="2938998284074003248">"<xliff:g id="LEVEL">%1$s</xliff:g> - Càrrega completa a les <xliff:g id="TIME">%2$s</xliff:g>"</string> + <string name="power_remaining_charging_duration_only_v2" msgid="5358176435722950193">"Càrrega completa a les <xliff:g id="TIME">%1$s</xliff:g>"</string> + <string name="power_remaining_fast_charging_duration_only_v2" msgid="6270950195810579563">"Càrrega completa a les <xliff:g id="TIME">%1$s</xliff:g>"</string> <string name="battery_info_status_unknown" msgid="268625384868401114">"Desconegut"</string> <string name="battery_info_status_charging" msgid="4279958015430387405">"S\'està carregant"</string> <string name="battery_info_status_charging_fast" msgid="8027559755902954885">"Càrrega ràpida"</string> @@ -506,10 +502,8 @@ <string name="battery_info_status_full" msgid="1339002294876531312">"Carregada"</string> <string name="battery_info_status_full_charged" msgid="3536054261505567948">"Totalment carregada"</string> <string name="battery_info_status_charging_on_hold" msgid="6364355145521694438">"Càrrega en espera"</string> - <!-- no translation found for battery_info_status_charging_v2 (6118522107222245505) --> - <skip /> - <!-- no translation found for battery_info_status_charging_fast_v2 (1825439848151256589) --> - <skip /> + <string name="battery_info_status_charging_v2" msgid="6118522107222245505">"Càrrega"</string> + <string name="battery_info_status_charging_fast_v2" msgid="1825439848151256589">"Càrrega ràpida"</string> <string name="disabled_by_admin_summary_text" msgid="5343911767402923057">"Controlat per l\'administrador"</string> <string name="disabled_by_app_ops_text" msgid="8373595926549098012">"Controlat per l\'opció de configuració restringida"</string> <string name="disabled" msgid="8017887509554714950">"Desactivat"</string> @@ -696,8 +690,7 @@ <string name="accessibility_phone_one_bar" msgid="5719721147018970063">"Senyal de telèfon: una barra"</string> <string name="accessibility_phone_two_bars" msgid="2531458337458953263">"Senyal de telèfon: dues barres."</string> <string name="accessibility_phone_three_bars" msgid="1523967995996696619">"Senyal de telèfon: tres barres."</string> - <!-- no translation found for accessibility_phone_four_bars (4477202400261338403) --> - <skip /> + <string name="accessibility_phone_four_bars" msgid="4477202400261338403">"Telèfon amb quatre barres."</string> <string name="accessibility_phone_signal_full" msgid="4302338883816077134">"Senyal de telèfon: complet."</string> <string name="accessibility_no_data" msgid="4563181886936931008">"Senyal de dades: no n\'hi ha"</string> <string name="accessibility_data_one_bar" msgid="6892888138070752480">"Senyal de dades: una barra."</string> diff --git a/packages/SettingsLib/res/values-el/strings.xml b/packages/SettingsLib/res/values-el/strings.xml index e74e5c33ff84..ade0b337adbe 100644 --- a/packages/SettingsLib/res/values-el/strings.xml +++ b/packages/SettingsLib/res/values-el/strings.xml @@ -487,14 +487,10 @@ <string name="power_charging_duration" msgid="6127154952524919719">"<xliff:g id="LEVEL">%1$s</xliff:g> - Απομένουν <xliff:g id="TIME">%2$s</xliff:g> για πλήρη φόρτιση"</string> <string name="power_charging_limited" msgid="8202147604844938236">"<xliff:g id="LEVEL">%1$s</xliff:g> - Η φόρτιση βελτιστοποιήθηκε"</string> <string name="power_charging_future_paused" msgid="1809543660923642799">"<xliff:g id="LEVEL">%1$s</xliff:g> ‑ Φόρτιση"</string> - <!-- no translation found for power_fast_charging_duration_v2 (3797735998640359490) --> - <skip /> - <!-- no translation found for power_charging_duration_v2 (2938998284074003248) --> - <skip /> - <!-- no translation found for power_remaining_charging_duration_only_v2 (5358176435722950193) --> - <skip /> - <!-- no translation found for power_remaining_fast_charging_duration_only_v2 (6270950195810579563) --> - <skip /> + <string name="power_fast_charging_duration_v2" msgid="3797735998640359490">"<xliff:g id="LEVEL">%1$s</xliff:g> - <xliff:g id="STATUS">%2$s</xliff:g> - Πλήρης φόρτιση στις <xliff:g id="TIME">%3$s</xliff:g>"</string> + <string name="power_charging_duration_v2" msgid="2938998284074003248">"<xliff:g id="LEVEL">%1$s</xliff:g> - Πλήρης φόρτιση στις <xliff:g id="TIME">%2$s</xliff:g>"</string> + <string name="power_remaining_charging_duration_only_v2" msgid="5358176435722950193">"Πλήρης φόρτιση στις <xliff:g id="TIME">%1$s</xliff:g>"</string> + <string name="power_remaining_fast_charging_duration_only_v2" msgid="6270950195810579563">"Πλήρης φόρτιση στις <xliff:g id="TIME">%1$s</xliff:g>"</string> <string name="battery_info_status_unknown" msgid="268625384868401114">"Άγνωστο"</string> <string name="battery_info_status_charging" msgid="4279958015430387405">"Φόρτιση"</string> <string name="battery_info_status_charging_fast" msgid="8027559755902954885">"Ταχεία φόρτιση"</string> @@ -506,10 +502,8 @@ <string name="battery_info_status_full" msgid="1339002294876531312">"Φορτισμένη"</string> <string name="battery_info_status_full_charged" msgid="3536054261505567948">"Πλήρως φορτισμένο"</string> <string name="battery_info_status_charging_on_hold" msgid="6364355145521694438">"Η φόρτιση τέθηκε σε αναμονή"</string> - <!-- no translation found for battery_info_status_charging_v2 (6118522107222245505) --> - <skip /> - <!-- no translation found for battery_info_status_charging_fast_v2 (1825439848151256589) --> - <skip /> + <string name="battery_info_status_charging_v2" msgid="6118522107222245505">"Φόρτιση"</string> + <string name="battery_info_status_charging_fast_v2" msgid="1825439848151256589">"Γρήγορη φόρτιση"</string> <string name="disabled_by_admin_summary_text" msgid="5343911767402923057">"Ελέγχονται από το διαχειριστή"</string> <string name="disabled_by_app_ops_text" msgid="8373595926549098012">"Ελέγχεται από τη Ρύθμιση με περιορισμό"</string> <string name="disabled" msgid="8017887509554714950">"Απενεργοποιημένο"</string> @@ -696,8 +690,7 @@ <string name="accessibility_phone_one_bar" msgid="5719721147018970063">"Μία γραμμή τηλεφώνου."</string> <string name="accessibility_phone_two_bars" msgid="2531458337458953263">"Δύο γραμμές τηλεφώνου."</string> <string name="accessibility_phone_three_bars" msgid="1523967995996696619">"Τρεις γραμμές μπαταρίας."</string> - <!-- no translation found for accessibility_phone_four_bars (4477202400261338403) --> - <skip /> + <string name="accessibility_phone_four_bars" msgid="4477202400261338403">"Τέσσερις γραμμές στο τηλέφωνο."</string> <string name="accessibility_phone_signal_full" msgid="4302338883816077134">"Πλήρες σήμα τηλεφώνου."</string> <string name="accessibility_no_data" msgid="4563181886936931008">"Δεν υπάρχουν δεδομένα."</string> <string name="accessibility_data_one_bar" msgid="6892888138070752480">"Μία γραμμή δεδομένων."</string> diff --git a/packages/SettingsLib/res/values-fr-rCA/strings.xml b/packages/SettingsLib/res/values-fr-rCA/strings.xml index bfd7d9c9c951..e059091eb7bd 100644 --- a/packages/SettingsLib/res/values-fr-rCA/strings.xml +++ b/packages/SettingsLib/res/values-fr-rCA/strings.xml @@ -487,14 +487,10 @@ <string name="power_charging_duration" msgid="6127154952524919719">"<xliff:g id="LEVEL">%1$s</xliff:g> (<xliff:g id="TIME">%2$s</xliff:g> jusqu\'à la recharge complète)"</string> <string name="power_charging_limited" msgid="8202147604844938236">"<xliff:g id="LEVEL">%1$s</xliff:g> - Recharge optimisée"</string> <string name="power_charging_future_paused" msgid="1809543660923642799">"<xliff:g id="LEVEL">%1$s</xliff:g> – Recharge en cours…"</string> - <!-- no translation found for power_fast_charging_duration_v2 (3797735998640359490) --> - <skip /> - <!-- no translation found for power_charging_duration_v2 (2938998284074003248) --> - <skip /> - <!-- no translation found for power_remaining_charging_duration_only_v2 (5358176435722950193) --> - <skip /> - <!-- no translation found for power_remaining_fast_charging_duration_only_v2 (6270950195810579563) --> - <skip /> + <string name="power_fast_charging_duration_v2" msgid="3797735998640359490">"<xliff:g id="LEVEL">%1$s</xliff:g> – <xliff:g id="STATUS">%2$s</xliff:g> – Recharge complète d\'ici <xliff:g id="TIME">%3$s</xliff:g>"</string> + <string name="power_charging_duration_v2" msgid="2938998284074003248">"<xliff:g id="LEVEL">%1$s</xliff:g> – Recharge complète d\'ici <xliff:g id="TIME">%2$s</xliff:g>"</string> + <string name="power_remaining_charging_duration_only_v2" msgid="5358176435722950193">"Recharge complète d\'ici <xliff:g id="TIME">%1$s</xliff:g>"</string> + <string name="power_remaining_fast_charging_duration_only_v2" msgid="6270950195810579563">"Recharge complète d\'ici <xliff:g id="TIME">%1$s</xliff:g>"</string> <string name="battery_info_status_unknown" msgid="268625384868401114">"Inconnu"</string> <string name="battery_info_status_charging" msgid="4279958015430387405">"Charge en cours…"</string> <string name="battery_info_status_charging_fast" msgid="8027559755902954885">"Recharge rapide"</string> @@ -506,10 +502,8 @@ <string name="battery_info_status_full" msgid="1339002294876531312">"Chargée"</string> <string name="battery_info_status_full_charged" msgid="3536054261505567948">"Complètement rechargée"</string> <string name="battery_info_status_charging_on_hold" msgid="6364355145521694438">"Recharge en pause"</string> - <!-- no translation found for battery_info_status_charging_v2 (6118522107222245505) --> - <skip /> - <!-- no translation found for battery_info_status_charging_fast_v2 (1825439848151256589) --> - <skip /> + <string name="battery_info_status_charging_v2" msgid="6118522107222245505">"Recharge"</string> + <string name="battery_info_status_charging_fast_v2" msgid="1825439848151256589">"Recharge rapide"</string> <string name="disabled_by_admin_summary_text" msgid="5343911767402923057">"Contrôlé par l\'administrateur"</string> <string name="disabled_by_app_ops_text" msgid="8373595926549098012">"Contrôlé par les paramètres restreints"</string> <string name="disabled" msgid="8017887509554714950">"Désactivée"</string> @@ -696,8 +690,7 @@ <string name="accessibility_phone_one_bar" msgid="5719721147018970063">"Signal : faible"</string> <string name="accessibility_phone_two_bars" msgid="2531458337458953263">"Signal : moyen"</string> <string name="accessibility_phone_three_bars" msgid="1523967995996696619">"Signal : bon"</string> - <!-- no translation found for accessibility_phone_four_bars (4477202400261338403) --> - <skip /> + <string name="accessibility_phone_four_bars" msgid="4477202400261338403">"Téléphone : quatre barres"</string> <string name="accessibility_phone_signal_full" msgid="4302338883816077134">"Signal excellent"</string> <string name="accessibility_no_data" msgid="4563181886936931008">"Aucun signal"</string> <string name="accessibility_data_one_bar" msgid="6892888138070752480">"Signal faible"</string> diff --git a/packages/SettingsLib/res/values-fr/strings.xml b/packages/SettingsLib/res/values-fr/strings.xml index 846cc999a814..11de54b86aa5 100644 --- a/packages/SettingsLib/res/values-fr/strings.xml +++ b/packages/SettingsLib/res/values-fr/strings.xml @@ -487,14 +487,10 @@ <string name="power_charging_duration" msgid="6127154952524919719">"<xliff:g id="LEVEL">%1$s</xliff:g> - chargée à 100 %% dans <xliff:g id="TIME">%2$s</xliff:g>"</string> <string name="power_charging_limited" msgid="8202147604844938236">"<xliff:g id="LEVEL">%1$s</xliff:g> - Recharge optimisée"</string> <string name="power_charging_future_paused" msgid="1809543660923642799">"<xliff:g id="LEVEL">%1$s</xliff:g> - En charge"</string> - <!-- no translation found for power_fast_charging_duration_v2 (3797735998640359490) --> - <skip /> - <!-- no translation found for power_charging_duration_v2 (2938998284074003248) --> - <skip /> - <!-- no translation found for power_remaining_charging_duration_only_v2 (5358176435722950193) --> - <skip /> - <!-- no translation found for power_remaining_fast_charging_duration_only_v2 (6270950195810579563) --> - <skip /> + <string name="power_fast_charging_duration_v2" msgid="3797735998640359490">"<xliff:g id="LEVEL">%1$s</xliff:g> - <xliff:g id="STATUS">%2$s</xliff:g> - Complètement chargé dans <xliff:g id="TIME">%3$s</xliff:g>"</string> + <string name="power_charging_duration_v2" msgid="2938998284074003248">"<xliff:g id="LEVEL">%1$s</xliff:g> - Complètement chargé dans <xliff:g id="TIME">%2$s</xliff:g>"</string> + <string name="power_remaining_charging_duration_only_v2" msgid="5358176435722950193">"Complètement chargé dans <xliff:g id="TIME">%1$s</xliff:g>"</string> + <string name="power_remaining_fast_charging_duration_only_v2" msgid="6270950195810579563">"Complètement chargé dans <xliff:g id="TIME">%1$s</xliff:g>"</string> <string name="battery_info_status_unknown" msgid="268625384868401114">"Inconnu"</string> <string name="battery_info_status_charging" msgid="4279958015430387405">"Batterie en charge"</string> <string name="battery_info_status_charging_fast" msgid="8027559755902954885">"Charge rapide"</string> @@ -506,10 +502,8 @@ <string name="battery_info_status_full" msgid="1339002294876531312">"Chargée"</string> <string name="battery_info_status_full_charged" msgid="3536054261505567948">"Complètement chargée"</string> <string name="battery_info_status_charging_on_hold" msgid="6364355145521694438">"Recharge en pause"</string> - <!-- no translation found for battery_info_status_charging_v2 (6118522107222245505) --> - <skip /> - <!-- no translation found for battery_info_status_charging_fast_v2 (1825439848151256589) --> - <skip /> + <string name="battery_info_status_charging_v2" msgid="6118522107222245505">"Recharge"</string> + <string name="battery_info_status_charging_fast_v2" msgid="1825439848151256589">"Recharge rapide"</string> <string name="disabled_by_admin_summary_text" msgid="5343911767402923057">"Contrôlé par l\'administrateur"</string> <string name="disabled_by_app_ops_text" msgid="8373595926549098012">"Contrôlé par les paramètres restreints"</string> <string name="disabled" msgid="8017887509554714950">"Désactivée"</string> @@ -696,8 +690,7 @@ <string name="accessibility_phone_one_bar" msgid="5719721147018970063">"Signal : faible"</string> <string name="accessibility_phone_two_bars" msgid="2531458337458953263">"Signal : moyen"</string> <string name="accessibility_phone_three_bars" msgid="1523967995996696619">"Signal : bon"</string> - <!-- no translation found for accessibility_phone_four_bars (4477202400261338403) --> - <skip /> + <string name="accessibility_phone_four_bars" msgid="4477202400261338403">"Quatre barres sur le téléphone."</string> <string name="accessibility_phone_signal_full" msgid="4302338883816077134">"Signal excellent"</string> <string name="accessibility_no_data" msgid="4563181886936931008">"Aucun signal"</string> <string name="accessibility_data_one_bar" msgid="6892888138070752480">"Signal faible"</string> diff --git a/packages/SettingsLib/res/values-ka/strings.xml b/packages/SettingsLib/res/values-ka/strings.xml index c422b73146c9..ef0b52417773 100644 --- a/packages/SettingsLib/res/values-ka/strings.xml +++ b/packages/SettingsLib/res/values-ka/strings.xml @@ -487,14 +487,10 @@ <string name="power_charging_duration" msgid="6127154952524919719">"<xliff:g id="LEVEL">%1$s</xliff:g> — სრულ დატენვამდე დარჩენილია <xliff:g id="TIME">%2$s</xliff:g>"</string> <string name="power_charging_limited" msgid="8202147604844938236">"<xliff:g id="LEVEL">%1$s</xliff:g> - დატენვა ოპტიმიზირებულია"</string> <string name="power_charging_future_paused" msgid="1809543660923642799">"<xliff:g id="LEVEL">%1$s</xliff:g> – იტენება"</string> - <!-- no translation found for power_fast_charging_duration_v2 (3797735998640359490) --> - <skip /> - <!-- no translation found for power_charging_duration_v2 (2938998284074003248) --> - <skip /> - <!-- no translation found for power_remaining_charging_duration_only_v2 (5358176435722950193) --> - <skip /> - <!-- no translation found for power_remaining_fast_charging_duration_only_v2 (6270950195810579563) --> - <skip /> + <string name="power_fast_charging_duration_v2" msgid="3797735998640359490">"<xliff:g id="LEVEL">%1$s</xliff:g> - <xliff:g id="STATUS">%2$s</xliff:g> - სრულად დატენის დრო: <xliff:g id="TIME">%3$s</xliff:g>"</string> + <string name="power_charging_duration_v2" msgid="2938998284074003248">"<xliff:g id="LEVEL">%1$s</xliff:g> - სრულად დატენის დრო: <xliff:g id="TIME">%2$s</xliff:g>"</string> + <string name="power_remaining_charging_duration_only_v2" msgid="5358176435722950193">"სრულად დატენის დრო: <xliff:g id="TIME">%1$s</xliff:g>"</string> + <string name="power_remaining_fast_charging_duration_only_v2" msgid="6270950195810579563">"სრულად დატენის დრო: <xliff:g id="TIME">%1$s</xliff:g>"</string> <string name="battery_info_status_unknown" msgid="268625384868401114">"უცნობი"</string> <string name="battery_info_status_charging" msgid="4279958015430387405">"იტენება"</string> <string name="battery_info_status_charging_fast" msgid="8027559755902954885">"სწრაფად იტენება"</string> @@ -506,10 +502,8 @@ <string name="battery_info_status_full" msgid="1339002294876531312">"დატენილია"</string> <string name="battery_info_status_full_charged" msgid="3536054261505567948">"ბოლომდე დატენილი"</string> <string name="battery_info_status_charging_on_hold" msgid="6364355145521694438">"დატენვა შეჩერებულია"</string> - <!-- no translation found for battery_info_status_charging_v2 (6118522107222245505) --> - <skip /> - <!-- no translation found for battery_info_status_charging_fast_v2 (1825439848151256589) --> - <skip /> + <string name="battery_info_status_charging_v2" msgid="6118522107222245505">"იტენება"</string> + <string name="battery_info_status_charging_fast_v2" msgid="1825439848151256589">"სწრაფი დატენა"</string> <string name="disabled_by_admin_summary_text" msgid="5343911767402923057">"იმართება ადმინისტრატორის მიერ"</string> <string name="disabled_by_app_ops_text" msgid="8373595926549098012">"კონტროლდება შეზღუდული რეჟიმის პარამეტრით"</string> <string name="disabled" msgid="8017887509554714950">"გამორთული"</string> @@ -696,8 +690,7 @@ <string name="accessibility_phone_one_bar" msgid="5719721147018970063">"ტელეფონის სიგნალი ერთ ზოლზეა."</string> <string name="accessibility_phone_two_bars" msgid="2531458337458953263">"ტელეფონის სიგნალი ორ ზოლზეა."</string> <string name="accessibility_phone_three_bars" msgid="1523967995996696619">"ტელეფონის სიგნალი სამ ზოლზეა."</string> - <!-- no translation found for accessibility_phone_four_bars (4477202400261338403) --> - <skip /> + <string name="accessibility_phone_four_bars" msgid="4477202400261338403">"ტელეფონის სიგნალი ოთხ ზოლზეა."</string> <string name="accessibility_phone_signal_full" msgid="4302338883816077134">"ტელეფონის სიგნალი სრულია."</string> <string name="accessibility_no_data" msgid="4563181886936931008">"მონაცემები არ არის."</string> <string name="accessibility_data_one_bar" msgid="6892888138070752480">"თარიღი ზოლზე."</string> diff --git a/packages/SettingsLib/res/values-km/strings.xml b/packages/SettingsLib/res/values-km/strings.xml index 0d41022cb984..9a2b89bd5a0f 100644 --- a/packages/SettingsLib/res/values-km/strings.xml +++ b/packages/SettingsLib/res/values-km/strings.xml @@ -487,14 +487,10 @@ <string name="power_charging_duration" msgid="6127154952524919719">"<xliff:g id="LEVEL">%1$s</xliff:g> - នៅសល់ <xliff:g id="TIME">%2$s</xliff:g> ទៀតទើបពេញ"</string> <string name="power_charging_limited" msgid="8202147604844938236">"<xliff:g id="LEVEL">%1$s</xliff:g> - បានបង្កើនប្រសិទ្ធភាពនៃការសាក"</string> <string name="power_charging_future_paused" msgid="1809543660923642799">"<xliff:g id="LEVEL">%1$s</xliff:g> - កំពុងសាកថ្ម"</string> - <!-- no translation found for power_fast_charging_duration_v2 (3797735998640359490) --> - <skip /> - <!-- no translation found for power_charging_duration_v2 (2938998284074003248) --> - <skip /> - <!-- no translation found for power_remaining_charging_duration_only_v2 (5358176435722950193) --> - <skip /> - <!-- no translation found for power_remaining_fast_charging_duration_only_v2 (6270950195810579563) --> - <skip /> + <string name="power_fast_charging_duration_v2" msgid="3797735998640359490">"<xliff:g id="LEVEL">%1$s</xliff:g> - <xliff:g id="STATUS">%2$s</xliff:g> - ពេញនៅម៉ោង <xliff:g id="TIME">%3$s</xliff:g>"</string> + <string name="power_charging_duration_v2" msgid="2938998284074003248">"<xliff:g id="LEVEL">%1$s</xliff:g> - សាកថ្មពេញនៅម៉ោង <xliff:g id="TIME">%2$s</xliff:g>"</string> + <string name="power_remaining_charging_duration_only_v2" msgid="5358176435722950193">"សាកថ្មពេញនៅម៉ោង <xliff:g id="TIME">%1$s</xliff:g>"</string> + <string name="power_remaining_fast_charging_duration_only_v2" msgid="6270950195810579563">"ពេញនៅម៉ោង <xliff:g id="TIME">%1$s</xliff:g>"</string> <string name="battery_info_status_unknown" msgid="268625384868401114">"មិនស្គាល់"</string> <string name="battery_info_status_charging" msgid="4279958015430387405">"កំពុងសាកថ្ម"</string> <string name="battery_info_status_charging_fast" msgid="8027559755902954885">"កំពុងសាកថ្មយ៉ាងឆាប់រហ័ស"</string> @@ -506,10 +502,8 @@ <string name="battery_info_status_full" msgid="1339002294876531312">"បានសាកថ្មពេញ"</string> <string name="battery_info_status_full_charged" msgid="3536054261505567948">"បានសាកថ្មពេញ"</string> <string name="battery_info_status_charging_on_hold" msgid="6364355145521694438">"កំពុងផ្អាកការសាកថ្ម"</string> - <!-- no translation found for battery_info_status_charging_v2 (6118522107222245505) --> - <skip /> - <!-- no translation found for battery_info_status_charging_fast_v2 (1825439848151256589) --> - <skip /> + <string name="battery_info_status_charging_v2" msgid="6118522107222245505">"កំពុងសាកថ្ម"</string> + <string name="battery_info_status_charging_fast_v2" msgid="1825439848151256589">"ការសាកថ្មរហ័ស"</string> <string name="disabled_by_admin_summary_text" msgid="5343911767402923057">"គ្រប់គ្រងដោយអ្នកគ្រប់គ្រង"</string> <string name="disabled_by_app_ops_text" msgid="8373595926549098012">"គ្រប់គ្រងដោយការកំណត់ដែលបានរឹតបន្តឹង"</string> <string name="disabled" msgid="8017887509554714950">"បិទ"</string> @@ -696,8 +690,7 @@ <string name="accessibility_phone_one_bar" msgid="5719721147018970063">"សេវាទូរស័ព្ទមួយកាំ។"</string> <string name="accessibility_phone_two_bars" msgid="2531458337458953263">"សេវាទូរស័ព្ទពីរកាំ។"</string> <string name="accessibility_phone_three_bars" msgid="1523967995996696619">"សេវាទូរស័ព្ទបីកាំ។"</string> - <!-- no translation found for accessibility_phone_four_bars (4477202400261338403) --> - <skip /> + <string name="accessibility_phone_four_bars" msgid="4477202400261338403">"បួនកាំលើទូរសព្ទ។"</string> <string name="accessibility_phone_signal_full" msgid="4302338883816077134">"សេវាទូរស័ព្ទពេញ។"</string> <string name="accessibility_no_data" msgid="4563181886936931008">"គ្មានទិន្នន័យ។"</string> <string name="accessibility_data_one_bar" msgid="6892888138070752480">"ទិន្នន័យមួយកាំ។"</string> diff --git a/packages/SettingsLib/res/values-ky/strings.xml b/packages/SettingsLib/res/values-ky/strings.xml index cbc8be1363ba..2d4fefc61389 100644 --- a/packages/SettingsLib/res/values-ky/strings.xml +++ b/packages/SettingsLib/res/values-ky/strings.xml @@ -387,7 +387,7 @@ <string name="simulate_color_space" msgid="1206503300335835151">"Аномалияга окшошуу"</string> <string name="enable_opengl_traces_title" msgid="4638773318659125196">"OpenGL трейстерин иштетүү"</string> <string name="usb_audio_disable_routing" msgid="3367656923544254975">"Аудиону өткөрүүнү өчүрүү (USB)"</string> - <string name="usb_audio_disable_routing_summary" msgid="8768242894849534699">"Тышкы USB аудио жабдыктарына авто өткөрүү өчрлт"</string> + <string name="usb_audio_disable_routing_summary" msgid="8768242894849534699">"Тышкы USB түзмөктөргө автоматтык түрдө өтпөйт"</string> <string name="debug_layout" msgid="1659216803043339741">"Элементтрдн чектрин көрст"</string> <string name="debug_layout_summary" msgid="8825829038287321978">"Кесилген нерсенин чектери жана жээктери көрүнөт"</string> <string name="force_rtl_layout_all_locales" msgid="8690762598501599796">"Интерфейсти чагылдыруу"</string> diff --git a/packages/SettingsLib/res/values-lo/strings.xml b/packages/SettingsLib/res/values-lo/strings.xml index 2366c13a1aa0..441455c22c1d 100644 --- a/packages/SettingsLib/res/values-lo/strings.xml +++ b/packages/SettingsLib/res/values-lo/strings.xml @@ -487,14 +487,10 @@ <string name="power_charging_duration" msgid="6127154952524919719">"ຍັງເຫຼືອອີກ <xliff:g id="LEVEL">%1$s</xliff:g> - <xliff:g id="TIME">%2$s</xliff:g> ຈຶ່ງຈະສາກເຕັມ"</string> <string name="power_charging_limited" msgid="8202147604844938236">"<xliff:g id="LEVEL">%1$s</xliff:g> - ການສາກຖືກປັບໃຫ້ເໝາະສົມແລ້ວ"</string> <string name="power_charging_future_paused" msgid="1809543660923642799">"<xliff:g id="LEVEL">%1$s</xliff:g> - ກຳລັງສາກໄຟ"</string> - <!-- no translation found for power_fast_charging_duration_v2 (3797735998640359490) --> - <skip /> - <!-- no translation found for power_charging_duration_v2 (2938998284074003248) --> - <skip /> - <!-- no translation found for power_remaining_charging_duration_only_v2 (5358176435722950193) --> - <skip /> - <!-- no translation found for power_remaining_fast_charging_duration_only_v2 (6270950195810579563) --> - <skip /> + <string name="power_fast_charging_duration_v2" msgid="3797735998640359490">"<xliff:g id="LEVEL">%1$s</xliff:g> - <xliff:g id="STATUS">%2$s</xliff:g> - ຈະເຕັມພາຍໃນ <xliff:g id="TIME">%3$s</xliff:g>"</string> + <string name="power_charging_duration_v2" msgid="2938998284074003248">"<xliff:g id="LEVEL">%1$s</xliff:g> - ຈະສາກເຕັມພາຍໃນ <xliff:g id="TIME">%2$s</xliff:g>"</string> + <string name="power_remaining_charging_duration_only_v2" msgid="5358176435722950193">"ຈະສາກເຕັມພາຍໃນ <xliff:g id="TIME">%1$s</xliff:g>"</string> + <string name="power_remaining_fast_charging_duration_only_v2" msgid="6270950195810579563">"ຈະເຕັມພາຍໃນ <xliff:g id="TIME">%1$s</xliff:g>"</string> <string name="battery_info_status_unknown" msgid="268625384868401114">"ບໍ່ຮູ້ຈັກ"</string> <string name="battery_info_status_charging" msgid="4279958015430387405">"ກຳລັງສາກໄຟ"</string> <string name="battery_info_status_charging_fast" msgid="8027559755902954885">"ກຳລັງສາກໄຟດ່ວນ"</string> @@ -506,10 +502,8 @@ <string name="battery_info_status_full" msgid="1339002294876531312">"ສາກເຕັມແລ້ວ"</string> <string name="battery_info_status_full_charged" msgid="3536054261505567948">"ສາກເຕັມແລ້ວ"</string> <string name="battery_info_status_charging_on_hold" msgid="6364355145521694438">"ຢຸດການສາກຊົ່ວຄາວ"</string> - <!-- no translation found for battery_info_status_charging_v2 (6118522107222245505) --> - <skip /> - <!-- no translation found for battery_info_status_charging_fast_v2 (1825439848151256589) --> - <skip /> + <string name="battery_info_status_charging_v2" msgid="6118522107222245505">"ກຳລັງສາກ"</string> + <string name="battery_info_status_charging_fast_v2" msgid="1825439848151256589">"ກຳລັງສາກໄວ"</string> <string name="disabled_by_admin_summary_text" msgid="5343911767402923057">"ຄວບຄຸມໂດຍຜູ້ເບິ່ງແຍງ"</string> <string name="disabled_by_app_ops_text" msgid="8373595926549098012">"ຄວບຄຸມໂດຍການຕັ້ງຄ່າທີ່ຈຳກັດໄວ້"</string> <string name="disabled" msgid="8017887509554714950">"ປິດການນຳໃຊ້"</string> @@ -696,8 +690,7 @@ <string name="accessibility_phone_one_bar" msgid="5719721147018970063">"ສັນຍານນຶ່ງຂີດ."</string> <string name="accessibility_phone_two_bars" msgid="2531458337458953263">"ສັນຍານສອງຂີດ."</string> <string name="accessibility_phone_three_bars" msgid="1523967995996696619">"ສັນຍານສາມຂີດ."</string> - <!-- no translation found for accessibility_phone_four_bars (4477202400261338403) --> - <skip /> + <string name="accessibility_phone_four_bars" msgid="4477202400261338403">"ສັນຍານໂທລະສັບ 4 ຂີດ."</string> <string name="accessibility_phone_signal_full" msgid="4302338883816077134">"ສັນຍານເຕັມ."</string> <string name="accessibility_no_data" msgid="4563181886936931008">"ບໍ່ມີຂໍ້ມູນ."</string> <string name="accessibility_data_one_bar" msgid="6892888138070752480">"ຂໍ້ມູນນຶ່ງຂີດ."</string> diff --git a/packages/SettingsLib/res/values-ms/strings.xml b/packages/SettingsLib/res/values-ms/strings.xml index a64aff387cfb..50b60df43bb1 100644 --- a/packages/SettingsLib/res/values-ms/strings.xml +++ b/packages/SettingsLib/res/values-ms/strings.xml @@ -487,14 +487,10 @@ <string name="power_charging_duration" msgid="6127154952524919719">"<xliff:g id="LEVEL">%1$s</xliff:g> - <xliff:g id="TIME">%2$s</xliff:g> lagi sebelum penuh"</string> <string name="power_charging_limited" msgid="8202147604844938236">"<xliff:g id="LEVEL">%1$s</xliff:g> - Pengecasan dioptimumkan"</string> <string name="power_charging_future_paused" msgid="1809543660923642799">"<xliff:g id="LEVEL">%1$s</xliff:g> - Mengecas"</string> - <!-- no translation found for power_fast_charging_duration_v2 (3797735998640359490) --> - <skip /> - <!-- no translation found for power_charging_duration_v2 (2938998284074003248) --> - <skip /> - <!-- no translation found for power_remaining_charging_duration_only_v2 (5358176435722950193) --> - <skip /> - <!-- no translation found for power_remaining_fast_charging_duration_only_v2 (6270950195810579563) --> - <skip /> + <string name="power_fast_charging_duration_v2" msgid="3797735998640359490">"<xliff:g id="LEVEL">%1$s</xliff:g> - <xliff:g id="STATUS">%2$s</xliff:g> - Penuh pada <xliff:g id="TIME">%3$s</xliff:g>"</string> + <string name="power_charging_duration_v2" msgid="2938998284074003248">"<xliff:g id="LEVEL">%1$s</xliff:g> - Dicas sepenuhnya pada <xliff:g id="TIME">%2$s</xliff:g>"</string> + <string name="power_remaining_charging_duration_only_v2" msgid="5358176435722950193">"Dicas sepenuhnya pada <xliff:g id="TIME">%1$s</xliff:g>"</string> + <string name="power_remaining_fast_charging_duration_only_v2" msgid="6270950195810579563">"Penuh pada <xliff:g id="TIME">%1$s</xliff:g>"</string> <string name="battery_info_status_unknown" msgid="268625384868401114">"Tidak diketahui"</string> <string name="battery_info_status_charging" msgid="4279958015430387405">"Mengecas"</string> <string name="battery_info_status_charging_fast" msgid="8027559755902954885">"Mengecas pantas"</string> @@ -506,10 +502,8 @@ <string name="battery_info_status_full" msgid="1339002294876531312">"Sudah dicas"</string> <string name="battery_info_status_full_charged" msgid="3536054261505567948">"Dicas Penuh"</string> <string name="battery_info_status_charging_on_hold" msgid="6364355145521694438">"Pengecasan ditunda"</string> - <!-- no translation found for battery_info_status_charging_v2 (6118522107222245505) --> - <skip /> - <!-- no translation found for battery_info_status_charging_fast_v2 (1825439848151256589) --> - <skip /> + <string name="battery_info_status_charging_v2" msgid="6118522107222245505">"Pengecasan"</string> + <string name="battery_info_status_charging_fast_v2" msgid="1825439848151256589">"Pengecasan pantas"</string> <string name="disabled_by_admin_summary_text" msgid="5343911767402923057">"Dikawal oleh pentadbir"</string> <string name="disabled_by_app_ops_text" msgid="8373595926549098012">"Dikawal oleh Tetapan Terhad"</string> <string name="disabled" msgid="8017887509554714950">"Dilumpuhkan"</string> @@ -696,8 +690,7 @@ <string name="accessibility_phone_one_bar" msgid="5719721147018970063">"Telefon satu bar."</string> <string name="accessibility_phone_two_bars" msgid="2531458337458953263">"Telefon dua bar."</string> <string name="accessibility_phone_three_bars" msgid="1523967995996696619">"Telefon tiga bar."</string> - <!-- no translation found for accessibility_phone_four_bars (4477202400261338403) --> - <skip /> + <string name="accessibility_phone_four_bars" msgid="4477202400261338403">"Telefon empat bar."</string> <string name="accessibility_phone_signal_full" msgid="4302338883816077134">"Isyarat telefon penuh."</string> <string name="accessibility_no_data" msgid="4563181886936931008">"Tiada data."</string> <string name="accessibility_data_one_bar" msgid="6892888138070752480">"Data satu bar."</string> diff --git a/packages/SettingsLib/res/values-ne/strings.xml b/packages/SettingsLib/res/values-ne/strings.xml index c6a870624885..6bdcbd8e6ef0 100644 --- a/packages/SettingsLib/res/values-ne/strings.xml +++ b/packages/SettingsLib/res/values-ne/strings.xml @@ -487,14 +487,10 @@ <string name="power_charging_duration" msgid="6127154952524919719">"<xliff:g id="LEVEL">%1$s</xliff:g> - पूरा चार्ज हुन <xliff:g id="TIME">%2$s</xliff:g> लाग्ने छ"</string> <string name="power_charging_limited" msgid="8202147604844938236">"<xliff:g id="LEVEL">%1$s</xliff:g> - चार्ज गर्ने प्रक्रिया अप्टिमाइज गरिएको छ"</string> <string name="power_charging_future_paused" msgid="1809543660923642799">"<xliff:g id="LEVEL">%1$s</xliff:g> - चार्ज गरिँदै छ"</string> - <!-- no translation found for power_fast_charging_duration_v2 (3797735998640359490) --> - <skip /> - <!-- no translation found for power_charging_duration_v2 (2938998284074003248) --> - <skip /> - <!-- no translation found for power_remaining_charging_duration_only_v2 (5358176435722950193) --> - <skip /> - <!-- no translation found for power_remaining_fast_charging_duration_only_v2 (6270950195810579563) --> - <skip /> + <string name="power_fast_charging_duration_v2" msgid="3797735998640359490">"<xliff:g id="LEVEL">%1$s</xliff:g> - <xliff:g id="STATUS">%2$s</xliff:g> - <xliff:g id="TIME">%3$s</xliff:g> बजेसम्ममा पूरा चार्ज हुने छ"</string> + <string name="power_charging_duration_v2" msgid="2938998284074003248">"<xliff:g id="LEVEL">%1$s</xliff:g> - <xliff:g id="TIME">%2$s</xliff:g> बजेसम्ममा पूरा चार्ज हुने छ"</string> + <string name="power_remaining_charging_duration_only_v2" msgid="5358176435722950193">"<xliff:g id="TIME">%1$s</xliff:g> बजेसम्ममा पूरा चार्ज हुने छ"</string> + <string name="power_remaining_fast_charging_duration_only_v2" msgid="6270950195810579563">"<xliff:g id="TIME">%1$s</xliff:g> बजेसम्ममा पूरा चार्ज हुने छ"</string> <string name="battery_info_status_unknown" msgid="268625384868401114">"अज्ञात"</string> <string name="battery_info_status_charging" msgid="4279958015430387405">"चार्ज हुँदै छ"</string> <string name="battery_info_status_charging_fast" msgid="8027559755902954885">"द्रुत गतिमा चार्ज गरिँदै छ"</string> @@ -506,10 +502,8 @@ <string name="battery_info_status_full" msgid="1339002294876531312">"चार्ज भयो"</string> <string name="battery_info_status_full_charged" msgid="3536054261505567948">"पूर्ण रूपमा चार्ज भएको छ"</string> <string name="battery_info_status_charging_on_hold" msgid="6364355145521694438">"चार्जिङ होल्ड गरिएको छ"</string> - <!-- no translation found for battery_info_status_charging_v2 (6118522107222245505) --> - <skip /> - <!-- no translation found for battery_info_status_charging_fast_v2 (1825439848151256589) --> - <skip /> + <string name="battery_info_status_charging_v2" msgid="6118522107222245505">"चार्ज गरिँदै छ"</string> + <string name="battery_info_status_charging_fast_v2" msgid="1825439848151256589">"फास्ट चार्जिङ"</string> <string name="disabled_by_admin_summary_text" msgid="5343911767402923057">"प्रशासकद्वारा नियन्त्रित"</string> <string name="disabled_by_app_ops_text" msgid="8373595926549098012">"प्रतिबन्धित सेटिङले नियन्त्रण गरेको"</string> <string name="disabled" msgid="8017887509554714950">"असक्षम पारियो"</string> @@ -568,7 +562,7 @@ <string name="alarm_template" msgid="3346777418136233330">"<xliff:g id="WHEN">%1$s</xliff:g> मा"</string> <string name="alarm_template_far" msgid="6382760514842998629">"<xliff:g id="WHEN">%1$s</xliff:g> मा"</string> <string name="zen_mode_duration_settings_title" msgid="1553451650289651489">"अवधि"</string> - <string name="zen_mode_duration_always_prompt_title" msgid="3212996860498119555">"प्रत्येक पटक सोधियोस्"</string> + <string name="zen_mode_duration_always_prompt_title" msgid="3212996860498119555">"प्रत्येक पटक सोध्नुहोस्"</string> <string name="zen_mode_forever" msgid="3339224497605461291">"तपाईंले अफ नगरेसम्म"</string> <string name="time_unit_just_now" msgid="3006134267292728099">"अहिले भर्खरै"</string> <string name="media_transfer_this_device_name" msgid="2357329267148436433">"यो फोन"</string> @@ -696,8 +690,7 @@ <string name="accessibility_phone_one_bar" msgid="5719721147018970063">"फोन एउटा पट्टि।"</string> <string name="accessibility_phone_two_bars" msgid="2531458337458953263">"फोन दुई पट्टि।"</string> <string name="accessibility_phone_three_bars" msgid="1523967995996696619">"फोन तिन पट्टिहरू।"</string> - <!-- no translation found for accessibility_phone_four_bars (4477202400261338403) --> - <skip /> + <string name="accessibility_phone_four_bars" msgid="4477202400261338403">"फोनका चार वटा बार।"</string> <string name="accessibility_phone_signal_full" msgid="4302338883816077134">"फोन सङ्केत भरिएको।"</string> <string name="accessibility_no_data" msgid="4563181886936931008">"डेटा छैन।"</string> <string name="accessibility_data_one_bar" msgid="6892888138070752480">"डेटाको एउटा पट्टि।"</string> diff --git a/packages/SettingsLib/res/values-pt-rPT/strings.xml b/packages/SettingsLib/res/values-pt-rPT/strings.xml index 850b6f38fea0..31fa3dfddaed 100644 --- a/packages/SettingsLib/res/values-pt-rPT/strings.xml +++ b/packages/SettingsLib/res/values-pt-rPT/strings.xml @@ -487,14 +487,10 @@ <string name="power_charging_duration" msgid="6127154952524919719">"<xliff:g id="LEVEL">%1$s</xliff:g> – <xliff:g id="TIME">%2$s</xliff:g> até à carga máxima"</string> <string name="power_charging_limited" msgid="8202147604844938236">"<xliff:g id="LEVEL">%1$s</xliff:g>: carregamento otimizado"</string> <string name="power_charging_future_paused" msgid="1809543660923642799">"<xliff:g id="LEVEL">%1$s</xliff:g> – A carregar"</string> - <!-- no translation found for power_fast_charging_duration_v2 (3797735998640359490) --> - <skip /> - <!-- no translation found for power_charging_duration_v2 (2938998284074003248) --> - <skip /> - <!-- no translation found for power_remaining_charging_duration_only_v2 (5358176435722950193) --> - <skip /> - <!-- no translation found for power_remaining_fast_charging_duration_only_v2 (6270950195810579563) --> - <skip /> + <string name="power_fast_charging_duration_v2" msgid="3797735998640359490">"<xliff:g id="LEVEL">%1$s</xliff:g> – <xliff:g id="STATUS">%2$s</xliff:g> – Completo à(s) <xliff:g id="TIME">%3$s</xliff:g>"</string> + <string name="power_charging_duration_v2" msgid="2938998284074003248">"<xliff:g id="LEVEL">%1$s</xliff:g> – Completamente carregado à(s) <xliff:g id="TIME">%2$s</xliff:g>"</string> + <string name="power_remaining_charging_duration_only_v2" msgid="5358176435722950193">"Completamente carregado à(s) <xliff:g id="TIME">%1$s</xliff:g>"</string> + <string name="power_remaining_fast_charging_duration_only_v2" msgid="6270950195810579563">"Completo à(s) <xliff:g id="TIME">%1$s</xliff:g>"</string> <string name="battery_info_status_unknown" msgid="268625384868401114">"Desconhecido"</string> <string name="battery_info_status_charging" msgid="4279958015430387405">"A carregar"</string> <string name="battery_info_status_charging_fast" msgid="8027559755902954885">"Carregamento rápido"</string> @@ -506,10 +502,8 @@ <string name="battery_info_status_full" msgid="1339002294876531312">"Carregada"</string> <string name="battery_info_status_full_charged" msgid="3536054261505567948">"Totalmente carregada"</string> <string name="battery_info_status_charging_on_hold" msgid="6364355145521694438">"Carregamento em espera"</string> - <!-- no translation found for battery_info_status_charging_v2 (6118522107222245505) --> - <skip /> - <!-- no translation found for battery_info_status_charging_fast_v2 (1825439848151256589) --> - <skip /> + <string name="battery_info_status_charging_v2" msgid="6118522107222245505">"Carregamento"</string> + <string name="battery_info_status_charging_fast_v2" msgid="1825439848151256589">"Carregamento rápido"</string> <string name="disabled_by_admin_summary_text" msgid="5343911767402923057">"Controlado pelo gestor"</string> <string name="disabled_by_app_ops_text" msgid="8373595926549098012">"Controlado por uma definição restrita"</string> <string name="disabled" msgid="8017887509554714950">"Desativada"</string> @@ -696,8 +690,7 @@ <string name="accessibility_phone_one_bar" msgid="5719721147018970063">"Uma barra de telefone."</string> <string name="accessibility_phone_two_bars" msgid="2531458337458953263">"Duas barras de telefone."</string> <string name="accessibility_phone_three_bars" msgid="1523967995996696619">"Três barras de telefone."</string> - <!-- no translation found for accessibility_phone_four_bars (4477202400261338403) --> - <skip /> + <string name="accessibility_phone_four_bars" msgid="4477202400261338403">"Telemóvel com quatro barras."</string> <string name="accessibility_phone_signal_full" msgid="4302338883816077134">"Sinal de telefone completo."</string> <string name="accessibility_no_data" msgid="4563181886936931008">"Sem dados."</string> <string name="accessibility_data_one_bar" msgid="6892888138070752480">"Uma barra de dados."</string> diff --git a/packages/SettingsLib/res/values-si/strings.xml b/packages/SettingsLib/res/values-si/strings.xml index 2f72f0148b4f..255a6538f748 100644 --- a/packages/SettingsLib/res/values-si/strings.xml +++ b/packages/SettingsLib/res/values-si/strings.xml @@ -487,14 +487,10 @@ <string name="power_charging_duration" msgid="6127154952524919719">"<xliff:g id="LEVEL">%1$s</xliff:g> - සම්පූර්ණ වීමට <xliff:g id="TIME">%2$s</xliff:g>ක් ඉතිරියි"</string> <string name="power_charging_limited" msgid="8202147604844938236">"<xliff:g id="LEVEL">%1$s</xliff:g> - ආරෝපණය ප්රශස්ත කර ඇත"</string> <string name="power_charging_future_paused" msgid="1809543660923642799">"<xliff:g id="LEVEL">%1$s</xliff:g> - ආරෝපණය වේ"</string> - <!-- no translation found for power_fast_charging_duration_v2 (3797735998640359490) --> - <skip /> - <!-- no translation found for power_charging_duration_v2 (2938998284074003248) --> - <skip /> - <!-- no translation found for power_remaining_charging_duration_only_v2 (5358176435722950193) --> - <skip /> - <!-- no translation found for power_remaining_fast_charging_duration_only_v2 (6270950195810579563) --> - <skip /> + <string name="power_fast_charging_duration_v2" msgid="3797735998640359490">"<xliff:g id="LEVEL">%1$s</xliff:g> - <xliff:g id="STATUS">%2$s</xliff:g> - <xliff:g id="TIME">%3$s</xliff:g> හට පෙර සම්පූර්ණයි"</string> + <string name="power_charging_duration_v2" msgid="2938998284074003248">"<xliff:g id="LEVEL">%1$s</xliff:g> - <xliff:g id="TIME">%2$s</xliff:g> හට පෙර සම්පූර්ණයෙන් ආරෝපණ වෙයි"</string> + <string name="power_remaining_charging_duration_only_v2" msgid="5358176435722950193">"<xliff:g id="TIME">%1$s</xliff:g> හට පෙර සම්පූර්ණයෙන් ආරෝපණ වෙයි"</string> + <string name="power_remaining_fast_charging_duration_only_v2" msgid="6270950195810579563">"<xliff:g id="TIME">%1$s</xliff:g> හට පෙර සම්පූර්ණයි"</string> <string name="battery_info_status_unknown" msgid="268625384868401114">"නොදනී"</string> <string name="battery_info_status_charging" msgid="4279958015430387405">"ආරෝපණය වෙමින්"</string> <string name="battery_info_status_charging_fast" msgid="8027559755902954885">"ශීඝ්ර ආරෝපණය"</string> @@ -506,10 +502,8 @@ <string name="battery_info_status_full" msgid="1339002294876531312">"අරෝපිතයි"</string> <string name="battery_info_status_full_charged" msgid="3536054261505567948">"සම්පූර්ණයෙන් ආරෝපණ වී ඇත"</string> <string name="battery_info_status_charging_on_hold" msgid="6364355145521694438">"ආරෝපණය රදවාගෙන ඇත"</string> - <!-- no translation found for battery_info_status_charging_v2 (6118522107222245505) --> - <skip /> - <!-- no translation found for battery_info_status_charging_fast_v2 (1825439848151256589) --> - <skip /> + <string name="battery_info_status_charging_v2" msgid="6118522107222245505">"ආරෝපණ කෙරේ"</string> + <string name="battery_info_status_charging_fast_v2" msgid="1825439848151256589">"වේගවත් ආරෝපණය"</string> <string name="disabled_by_admin_summary_text" msgid="5343911767402923057">"පරිපාලක විසින් පාලනය කරන ලදී"</string> <string name="disabled_by_app_ops_text" msgid="8373595926549098012">"සීමා කළ සැකසීම මගින් පාලනය වේ"</string> <string name="disabled" msgid="8017887509554714950">"අබල කර ඇත"</string> @@ -696,8 +690,7 @@ <string name="accessibility_phone_one_bar" msgid="5719721147018970063">"දුරකථනය තීරු එකයි."</string> <string name="accessibility_phone_two_bars" msgid="2531458337458953263">"දුරකථනය තීරු දෙකයි."</string> <string name="accessibility_phone_three_bars" msgid="1523967995996696619">"දුරකථනය තීරු තුනයි."</string> - <!-- no translation found for accessibility_phone_four_bars (4477202400261338403) --> - <skip /> + <string name="accessibility_phone_four_bars" msgid="4477202400261338403">"දුරකථනය තීරු හතරක්."</string> <string name="accessibility_phone_signal_full" msgid="4302338883816077134">"දුරකථනයේ සංඥාව පිරී ඇත."</string> <string name="accessibility_no_data" msgid="4563181886936931008">"දත්ත නැත."</string> <string name="accessibility_data_one_bar" msgid="6892888138070752480">"දත්ත තීරු එකයි."</string> diff --git a/packages/SettingsLib/res/values-sr/strings.xml b/packages/SettingsLib/res/values-sr/strings.xml index 0437a14717d5..0437a00c9f21 100644 --- a/packages/SettingsLib/res/values-sr/strings.xml +++ b/packages/SettingsLib/res/values-sr/strings.xml @@ -487,14 +487,10 @@ <string name="power_charging_duration" msgid="6127154952524919719">"<xliff:g id="LEVEL">%1$s</xliff:g> – <xliff:g id="TIME">%2$s</xliff:g> до краја пуњења"</string> <string name="power_charging_limited" msgid="8202147604844938236">"<xliff:g id="LEVEL">%1$s</xliff:g> – пуњење је оптимизовано"</string> <string name="power_charging_future_paused" msgid="1809543660923642799">"<xliff:g id="LEVEL">%1$s</xliff:g> – Пуњење"</string> - <!-- no translation found for power_fast_charging_duration_v2 (3797735998640359490) --> - <skip /> - <!-- no translation found for power_charging_duration_v2 (2938998284074003248) --> - <skip /> - <!-- no translation found for power_remaining_charging_duration_only_v2 (5358176435722950193) --> - <skip /> - <!-- no translation found for power_remaining_fast_charging_duration_only_v2 (6270950195810579563) --> - <skip /> + <string name="power_fast_charging_duration_v2" msgid="3797735998640359490">"<xliff:g id="LEVEL">%1$s</xliff:g> – <xliff:g id="STATUS">%2$s</xliff:g> – Потпуно напуњено до <xliff:g id="TIME">%3$s</xliff:g>"</string> + <string name="power_charging_duration_v2" msgid="2938998284074003248">"<xliff:g id="LEVEL">%1$s</xliff:g> – Потпуно напуњено до <xliff:g id="TIME">%2$s</xliff:g>"</string> + <string name="power_remaining_charging_duration_only_v2" msgid="5358176435722950193">"Потпуно напуњено до <xliff:g id="TIME">%1$s</xliff:g>"</string> + <string name="power_remaining_fast_charging_duration_only_v2" msgid="6270950195810579563">"Напуњено до <xliff:g id="TIME">%1$s</xliff:g>"</string> <string name="battery_info_status_unknown" msgid="268625384868401114">"Непознато"</string> <string name="battery_info_status_charging" msgid="4279958015430387405">"Пуни се"</string> <string name="battery_info_status_charging_fast" msgid="8027559755902954885">"Брзо се пуни"</string> @@ -506,10 +502,8 @@ <string name="battery_info_status_full" msgid="1339002294876531312">"Напуњено"</string> <string name="battery_info_status_full_charged" msgid="3536054261505567948">"Напуњено до краја"</string> <string name="battery_info_status_charging_on_hold" msgid="6364355145521694438">"Пуњење је на чекању"</string> - <!-- no translation found for battery_info_status_charging_v2 (6118522107222245505) --> - <skip /> - <!-- no translation found for battery_info_status_charging_fast_v2 (1825439848151256589) --> - <skip /> + <string name="battery_info_status_charging_v2" msgid="6118522107222245505">"Пуњење"</string> + <string name="battery_info_status_charging_fast_v2" msgid="1825439848151256589">"Брзо пуњење"</string> <string name="disabled_by_admin_summary_text" msgid="5343911767402923057">"Контролише администратор"</string> <string name="disabled_by_app_ops_text" msgid="8373595926549098012">"Контролишу ограничена подешавања"</string> <string name="disabled" msgid="8017887509554714950">"Онемогућено"</string> @@ -696,8 +690,7 @@ <string name="accessibility_phone_one_bar" msgid="5719721147018970063">"Сигнал телефона има једну црту."</string> <string name="accessibility_phone_two_bars" msgid="2531458337458953263">"Сигнал телефона од две црте."</string> <string name="accessibility_phone_three_bars" msgid="1523967995996696619">"Сигнал телефона од три црте."</string> - <!-- no translation found for accessibility_phone_four_bars (4477202400261338403) --> - <skip /> + <string name="accessibility_phone_four_bars" msgid="4477202400261338403">"Телефон има четири црте."</string> <string name="accessibility_phone_signal_full" msgid="4302338883816077134">"Сигнал телефона је пун."</string> <string name="accessibility_no_data" msgid="4563181886936931008">"Нема података."</string> <string name="accessibility_data_one_bar" msgid="6892888138070752480">"Сигнал за податке има једну црту."</string> diff --git a/packages/SettingsLib/res/values-sw/strings.xml b/packages/SettingsLib/res/values-sw/strings.xml index f8307e210c5a..a0d8fb938656 100644 --- a/packages/SettingsLib/res/values-sw/strings.xml +++ b/packages/SettingsLib/res/values-sw/strings.xml @@ -487,14 +487,10 @@ <string name="power_charging_duration" msgid="6127154952524919719">"<xliff:g id="LEVEL">%1$s</xliff:g> - <xliff:g id="TIME">%2$s</xliff:g> zimesalia ijae chaji"</string> <string name="power_charging_limited" msgid="8202147604844938236">"<xliff:g id="LEVEL">%1$s</xliff:g> - Hali ya kuchaji imeboreshwa"</string> <string name="power_charging_future_paused" msgid="1809543660923642799">"<xliff:g id="LEVEL">%1$s</xliff:g> - Inachaji"</string> - <!-- no translation found for power_fast_charging_duration_v2 (3797735998640359490) --> - <skip /> - <!-- no translation found for power_charging_duration_v2 (2938998284074003248) --> - <skip /> - <!-- no translation found for power_remaining_charging_duration_only_v2 (5358176435722950193) --> - <skip /> - <!-- no translation found for power_remaining_fast_charging_duration_only_v2 (6270950195810579563) --> - <skip /> + <string name="power_fast_charging_duration_v2" msgid="3797735998640359490">"<xliff:g id="LEVEL">%1$s</xliff:g> - <xliff:g id="STATUS">%2$s</xliff:g> - Itajaa kufikia <xliff:g id="TIME">%3$s</xliff:g>"</string> + <string name="power_charging_duration_v2" msgid="2938998284074003248">"<xliff:g id="LEVEL">%1$s</xliff:g> - Betri itajaa chaji kufikia <xliff:g id="TIME">%2$s</xliff:g>"</string> + <string name="power_remaining_charging_duration_only_v2" msgid="5358176435722950193">"Betri itajaa chaji kufikia <xliff:g id="TIME">%1$s</xliff:g>"</string> + <string name="power_remaining_fast_charging_duration_only_v2" msgid="6270950195810579563">"Itajaa kufikia <xliff:g id="TIME">%1$s</xliff:g>"</string> <string name="battery_info_status_unknown" msgid="268625384868401114">"Haijulikani"</string> <string name="battery_info_status_charging" msgid="4279958015430387405">"Inachaji"</string> <string name="battery_info_status_charging_fast" msgid="8027559755902954885">"Inachaji kwa kasi"</string> @@ -506,10 +502,8 @@ <string name="battery_info_status_full" msgid="1339002294876531312">"Imechajiwa"</string> <string name="battery_info_status_full_charged" msgid="3536054261505567948">"Imejaa Chaji"</string> <string name="battery_info_status_charging_on_hold" msgid="6364355145521694438">"Imesitisha kuchaji"</string> - <!-- no translation found for battery_info_status_charging_v2 (6118522107222245505) --> - <skip /> - <!-- no translation found for battery_info_status_charging_fast_v2 (1825439848151256589) --> - <skip /> + <string name="battery_info_status_charging_v2" msgid="6118522107222245505">"Inachaji"</string> + <string name="battery_info_status_charging_fast_v2" msgid="1825439848151256589">"Inachaji kwa kasi"</string> <string name="disabled_by_admin_summary_text" msgid="5343911767402923057">"Imedhibitiwa na msimamizi"</string> <string name="disabled_by_app_ops_text" msgid="8373595926549098012">"Imedhibitiwa na Mpangilio wenye Mipaka"</string> <string name="disabled" msgid="8017887509554714950">"Imezimwa"</string> @@ -696,8 +690,7 @@ <string name="accessibility_phone_one_bar" msgid="5719721147018970063">"Mwambaa mmoja wa simu."</string> <string name="accessibility_phone_two_bars" msgid="2531458337458953263">"Miambaa miwili ya simu"</string> <string name="accessibility_phone_three_bars" msgid="1523967995996696619">"Miambaa mitatu ya simu."</string> - <!-- no translation found for accessibility_phone_four_bars (4477202400261338403) --> - <skip /> + <string name="accessibility_phone_four_bars" msgid="4477202400261338403">"Simu ina alama nne za ishara."</string> <string name="accessibility_phone_signal_full" msgid="4302338883816077134">"Ishara ya simu imejaa."</string> <string name="accessibility_no_data" msgid="4563181886936931008">"Hakuna data."</string> <string name="accessibility_data_one_bar" msgid="6892888138070752480">"Upapi mmoja wa habari"</string> diff --git a/packages/SettingsLib/res/values-te/strings.xml b/packages/SettingsLib/res/values-te/strings.xml index c61cf2ef63e0..33c673a83b04 100644 --- a/packages/SettingsLib/res/values-te/strings.xml +++ b/packages/SettingsLib/res/values-te/strings.xml @@ -487,14 +487,10 @@ <string name="power_charging_duration" msgid="6127154952524919719">"<xliff:g id="LEVEL">%1$s</xliff:g> - <xliff:g id="TIME">%2$s</xliff:g>లో పూర్తిగా ఛార్జ్ అవుతుంది"</string> <string name="power_charging_limited" msgid="8202147604844938236">"<xliff:g id="LEVEL">%1$s</xliff:g> - ఛార్జింగ్ ఆప్టిమైజ్ చేయబడింది"</string> <string name="power_charging_future_paused" msgid="1809543660923642799">"<xliff:g id="LEVEL">%1$s</xliff:g> - ఛార్జ్ అవుతోంది"</string> - <!-- no translation found for power_fast_charging_duration_v2 (3797735998640359490) --> - <skip /> - <!-- no translation found for power_charging_duration_v2 (2938998284074003248) --> - <skip /> - <!-- no translation found for power_remaining_charging_duration_only_v2 (5358176435722950193) --> - <skip /> - <!-- no translation found for power_remaining_fast_charging_duration_only_v2 (6270950195810579563) --> - <skip /> + <string name="power_fast_charging_duration_v2" msgid="3797735998640359490">"<xliff:g id="LEVEL">%1$s</xliff:g> - <xliff:g id="STATUS">%2$s</xliff:g> - <xliff:g id="TIME">%3$s</xliff:g>కు పూర్తవుతుంది"</string> + <string name="power_charging_duration_v2" msgid="2938998284074003248">"<xliff:g id="LEVEL">%1$s</xliff:g> - <xliff:g id="TIME">%2$s</xliff:g>కు పూర్తిగా ఛార్జ్ అవుతుంది"</string> + <string name="power_remaining_charging_duration_only_v2" msgid="5358176435722950193">"<xliff:g id="TIME">%1$s</xliff:g>కు పూర్తిగా ఛార్జ్ అవుతుంది"</string> + <string name="power_remaining_fast_charging_duration_only_v2" msgid="6270950195810579563">"<xliff:g id="TIME">%1$s</xliff:g>కు పూర్తవుతుంది"</string> <string name="battery_info_status_unknown" msgid="268625384868401114">"తెలియదు"</string> <string name="battery_info_status_charging" msgid="4279958015430387405">"ఛార్జ్ అవుతోంది"</string> <string name="battery_info_status_charging_fast" msgid="8027559755902954885">"వేగవంతమైన ఛార్జింగ్"</string> @@ -506,10 +502,8 @@ <string name="battery_info_status_full" msgid="1339002294876531312">"ఛార్జ్ చేయబడింది"</string> <string name="battery_info_status_full_charged" msgid="3536054261505567948">"పూర్తి ఛార్జ్ అయింది"</string> <string name="battery_info_status_charging_on_hold" msgid="6364355145521694438">"ఛార్జింగ్ హోల్డ్లో ఉంది"</string> - <!-- no translation found for battery_info_status_charging_v2 (6118522107222245505) --> - <skip /> - <!-- no translation found for battery_info_status_charging_fast_v2 (1825439848151256589) --> - <skip /> + <string name="battery_info_status_charging_v2" msgid="6118522107222245505">"ఛార్జ్ అవుతోంది"</string> + <string name="battery_info_status_charging_fast_v2" msgid="1825439848151256589">"ఫాస్ట్ ఛార్జింగ్"</string> <string name="disabled_by_admin_summary_text" msgid="5343911767402923057">"నిర్వాహకుని ద్వారా నియంత్రించబడింది"</string> <string name="disabled_by_app_ops_text" msgid="8373595926549098012">"పరిమితం చేసిన సెట్టింగ్ ద్వారా నియంత్రించబడుతుంది"</string> <string name="disabled" msgid="8017887509554714950">"డిజేబుల్ చేయబడింది"</string> @@ -696,8 +690,7 @@ <string name="accessibility_phone_one_bar" msgid="5719721147018970063">"ఫోన్ ఒక బారు."</string> <string name="accessibility_phone_two_bars" msgid="2531458337458953263">"ఫోన్ రెండు బార్లు."</string> <string name="accessibility_phone_three_bars" msgid="1523967995996696619">"ఫోన్ మూడు బార్లు."</string> - <!-- no translation found for accessibility_phone_four_bars (4477202400261338403) --> - <skip /> + <string name="accessibility_phone_four_bars" msgid="4477202400261338403">"ఫోన్లో నాలుగు బార్లు."</string> <string name="accessibility_phone_signal_full" msgid="4302338883816077134">"ఫోన్ సిగ్నల్ పూర్తిగా ఉంది."</string> <string name="accessibility_no_data" msgid="4563181886936931008">"డేటా లేదు."</string> <string name="accessibility_data_one_bar" msgid="6892888138070752480">"డేటా ఒక బారు."</string> diff --git a/packages/SettingsLib/res/values-th/strings.xml b/packages/SettingsLib/res/values-th/strings.xml index 74087e5debbd..8910d2e90b83 100644 --- a/packages/SettingsLib/res/values-th/strings.xml +++ b/packages/SettingsLib/res/values-th/strings.xml @@ -250,7 +250,7 @@ <string name="adb_wireless_settings" msgid="2295017847215680229">"การแก้ไขข้อบกพร่องผ่าน Wi-Fi"</string> <string name="adb_wireless_list_empty_off" msgid="1713707973837255490">"หากต้องการดูและใช้อุปกรณ์ที่มีอยู่ ให้เปิดการแก้ไขข้อบกพร่องผ่าน Wi-Fi"</string> <string name="adb_pair_method_qrcode_title" msgid="6982904096137468634">"จับคู่อุปกรณ์ด้วยคิวอาร์โค้ด"</string> - <string name="adb_pair_method_qrcode_summary" msgid="7130694277228970888">"จับคู่อุปกรณ์เครื่องใหม่โดยใช้แอปสแกนคิวอาร์โค้ด"</string> + <string name="adb_pair_method_qrcode_summary" msgid="7130694277228970888">"จับคู่อุปกรณ์เครื่องใหม่โดยใช้ตัวสแกนคิวอาร์โค้ด"</string> <string name="adb_pair_method_code_title" msgid="1122590300445142904">"จับคู่อุปกรณ์ด้วยรหัสการจับคู่"</string> <string name="adb_pair_method_code_summary" msgid="6370414511333685185">"จับคู่อุปกรณ์เครื่องใหม่โดยใช้รหัสตัวเลข 6 หลัก"</string> <string name="adb_paired_devices_title" msgid="5268997341526217362">"อุปกรณ์ที่จับคู่"</string> @@ -487,14 +487,10 @@ <string name="power_charging_duration" msgid="6127154952524919719">"<xliff:g id="LEVEL">%1$s</xliff:g> - อีก <xliff:g id="TIME">%2$s</xliff:g> จึงจะเต็ม"</string> <string name="power_charging_limited" msgid="8202147604844938236">"<xliff:g id="LEVEL">%1$s</xliff:g> - ปรับการชาร์จให้เหมาะสมแล้ว"</string> <string name="power_charging_future_paused" msgid="1809543660923642799">"<xliff:g id="LEVEL">%1$s</xliff:g> ‑ กำลังชาร์จ"</string> - <!-- no translation found for power_fast_charging_duration_v2 (3797735998640359490) --> - <skip /> - <!-- no translation found for power_charging_duration_v2 (2938998284074003248) --> - <skip /> - <!-- no translation found for power_remaining_charging_duration_only_v2 (5358176435722950193) --> - <skip /> - <!-- no translation found for power_remaining_fast_charging_duration_only_v2 (6270950195810579563) --> - <skip /> + <string name="power_fast_charging_duration_v2" msgid="3797735998640359490">"<xliff:g id="LEVEL">%1$s</xliff:g> - <xliff:g id="STATUS">%2$s</xliff:g> - จะเต็มภายใน <xliff:g id="TIME">%3$s</xliff:g>"</string> + <string name="power_charging_duration_v2" msgid="2938998284074003248">"<xliff:g id="LEVEL">%1$s</xliff:g> - จะชาร์จเต็มภายใน <xliff:g id="TIME">%2$s</xliff:g>"</string> + <string name="power_remaining_charging_duration_only_v2" msgid="5358176435722950193">"จะชาร์จเต็มภายใน <xliff:g id="TIME">%1$s</xliff:g>"</string> + <string name="power_remaining_fast_charging_duration_only_v2" msgid="6270950195810579563">"จะเต็มภายใน <xliff:g id="TIME">%1$s</xliff:g>"</string> <string name="battery_info_status_unknown" msgid="268625384868401114">"ไม่ทราบ"</string> <string name="battery_info_status_charging" msgid="4279958015430387405">"กำลังชาร์จ"</string> <string name="battery_info_status_charging_fast" msgid="8027559755902954885">"กำลังชาร์จอย่างเร็ว"</string> @@ -506,10 +502,8 @@ <string name="battery_info_status_full" msgid="1339002294876531312">"ชาร์จแล้ว"</string> <string name="battery_info_status_full_charged" msgid="3536054261505567948">"ชาร์จเต็มแล้ว"</string> <string name="battery_info_status_charging_on_hold" msgid="6364355145521694438">"หยุดการชาร์จชั่วคราว"</string> - <!-- no translation found for battery_info_status_charging_v2 (6118522107222245505) --> - <skip /> - <!-- no translation found for battery_info_status_charging_fast_v2 (1825439848151256589) --> - <skip /> + <string name="battery_info_status_charging_v2" msgid="6118522107222245505">"กำลังชาร์จ"</string> + <string name="battery_info_status_charging_fast_v2" msgid="1825439848151256589">"ชาร์จเร็ว"</string> <string name="disabled_by_admin_summary_text" msgid="5343911767402923057">"ผู้ดูแลระบบเป็นผู้ควบคุม"</string> <string name="disabled_by_app_ops_text" msgid="8373595926549098012">"ควบคุมโดยการตั้งค่าที่จำกัด"</string> <string name="disabled" msgid="8017887509554714950">"ปิดอยู่"</string> @@ -696,8 +690,7 @@ <string name="accessibility_phone_one_bar" msgid="5719721147018970063">"สัญญาณโทรศัพท์หนึ่งขีด"</string> <string name="accessibility_phone_two_bars" msgid="2531458337458953263">"สัญญาณโทรศัพท์สองขีด"</string> <string name="accessibility_phone_three_bars" msgid="1523967995996696619">"สัญญาณโทรศัพท์สามขีด"</string> - <!-- no translation found for accessibility_phone_four_bars (4477202400261338403) --> - <skip /> + <string name="accessibility_phone_four_bars" msgid="4477202400261338403">"สัญญาณโทรศัพท์ 4 ขีด"</string> <string name="accessibility_phone_signal_full" msgid="4302338883816077134">"สัญญาณโทรศัพท์เต็ม"</string> <string name="accessibility_no_data" msgid="4563181886936931008">"ไม่มีข้อมูล"</string> <string name="accessibility_data_one_bar" msgid="6892888138070752480">"สัญญาณข้อมูลหนึ่งขีด"</string> diff --git a/packages/SettingsLib/res/values-zh-rHK/strings.xml b/packages/SettingsLib/res/values-zh-rHK/strings.xml index 20541368b7ba..2545abf64cec 100644 --- a/packages/SettingsLib/res/values-zh-rHK/strings.xml +++ b/packages/SettingsLib/res/values-zh-rHK/strings.xml @@ -487,14 +487,10 @@ <string name="power_charging_duration" msgid="6127154952524919719">"<xliff:g id="LEVEL">%1$s</xliff:g> - <xliff:g id="TIME">%2$s</xliff:g>後充滿電"</string> <string name="power_charging_limited" msgid="8202147604844938236">"<xliff:g id="LEVEL">%1$s</xliff:g> - 已優化充電"</string> <string name="power_charging_future_paused" msgid="1809543660923642799">"<xliff:g id="LEVEL">%1$s</xliff:g> ‑ 充電中"</string> - <!-- no translation found for power_fast_charging_duration_v2 (3797735998640359490) --> - <skip /> - <!-- no translation found for power_charging_duration_v2 (2938998284074003248) --> - <skip /> - <!-- no translation found for power_remaining_charging_duration_only_v2 (5358176435722950193) --> - <skip /> - <!-- no translation found for power_remaining_fast_charging_duration_only_v2 (6270950195810579563) --> - <skip /> + <string name="power_fast_charging_duration_v2" msgid="3797735998640359490">"<xliff:g id="LEVEL">%1$s</xliff:g> - <xliff:g id="STATUS">%2$s</xliff:g> - <xliff:g id="TIME">%3$s</xliff:g> 前充飽"</string> + <string name="power_charging_duration_v2" msgid="2938998284074003248">"<xliff:g id="LEVEL">%1$s</xliff:g> - <xliff:g id="TIME">%2$s</xliff:g> 前充飽"</string> + <string name="power_remaining_charging_duration_only_v2" msgid="5358176435722950193">"<xliff:g id="TIME">%1$s</xliff:g> 前充飽"</string> + <string name="power_remaining_fast_charging_duration_only_v2" msgid="6270950195810579563">"<xliff:g id="TIME">%1$s</xliff:g> 前充飽"</string> <string name="battery_info_status_unknown" msgid="268625384868401114">"未知"</string> <string name="battery_info_status_charging" msgid="4279958015430387405">"充電中"</string> <string name="battery_info_status_charging_fast" msgid="8027559755902954885">"快速充電中"</string> @@ -506,10 +502,8 @@ <string name="battery_info_status_full" msgid="1339002294876531312">"已充滿電"</string> <string name="battery_info_status_full_charged" msgid="3536054261505567948">"充電完成"</string> <string name="battery_info_status_charging_on_hold" msgid="6364355145521694438">"目前暫停充電"</string> - <!-- no translation found for battery_info_status_charging_v2 (6118522107222245505) --> - <skip /> - <!-- no translation found for battery_info_status_charging_fast_v2 (1825439848151256589) --> - <skip /> + <string name="battery_info_status_charging_v2" msgid="6118522107222245505">"充電中"</string> + <string name="battery_info_status_charging_fast_v2" msgid="1825439848151256589">"快速充電"</string> <string name="disabled_by_admin_summary_text" msgid="5343911767402923057">"已由管理員停用"</string> <string name="disabled_by_app_ops_text" msgid="8373595926549098012">"由「受限設定」控制"</string> <string name="disabled" msgid="8017887509554714950">"已停用"</string> @@ -696,8 +690,7 @@ <string name="accessibility_phone_one_bar" msgid="5719721147018970063">"電話訊號強度為一格。"</string> <string name="accessibility_phone_two_bars" msgid="2531458337458953263">"電話訊號強度為兩格。"</string> <string name="accessibility_phone_three_bars" msgid="1523967995996696619">"電話訊號強度為三格。"</string> - <!-- no translation found for accessibility_phone_four_bars (4477202400261338403) --> - <skip /> + <string name="accessibility_phone_four_bars" msgid="4477202400261338403">"手機訊號滿格。"</string> <string name="accessibility_phone_signal_full" msgid="4302338883816077134">"電話訊號滿格。"</string> <string name="accessibility_no_data" msgid="4563181886936931008">"沒有數據網絡。"</string> <string name="accessibility_data_one_bar" msgid="6892888138070752480">"數據網絡訊號強度為一格。"</string> diff --git a/packages/SettingsLib/res/values-zh-rTW/strings.xml b/packages/SettingsLib/res/values-zh-rTW/strings.xml index 9996577f9f41..6aa0700dcf1f 100644 --- a/packages/SettingsLib/res/values-zh-rTW/strings.xml +++ b/packages/SettingsLib/res/values-zh-rTW/strings.xml @@ -487,14 +487,10 @@ <string name="power_charging_duration" msgid="6127154952524919719">"<xliff:g id="LEVEL">%1$s</xliff:g> - <xliff:g id="TIME">%2$s</xliff:g>後充飽"</string> <string name="power_charging_limited" msgid="8202147604844938236">"<xliff:g id="LEVEL">%1$s</xliff:g> - 充電效能已最佳化"</string> <string name="power_charging_future_paused" msgid="1809543660923642799">"<xliff:g id="LEVEL">%1$s</xliff:g> - 充電中"</string> - <!-- no translation found for power_fast_charging_duration_v2 (3797735998640359490) --> - <skip /> - <!-- no translation found for power_charging_duration_v2 (2938998284074003248) --> - <skip /> - <!-- no translation found for power_remaining_charging_duration_only_v2 (5358176435722950193) --> - <skip /> - <!-- no translation found for power_remaining_fast_charging_duration_only_v2 (6270950195810579563) --> - <skip /> + <string name="power_fast_charging_duration_v2" msgid="3797735998640359490">"<xliff:g id="LEVEL">%1$s</xliff:g> - <xliff:g id="STATUS">%2$s</xliff:g> - <xliff:g id="TIME">%3$s</xliff:g> 前充飽"</string> + <string name="power_charging_duration_v2" msgid="2938998284074003248">"<xliff:g id="LEVEL">%1$s</xliff:g> - <xliff:g id="TIME">%2$s</xliff:g> 前充飽"</string> + <string name="power_remaining_charging_duration_only_v2" msgid="5358176435722950193">"<xliff:g id="TIME">%1$s</xliff:g> 前充飽"</string> + <string name="power_remaining_fast_charging_duration_only_v2" msgid="6270950195810579563">"<xliff:g id="TIME">%1$s</xliff:g> 前充飽"</string> <string name="battery_info_status_unknown" msgid="268625384868401114">"不明"</string> <string name="battery_info_status_charging" msgid="4279958015430387405">"充電中"</string> <string name="battery_info_status_charging_fast" msgid="8027559755902954885">"快速充電中"</string> @@ -506,10 +502,8 @@ <string name="battery_info_status_full" msgid="1339002294876531312">"充電完成"</string> <string name="battery_info_status_full_charged" msgid="3536054261505567948">"充電完成"</string> <string name="battery_info_status_charging_on_hold" msgid="6364355145521694438">"目前暫停充電"</string> - <!-- no translation found for battery_info_status_charging_v2 (6118522107222245505) --> - <skip /> - <!-- no translation found for battery_info_status_charging_fast_v2 (1825439848151256589) --> - <skip /> + <string name="battery_info_status_charging_v2" msgid="6118522107222245505">"充電中"</string> + <string name="battery_info_status_charging_fast_v2" msgid="1825439848151256589">"快速充電"</string> <string name="disabled_by_admin_summary_text" msgid="5343911767402923057">"已由管理員停用"</string> <string name="disabled_by_app_ops_text" msgid="8373595926549098012">"由受限制的設定控管"</string> <string name="disabled" msgid="8017887509554714950">"已停用"</string> @@ -696,8 +690,7 @@ <string name="accessibility_phone_one_bar" msgid="5719721147018970063">"電話訊號強度一格。"</string> <string name="accessibility_phone_two_bars" msgid="2531458337458953263">"電話訊號強度兩格。"</string> <string name="accessibility_phone_three_bars" msgid="1523967995996696619">"電話訊號強度三格。"</string> - <!-- no translation found for accessibility_phone_four_bars (4477202400261338403) --> - <skip /> + <string name="accessibility_phone_four_bars" msgid="4477202400261338403">"手機訊號滿格。"</string> <string name="accessibility_phone_signal_full" msgid="4302338883816077134">"電話訊號滿格。"</string> <string name="accessibility_no_data" msgid="4563181886936931008">"沒有數據網路。"</string> <string name="accessibility_data_one_bar" msgid="6892888138070752480">"數據網路訊號強度一格。"</string> diff --git a/packages/SettingsLib/res/values/strings.xml b/packages/SettingsLib/res/values/strings.xml index fbbed921de1d..5025058afeff 100644 --- a/packages/SettingsLib/res/values/strings.xml +++ b/packages/SettingsLib/res/values/strings.xml @@ -234,6 +234,8 @@ <string name="bluetooth_battery_level_untethered_left_lea_support">Connected (supports audio sharing), left <xliff:g id="battery_level_as_percentage" example="25%">%1$s</xliff:g></string> <!-- Connected devices settings. Message when Bluetooth is connected but not in use, showing remote device battery level for the right part of the untethered headset, supports audio sharing. [CHAR LIMIT=NONE] --> <string name="bluetooth_battery_level_untethered_right_lea_support">Connected (supports audio sharing), right <xliff:g id="battery_level_as_percentage" example="25%">%1$s</xliff:g></string> + <!-- Connected devices settings. Message when Bluetooth is connected but not in use, showing no battery information, supports audio sharing. [CHAR LIMIT=NONE] --> + <string name="bluetooth_no_battery_level_lea_support">Connected (supports audio sharing)</string> <!-- Connected devices settings. Message when Bluetooth is connected and active for media only but no battery information, showing remote device status. [CHAR LIMIT=NONE] --> <string name="bluetooth_active_media_only_no_battery_level">Active (media only)</string> <!-- Connected devices settings. Message shown when bluetooth device is disconnected but is a known, previously connected device, supports audio sharing [CHAR LIMIT=NONE] --> diff --git a/packages/SettingsLib/src/com/android/settingslib/Utils.java b/packages/SettingsLib/src/com/android/settingslib/Utils.java index 563f02d95f3c..c2506d353d14 100644 --- a/packages/SettingsLib/src/com/android/settingslib/Utils.java +++ b/packages/SettingsLib/src/com/android/settingslib/Utils.java @@ -765,7 +765,11 @@ public class Utils { return false; } - final List<UsbPort> usbPortList = context.getSystemService(UsbManager.class).getPorts(); + final UsbManager usbManager = context.getSystemService(UsbManager.class); + if (usbManager == null) { + return false; + } + final List<UsbPort> usbPortList = usbManager.getPorts(); if (usbPortList == null || usbPortList.isEmpty()) { return false; } diff --git a/packages/SettingsLib/src/com/android/settingslib/bluetooth/BluetoothUtils.java b/packages/SettingsLib/src/com/android/settingslib/bluetooth/BluetoothUtils.java index a906875e11ef..3dffb275f917 100644 --- a/packages/SettingsLib/src/com/android/settingslib/bluetooth/BluetoothUtils.java +++ b/packages/SettingsLib/src/com/android/settingslib/bluetooth/BluetoothUtils.java @@ -534,11 +534,16 @@ public class BluetoothUtils { /** Returns if the le audio sharing is enabled. */ public static boolean isAudioSharingEnabled() { BluetoothAdapter adapter = BluetoothAdapter.getDefaultAdapter(); - return Flags.enableLeAudioSharing() - && adapter.isLeAudioBroadcastSourceSupported() - == BluetoothStatusCodes.FEATURE_SUPPORTED - && adapter.isLeAudioBroadcastAssistantSupported() - == BluetoothStatusCodes.FEATURE_SUPPORTED; + try { + return Flags.enableLeAudioSharing() + && adapter.isLeAudioBroadcastSourceSupported() + == BluetoothStatusCodes.FEATURE_SUPPORTED + && adapter.isLeAudioBroadcastAssistantSupported() + == BluetoothStatusCodes.FEATURE_SUPPORTED; + } catch (IllegalStateException e) { + Log.d(TAG, "LE state is on, but there is no bluetooth service.", e); + return false; + } } /** Returns if the broadcast is on-going. */ @@ -790,4 +795,27 @@ public class BluetoothUtils { public static Set<String> getExclusiveManagers() { return EXCLUSIVE_MANAGERS; } + + /** + * Get CSIP group id for {@link CachedBluetoothDevice}. + * + * <p>If CachedBluetoothDevice#getGroupId is invalid, fetch group id from + * LeAudioProfile#getGroupId. + */ + public static int getGroupId(@NonNull CachedBluetoothDevice cachedDevice) { + int groupId = cachedDevice.getGroupId(); + String anonymizedAddress = cachedDevice.getDevice().getAnonymizedAddress(); + if (groupId != BluetoothCsipSetCoordinator.GROUP_ID_INVALID) { + Log.d(TAG, "getGroupId by CSIP profile for device: " + anonymizedAddress); + return groupId; + } + for (LocalBluetoothProfile profile : cachedDevice.getProfiles()) { + if (profile instanceof LeAudioProfile) { + Log.d(TAG, "getGroupId by LEA profile for device: " + anonymizedAddress); + return ((LeAudioProfile) profile).getGroupId(cachedDevice.getDevice()); + } + } + Log.d(TAG, "getGroupId return invalid id for device: " + anonymizedAddress); + return BluetoothCsipSetCoordinator.GROUP_ID_INVALID; + } } diff --git a/packages/SettingsLib/src/com/android/settingslib/bluetooth/CachedBluetoothDevice.java b/packages/SettingsLib/src/com/android/settingslib/bluetooth/CachedBluetoothDevice.java index 04516eba250e..36a9ecfe99f5 100644 --- a/packages/SettingsLib/src/com/android/settingslib/bluetooth/CachedBluetoothDevice.java +++ b/packages/SettingsLib/src/com/android/settingslib/bluetooth/CachedBluetoothDevice.java @@ -19,6 +19,7 @@ package com.android.settingslib.bluetooth; import static com.android.settingslib.flags.Flags.enableSetPreferredTransportForLeAudioDevice; import android.annotation.CallbackExecutor; +import android.annotation.StringRes; import android.bluetooth.BluetoothAdapter; import android.bluetooth.BluetoothClass; import android.bluetooth.BluetoothCsipSetCoordinator; @@ -37,6 +38,7 @@ import android.os.Looper; import android.os.Message; import android.os.ParcelUuid; import android.os.SystemClock; +import android.provider.Settings; import android.text.SpannableStringBuilder; import android.text.TextUtils; import android.text.style.ForegroundColorSpan; @@ -45,6 +47,7 @@ import android.util.LruCache; import android.util.Pair; import androidx.annotation.NonNull; +import androidx.annotation.Nullable; import androidx.annotation.VisibleForTesting; import com.android.internal.util.ArrayUtils; @@ -102,6 +105,7 @@ public class CachedBluetoothDevice implements Comparable<CachedBluetoothDevice> private HearingAidInfo mHearingAidInfo; private int mGroupId; private Timestamp mBondTimestamp; + private LocalBluetoothManager mBluetoothManager; // Need this since there is no method for getting RSSI short mRssi; @@ -722,6 +726,25 @@ public class CachedBluetoothDevice implements Comparable<CachedBluetoothDevice> .orElse(BluetoothDevice.BATTERY_LEVEL_UNKNOWN); } + /** + * Get the lowest battery level from remote device and its member devices if it's greater than + * BluetoothDevice.BATTERY_LEVEL_UNKNOWN. + * + * <p>Android framework should only set mBatteryLevel to valid range [0-100], + * BluetoothDevice.BATTERY_LEVEL_BLUETOOTH_OFF, or BluetoothDevice.BATTERY_LEVEL_UNKNOWN, any + * other value should be a framework bug. Thus assume here that if value is greater than + * BluetoothDevice.BATTERY_LEVEL_UNKNOWN, it must be valid + * + * @return battery level in String [0-100] or Null if this lower than + * BluetoothDevice.BATTERY_LEVEL_UNKNOWN + */ + @Nullable + private String getValidMinBatteryLevelWithMemberDevices() { + final int batteryLevel = getMinBatteryLevelWithMemberDevices(); + return batteryLevel > BluetoothDevice.BATTERY_LEVEL_UNKNOWN + ? com.android.settingslib.Utils.formatPercentage(batteryLevel) + : null; + } void refresh() { ListenableFuture<Void> future = ThreadUtils.getBackgroundExecutor().submit(() -> { @@ -1194,22 +1217,148 @@ public class CachedBluetoothDevice implements Comparable<CachedBluetoothDevice> } /** - * Return summary that describes connection state of this device. Summary depends on: - * 1. Whether device has battery info - * 2. Whether device is in active usage(or in phone call) + * Return summary that describes connection state of this device. Summary depends on: 1. Whether + * device has battery info 2. Whether device is in active usage(or in phone call) 3. Whether + * device is in audio sharing process * * @param shortSummary {@code true} if need to return short version summary */ public String getConnectionSummary(boolean shortSummary) { - CharSequence summary = getConnectionSummary(shortSummary, false /* isTvSummary */, - SUMMARY_NO_COLOR_FOR_LOW_BATTERY); - if (summary != null) { - return summary.toString(); + CharSequence summary = null; + if (BluetoothUtils.isAudioSharingEnabled()) { + if (mBluetoothManager == null) { + mBluetoothManager = LocalBluetoothManager.getInstance(mContext, null); + } + if (BluetoothUtils.isBroadcasting(mBluetoothManager)) { + summary = getBroadcastConnectionSummary(shortSummary); + } + } + if (summary == null) { + summary = + getConnectionSummary( + shortSummary, + false /* isTvSummary */, + SUMMARY_NO_COLOR_FOR_LOW_BATTERY); + } + return summary != null ? summary.toString() : null; + } + + /** + * Returns the connection summary of this device during le audio sharing. + * + * @param shortSummary {@code true} if need to return short version summary + */ + @Nullable + private String getBroadcastConnectionSummary(boolean shortSummary) { + if (isProfileConnectedFail() && isConnected()) { + return mContext.getString(R.string.profile_connect_timeout_subtext); + } + + synchronized (mProfileLock) { + for (LocalBluetoothProfile profile : getProfiles()) { + int connectionStatus = getProfileConnectionState(profile); + if (connectionStatus == BluetoothProfile.STATE_CONNECTING + || connectionStatus == BluetoothProfile.STATE_DISCONNECTING) { + return mContext.getString( + BluetoothUtils.getConnectionStateSummary(connectionStatus)); + } + } + } + + int leftBattery = + BluetoothUtils.getIntMetaData( + mDevice, BluetoothDevice.METADATA_UNTETHERED_LEFT_BATTERY); + int rightBattery = + BluetoothUtils.getIntMetaData( + mDevice, BluetoothDevice.METADATA_UNTETHERED_RIGHT_BATTERY); + String batteryLevelPercentageString = getValidMinBatteryLevelWithMemberDevices(); + + if (mBluetoothManager == null) { + mBluetoothManager = LocalBluetoothManager.getInstance(mContext, null); + } + if (BluetoothUtils.hasConnectedBroadcastSource(this, mBluetoothManager)) { + // Gets summary for the buds which are in the audio sharing. + int groupId = BluetoothUtils.getGroupId(this); + if (groupId != BluetoothCsipSetCoordinator.GROUP_ID_INVALID + && groupId + == Settings.Secure.getInt( + mContext.getContentResolver(), + "bluetooth_le_broadcast_fallback_active_group_id", + BluetoothCsipSetCoordinator.GROUP_ID_INVALID)) { + // The buds are primary buds + return getSummaryWithBatteryInfo( + R.string.bluetooth_active_battery_level_untethered, + R.string.bluetooth_active_battery_level, + R.string.bluetooth_active_no_battery_level, + leftBattery, + rightBattery, + batteryLevelPercentageString, + shortSummary); + } else { + // The buds are not primary buds + return getSummaryWithBatteryInfo( + R.string.bluetooth_active_media_only_battery_level_untethered, + R.string.bluetooth_active_media_only_battery_level, + R.string.bluetooth_active_media_only_no_battery_level, + leftBattery, + rightBattery, + batteryLevelPercentageString, + shortSummary); + } + } else { + // Gets summary for the buds which are not in the audio sharing. + if (getProfiles().stream() + .anyMatch( + profile -> + profile instanceof LeAudioProfile + && profile.isEnabled(getDevice()))) { + // The buds support le audio. + if (isConnected()) { + return getSummaryWithBatteryInfo( + R.string.bluetooth_battery_level_untethered_lea_support, + R.string.bluetooth_battery_level_lea_support, + R.string.bluetooth_no_battery_level_lea_support, + leftBattery, + rightBattery, + batteryLevelPercentageString, + shortSummary); + } else { + return mContext.getString(R.string.bluetooth_saved_device_lea_support); + } + } } return null; } /** + * Returns the summary with correct format depending the battery info. + * + * @param untetheredBatteryResId resource id for untethered device with battery info + * @param batteryResId resource id for device with single battery info + * @param noBatteryResId resource id for device with no battery info + * @param shortSummary {@code true} if need to return short version summary + */ + private String getSummaryWithBatteryInfo( + @StringRes int untetheredBatteryResId, + @StringRes int batteryResId, + @StringRes int noBatteryResId, + int leftBattery, + int rightBattery, + String batteryLevelPercentageString, + boolean shortSummary) { + if (isTwsBatteryAvailable(leftBattery, rightBattery) && !shortSummary) { + return mContext.getString( + untetheredBatteryResId, + Utils.formatPercentage(leftBattery), + Utils.formatPercentage(rightBattery)); + } else if (batteryLevelPercentageString != null && !shortSummary) { + return mContext.getString(batteryResId, batteryLevelPercentageString); + } else { + return mContext.getString(noBatteryResId); + } + } + + /** * Returns android tv string that describes the connection state of this device. */ public CharSequence getTvConnectionSummary() { @@ -1286,18 +1435,7 @@ public class CachedBluetoothDevice implements Comparable<CachedBluetoothDevice> } } - String batteryLevelPercentageString = null; - // Android framework should only set mBatteryLevel to valid range [0-100], - // BluetoothDevice.BATTERY_LEVEL_BLUETOOTH_OFF, or BluetoothDevice.BATTERY_LEVEL_UNKNOWN, - // any other value should be a framework bug. Thus assume here that if value is greater - // than BluetoothDevice.BATTERY_LEVEL_UNKNOWN, it must be valid - final int batteryLevel = getMinBatteryLevelWithMemberDevices(); - if (batteryLevel > BluetoothDevice.BATTERY_LEVEL_UNKNOWN) { - // TODO: name com.android.settingslib.bluetooth.Utils something different - batteryLevelPercentageString = - com.android.settingslib.Utils.formatPercentage(batteryLevel); - } - + String batteryLevelPercentageString = getValidMinBatteryLevelWithMemberDevices(); int stringRes = R.string.bluetooth_pairing; //when profile is connected, information would be available if (profileConnected) { @@ -1376,7 +1514,11 @@ public class CachedBluetoothDevice implements Comparable<CachedBluetoothDevice> || stringRes == R.string.bluetooth_active_battery_level_untethered || stringRes == R.string.bluetooth_battery_level_untethered; if (isTvSummary && summaryIncludesBatteryLevel && Flags.enableTvMediaOutputDialog()) { - return getTvBatterySummary(batteryLevel, leftBattery, rightBattery, lowBatteryColorRes); + return getTvBatterySummary( + getMinBatteryLevelWithMemberDevices(), + leftBattery, + rightBattery, + lowBatteryColorRes); } if (isTwsBatteryAvailable(leftBattery, rightBattery)) { @@ -1793,4 +1935,9 @@ public class CachedBluetoothDevice implements Comparable<CachedBluetoothDevice> boolean getUnpairing() { return mUnpairing; } + + @VisibleForTesting + void setLocalBluetoothManager(LocalBluetoothManager bluetoothManager) { + mBluetoothManager = bluetoothManager; + } } diff --git a/packages/SettingsLib/src/com/android/settingslib/bluetooth/LocalBluetoothLeBroadcast.java b/packages/SettingsLib/src/com/android/settingslib/bluetooth/LocalBluetoothLeBroadcast.java index 9df23aa2fe29..a6b1dd3ae578 100644 --- a/packages/SettingsLib/src/com/android/settingslib/bluetooth/LocalBluetoothLeBroadcast.java +++ b/packages/SettingsLib/src/com/android/settingslib/bluetooth/LocalBluetoothLeBroadcast.java @@ -292,7 +292,6 @@ public class LocalBluetoothLeBroadcast implements LocalBluetoothProfile { + ", sourceId = " + sourceId); } - updateFallbackActiveDeviceIfNeeded(); } @Override @@ -314,7 +313,18 @@ public class LocalBluetoothLeBroadcast implements LocalBluetoothProfile { public void onSourceAddFailed( @NonNull BluetoothDevice sink, @NonNull BluetoothLeBroadcastMetadata source, - int reason) {} + int reason) { + if (DEBUG) { + Log.d( + TAG, + "onSourceAddFailed(), sink = " + + sink + + ", reason = " + + reason + + ", source = " + + source); + } + } @Override public void onSourceModified( @@ -369,6 +379,9 @@ public class LocalBluetoothLeBroadcast implements LocalBluetoothProfile { + ", state = " + state); } + if (BluetoothUtils.isConnected(state)) { + updateFallbackActiveDeviceIfNeeded(); + } } }; @@ -1056,7 +1069,9 @@ public class LocalBluetoothLeBroadcast implements LocalBluetoothProfile { List<BluetoothLeBroadcastReceiveState> sourceList = mServiceBroadcastAssistant.getAllSources( bluetoothDevice); - return !sourceList.isEmpty(); + return !sourceList.isEmpty() + && sourceList.stream() + .anyMatch(BluetoothUtils::isConnected); }) .collect(Collectors.toList()); if (devicesInSharing.isEmpty()) { @@ -1091,7 +1106,8 @@ public class LocalBluetoothLeBroadcast implements LocalBluetoothProfile { return; } int fallbackActiveGroupId = getFallbackActiveGroupId(); - if (getGroupId(targetCachedDevice) == fallbackActiveGroupId) { + if (fallbackActiveGroupId != BluetoothCsipSetCoordinator.GROUP_ID_INVALID + && getGroupId(targetCachedDevice) == fallbackActiveGroupId) { Log.d( TAG, "Skip updateFallbackActiveDeviceIfNeeded, already is fallback: " @@ -1101,12 +1117,6 @@ public class LocalBluetoothLeBroadcast implements LocalBluetoothProfile { targetCachedDevice.setActive(); } - private boolean isDecryptedSource(BluetoothLeBroadcastReceiveState state) { - return state.getPaSyncState() == BluetoothLeBroadcastReceiveState.PA_SYNC_STATE_SYNCHRONIZED - && state.getBigEncryptionState() - == BluetoothLeBroadcastReceiveState.BIG_ENCRYPTION_STATE_DECRYPTING; - } - private int getFallbackActiveGroupId() { return Settings.Secure.getInt( mContext.getContentResolver(), diff --git a/packages/SettingsLib/src/com/android/settingslib/utils/PowerUtil.java b/packages/SettingsLib/src/com/android/settingslib/utils/PowerUtil.java index 5ed59996bee3..2da622139b79 100644 --- a/packages/SettingsLib/src/com/android/settingslib/utils/PowerUtil.java +++ b/packages/SettingsLib/src/com/android/settingslib/utils/PowerUtil.java @@ -16,6 +16,8 @@ package com.android.settingslib.utils; +import static java.lang.Math.abs; + import android.content.Context; import android.icu.text.DateFormat; import android.icu.text.MeasureFormat; @@ -212,8 +214,8 @@ public class PowerUtil { * @return The rounded value as a long */ public static long roundTimeToNearestThreshold(long drainTime, long threshold) { - long time = Math.abs(drainTime); - long multiple = Math.abs(threshold); + long time = abs(drainTime); + long multiple = abs(threshold); final long remainder = time % multiple; if (remainder < multiple / 2) { return time - remainder; @@ -222,18 +224,24 @@ public class PowerUtil { } } - /** Gets the rounded target time string in a short format. */ + /** Gets the target time string in a short format. */ public static String getTargetTimeShortString( Context context, long targetTimeOffsetMs, long currentTimeMs) { - final long roundedTimeOfDayMs = - roundTimeToNearestThreshold( - currentTimeMs + targetTimeOffsetMs, FIFTEEN_MINUTES_MILLIS); + long targetTimeMs = currentTimeMs + targetTimeOffsetMs; + if (targetTimeOffsetMs >= FIFTEEN_MINUTES_MILLIS) { + targetTimeMs = roundUpTimeToNextThreshold(targetTimeMs, FIFTEEN_MINUTES_MILLIS); + } // convert the time to a properly formatted string. String skeleton = android.text.format.DateFormat.getTimeFormatString(context); DateFormat fmt = DateFormat.getInstanceForSkeleton(skeleton); - Date date = Date.from(Instant.ofEpochMilli(roundedTimeOfDayMs)); + Date date = Date.from(Instant.ofEpochMilli(targetTimeMs)); return fmt.format(date); } -} + private static long roundUpTimeToNextThreshold(long timeMs, long threshold) { + var time = abs(timeMs); + var multiple = abs(threshold); + return ((time + multiple - 1) / multiple) * multiple; + } +} diff --git a/packages/SettingsLib/tests/robotests/src/com/android/settingslib/bluetooth/CachedBluetoothDeviceTest.java b/packages/SettingsLib/tests/robotests/src/com/android/settingslib/bluetooth/CachedBluetoothDeviceTest.java index 646e9ebd4f09..1b5d3a39713b 100644 --- a/packages/SettingsLib/tests/robotests/src/com/android/settingslib/bluetooth/CachedBluetoothDeviceTest.java +++ b/packages/SettingsLib/tests/robotests/src/com/android/settingslib/bluetooth/CachedBluetoothDeviceTest.java @@ -15,6 +15,7 @@ */ package com.android.settingslib.bluetooth; +import static com.android.settingslib.flags.Flags.FLAG_ENABLE_LE_AUDIO_SHARING; import static com.android.settingslib.flags.Flags.FLAG_ENABLE_SET_PREFERRED_TRANSPORT_FOR_LE_AUDIO_DEVICE; import static com.google.common.truth.Truth.assertThat; @@ -30,14 +31,17 @@ import static org.mockito.Mockito.verify; import static org.mockito.Mockito.when; import android.bluetooth.BluetoothAdapter; +import android.bluetooth.BluetoothCsipSetCoordinator; import android.bluetooth.BluetoothDevice; import android.bluetooth.BluetoothLeAudio; +import android.bluetooth.BluetoothLeBroadcastReceiveState; import android.bluetooth.BluetoothProfile; import android.bluetooth.BluetoothStatusCodes; import android.content.Context; import android.graphics.drawable.BitmapDrawable; import android.media.AudioManager; import android.platform.test.flag.junit.SetFlagsRule; +import android.provider.Settings; import android.text.Spannable; import android.text.style.ForegroundColorSpan; import android.util.LruCache; @@ -47,6 +51,8 @@ import com.android.settingslib.media.flags.Flags; import com.android.settingslib.testutils.shadow.ShadowBluetoothAdapter; import com.android.settingslib.widget.AdaptiveOutlineDrawable; +import com.google.common.collect.ImmutableList; + import org.junit.Before; import org.junit.Rule; import org.junit.Test; @@ -58,6 +64,9 @@ import org.robolectric.RuntimeEnvironment; import org.robolectric.annotation.Config; import org.robolectric.shadow.api.Shadow; +import java.util.ArrayList; +import java.util.List; + @RunWith(RobolectricTestRunner.class) @Config(shadows = {ShadowBluetoothAdapter.class}) public class CachedBluetoothDeviceTest { @@ -95,6 +104,14 @@ public class CachedBluetoothDeviceTest { private BluetoothDevice mDevice; @Mock private BluetoothDevice mSubDevice; + @Mock + private LocalBluetoothLeBroadcast mBroadcast; + @Mock + private LocalBluetoothManager mLocalBluetoothManager; + @Mock + private LocalBluetoothLeBroadcastAssistant mAssistant; + @Mock + private BluetoothLeBroadcastReceiveState mLeBroadcastReceiveState; private CachedBluetoothDevice mCachedDevice; private CachedBluetoothDevice mSubCachedDevice; private AudioManager mAudioManager; @@ -110,9 +127,14 @@ public class CachedBluetoothDeviceTest { MockitoAnnotations.initMocks(this); mSetFlagsRule.enableFlags(Flags.FLAG_ENABLE_TV_MEDIA_OUTPUT_DIALOG); mSetFlagsRule.enableFlags(FLAG_ENABLE_SET_PREFERRED_TRANSPORT_FOR_LE_AUDIO_DEVICE); + mSetFlagsRule.enableFlags(FLAG_ENABLE_LE_AUDIO_SHARING); mContext = RuntimeEnvironment.application; mAudioManager = mContext.getSystemService(AudioManager.class); mShadowBluetoothAdapter = Shadow.extract(BluetoothAdapter.getDefaultAdapter()); + mShadowBluetoothAdapter.setIsLeAudioBroadcastSourceSupported( + BluetoothStatusCodes.FEATURE_SUPPORTED); + mShadowBluetoothAdapter.setIsLeAudioBroadcastAssistantSupported( + BluetoothStatusCodes.FEATURE_SUPPORTED); when(mDevice.getAddress()).thenReturn(DEVICE_ADDRESS); when(mHfpProfile.isProfileReady()).thenReturn(true); when(mHfpProfile.getProfileId()).thenReturn(BluetoothProfile.HEADSET); @@ -126,7 +148,12 @@ public class CachedBluetoothDeviceTest { when(mLeAudioProfile.getProfileId()).thenReturn(BluetoothProfile.LE_AUDIO); when(mHidProfile.isProfileReady()).thenReturn(true); when(mHidProfile.getProfileId()).thenReturn(BluetoothProfile.HID_HOST); + when(mLocalBluetoothManager.getProfileManager()).thenReturn(mProfileManager); + when(mBroadcast.isEnabled(any())).thenReturn(false); + when(mProfileManager.getLeAudioBroadcastProfile()).thenReturn(mBroadcast); + when(mProfileManager.getLeAudioBroadcastAssistantProfile()).thenReturn(mAssistant); mCachedDevice = spy(new CachedBluetoothDevice(mContext, mProfileManager, mDevice)); + mCachedDevice.setLocalBluetoothManager(mLocalBluetoothManager); mSubCachedDevice = spy(new CachedBluetoothDevice(mContext, mProfileManager, mSubDevice)); doAnswer((invocation) -> mBatteryLevel).when(mCachedDevice).getBatteryLevel(); doAnswer((invocation) -> mBatteryLevel).when(mSubCachedDevice).getBatteryLevel(); @@ -1853,6 +1880,91 @@ public class CachedBluetoothDeviceTest { verify(mHidProfile).setPreferredTransport(mDevice, BluetoothDevice.TRANSPORT_BREDR); } + @Test + public void getConnectionSummary_isBroadcastPrimary_returnActive() { + when(mBroadcast.isEnabled(any())).thenReturn(true); + when(mCachedDevice.getDevice()).thenReturn(mDevice); + Settings.Secure.putInt( + mContext.getContentResolver(), + "bluetooth_le_broadcast_fallback_active_group_id", + 1); + + List<Long> bisSyncState = new ArrayList<>(); + bisSyncState.add(1L); + when(mLeBroadcastReceiveState.getBisSyncState()).thenReturn(bisSyncState); + List<BluetoothLeBroadcastReceiveState> sourceList = new ArrayList<>(); + sourceList.add(mLeBroadcastReceiveState); + when(mAssistant.getAllSources(any())).thenReturn(sourceList); + + when(mCachedDevice.getGroupId()) + .thenReturn( + Settings.Secure.getInt( + mContext.getContentResolver(), + "bluetooth_le_broadcast_fallback_active_group_id", + BluetoothCsipSetCoordinator.GROUP_ID_INVALID)); + + assertThat(mCachedDevice.getConnectionSummary(false)) + .isEqualTo(mContext.getString(R.string.bluetooth_active_no_battery_level)); + } + + @Test + public void getConnectionSummary_isBroadcastNotPrimary_returnActiveMedia() { + when(mBroadcast.isEnabled(any())).thenReturn(true); + when(mCachedDevice.getDevice()).thenReturn(mDevice); + Settings.Secure.putInt( + mContext.getContentResolver(), + "bluetooth_le_broadcast_fallback_active_group_id", + 1); + + List<Long> bisSyncState = new ArrayList<>(); + bisSyncState.add(1L); + when(mLeBroadcastReceiveState.getBisSyncState()).thenReturn(bisSyncState); + List<BluetoothLeBroadcastReceiveState> sourceList = new ArrayList<>(); + sourceList.add(mLeBroadcastReceiveState); + when(mAssistant.getAllSources(any())).thenReturn(sourceList); + + when(mCachedDevice.getGroupId()).thenReturn(BluetoothCsipSetCoordinator.GROUP_ID_INVALID); + + assertThat(mCachedDevice.getConnectionSummary(false)) + .isEqualTo( + mContext.getString(R.string.bluetooth_active_media_only_no_battery_level)); + } + + @Test + public void getConnectionSummary_supportBroadcastConnected_returnConnectedSupportLe() { + when(mBroadcast.isEnabled(any())).thenReturn(true); + when(mCachedDevice.getDevice()).thenReturn(mDevice); + when(mLeAudioProfile.isEnabled(mDevice)).thenReturn(true); + + when(mCachedDevice.getProfiles()).thenReturn(ImmutableList.of(mLeAudioProfile)); + when(mCachedDevice.isConnected()).thenReturn(true); + + assertThat(mCachedDevice.getConnectionSummary(false)) + .isEqualTo(mContext.getString(R.string.bluetooth_no_battery_level_lea_support)); + } + + @Test + public void getConnectionSummary_supportBroadcastNotConnected_returnSupportLe() { + when(mBroadcast.isEnabled(any())).thenReturn(true); + when(mCachedDevice.getDevice()).thenReturn(mDevice); + when(mLeAudioProfile.isEnabled(mDevice)).thenReturn(true); + + when(mCachedDevice.getProfiles()).thenReturn(ImmutableList.of(mLeAudioProfile)); + when(mCachedDevice.isConnected()).thenReturn(false); + + assertThat(mCachedDevice.getConnectionSummary(false)) + .isEqualTo(mContext.getString(R.string.bluetooth_saved_device_lea_support)); + } + + @Test + public void getConnectionSummary_doNotSupportBroadcast_returnNull() { + when(mBroadcast.isEnabled(any())).thenReturn(true); + + when(mCachedDevice.getProfiles()).thenReturn(ImmutableList.of()); + + assertThat(mCachedDevice.getConnectionSummary(false)).isNull(); + } + private HearingAidInfo getLeftAshaHearingAidInfo() { return new HearingAidInfo.Builder() .setAshaDeviceSide(HearingAidProfile.DeviceSide.SIDE_LEFT) diff --git a/packages/SettingsLib/tests/robotests/src/com/android/settingslib/utils/PowerUtilTest.java b/packages/SettingsLib/tests/robotests/src/com/android/settingslib/utils/PowerUtilTest.java index cbc382b6b920..4f3b2005b197 100644 --- a/packages/SettingsLib/tests/robotests/src/com/android/settingslib/utils/PowerUtilTest.java +++ b/packages/SettingsLib/tests/robotests/src/com/android/settingslib/utils/PowerUtilTest.java @@ -87,15 +87,31 @@ public class PowerUtilTest { } @Test - public void getTargetTimeShortString_returnsTimeShortString() { + public void getTargetTimeShortString_lessThan15Minutes_returnsTimeShortStringWithoutRounded() { mContext.getSystemService(AlarmManager.class).setTimeZone("UTC"); mContext.getResources().getConfiguration().setLocale(Locale.US); var currentTimeMs = Instant.parse("2024-06-06T15:00:00Z").toEpochMilli(); - var remainingTimeMs = Duration.ofMinutes(30).toMillis(); + var remainingTimeMs = Duration.ofMinutes(15).toMillis() - 1; var actualTimeString = PowerUtil.getTargetTimeShortString(mContext, remainingTimeMs, currentTimeMs); - assertThat(actualTimeString).isEqualTo("3:30 PM"); + // due to timezone issue in test case, focus on rounded minutes, remove hours part. + assertThat(actualTimeString).endsWith("14 PM"); + } + + @Test + public void getTargetTimeShortString_moreThan15Minutes_returnsTimeShortStringWithRounded() { + mContext.getSystemService(AlarmManager.class).setTimeZone("UTC"); + mContext.getResources().getConfiguration().setLocale(Locale.US); + var currentTimeMs = Instant.parse("2024-06-06T15:00:00Z").toEpochMilli(); + var remainingTimeMs = Duration.ofMinutes(15).toMillis() + 1; + + var actualTimeString = + PowerUtil.getTargetTimeShortString(mContext, remainingTimeMs, currentTimeMs); + + // due to timezone issue in test case, focus on rounded minutes, remove hours part. + assertThat(actualTimeString).endsWith("30 PM"); + } } diff --git a/packages/SystemUI/accessibility/accessibilitymenu/res/values-or/strings.xml b/packages/SystemUI/accessibility/accessibilitymenu/res/values-or/strings.xml index 3a40b9f2511d..0310c865c786 100644 --- a/packages/SystemUI/accessibility/accessibilitymenu/res/values-or/strings.xml +++ b/packages/SystemUI/accessibility/accessibilitymenu/res/values-or/strings.xml @@ -10,7 +10,7 @@ <string name="power_utterance" msgid="7444296686402104807">"ପାୱର୍ ବିକଳ୍ପ"</string> <string name="recent_apps_label" msgid="6583276995616385847">"ବର୍ତ୍ତମାନର ଆପ୍"</string> <string name="lockscreen_label" msgid="648347953557887087">"ସ୍କ୍ରୀନ୍ ଲକ୍ କରନ୍ତୁ"</string> - <string name="quick_settings_label" msgid="2999117381487601865">"କ୍ୱିକ ସେଟିଂସ"</string> + <string name="quick_settings_label" msgid="2999117381487601865">"କୁଇକ ସେଟିଂସ"</string> <string name="notifications_label" msgid="6829741046963013567">"ବିଜ୍ଞପ୍ତି"</string> <string name="screenshot_label" msgid="863978141223970162">"ସ୍କ୍ରିନସଟ"</string> <string name="screenshot_utterance" msgid="1430760563401895074">"ସ୍କ୍ରୀନଶଟ୍ ନିଅନ୍ତୁ"</string> diff --git a/packages/SystemUI/compose/core/Android.bp b/packages/SystemUI/compose/core/Android.bp index 4f7a43e7cb1c..49ae821dd2fb 100644 --- a/packages/SystemUI/compose/core/Android.bp +++ b/packages/SystemUI/compose/core/Android.bp @@ -38,6 +38,7 @@ android_library { "androidx.compose.material3_material3-window-size-class", "androidx.savedstate_savedstate", "androidx.window_window", + "//frameworks/libs/systemui:tracinglib-platform", ], kotlincflags: ["-Xjvm-default=all"], diff --git a/packages/SystemUI/compose/core/src/com/android/compose/modifiers/MeasureTracing.kt b/packages/SystemUI/compose/core/src/com/android/compose/modifiers/MeasureTracing.kt new file mode 100644 index 000000000000..9ce6cd11a2b0 --- /dev/null +++ b/packages/SystemUI/compose/core/src/com/android/compose/modifiers/MeasureTracing.kt @@ -0,0 +1,32 @@ +/* + * Copyright (C) 2024 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.compose.modifiers + +import androidx.compose.ui.Modifier +import androidx.compose.ui.layout.layout +import androidx.compose.ui.unit.IntOffset +import com.android.app.tracing.traceSection + +/** Adds perfetto markers for the measure + layout stages. */ +inline fun Modifier.measureTracer(crossinline traceNameProducer: () -> String): Modifier { + return layout { measurable, constraints -> + traceSection(traceNameProducer) { + val placeable = measurable.measure(constraints) + layout(placeable.width, placeable.height) { placeable.placeRelative(IntOffset.Zero) } + } + } +} diff --git a/packages/SystemUI/compose/features/src/com/android/systemui/common/ui/compose/windowinsets/ScreenDecorProvider.kt b/packages/SystemUI/compose/features/src/com/android/systemui/common/ui/compose/windowinsets/ScreenDecorProvider.kt index 76bd4ec2778a..8144d15020fa 100644 --- a/packages/SystemUI/compose/features/src/com/android/systemui/common/ui/compose/windowinsets/ScreenDecorProvider.kt +++ b/packages/SystemUI/compose/features/src/com/android/systemui/common/ui/compose/windowinsets/ScreenDecorProvider.kt @@ -16,11 +16,16 @@ package com.android.systemui.common.ui.compose.windowinsets +import androidx.compose.foundation.layout.WindowInsets +import androidx.compose.foundation.layout.asPaddingValues +import androidx.compose.foundation.layout.displayCutout +import androidx.compose.foundation.layout.systemBars import androidx.compose.runtime.Composable import androidx.compose.runtime.CompositionLocalProvider import androidx.compose.runtime.collectAsState import androidx.compose.runtime.getValue import androidx.compose.runtime.staticCompositionLocalOf +import androidx.compose.ui.platform.LocalConfiguration import androidx.compose.ui.platform.LocalDensity import androidx.compose.ui.unit.dp import kotlinx.coroutines.flow.StateFlow @@ -31,6 +36,9 @@ val LocalDisplayCutout = staticCompositionLocalOf { DisplayCutout() } /** The corner radius in px of the current display. */ val LocalScreenCornerRadius = staticCompositionLocalOf { 0.dp } +/** The screen height in px without accounting for any screen insets (cutouts, status/nav bars) */ +val LocalRawScreenHeight = staticCompositionLocalOf { 0f } + @Composable fun ScreenDecorProvider( displayCutout: StateFlow<DisplayCutout>, @@ -39,9 +47,23 @@ fun ScreenDecorProvider( ) { val cutout by displayCutout.collectAsState() val screenCornerRadiusDp = with(LocalDensity.current) { screenCornerRadius.toDp() } + + val density = LocalDensity.current + val navBarHeight = + with(density) { WindowInsets.systemBars.asPaddingValues().calculateBottomPadding().toPx() } + val statusBarHeight = WindowInsets.systemBars.asPaddingValues().calculateTopPadding() + val displayCutoutHeight = WindowInsets.displayCutout.asPaddingValues().calculateTopPadding() + val screenHeight = + with(density) { + (LocalConfiguration.current.screenHeightDp.dp + + maxOf(statusBarHeight, displayCutoutHeight)) + .toPx() + } + navBarHeight + CompositionLocalProvider( LocalScreenCornerRadius provides screenCornerRadiusDp, - LocalDisplayCutout provides cutout + LocalDisplayCutout provides cutout, + LocalRawScreenHeight provides screenHeight, ) { content() } diff --git a/packages/SystemUI/compose/features/src/com/android/systemui/keyguard/ui/composable/section/DefaultClockSection.kt b/packages/SystemUI/compose/features/src/com/android/systemui/keyguard/ui/composable/section/DefaultClockSection.kt index eb389e609cc5..7095875447b4 100644 --- a/packages/SystemUI/compose/features/src/com/android/systemui/keyguard/ui/composable/section/DefaultClockSection.kt +++ b/packages/SystemUI/compose/features/src/com/android/systemui/keyguard/ui/composable/section/DefaultClockSection.kt @@ -60,6 +60,8 @@ constructor( modifier: Modifier = Modifier, ) { val currentClock by viewModel.currentClock.collectAsState() + val smallTopMargin by + viewModel.smallClockTopMargin.collectAsState(viewModel.getSmallClockTopMargin()) if (currentClock?.smallClock?.view == null) { return } @@ -75,7 +77,7 @@ constructor( modifier .height(dimensionResource(R.dimen.small_clock_height)) .padding(horizontal = dimensionResource(R.dimen.clock_padding_start)) - .padding(top = { viewModel.getSmallClockTopMargin(context) }) + .padding(top = { smallTopMargin }) .onTopPlacementChanged(onTopChanged) .burnInAware( viewModel = aodBurnInViewModel, @@ -107,13 +109,8 @@ constructor( 1f } - val distance = - if (transition.toScene == splitShadeLargeClockScene) { - -getClockCenteringDistance() - } else { - getClockCenteringDistance() - } - .toFloat() + val dir = if (transition.toScene == splitShadeLargeClockScene) -1f else 1f + val distance = dir * getClockCenteringDistance() val largeClock = checkNotNull(currentClock).largeClock largeClock.animations.onPositionUpdated( distance = distance, diff --git a/packages/SystemUI/compose/features/src/com/android/systemui/media/controls/ui/composable/MediaCarousel.kt b/packages/SystemUI/compose/features/src/com/android/systemui/media/controls/ui/composable/MediaCarousel.kt index d3e4553be209..f0d356c889a9 100644 --- a/packages/SystemUI/compose/features/src/com/android/systemui/media/controls/ui/composable/MediaCarousel.kt +++ b/packages/SystemUI/compose/features/src/com/android/systemui/media/controls/ui/composable/MediaCarousel.kt @@ -53,6 +53,11 @@ fun SceneScope.MediaCarousel( val mediaFrame = carouselController.mediaFrame (mediaFrame.parent as? ViewGroup)?.removeView(mediaFrame) addView(mediaFrame) + layoutParams = + FrameLayout.LayoutParams( + FrameLayout.LayoutParams.MATCH_PARENT, + FrameLayout.LayoutParams.MATCH_PARENT, + ) } }, update = { diff --git a/packages/SystemUI/compose/features/src/com/android/systemui/notifications/ui/composable/Notifications.kt b/packages/SystemUI/compose/features/src/com/android/systemui/notifications/ui/composable/Notifications.kt index 579e837a62d0..985d3a137914 100644 --- a/packages/SystemUI/compose/features/src/com/android/systemui/notifications/ui/composable/Notifications.kt +++ b/packages/SystemUI/compose/features/src/com/android/systemui/notifications/ui/composable/Notifications.kt @@ -24,7 +24,6 @@ import androidx.compose.foundation.layout.Box import androidx.compose.foundation.layout.Spacer import androidx.compose.foundation.layout.WindowInsets import androidx.compose.foundation.layout.asPaddingValues -import androidx.compose.foundation.layout.displayCutout import androidx.compose.foundation.layout.fillMaxSize import androidx.compose.foundation.layout.fillMaxWidth import androidx.compose.foundation.layout.offset @@ -57,7 +56,6 @@ import androidx.compose.ui.layout.onGloballyPositioned import androidx.compose.ui.layout.onPlaced import androidx.compose.ui.layout.onSizeChanged import androidx.compose.ui.layout.positionInWindow -import androidx.compose.ui.platform.LocalConfiguration import androidx.compose.ui.platform.LocalDensity import androidx.compose.ui.res.dimensionResource import androidx.compose.ui.unit.Dp @@ -67,15 +65,17 @@ import androidx.compose.ui.util.lerp import com.android.compose.animation.scene.ElementKey import com.android.compose.animation.scene.NestedScrollBehavior import com.android.compose.animation.scene.SceneScope +import com.android.compose.animation.scene.SceneTransitionLayoutState import com.android.compose.modifiers.height +import com.android.systemui.common.ui.compose.windowinsets.LocalRawScreenHeight import com.android.systemui.common.ui.compose.windowinsets.LocalScreenCornerRadius -import com.android.systemui.notifications.ui.composable.Notifications.TransitionThresholds.EXPANSION_FOR_MAX_CORNER_RADIUS -import com.android.systemui.notifications.ui.composable.Notifications.TransitionThresholds.EXPANSION_FOR_MAX_SCRIM_ALPHA import com.android.systemui.res.R import com.android.systemui.scene.shared.model.Scenes import com.android.systemui.shade.ui.composable.ShadeHeader import com.android.systemui.statusbar.notification.stack.shared.model.ShadeScrimBounds import com.android.systemui.statusbar.notification.stack.shared.model.ShadeScrimRounding +import com.android.systemui.statusbar.notification.stack.ui.viewmodel.NotificationTransitionThresholds.EXPANSION_FOR_MAX_CORNER_RADIUS +import com.android.systemui.statusbar.notification.stack.ui.viewmodel.NotificationTransitionThresholds.EXPANSION_FOR_MAX_SCRIM_ALPHA import com.android.systemui.statusbar.notification.stack.ui.viewmodel.NotificationsPlaceholderViewModel import kotlin.math.roundToInt @@ -168,14 +168,7 @@ fun SceneScope.NotificationScrollingStack( val navBarHeight = with(density) { WindowInsets.systemBars.asPaddingValues().calculateBottomPadding().toPx() } - val statusBarHeight = WindowInsets.systemBars.asPaddingValues().calculateTopPadding() - val displayCutoutHeight = WindowInsets.displayCutout.asPaddingValues().calculateTopPadding() - val screenHeight = - with(density) { - (LocalConfiguration.current.screenHeightDp.dp + - maxOf(statusBarHeight, displayCutoutHeight)) - .toPx() - } + navBarHeight + val screenHeight = LocalRawScreenHeight.current val stackHeight = viewModel.stackHeight.collectAsState() @@ -253,7 +246,7 @@ fun SceneScope.NotificationScrollingStack( scrimCornerRadius, screenCornerRadius, { expansionFraction }, - layoutState.isTransitioningBetween(Scenes.Gone, Scenes.Shade) + layoutState.isNotificationScrimTransitioning(), ) .let { scrimRounding.value.toRoundedCornerShape(it) } clip = true @@ -288,7 +281,7 @@ fun SceneScope.NotificationScrollingStack( Modifier.fillMaxSize() .graphicsLayer { alpha = - if (layoutState.isTransitioningBetween(Scenes.Gone, Scenes.Shade)) { + if (layoutState.isNotificationScrimTransitioning()) { (expansionFraction / EXPANSION_FOR_MAX_SCRIM_ALPHA).coerceAtMost(1f) } else 1f } @@ -425,7 +418,7 @@ private fun Modifier.debugBackground( this } -fun ShadeScrimRounding.toRoundedCornerShape(radius: Dp): RoundedCornerShape { +private fun ShadeScrimRounding.toRoundedCornerShape(radius: Dp): RoundedCornerShape { val topRadius = if (isTopRounded) radius else 0.dp val bottomRadius = if (isBottomRounded) radius else 0.dp return RoundedCornerShape( @@ -436,6 +429,13 @@ fun ShadeScrimRounding.toRoundedCornerShape(radius: Dp): RoundedCornerShape { ) } +private fun SceneTransitionLayoutState.isNotificationScrimTransitioning(): Boolean { + return isTransitioningBetween(Scenes.Gone, Scenes.Shade) || + isTransitioningBetween(Scenes.Lockscreen, Scenes.Shade) || + isTransitioningBetween(Scenes.Gone, Scenes.QuickSettings) || + isTransitioningBetween(Scenes.Lockscreen, Scenes.QuickSettings) +} + private const val TAG = "FlexiNotifs" private val DEBUG_STACK_COLOR = Color(1f, 0f, 0f, 0.2f) private val DEBUG_HUN_COLOR = Color(0f, 0f, 1f, 0.2f) diff --git a/packages/SystemUI/compose/features/src/com/android/systemui/qs/ui/composable/QuickSettingsScene.kt b/packages/SystemUI/compose/features/src/com/android/systemui/qs/ui/composable/QuickSettingsScene.kt index a3768346e7c6..fc32440e40fe 100644 --- a/packages/SystemUI/compose/features/src/com/android/systemui/qs/ui/composable/QuickSettingsScene.kt +++ b/packages/SystemUI/compose/features/src/com/android/systemui/qs/ui/composable/QuickSettingsScene.kt @@ -38,6 +38,7 @@ import androidx.compose.foundation.layout.fillMaxSize import androidx.compose.foundation.layout.fillMaxWidth import androidx.compose.foundation.layout.height import androidx.compose.foundation.layout.navigationBars +import androidx.compose.foundation.layout.offset import androidx.compose.foundation.layout.padding import androidx.compose.foundation.layout.wrapContentHeight import androidx.compose.foundation.rememberScrollState @@ -50,19 +51,23 @@ import androidx.compose.runtime.getValue import androidx.compose.runtime.remember import androidx.compose.ui.Alignment import androidx.compose.ui.Modifier +import androidx.compose.ui.graphics.CompositingStrategy import androidx.compose.ui.graphics.graphicsLayer import androidx.compose.ui.platform.LocalDensity import androidx.compose.ui.platform.LocalLifecycleOwner import androidx.compose.ui.res.colorResource +import androidx.compose.ui.unit.IntOffset import androidx.compose.ui.unit.dp import com.android.compose.animation.scene.SceneScope import com.android.compose.animation.scene.TransitionState import com.android.compose.animation.scene.animateSceneFloatAsState import com.android.compose.windowsizeclass.LocalWindowSizeClass import com.android.systemui.battery.BatteryMeterViewController +import com.android.systemui.common.ui.compose.windowinsets.LocalRawScreenHeight import com.android.systemui.compose.modifiers.sysuiResTag import com.android.systemui.dagger.SysUISingleton import com.android.systemui.dagger.qualifiers.Application +import com.android.systemui.notifications.ui.composable.NotificationScrollingStack import com.android.systemui.qs.footer.ui.compose.FooterActionsWithAnimatedVisibility import com.android.systemui.qs.ui.viewmodel.QuickSettingsSceneViewModel import com.android.systemui.res.R @@ -72,10 +77,12 @@ import com.android.systemui.shade.ui.composable.CollapsedShadeHeader import com.android.systemui.shade.ui.composable.ExpandedShadeHeader import com.android.systemui.shade.ui.composable.Shade import com.android.systemui.shade.ui.composable.ShadeHeader +import com.android.systemui.statusbar.notification.stack.ui.viewmodel.NotificationsPlaceholderViewModel import com.android.systemui.statusbar.phone.StatusBarIconController import com.android.systemui.statusbar.phone.StatusBarIconController.TintedIconManager import com.android.systemui.statusbar.phone.StatusBarLocation import javax.inject.Inject +import kotlin.math.roundToInt import kotlinx.coroutines.CoroutineScope import kotlinx.coroutines.flow.SharingStarted import kotlinx.coroutines.flow.stateIn @@ -87,6 +94,7 @@ class QuickSettingsScene constructor( @Application private val applicationScope: CoroutineScope, private val viewModel: QuickSettingsSceneViewModel, + private val notificationsPlaceholderViewModel: NotificationsPlaceholderViewModel, private val tintedIconManagerFactory: TintedIconManager.Factory, private val batteryMeterViewControllerFactory: BatteryMeterViewController.Factory, private val statusBarIconController: StatusBarIconController, @@ -106,6 +114,7 @@ constructor( ) { QuickSettingsScene( viewModel = viewModel, + notificationsPlaceholderViewModel = notificationsPlaceholderViewModel, createTintedIconManager = tintedIconManagerFactory::create, createBatteryMeterViewController = batteryMeterViewControllerFactory::create, statusBarIconController = statusBarIconController, @@ -117,6 +126,7 @@ constructor( @Composable private fun SceneScope.QuickSettingsScene( viewModel: QuickSettingsSceneViewModel, + notificationsPlaceholderViewModel: NotificationsPlaceholderViewModel, createTintedIconManager: (ViewGroup, StatusBarLocation) -> TintedIconManager, createBatteryMeterViewController: (ViewGroup, StatusBarLocation) -> BatteryMeterViewController, statusBarIconController: StatusBarIconController, @@ -135,8 +145,17 @@ private fun SceneScope.QuickSettingsScene( ) // TODO(b/280887232): implement the real UI. - Box(modifier = modifier.fillMaxSize().graphicsLayer { alpha = contentAlpha }) { + Box( + modifier = + modifier.fillMaxSize().graphicsLayer { + // Render the scene to an offscreen buffer so that BlendMode.DstOut only clears this + // scene (and not the one under it) during a scene transition. + compositingStrategy = CompositingStrategy.Offscreen + alpha = contentAlpha + } + ) { val isCustomizing by viewModel.qsSceneAdapter.isCustomizing.collectAsState() + val screenHeight = LocalRawScreenHeight.current BackHandler( enabled = isCustomizing, @@ -273,5 +292,11 @@ private fun SceneScope.QuickSettingsScene( modifier = Modifier.align(Alignment.CenterHorizontally), ) } + NotificationScrollingStack( + viewModel = notificationsPlaceholderViewModel, + maxScrimTop = { screenHeight }, + modifier = + Modifier.fillMaxWidth().offset { IntOffset(x = 0, y = screenHeight.roundToInt()) }, + ) } } diff --git a/packages/SystemUI/compose/features/src/com/android/systemui/scene/ui/composable/SceneContainer.kt b/packages/SystemUI/compose/features/src/com/android/systemui/scene/ui/composable/SceneContainer.kt index fe6701cc8d89..7af9b7bb90e9 100644 --- a/packages/SystemUI/compose/features/src/com/android/systemui/scene/ui/composable/SceneContainer.kt +++ b/packages/SystemUI/compose/features/src/com/android/systemui/scene/ui/composable/SceneContainer.kt @@ -37,8 +37,6 @@ import androidx.compose.ui.input.pointer.pointerInput import com.android.compose.animation.scene.MutableSceneTransitionLayoutState import com.android.compose.animation.scene.SceneKey import com.android.compose.animation.scene.SceneTransitionLayout -import com.android.compose.animation.scene.UserAction -import com.android.compose.animation.scene.UserActionResult import com.android.compose.animation.scene.observableTransitionState import com.android.systemui.ribbon.ui.composable.BottomRightCornerRibbon import com.android.systemui.scene.shared.model.SceneDataSourceDelegator @@ -71,9 +69,7 @@ fun SceneContainer( ) { val coroutineScope = rememberCoroutineScope() val currentSceneKey: SceneKey by viewModel.currentScene.collectAsState() - val currentScene = checkNotNull(sceneByKey[currentSceneKey]) - val currentDestinations: Map<UserAction, UserActionResult> by - currentScene.destinationScenes.collectAsState() + val currentDestinations by viewModel.currentDestinationScenes(coroutineScope).collectAsState() val state: MutableSceneTransitionLayoutState = remember { MutableSceneTransitionLayoutState( initialScene = currentSceneKey, diff --git a/packages/SystemUI/compose/features/src/com/android/systemui/scene/ui/composable/transitions/FromGoneToQuickSettingsTransition.kt b/packages/SystemUI/compose/features/src/com/android/systemui/scene/ui/composable/transitions/FromGoneToQuickSettingsTransition.kt index 5bd158349f5e..851719d387f5 100644 --- a/packages/SystemUI/compose/features/src/com/android/systemui/scene/ui/composable/transitions/FromGoneToQuickSettingsTransition.kt +++ b/packages/SystemUI/compose/features/src/com/android/systemui/scene/ui/composable/transitions/FromGoneToQuickSettingsTransition.kt @@ -1,12 +1,14 @@ package com.android.systemui.scene.ui.composable.transitions import androidx.compose.animation.core.tween -import com.android.compose.animation.scene.Edge import com.android.compose.animation.scene.TransitionBuilder -import com.android.systemui.scene.shared.model.Scenes +import kotlin.time.Duration.Companion.milliseconds -fun TransitionBuilder.goneToQuickSettingsTransition() { - spec = tween(durationMillis = 500) - - translate(Scenes.QuickSettings.rootElementKey, Edge.Top, true) +fun TransitionBuilder.goneToQuickSettingsTransition( + durationScale: Double = 1.0, +) { + spec = tween(durationMillis = (DefaultDuration * durationScale).inWholeMilliseconds.toInt()) + toQuickSettingsTransition() } + +private val DefaultDuration = 500.milliseconds diff --git a/packages/SystemUI/compose/features/src/com/android/systemui/scene/ui/composable/transitions/FromGoneToShadeTransition.kt b/packages/SystemUI/compose/features/src/com/android/systemui/scene/ui/composable/transitions/FromGoneToShadeTransition.kt index 9b59708fe81d..a0f410ab27fb 100644 --- a/packages/SystemUI/compose/features/src/com/android/systemui/scene/ui/composable/transitions/FromGoneToShadeTransition.kt +++ b/packages/SystemUI/compose/features/src/com/android/systemui/scene/ui/composable/transitions/FromGoneToShadeTransition.kt @@ -1,31 +1,14 @@ package com.android.systemui.scene.ui.composable.transitions import androidx.compose.animation.core.tween -import com.android.compose.animation.scene.Edge import com.android.compose.animation.scene.TransitionBuilder -import com.android.systemui.notifications.ui.composable.Notifications -import com.android.systemui.qs.ui.composable.QuickSettings -import com.android.systemui.shade.ui.composable.ShadeHeader import kotlin.time.Duration.Companion.milliseconds fun TransitionBuilder.goneToShadeTransition( durationScale: Double = 1.0, ) { - spec = tween(durationMillis = DefaultDuration.times(durationScale).inWholeMilliseconds.toInt()) - - fractionRange(start = .58f) { - fade(ShadeHeader.Elements.Clock) - fade(ShadeHeader.Elements.CollapsedContentStart) - fade(ShadeHeader.Elements.CollapsedContentEnd) - fade(ShadeHeader.Elements.PrivacyChip) - fade(QuickSettings.Elements.SplitShadeQuickSettings) - fade(QuickSettings.Elements.FooterActions) - } - translate( - QuickSettings.Elements.QuickQuickSettings, - y = -ShadeHeader.Dimensions.CollapsedHeight * .66f - ) - translate(Notifications.Elements.NotificationScrim, Edge.Top, false) + spec = tween(durationMillis = (DefaultDuration * durationScale).inWholeMilliseconds.toInt()) + toShadeTransition() } private val DefaultDuration = 500.milliseconds diff --git a/packages/SystemUI/compose/features/src/com/android/systemui/scene/ui/composable/transitions/FromLockscreenToQuickSettingsTransition.kt b/packages/SystemUI/compose/features/src/com/android/systemui/scene/ui/composable/transitions/FromLockscreenToQuickSettingsTransition.kt index 962d8227a016..319438c256dd 100644 --- a/packages/SystemUI/compose/features/src/com/android/systemui/scene/ui/composable/transitions/FromLockscreenToQuickSettingsTransition.kt +++ b/packages/SystemUI/compose/features/src/com/android/systemui/scene/ui/composable/transitions/FromLockscreenToQuickSettingsTransition.kt @@ -1,12 +1,14 @@ package com.android.systemui.scene.ui.composable.transitions import androidx.compose.animation.core.tween -import com.android.compose.animation.scene.Edge import com.android.compose.animation.scene.TransitionBuilder -import com.android.systemui.scene.shared.model.Scenes +import kotlin.time.Duration.Companion.milliseconds -fun TransitionBuilder.lockscreenToQuickSettingsTransition() { - spec = tween(durationMillis = 500) - - translate(Scenes.QuickSettings.rootElementKey, Edge.Top, true) +fun TransitionBuilder.lockscreenToQuickSettingsTransition( + durationScale: Double = 1.0, +) { + spec = tween(durationMillis = (DefaultDuration * durationScale).inWholeMilliseconds.toInt()) + toQuickSettingsTransition() } + +private val DefaultDuration = 500.milliseconds diff --git a/packages/SystemUI/compose/features/src/com/android/systemui/scene/ui/composable/transitions/FromLockscreenToShadeTransition.kt b/packages/SystemUI/compose/features/src/com/android/systemui/scene/ui/composable/transitions/FromLockscreenToShadeTransition.kt index 48ab68a6f097..f078b8c9b78b 100644 --- a/packages/SystemUI/compose/features/src/com/android/systemui/scene/ui/composable/transitions/FromLockscreenToShadeTransition.kt +++ b/packages/SystemUI/compose/features/src/com/android/systemui/scene/ui/composable/transitions/FromLockscreenToShadeTransition.kt @@ -2,23 +2,13 @@ package com.android.systemui.scene.ui.composable.transitions import androidx.compose.animation.core.tween import com.android.compose.animation.scene.TransitionBuilder -import com.android.systemui.notifications.ui.composable.Notifications -import com.android.systemui.qs.ui.composable.QuickSettings -import com.android.systemui.shade.ui.composable.Shade -import com.android.systemui.shade.ui.composable.ShadeHeader import kotlin.time.Duration.Companion.milliseconds fun TransitionBuilder.lockscreenToShadeTransition( durationScale: Double = 1.0, ) { - spec = tween(durationMillis = DefaultDuration.times(durationScale).inWholeMilliseconds.toInt()) - - fractionRange(end = 0.5f) { fade(Shade.Elements.BackgroundScrim) } - translate(QuickSettings.Elements.Content, y = -ShadeHeader.Dimensions.CollapsedHeight * .66f) - fractionRange(start = 0.5f) { - fade(QuickSettings.Elements.Content) - fade(Notifications.Elements.NotificationScrim) - } + spec = tween(durationMillis = (DefaultDuration * durationScale).inWholeMilliseconds.toInt()) + toShadeTransition() } private val DefaultDuration = 500.milliseconds diff --git a/packages/SystemUI/compose/features/src/com/android/systemui/scene/ui/composable/transitions/FromShadeToQuickSettingsTransition.kt b/packages/SystemUI/compose/features/src/com/android/systemui/scene/ui/composable/transitions/FromShadeToQuickSettingsTransition.kt index ffb6f3109015..a9e5be9b84d5 100644 --- a/packages/SystemUI/compose/features/src/com/android/systemui/scene/ui/composable/transitions/FromShadeToQuickSettingsTransition.kt +++ b/packages/SystemUI/compose/features/src/com/android/systemui/scene/ui/composable/transitions/FromShadeToQuickSettingsTransition.kt @@ -6,9 +6,12 @@ import com.android.compose.animation.scene.TransitionBuilder import com.android.systemui.notifications.ui.composable.Notifications import com.android.systemui.qs.ui.composable.QuickSettings import com.android.systemui.shade.ui.composable.ShadeHeader +import kotlin.time.Duration.Companion.milliseconds -fun TransitionBuilder.shadeToQuickSettingsTransition() { - spec = tween(durationMillis = 500) +fun TransitionBuilder.shadeToQuickSettingsTransition( + durationScale: Double = 1.0, +) { + spec = tween(durationMillis = (DefaultDuration * durationScale).inWholeMilliseconds.toInt()) translate(Notifications.Elements.NotificationScrim, Edge.Bottom) timestampRange(endMillis = 83) { fade(QuickSettings.Elements.FooterActions) } @@ -24,9 +27,15 @@ fun TransitionBuilder.shadeToQuickSettingsTransition() { ) translate(ShadeHeader.Elements.ShadeCarrierGroup, y = -ShadeHeader.Dimensions.CollapsedHeight) - fractionRange(end = .14f) { fade(ShadeHeader.Elements.CollapsedContentStart) } - fractionRange(end = .14f) { fade(ShadeHeader.Elements.CollapsedContentEnd) } + fractionRange(end = .14f) { + fade(ShadeHeader.Elements.CollapsedContentStart) + fade(ShadeHeader.Elements.CollapsedContentEnd) + } - fractionRange(start = .58f) { fade(ShadeHeader.Elements.ExpandedContent) } - fractionRange(start = .58f) { fade(ShadeHeader.Elements.ShadeCarrierGroup) } + fractionRange(start = .58f) { + fade(ShadeHeader.Elements.ExpandedContent) + fade(ShadeHeader.Elements.ShadeCarrierGroup) + } } + +private val DefaultDuration = 500.milliseconds diff --git a/packages/SystemUI/compose/features/src/com/android/systemui/scene/ui/composable/transitions/ToQuickSettingsTransition.kt b/packages/SystemUI/compose/features/src/com/android/systemui/scene/ui/composable/transitions/ToQuickSettingsTransition.kt new file mode 100644 index 000000000000..e0a6310634c0 --- /dev/null +++ b/packages/SystemUI/compose/features/src/com/android/systemui/scene/ui/composable/transitions/ToQuickSettingsTransition.kt @@ -0,0 +1,49 @@ +/* + * Copyright (C) 2024 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.scene.ui.composable.transitions + +import androidx.compose.animation.core.tween +import com.android.compose.animation.scene.Edge +import com.android.compose.animation.scene.TransitionBuilder +import com.android.systemui.notifications.ui.composable.Notifications +import com.android.systemui.qs.ui.composable.QuickSettings +import com.android.systemui.shade.ui.composable.ShadeHeader +import kotlin.time.Duration.Companion.milliseconds + +fun TransitionBuilder.toQuickSettingsTransition( + durationScale: Double = 1.0, +) { + spec = tween(durationMillis = (DefaultDuration * durationScale).inWholeMilliseconds.toInt()) + + translate( + ShadeHeader.Elements.ExpandedContent, + y = -(ShadeHeader.Dimensions.ExpandedHeight - ShadeHeader.Dimensions.CollapsedHeight) + ) + translate(ShadeHeader.Elements.Clock, y = -ShadeHeader.Dimensions.CollapsedHeight) + translate(ShadeHeader.Elements.ShadeCarrierGroup, y = -ShadeHeader.Dimensions.CollapsedHeight) + + fractionRange(start = .58f) { + fade(ShadeHeader.Elements.ExpandedContent) + fade(ShadeHeader.Elements.Clock) + fade(ShadeHeader.Elements.ShadeCarrierGroup) + } + + translate(QuickSettings.Elements.Content, y = -ShadeHeader.Dimensions.ExpandedHeight * .66f) + translate(Notifications.Elements.NotificationScrim, Edge.Top, false) +} + +private val DefaultDuration = 500.milliseconds diff --git a/packages/SystemUI/compose/features/src/com/android/systemui/scene/ui/composable/transitions/ToShadeTransition.kt b/packages/SystemUI/compose/features/src/com/android/systemui/scene/ui/composable/transitions/ToShadeTransition.kt new file mode 100644 index 000000000000..2f5921703367 --- /dev/null +++ b/packages/SystemUI/compose/features/src/com/android/systemui/scene/ui/composable/transitions/ToShadeTransition.kt @@ -0,0 +1,47 @@ +/* + * Copyright (C) 2024 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.scene.ui.composable.transitions + +import androidx.compose.animation.core.tween +import com.android.compose.animation.scene.Edge +import com.android.compose.animation.scene.TransitionBuilder +import com.android.systemui.notifications.ui.composable.Notifications +import com.android.systemui.qs.ui.composable.QuickSettings +import com.android.systemui.shade.ui.composable.ShadeHeader +import kotlin.time.Duration.Companion.milliseconds + +fun TransitionBuilder.toShadeTransition( + durationScale: Double = 1.0, +) { + spec = tween(durationMillis = (DefaultDuration * durationScale).inWholeMilliseconds.toInt()) + + fractionRange(start = .58f) { + fade(ShadeHeader.Elements.Clock) + fade(ShadeHeader.Elements.CollapsedContentStart) + fade(ShadeHeader.Elements.CollapsedContentEnd) + fade(ShadeHeader.Elements.PrivacyChip) + fade(QuickSettings.Elements.SplitShadeQuickSettings) + fade(QuickSettings.Elements.FooterActions) + } + translate( + QuickSettings.Elements.QuickQuickSettings, + y = -ShadeHeader.Dimensions.CollapsedHeight * .66f + ) + translate(Notifications.Elements.NotificationScrim, Edge.Top, false) +} + +private val DefaultDuration = 500.milliseconds diff --git a/packages/SystemUI/compose/features/src/com/android/systemui/shade/ui/composable/ShadeHeader.kt b/packages/SystemUI/compose/features/src/com/android/systemui/shade/ui/composable/ShadeHeader.kt index c6c6f5773101..516e14001698 100644 --- a/packages/SystemUI/compose/features/src/com/android/systemui/shade/ui/composable/ShadeHeader.kt +++ b/packages/SystemUI/compose/features/src/com/android/systemui/shade/ui/composable/ShadeHeader.kt @@ -531,8 +531,14 @@ private fun shouldUseExpandedFormat(state: TransitionState): Boolean { state.currentScene == Scenes.QuickSettings } is TransitionState.Transition -> { - (state.isTransitioning(Scenes.Shade, Scenes.QuickSettings) && state.progress >= 0.5) || - (state.isTransitioning(Scenes.QuickSettings, Scenes.Shade) && state.progress < 0.5) + ((state.isTransitioning(Scenes.Shade, Scenes.QuickSettings) || + state.isTransitioning(Scenes.Gone, Scenes.QuickSettings) || + state.isTransitioning(Scenes.Lockscreen, Scenes.QuickSettings)) && + state.progress >= 0.5) || + ((state.isTransitioning(Scenes.QuickSettings, Scenes.Shade) || + state.isTransitioning(Scenes.QuickSettings, Scenes.Gone) || + state.isTransitioning(Scenes.QuickSettings, Scenes.Lockscreen)) && + state.progress <= 0.5) } } } diff --git a/packages/SystemUI/compose/features/src/com/android/systemui/shade/ui/composable/ShadeScene.kt b/packages/SystemUI/compose/features/src/com/android/systemui/shade/ui/composable/ShadeScene.kt index 84b1a4b77f07..944d6ef76272 100644 --- a/packages/SystemUI/compose/features/src/com/android/systemui/shade/ui/composable/ShadeScene.kt +++ b/packages/SystemUI/compose/features/src/com/android/systemui/shade/ui/composable/ShadeScene.kt @@ -47,6 +47,7 @@ import androidx.compose.runtime.mutableStateOf import androidx.compose.runtime.remember import androidx.compose.ui.Alignment import androidx.compose.ui.Modifier +import androidx.compose.ui.graphics.CompositingStrategy import androidx.compose.ui.graphics.graphicsLayer import androidx.compose.ui.layout.Layout import androidx.compose.ui.layout.layout @@ -200,13 +201,15 @@ private fun SceneScope.SingleShade( animateSceneFloatAsState(value = 1f, key = QuickSettings.SharedValues.TilesSquishiness) val isClickable by viewModel.isClickable.collectAsState() - Box( - modifier = - modifier - .element(Shade.Elements.BackgroundScrim) - .background(colorResource(R.color.shade_scrim_background_dark)), - ) - Box { + // Render the scene to an offscreen buffer so that BlendMode.DstOut only clears this scene + // (and not the one under it) during a scene transition. + Box(modifier = modifier.graphicsLayer(compositingStrategy = CompositingStrategy.Offscreen)) { + Box( + modifier = + Modifier.fillMaxSize() + .element(Shade.Elements.BackgroundScrim) + .background(colorResource(R.color.shade_scrim_background_dark)), + ) Layout( contents = listOf( diff --git a/packages/SystemUI/compose/scene/src/com/android/compose/animation/scene/Element.kt b/packages/SystemUI/compose/scene/src/com/android/compose/animation/scene/Element.kt index a8a1d881b907..f4009ee56737 100644 --- a/packages/SystemUI/compose/scene/src/com/android/compose/animation/scene/Element.kt +++ b/packages/SystemUI/compose/scene/src/com/android/compose/animation/scene/Element.kt @@ -300,14 +300,16 @@ internal fun shouldDrawOrComposeSharedElement( val fromScene = transition.fromScene val toScene = transition.toScene - val chosenByPicker = + val pickedScene = scenePicker.sceneDuringTransition( element = element, transition = transition, fromSceneZIndex = layoutImpl.scenes.getValue(fromScene).zIndex, toSceneZIndex = layoutImpl.scenes.getValue(toScene).zIndex, - ) == scene - return chosenByPicker || transition.currentOverscrollSpec?.scene == scene + ) + ?: return false + + return pickedScene == scene || transition.currentOverscrollSpec?.scene == scene } private fun isSharedElementEnabled( @@ -356,7 +358,9 @@ private fun isElementOpaque( val toState = element.sceneStates[toScene] if (fromState == null && toState == null) { - error("This should not happen, element $element is neither in $fromScene or $toScene") + // TODO(b/311600838): Throw an exception instead once layers of disposed elements are not + // run anymore. + return true } val isSharedElement = fromState != null && toState != null diff --git a/packages/SystemUI/compose/scene/src/com/android/compose/animation/scene/Scene.kt b/packages/SystemUI/compose/scene/src/com/android/compose/animation/scene/Scene.kt index 418c6bb9af70..7fb5a4d0cc27 100644 --- a/packages/SystemUI/compose/scene/src/com/android/compose/animation/scene/Scene.kt +++ b/packages/SystemUI/compose/scene/src/com/android/compose/animation/scene/Scene.kt @@ -59,7 +59,10 @@ internal class Scene( ): Map<UserAction, UserActionResult> { userActions.forEach { (action, result) -> if (key == result.toScene) { - error("Transition to the same scene is not supported. Scene $key, action $action") + error( + "Transition to the same scene is not supported. Scene $key, action $action," + + " result $result" + ) } } return userActions diff --git a/packages/SystemUI/compose/scene/src/com/android/compose/animation/scene/TransitionDsl.kt b/packages/SystemUI/compose/scene/src/com/android/compose/animation/scene/TransitionDsl.kt index 2c109a337f65..6bc397e86cfa 100644 --- a/packages/SystemUI/compose/scene/src/com/android/compose/animation/scene/TransitionDsl.kt +++ b/packages/SystemUI/compose/scene/src/com/android/compose/animation/scene/TransitionDsl.kt @@ -205,7 +205,9 @@ interface OverscrollScope { interface ElementScenePicker { /** * Return the scene in which [element] should be drawn (when using `Modifier.element(key)`) or - * composed (when using `MovableElement(key)`) during the given [transition]. + * composed (when using `MovableElement(key)`) during the given [transition]. If this element + * should not be drawn or composed in neither [transition.fromScene] nor [transition.toScene], + * return `null`. * * Important: For [MovableElements][SceneScope.MovableElement], this scene picker will *always* * be used during transitions to decide whether we should compose that element in a given scene @@ -217,12 +219,13 @@ interface ElementScenePicker { transition: TransitionState.Transition, fromSceneZIndex: Float, toSceneZIndex: Float, - ): SceneKey + ): SceneKey? /** * Return [transition.fromScene] if it is in [scenes] and [transition.toScene] is not, or return - * [transition.toScene] if it is in [scenes] and [transition.fromScene] is not, otherwise throw - * an exception (i.e. if neither or both of fromScene and toScene are in [scenes]). + * [transition.toScene] if it is in [scenes] and [transition.fromScene] is not. If neither + * [transition.fromScene] and [transition.toScene] are in [scenes], return `null`. If both + * [transition.fromScene] and [transition.toScene] are in [scenes], throw an exception. * * This function can be useful when computing the scene in which a movable element should be * composed. @@ -231,31 +234,22 @@ interface ElementScenePicker { scenes: Set<SceneKey>, transition: TransitionState.Transition, element: ElementKey, - ): SceneKey { + ): SceneKey? { val fromScene = transition.fromScene val toScene = transition.toScene val fromSceneInScenes = scenes.contains(fromScene) val toSceneInScenes = scenes.contains(toScene) - if (fromSceneInScenes && toSceneInScenes) { - error( - "Element $element can be in both $fromScene and $toScene. You should add a " + - "special case for this transition before calling pickSingleSceneIn()." - ) - } - if (!fromSceneInScenes && !toSceneInScenes) { - error( - "Element $element can be neither in $fromScene and $toScene. This either means " + - "that you should add one of them in the scenes set passed to " + - "pickSingleSceneIn(), or there is an internal error and this element was " + - "composed when it shouldn't be." - ) - } - - return if (fromSceneInScenes) { - fromScene - } else { - toScene + return when { + fromSceneInScenes && toSceneInScenes -> { + error( + "Element $element can be in both $fromScene and $toScene. You should add a " + + "special case for this transition before calling pickSingleSceneIn()." + ) + } + fromSceneInScenes -> fromScene + toSceneInScenes -> toScene + else -> null } } } @@ -312,8 +306,12 @@ class MovableElementScenePicker(private val scenes: Set<SceneKey>) : ElementScen transition: TransitionState.Transition, fromSceneZIndex: Float, toSceneZIndex: Float, - ): SceneKey { - return if (scenes.contains(transition.toScene)) transition.toScene else transition.fromScene + ): SceneKey? { + return when { + scenes.contains(transition.toScene) -> transition.toScene + scenes.contains(transition.fromScene) -> transition.fromScene + else -> null + } } } diff --git a/packages/SystemUI/compose/scene/tests/src/com/android/compose/animation/scene/MovableElementScenePickerTest.kt b/packages/SystemUI/compose/scene/tests/src/com/android/compose/animation/scene/MovableElementScenePickerTest.kt index fb46a34e3cab..6745fbe064ff 100644 --- a/packages/SystemUI/compose/scene/tests/src/com/android/compose/animation/scene/MovableElementScenePickerTest.kt +++ b/packages/SystemUI/compose/scene/tests/src/com/android/compose/animation/scene/MovableElementScenePickerTest.kt @@ -38,8 +38,8 @@ class MovableElementScenePickerTest { } @Test - fun toSceneNotInScenes() { - val picker = MovableElementScenePicker(scenes = emptySet()) + fun fromSceneInScenes() { + val picker = MovableElementScenePicker(scenes = setOf(TestScenes.SceneA)) assertThat( picker.sceneDuringTransition( TestElements.Foo, @@ -50,4 +50,18 @@ class MovableElementScenePickerTest { ) .isEqualTo(TestScenes.SceneA) } + + @Test + fun noneInScenes() { + val picker = MovableElementScenePicker(scenes = emptySet()) + assertThat( + picker.sceneDuringTransition( + TestElements.Foo, + transition(from = TestScenes.SceneA, to = TestScenes.SceneB), + fromSceneZIndex = 0f, + toSceneZIndex = 1f, + ) + ) + .isEqualTo(null) + } } diff --git a/packages/SystemUI/multivalentTests/src/com/android/systemui/communal/ui/view/layout/blueprints/DefaultCommunalBlueprintTest.kt b/packages/SystemUI/multivalentTests/src/com/android/systemui/communal/ui/view/layout/blueprints/DefaultCommunalBlueprintTest.kt index a49629252520..c56e91914f13 100644 --- a/packages/SystemUI/multivalentTests/src/com/android/systemui/communal/ui/view/layout/blueprints/DefaultCommunalBlueprintTest.kt +++ b/packages/SystemUI/multivalentTests/src/com/android/systemui/communal/ui/view/layout/blueprints/DefaultCommunalBlueprintTest.kt @@ -31,7 +31,7 @@ class DefaultCommunalBlueprintTest : SysuiTestCase() { @Test fun addView() { val constraintLayout = ConstraintLayout(context, null) - blueprint.replaceViews(null, constraintLayout) + blueprint.replaceViews(constraintLayout) verify(hubSection).addViews(constraintLayout) } diff --git a/packages/SystemUI/multivalentTests/src/com/android/systemui/deviceentry/domain/interactor/DeviceEntryInteractorTest.kt b/packages/SystemUI/multivalentTests/src/com/android/systemui/deviceentry/domain/interactor/DeviceEntryInteractorTest.kt index 37a6ac6adac7..af48802e969f 100644 --- a/packages/SystemUI/multivalentTests/src/com/android/systemui/deviceentry/domain/interactor/DeviceEntryInteractorTest.kt +++ b/packages/SystemUI/multivalentTests/src/com/android/systemui/deviceentry/domain/interactor/DeviceEntryInteractorTest.kt @@ -25,6 +25,9 @@ import com.android.systemui.authentication.data.repository.FakeAuthenticationRep import com.android.systemui.authentication.data.repository.fakeAuthenticationRepository import com.android.systemui.authentication.domain.interactor.authenticationInteractor import com.android.systemui.authentication.shared.model.AuthenticationMethodModel +import com.android.systemui.biometrics.data.repository.fakeFingerprintPropertyRepository +import com.android.systemui.bouncer.data.repository.keyguardBouncerRepository +import com.android.systemui.bouncer.domain.interactor.alternateBouncerInteractor import com.android.systemui.coroutines.collectLastValue import com.android.systemui.coroutines.collectValues import com.android.systemui.deviceentry.data.repository.fakeDeviceEntryRepository @@ -40,11 +43,16 @@ import com.android.systemui.deviceentry.shared.model.DeviceEntryRestrictionReaso import com.android.systemui.deviceentry.shared.model.DeviceEntryRestrictionReason.UserLockdown import com.android.systemui.flags.EnableSceneContainer import com.android.systemui.flags.fakeSystemPropertiesHelper +import com.android.systemui.keyguard.data.repository.biometricSettingsRepository +import com.android.systemui.keyguard.data.repository.deviceEntryFingerprintAuthRepository import com.android.systemui.keyguard.data.repository.fakeBiometricSettingsRepository import com.android.systemui.keyguard.data.repository.fakeDeviceEntryFaceAuthRepository import com.android.systemui.keyguard.data.repository.fakeDeviceEntryFingerprintAuthRepository +import com.android.systemui.keyguard.data.repository.fakeKeyguardRepository +import com.android.systemui.keyguard.data.repository.fakeKeyguardTransitionRepository import com.android.systemui.keyguard.data.repository.fakeTrustRepository import com.android.systemui.keyguard.shared.model.AuthenticationFlags +import com.android.systemui.keyguard.shared.model.KeyguardState import com.android.systemui.keyguard.shared.model.SuccessFingerprintAuthenticationStatus import com.android.systemui.kosmos.testScope import com.android.systemui.scene.domain.interactor.sceneInteractor @@ -371,6 +379,42 @@ class DeviceEntryInteractorTest : SysuiTestCase() { } @Test + fun showOrUnlockDevice_noAlternateBouncer_switchesToBouncerScene() = + testScope.runTest { + val currentScene by collectLastValue(sceneInteractor.currentScene) + switchToScene(Scenes.Lockscreen) + assertThat(currentScene).isEqualTo(Scenes.Lockscreen) + + kosmos.fakeFingerprintPropertyRepository.supportsRearFps() // altBouncer unsupported + kosmos.fakeAuthenticationRepository.setAuthenticationMethod( + AuthenticationMethodModel.Pin + ) + runCurrent() + + underTest.attemptDeviceEntry() + + assertThat(currentScene).isEqualTo(Scenes.Bouncer) + } + + @Test + fun showOrUnlockDevice_showsAlternateBouncer_staysOnLockscreenScene() = + testScope.runTest { + val currentScene by collectLastValue(sceneInteractor.currentScene) + switchToScene(Scenes.Lockscreen) + assertThat(currentScene).isEqualTo(Scenes.Lockscreen) + + kosmos.fakeAuthenticationRepository.setAuthenticationMethod( + AuthenticationMethodModel.Pin + ) + givenCanShowAlternateBouncer() + runCurrent() + + underTest.attemptDeviceEntry() + + assertThat(currentScene).isEqualTo(Scenes.Lockscreen) + } + + @Test fun isBypassEnabled_disabledInRepository_false() = testScope.runTest { kosmos.fakeDeviceEntryRepository.setBypassEnabled(false) @@ -593,4 +637,20 @@ class DeviceEntryInteractorTest : SysuiTestCase() { private fun switchToScene(sceneKey: SceneKey) { sceneInteractor.changeScene(sceneKey, "reason") } + + private suspend fun givenCanShowAlternateBouncer() { + val canShowAlternateBouncer by + testScope.collectLastValue(kosmos.alternateBouncerInteractor.canShowAlternateBouncer) + kosmos.fakeFingerprintPropertyRepository.supportsUdfps() + kosmos.fakeKeyguardTransitionRepository.sendTransitionSteps( + from = KeyguardState.GONE, + to = KeyguardState.LOCKSCREEN, + testScheduler = testScope.testScheduler, + ) + kosmos.deviceEntryFingerprintAuthRepository.setLockedOut(false) + kosmos.biometricSettingsRepository.setIsFingerprintAuthCurrentlyAllowed(true) + kosmos.fakeKeyguardRepository.setKeyguardDismissible(false) + kosmos.keyguardBouncerRepository.setPrimaryShow(false) + assertThat(canShowAlternateBouncer).isTrue() + } } diff --git a/packages/SystemUI/multivalentTests/src/com/android/systemui/keyguard/domain/interactor/KeyguardClockInteractorTest.kt b/packages/SystemUI/multivalentTests/src/com/android/systemui/keyguard/domain/interactor/KeyguardClockInteractorTest.kt index c88e432d15d2..26b56a1be926 100644 --- a/packages/SystemUI/multivalentTests/src/com/android/systemui/keyguard/domain/interactor/KeyguardClockInteractorTest.kt +++ b/packages/SystemUI/multivalentTests/src/com/android/systemui/keyguard/domain/interactor/KeyguardClockInteractorTest.kt @@ -18,8 +18,6 @@ package com.android.systemui.keyguard.domain.interactor import androidx.test.ext.junit.runners.AndroidJUnit4 import androidx.test.filters.SmallTest -import com.android.keyguard.KeyguardClockSwitch.LARGE -import com.android.keyguard.KeyguardClockSwitch.SMALL import com.android.systemui.SysuiTestCase import com.android.systemui.coroutines.collectLastValue import com.android.systemui.flags.DisableSceneContainer @@ -30,6 +28,7 @@ import com.android.systemui.keyguard.data.repository.fakeKeyguardClockRepository import com.android.systemui.keyguard.data.repository.fakeKeyguardTransitionRepository import com.android.systemui.keyguard.data.repository.keyguardClockRepository import com.android.systemui.keyguard.data.repository.keyguardRepository +import com.android.systemui.keyguard.shared.model.ClockSize import com.android.systemui.keyguard.shared.model.KeyguardState import com.android.systemui.keyguard.shared.model.TransitionState import com.android.systemui.keyguard.shared.model.TransitionStep @@ -69,11 +68,11 @@ class KeyguardClockInteractorTest : SysuiTestCase() { fun clockSize_sceneContainerFlagOff_basedOnRepository() = testScope.runTest { val value by collectLastValue(underTest.clockSize) - kosmos.keyguardClockRepository.setClockSize(LARGE) - assertThat(value).isEqualTo(LARGE) + kosmos.keyguardClockRepository.setClockSize(ClockSize.LARGE) + assertThat(value).isEqualTo(ClockSize.LARGE) - kosmos.keyguardClockRepository.setClockSize(SMALL) - assertThat(value).isEqualTo(SMALL) + kosmos.keyguardClockRepository.setClockSize(ClockSize.SMALL) + assertThat(value).isEqualTo(ClockSize.SMALL) } @Test @@ -96,7 +95,7 @@ class KeyguardClockInteractorTest : SysuiTestCase() { kosmos.fakeKeyguardClockRepository.setShouldForceSmallClock(true) kosmos.fakeFeatureFlagsClassic.set(Flags.LOCKSCREEN_ENABLE_LANDSCAPE, true) transitionTo(KeyguardState.AOD, KeyguardState.LOCKSCREEN) - assertThat(value).isEqualTo(SMALL) + assertThat(value).isEqualTo(ClockSize.SMALL) } @Test @@ -106,7 +105,7 @@ class KeyguardClockInteractorTest : SysuiTestCase() { val value by collectLastValue(underTest.clockSize) kosmos.shadeRepository.setShadeMode(ShadeMode.Single) kosmos.activeNotificationListRepository.setActiveNotifs(1) - assertThat(value).isEqualTo(SMALL) + assertThat(value).isEqualTo(ClockSize.SMALL) } @Test @@ -117,7 +116,7 @@ class KeyguardClockInteractorTest : SysuiTestCase() { kosmos.shadeRepository.setShadeMode(ShadeMode.Single) val userMedia = MediaData().copy(active = true) kosmos.mediaFilterRepository.addSelectedUserMediaEntry(userMedia) - assertThat(value).isEqualTo(SMALL) + assertThat(value).isEqualTo(ClockSize.SMALL) } @Test @@ -129,7 +128,7 @@ class KeyguardClockInteractorTest : SysuiTestCase() { kosmos.shadeRepository.setShadeMode(ShadeMode.Split) kosmos.mediaFilterRepository.addSelectedUserMediaEntry(userMedia) kosmos.keyguardRepository.setIsDozing(false) - assertThat(value).isEqualTo(SMALL) + assertThat(value).isEqualTo(ClockSize.SMALL) } @Test @@ -139,7 +138,7 @@ class KeyguardClockInteractorTest : SysuiTestCase() { val value by collectLastValue(underTest.clockSize) kosmos.shadeRepository.setShadeMode(ShadeMode.Split) kosmos.keyguardRepository.setIsDozing(false) - assertThat(value).isEqualTo(LARGE) + assertThat(value).isEqualTo(ClockSize.LARGE) } @Test @@ -151,7 +150,7 @@ class KeyguardClockInteractorTest : SysuiTestCase() { kosmos.shadeRepository.setShadeMode(ShadeMode.Split) kosmos.mediaFilterRepository.addSelectedUserMediaEntry(userMedia) kosmos.keyguardRepository.setIsDozing(true) - assertThat(value).isEqualTo(LARGE) + assertThat(value).isEqualTo(ClockSize.LARGE) } @Test @@ -219,14 +218,10 @@ class KeyguardClockInteractorTest : SysuiTestCase() { } private suspend fun transitionTo(from: KeyguardState, to: KeyguardState) { - kosmos.fakeKeyguardTransitionRepository.sendTransitionStep( - TransitionStep(from, to, 0f, TransitionState.STARTED) - ) - kosmos.fakeKeyguardTransitionRepository.sendTransitionStep( - TransitionStep(from, to, 0.5f, TransitionState.RUNNING) - ) - kosmos.fakeKeyguardTransitionRepository.sendTransitionStep( - TransitionStep(from, to, 1f, TransitionState.FINISHED) - ) + with(kosmos.fakeKeyguardTransitionRepository) { + sendTransitionStep(TransitionStep(from, to, 0f, TransitionState.STARTED)) + sendTransitionStep(TransitionStep(from, to, 0.5f, TransitionState.RUNNING)) + sendTransitionStep(TransitionStep(from, to, 1f, TransitionState.FINISHED)) + } } } diff --git a/packages/SystemUI/multivalentTests/src/com/android/systemui/keyguard/ui/viewmodel/LockscreenContentViewModelTest.kt b/packages/SystemUI/multivalentTests/src/com/android/systemui/keyguard/ui/viewmodel/LockscreenContentViewModelTest.kt index 3497183c2c69..49073595af0c 100644 --- a/packages/SystemUI/multivalentTests/src/com/android/systemui/keyguard/ui/viewmodel/LockscreenContentViewModelTest.kt +++ b/packages/SystemUI/multivalentTests/src/com/android/systemui/keyguard/ui/viewmodel/LockscreenContentViewModelTest.kt @@ -18,7 +18,6 @@ package com.android.systemui.keyguard.ui.viewmodel import androidx.test.ext.junit.runners.AndroidJUnit4 import androidx.test.filters.SmallTest -import com.android.keyguard.KeyguardClockSwitch import com.android.systemui.SysuiTestCase import com.android.systemui.biometrics.authController import com.android.systemui.common.ui.data.repository.fakeConfigurationRepository @@ -26,6 +25,7 @@ import com.android.systemui.coroutines.collectLastValue import com.android.systemui.flags.Flags import com.android.systemui.flags.fakeFeatureFlagsClassic import com.android.systemui.keyguard.data.repository.fakeKeyguardClockRepository +import com.android.systemui.keyguard.shared.model.ClockSize import com.android.systemui.kosmos.Kosmos import com.android.systemui.kosmos.testScope import com.android.systemui.res.R @@ -62,7 +62,7 @@ class LockscreenContentViewModelTest : SysuiTestCase() { fun isUdfpsVisible_withUdfps_true() = with(kosmos) { testScope.runTest { - whenever(kosmos.authController.isUdfpsSupported).thenReturn(true) + whenever(authController.isUdfpsSupported).thenReturn(true) assertThat(underTest.isUdfpsVisible).isTrue() } } @@ -71,26 +71,28 @@ class LockscreenContentViewModelTest : SysuiTestCase() { fun isUdfpsVisible_withoutUdfps_false() = with(kosmos) { testScope.runTest { - whenever(kosmos.authController.isUdfpsSupported).thenReturn(false) + whenever(authController.isUdfpsSupported).thenReturn(false) assertThat(underTest.isUdfpsVisible).isFalse() } } @Test - fun isLargeClockVisible_withLargeClock_true() = + fun clockSize_withLargeClock_true() = with(kosmos) { testScope.runTest { - kosmos.fakeKeyguardClockRepository.setClockSize(KeyguardClockSwitch.LARGE) - assertThat(underTest.isLargeClockVisible).isTrue() + val clockSize by collectLastValue(underTest.clockSize) + fakeKeyguardClockRepository.setClockSize(ClockSize.LARGE) + assertThat(clockSize).isEqualTo(ClockSize.LARGE) } } @Test - fun isLargeClockVisible_withSmallClock_false() = + fun clockSize_withSmallClock_false() = with(kosmos) { testScope.runTest { - kosmos.fakeKeyguardClockRepository.setClockSize(KeyguardClockSwitch.SMALL) - assertThat(underTest.isLargeClockVisible).isFalse() + val clockSize by collectLastValue(underTest.clockSize) + fakeKeyguardClockRepository.setClockSize(ClockSize.SMALL) + assertThat(clockSize).isEqualTo(ClockSize.SMALL) } } @@ -98,18 +100,21 @@ class LockscreenContentViewModelTest : SysuiTestCase() { fun areNotificationsVisible_splitShadeTrue_true() = with(kosmos) { testScope.runTest { + val areNotificationsVisible by collectLastValue(underTest.areNotificationsVisible) shadeRepository.setShadeMode(ShadeMode.Split) - kosmos.fakeKeyguardClockRepository.setClockSize(KeyguardClockSwitch.LARGE) + fakeKeyguardClockRepository.setClockSize(ClockSize.LARGE) - assertThat(collectLastValue(underTest.areNotificationsVisible).invoke()).isTrue() + assertThat(areNotificationsVisible).isTrue() } } + @Test fun areNotificationsVisible_withSmallClock_true() = with(kosmos) { testScope.runTest { - kosmos.fakeKeyguardClockRepository.setClockSize(KeyguardClockSwitch.SMALL) - assertThat(collectLastValue(underTest.areNotificationsVisible).invoke()).isTrue() + val areNotificationsVisible by collectLastValue(underTest.areNotificationsVisible) + fakeKeyguardClockRepository.setClockSize(ClockSize.SMALL) + assertThat(areNotificationsVisible).isTrue() } } @@ -117,8 +122,9 @@ class LockscreenContentViewModelTest : SysuiTestCase() { fun areNotificationsVisible_withLargeClock_false() = with(kosmos) { testScope.runTest { - kosmos.fakeKeyguardClockRepository.setClockSize(KeyguardClockSwitch.LARGE) - assertThat(collectLastValue(underTest.areNotificationsVisible).invoke()).isFalse() + val areNotificationsVisible by collectLastValue(underTest.areNotificationsVisible) + fakeKeyguardClockRepository.setClockSize(ClockSize.LARGE) + assertThat(areNotificationsVisible).isFalse() } } @@ -126,9 +132,10 @@ class LockscreenContentViewModelTest : SysuiTestCase() { fun shouldUseSplitNotificationShade_withConfigTrue_true() = with(kosmos) { testScope.runTest { + val shouldUseSplitNotificationShade by + collectLastValue(underTest.shouldUseSplitNotificationShade) shadeRepository.setShadeMode(ShadeMode.Split) - assertThat(collectLastValue(underTest.shouldUseSplitNotificationShade).invoke()) - .isTrue() + assertThat(shouldUseSplitNotificationShade).isTrue() } } @@ -136,9 +143,10 @@ class LockscreenContentViewModelTest : SysuiTestCase() { fun shouldUseSplitNotificationShade_withConfigFalse_false() = with(kosmos) { testScope.runTest { + val shouldUseSplitNotificationShade by + collectLastValue(underTest.shouldUseSplitNotificationShade) shadeRepository.setShadeMode(ShadeMode.Single) - assertThat(collectLastValue(underTest.shouldUseSplitNotificationShade).invoke()) - .isFalse() + assertThat(shouldUseSplitNotificationShade).isFalse() } } diff --git a/packages/SystemUI/multivalentTests/src/com/android/systemui/media/controls/data/repository/MediaFilterRepositoryTest.kt b/packages/SystemUI/multivalentTests/src/com/android/systemui/media/controls/data/repository/MediaFilterRepositoryTest.kt index f685058c77fa..e39511fdfdab 100644 --- a/packages/SystemUI/multivalentTests/src/com/android/systemui/media/controls/data/repository/MediaFilterRepositoryTest.kt +++ b/packages/SystemUI/multivalentTests/src/com/android/systemui/media/controls/data/repository/MediaFilterRepositoryTest.kt @@ -148,37 +148,6 @@ class MediaFilterRepositoryTest : SysuiTestCase() { } @Test - fun addMediaDataLoadingState() = - testScope.runTest { - val mediaDataLoadedStates by collectLastValue(underTest.mediaDataLoadedStates) - val instanceId = InstanceId.fakeInstanceId(123) - val mediaLoadedStates = mutableListOf(MediaDataLoadingModel.Loaded(instanceId)) - - underTest.addMediaDataLoadingState(MediaDataLoadingModel.Loaded(instanceId)) - - assertThat(mediaDataLoadedStates).isEqualTo(mediaLoadedStates) - - mediaLoadedStates.remove(MediaDataLoadingModel.Loaded(instanceId)) - - underTest.addMediaDataLoadingState(MediaDataLoadingModel.Removed(instanceId)) - - assertThat(mediaDataLoadedStates).isEqualTo(mediaLoadedStates) - } - - @Test - fun setRecommendationsLoadingState() = - testScope.runTest { - val recommendationsLoadingState by - collectLastValue(underTest.recommendationsLoadingState) - val recommendationsLoadingModel = - SmartspaceMediaLoadingModel.Loaded(KEY_MEDIA_SMARTSPACE) - - underTest.setRecommendationsLoadingState(recommendationsLoadingModel) - - assertThat(recommendationsLoadingState).isEqualTo(recommendationsLoadingModel) - } - - @Test fun addMediaControlPlayingThenRemote() = testScope.runTest { val sortedMedia by collectLastValue(underTest.sortedMedia) @@ -195,9 +164,10 @@ class MediaFilterRepositoryTest : SysuiTestCase() { assertThat(sortedMedia?.size).isEqualTo(2) assertThat(sortedMedia?.values) .containsExactly( - MediaCommonModel.MediaControl(playingInstanceId), - MediaCommonModel.MediaControl(remoteInstanceId) + MediaCommonModel.MediaControl(MediaDataLoadingModel.Loaded(playingInstanceId)), + MediaCommonModel.MediaControl(MediaDataLoadingModel.Loaded(remoteInstanceId)) ) + .inOrder() } @Test @@ -217,8 +187,8 @@ class MediaFilterRepositoryTest : SysuiTestCase() { assertThat(sortedMedia?.size).isEqualTo(2) assertThat(sortedMedia?.values) .containsExactly( - MediaCommonModel.MediaControl(playingInstanceId1), - MediaCommonModel.MediaControl(playingInstanceId2) + MediaCommonModel.MediaControl(MediaDataLoadingModel.Loaded(playingInstanceId1)), + MediaCommonModel.MediaControl(MediaDataLoadingModel.Loaded(playingInstanceId2)) ) .inOrder() @@ -233,8 +203,8 @@ class MediaFilterRepositoryTest : SysuiTestCase() { assertThat(sortedMedia?.size).isEqualTo(2) assertThat(sortedMedia?.values) .containsExactly( - MediaCommonModel.MediaControl(playingInstanceId2), - MediaCommonModel.MediaControl(playingInstanceId1) + MediaCommonModel.MediaControl(MediaDataLoadingModel.Loaded(playingInstanceId2)), + MediaCommonModel.MediaControl(MediaDataLoadingModel.Loaded(playingInstanceId1)) ) .inOrder() } @@ -285,12 +255,14 @@ class MediaFilterRepositoryTest : SysuiTestCase() { assertThat(sortedMedia?.size).isEqualTo(6) assertThat(sortedMedia?.values) .containsExactly( - MediaCommonModel.MediaControl(instanceId1), - MediaCommonModel.MediaControl(instanceId2), - MediaCommonModel.MediaRecommendations(KEY_MEDIA_SMARTSPACE), - MediaCommonModel.MediaControl(instanceId4), - MediaCommonModel.MediaControl(instanceId3), - MediaCommonModel.MediaControl(instanceId5), + MediaCommonModel.MediaControl(MediaDataLoadingModel.Loaded(instanceId1)), + MediaCommonModel.MediaControl(MediaDataLoadingModel.Loaded(instanceId2)), + MediaCommonModel.MediaRecommendations( + SmartspaceMediaLoadingModel.Loaded(KEY_MEDIA_SMARTSPACE, true) + ), + MediaCommonModel.MediaControl(MediaDataLoadingModel.Loaded(instanceId4)), + MediaCommonModel.MediaControl(MediaDataLoadingModel.Loaded(instanceId3)), + MediaCommonModel.MediaControl(MediaDataLoadingModel.Loaded(instanceId5)), ) .inOrder() } diff --git a/packages/SystemUI/multivalentTests/src/com/android/systemui/media/controls/domain/interactor/MediaCarouselInteractorTest.kt b/packages/SystemUI/multivalentTests/src/com/android/systemui/media/controls/domain/interactor/MediaCarouselInteractorTest.kt index c15776e5345e..a2991fddc0ca 100644 --- a/packages/SystemUI/multivalentTests/src/com/android/systemui/media/controls/domain/interactor/MediaCarouselInteractorTest.kt +++ b/packages/SystemUI/multivalentTests/src/com/android/systemui/media/controls/domain/interactor/MediaCarouselInteractorTest.kt @@ -20,7 +20,6 @@ import android.R import android.graphics.drawable.Icon import androidx.test.ext.junit.runners.AndroidJUnit4 import androidx.test.filters.SmallTest -import com.android.internal.logging.InstanceId import com.android.systemui.SysuiTestCase import com.android.systemui.coroutines.collectLastValue import com.android.systemui.flags.Flags @@ -29,18 +28,14 @@ import com.android.systemui.kosmos.testScope import com.android.systemui.media.controls.MediaTestHelper import com.android.systemui.media.controls.data.repository.MediaFilterRepository import com.android.systemui.media.controls.data.repository.mediaFilterRepository -import com.android.systemui.media.controls.domain.pipeline.MediaDataFilterImpl import com.android.systemui.media.controls.domain.pipeline.interactor.MediaCarouselInteractor import com.android.systemui.media.controls.domain.pipeline.interactor.mediaCarouselInteractor -import com.android.systemui.media.controls.domain.pipeline.mediaDataFilter import com.android.systemui.media.controls.shared.model.MediaCommonModel import com.android.systemui.media.controls.shared.model.MediaData import com.android.systemui.media.controls.shared.model.MediaDataLoadingModel import com.android.systemui.media.controls.shared.model.SmartspaceMediaData import com.android.systemui.media.controls.shared.model.SmartspaceMediaLoadingModel -import com.android.systemui.statusbar.notificationLockscreenUserManager import com.android.systemui.testKosmos -import com.android.systemui.util.mockito.whenever import com.google.common.truth.Truth.assertThat import kotlinx.coroutines.test.runTest import org.junit.Before @@ -54,8 +49,6 @@ class MediaCarouselInteractorTest : SysuiTestCase() { private val kosmos = testKosmos() private val testScope = kosmos.testScope - private val mediaDataFilter: MediaDataFilterImpl = kosmos.mediaDataFilter - private val notificationLockscreenUserManager = kosmos.notificationLockscreenUserManager private val mediaFilterRepository: MediaFilterRepository = kosmos.mediaFilterRepository private val underTest: MediaCarouselInteractor = kosmos.mediaCarouselInteractor @@ -95,7 +88,6 @@ class MediaCarouselInteractorTest : SysuiTestCase() { collectLastValue(underTest.hasActiveMediaOrRecommendation) val hasActiveMedia by collectLastValue(underTest.hasActiveMedia) val hasAnyMedia by collectLastValue(underTest.hasAnyMedia) - val sortedMedia by collectLastValue(underTest.sortedMedia) val userMedia = MediaData(active = false) val instanceId = userMedia.instanceId @@ -106,7 +98,6 @@ class MediaCarouselInteractorTest : SysuiTestCase() { assertThat(hasActiveMediaOrRecommendation).isFalse() assertThat(hasActiveMedia).isFalse() assertThat(hasAnyMedia).isTrue() - assertThat(sortedMedia).containsExactly(MediaCommonModel.MediaControl(instanceId)) assertThat(mediaFilterRepository.removeSelectedUserMediaEntry(instanceId, userMedia)) .isTrue() @@ -117,7 +108,6 @@ class MediaCarouselInteractorTest : SysuiTestCase() { assertThat(hasActiveMediaOrRecommendation).isFalse() assertThat(hasActiveMedia).isFalse() assertThat(hasAnyMedia).isFalse() - assertThat(sortedMedia).isEmpty() } @Test @@ -138,28 +128,26 @@ class MediaCarouselInteractorTest : SysuiTestCase() { recommendations = MediaTestHelper.getValidRecommendationList(icon), ) val userMedia = MediaData(active = false) + val recsLoadingModel = SmartspaceMediaLoadingModel.Loaded(KEY_MEDIA_SMARTSPACE, true) + val mediaLoadingModel = MediaDataLoadingModel.Loaded(userMedia.instanceId) mediaFilterRepository.setRecommendation(userMediaRecommendation) - mediaFilterRepository.setRecommendationsLoadingState( - SmartspaceMediaLoadingModel.Loaded(KEY_MEDIA_SMARTSPACE, true) - ) + mediaFilterRepository.setRecommendationsLoadingState(recsLoadingModel) assertThat(hasActiveMediaOrRecommendation).isTrue() assertThat(hasAnyMediaOrRecommendation).isTrue() assertThat(sortedMedia) - .containsExactly(MediaCommonModel.MediaRecommendations(KEY_MEDIA_SMARTSPACE)) + .containsExactly(MediaCommonModel.MediaRecommendations(recsLoadingModel)) mediaFilterRepository.addSelectedUserMediaEntry(userMedia) - mediaFilterRepository.addMediaDataLoadingState( - MediaDataLoadingModel.Loaded(userMedia.instanceId) - ) + mediaFilterRepository.addMediaDataLoadingState(mediaLoadingModel) assertThat(hasActiveMediaOrRecommendation).isTrue() assertThat(hasAnyMediaOrRecommendation).isTrue() assertThat(sortedMedia) .containsExactly( - MediaCommonModel.MediaRecommendations(KEY_MEDIA_SMARTSPACE), - MediaCommonModel.MediaControl(userMedia.instanceId) + MediaCommonModel.MediaRecommendations(recsLoadingModel), + MediaCommonModel.MediaControl(mediaLoadingModel, true) ) .inOrder() } @@ -238,80 +226,7 @@ class MediaCarouselInteractorTest : SysuiTestCase() { fun hasActiveMediaOrRecommendation_nothingSet_returnsFalse() = testScope.runTest { assertThat(underTest.hasActiveMediaOrRecommendation.value).isFalse() } - @Test - fun onMediaDataUpdated_updatesLoadingState() = - testScope.runTest { - whenever(notificationLockscreenUserManager.isCurrentProfile(USER_ID)).thenReturn(true) - whenever(notificationLockscreenUserManager.isProfileAvailable(USER_ID)).thenReturn(true) - val mediaDataLoadedStates by collectLastValue(underTest.mediaDataLoadedStates) - val instanceId = InstanceId.fakeInstanceId(123) - val mediaLoadedStates: MutableList<MediaDataLoadingModel> = mutableListOf() - - mediaLoadedStates.add(MediaDataLoadingModel.Loaded(instanceId)) - mediaDataFilter.onMediaDataLoaded( - KEY, - KEY, - MediaData(userId = USER_ID, instanceId = instanceId) - ) - - assertThat(mediaDataLoadedStates).isEqualTo(mediaLoadedStates) - - val newInstanceId = InstanceId.fakeInstanceId(321) - - mediaLoadedStates.add(MediaDataLoadingModel.Loaded(newInstanceId)) - mediaDataFilter.onMediaDataLoaded( - KEY_2, - KEY_2, - MediaData(userId = USER_ID, instanceId = newInstanceId) - ) - - assertThat(mediaDataLoadedStates).isEqualTo(mediaLoadedStates) - - mediaLoadedStates.remove(MediaDataLoadingModel.Loaded(instanceId)) - - mediaDataFilter.onMediaDataRemoved(KEY) - - assertThat(mediaDataLoadedStates).isEqualTo(mediaLoadedStates) - - mediaLoadedStates.remove(MediaDataLoadingModel.Loaded(newInstanceId)) - - mediaDataFilter.onMediaDataRemoved(KEY_2) - - assertThat(mediaDataLoadedStates).isEqualTo(mediaLoadedStates) - } - - @Test - fun onMediaRecommendationsUpdated_updatesLoadingState() = - testScope.runTest { - whenever(notificationLockscreenUserManager.isCurrentProfile(USER_ID)).thenReturn(true) - whenever(notificationLockscreenUserManager.isProfileAvailable(USER_ID)).thenReturn(true) - val recommendationsLoadingState by - collectLastValue(underTest.recommendationsLoadingState) - val icon = Icon.createWithResource(context, R.drawable.ic_media_play) - val mediaRecommendations = - SmartspaceMediaData( - targetId = KEY_MEDIA_SMARTSPACE, - isActive = true, - recommendations = MediaTestHelper.getValidRecommendationList(icon), - ) - var recommendationsLoadingModel: SmartspaceMediaLoadingModel = - SmartspaceMediaLoadingModel.Loaded(KEY_MEDIA_SMARTSPACE, isPrioritized = true) - - mediaDataFilter.onSmartspaceMediaDataLoaded(KEY_MEDIA_SMARTSPACE, mediaRecommendations) - - assertThat(recommendationsLoadingState).isEqualTo(recommendationsLoadingModel) - - recommendationsLoadingModel = SmartspaceMediaLoadingModel.Removed(KEY_MEDIA_SMARTSPACE) - - mediaDataFilter.onSmartspaceMediaDataRemoved(KEY_MEDIA_SMARTSPACE) - - assertThat(recommendationsLoadingState).isEqualTo(recommendationsLoadingModel) - } - companion object { - private const val KEY = "key" - private const val KEY_2 = "key2" - private const val USER_ID = 0 private const val KEY_MEDIA_SMARTSPACE = "MEDIA_SMARTSPACE_ID" } } diff --git a/packages/SystemUI/multivalentTests/src/com/android/systemui/media/controls/ui/util/MediaDiffUtilTest.kt b/packages/SystemUI/multivalentTests/src/com/android/systemui/media/controls/ui/util/MediaDiffUtilTest.kt new file mode 100644 index 000000000000..4a9d0d1c7888 --- /dev/null +++ b/packages/SystemUI/multivalentTests/src/com/android/systemui/media/controls/ui/util/MediaDiffUtilTest.kt @@ -0,0 +1,226 @@ +/* + * Copyright (C) 2024 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.media.controls.ui.util + +import androidx.recyclerview.widget.DiffUtil +import androidx.test.ext.junit.runners.AndroidJUnit4 +import androidx.test.filters.SmallTest +import com.android.internal.logging.InstanceId +import com.android.systemui.SysuiTestCase +import com.android.systemui.media.controls.ui.viewmodel.MediaCommonViewModel +import com.android.systemui.media.controls.ui.viewmodel.mediaControlViewModel +import com.android.systemui.media.controls.ui.viewmodel.mediaRecommendationsViewModel +import com.android.systemui.testKosmos +import com.google.common.truth.Truth.assertThat +import org.junit.Assert.fail +import org.junit.Test +import org.junit.runner.RunWith + +@SmallTest +@RunWith(AndroidJUnit4::class) +class MediaDiffUtilTest : SysuiTestCase() { + + private val kosmos = testKosmos() + + @Test + fun newMediaControlAdded() { + val mediaControl = createMediaControl(InstanceId.fakeInstanceId(123), true) + val oldList = listOf<MediaCommonViewModel>() + val newList = listOf(mediaControl) + val mediaLoadedCallback = MediaViewModelCallback(oldList, newList) + val mediaLoadedListUpdateCallback = + MediaViewModelListUpdateCallback( + oldList, + newList, + { commonViewModel -> assertThat(commonViewModel).isEqualTo(mediaControl) }, + { fail("Unexpected to update $it") }, + { fail("Unexpected to remove $it") }, + { commonViewModel, _, _ -> fail("Unexpected to move $commonViewModel ") }, + ) + + DiffUtil.calculateDiff(mediaLoadedCallback).dispatchUpdatesTo(mediaLoadedListUpdateCallback) + } + + @Test + fun newMediaRecommendationsAdded() { + val mediaRecs = createMediaRecommendations(KEY_MEDIA_SMARTSPACE, true) + val oldList = listOf<MediaCommonViewModel>() + val newList = listOf(mediaRecs) + val mediaLoadedCallback = MediaViewModelCallback(oldList, newList) + val mediaLoadedListUpdateCallback = + MediaViewModelListUpdateCallback( + oldList, + newList, + { commonViewModel -> assertThat(commonViewModel).isEqualTo(mediaRecs) }, + { fail("Unexpected to update $it") }, + { fail("Unexpected to remove $it") }, + { commonViewModel, _, _ -> fail("Unexpected to move $commonViewModel ") }, + ) + + DiffUtil.calculateDiff(mediaLoadedCallback).dispatchUpdatesTo(mediaLoadedListUpdateCallback) + } + + @Test + fun updateMediaControl_contentChanged() { + val mediaControl = createMediaControl(InstanceId.fakeInstanceId(123), true) + val oldList = listOf(mediaControl) + val newList = listOf(mediaControl.copy(immediatelyUpdateUi = false)) + val mediaLoadedCallback = MediaViewModelCallback(oldList, newList) + val mediaLoadedListUpdateCallback = + MediaViewModelListUpdateCallback( + oldList, + newList, + { fail("Unexpected to add $it") }, + { commonViewModel -> assertThat(commonViewModel).isNotEqualTo(mediaControl) }, + { fail("Unexpected to remove $it") }, + { commonViewModel, _, _ -> fail("Unexpected to move $commonViewModel ") }, + ) + + DiffUtil.calculateDiff(mediaLoadedCallback).dispatchUpdatesTo(mediaLoadedListUpdateCallback) + } + + @Test + fun updateMediaRecommendations_contentChanged() { + val mediaRecs = createMediaRecommendations(KEY_MEDIA_SMARTSPACE, true) + val oldList = listOf(mediaRecs) + val newList = listOf(mediaRecs.copy(key = KEY_MEDIA_SMARTSPACE_2)) + val mediaLoadedCallback = MediaViewModelCallback(oldList, newList) + val mediaLoadedListUpdateCallback = + MediaViewModelListUpdateCallback( + oldList, + newList, + { fail("Unexpected to add $it") }, + { commonViewModel -> assertThat(commonViewModel).isNotEqualTo(mediaRecs) }, + { fail("Unexpected to remove $it") }, + { commonViewModel, _, _ -> fail("Unexpected to move $commonViewModel ") }, + ) + + DiffUtil.calculateDiff(mediaLoadedCallback).dispatchUpdatesTo(mediaLoadedListUpdateCallback) + } + + @Test + fun mediaControlMoved() { + val mediaControl1 = createMediaControl(InstanceId.fakeInstanceId(123), true) + val mediaControl2 = createMediaControl(InstanceId.fakeInstanceId(456), false) + val oldList = listOf(mediaControl1, mediaControl2) + val newList = listOf(mediaControl2, mediaControl1) + val mediaLoadedCallback = MediaViewModelCallback(oldList, newList) + val mediaLoadedListUpdateCallback = + MediaViewModelListUpdateCallback( + oldList, + newList, + { fail("Unexpected to add $it") }, + { fail("Unexpected to update $it") }, + { fail("Unexpected to remove $it") }, + { commonViewModel, _, _ -> assertThat(commonViewModel).isEqualTo(mediaControl1) }, + ) + + DiffUtil.calculateDiff(mediaLoadedCallback).dispatchUpdatesTo(mediaLoadedListUpdateCallback) + } + + @Test + fun mediaRecommendationsMoved() { + val mediaControl1 = createMediaControl(InstanceId.fakeInstanceId(123), true) + val mediaControl2 = createMediaControl(InstanceId.fakeInstanceId(456), false) + val mediaRecs = createMediaRecommendations(KEY_MEDIA_SMARTSPACE, true) + val oldList = listOf(mediaRecs, mediaControl1, mediaControl2) + val newList = listOf(mediaControl1, mediaControl2, mediaRecs) + val mediaLoadedCallback = MediaViewModelCallback(oldList, newList) + val mediaLoadedListUpdateCallback = + MediaViewModelListUpdateCallback( + oldList, + newList, + { fail("Unexpected to add $it") }, + { fail("Unexpected to update $it") }, + { fail("Unexpected to remove $it") }, + { commonViewModel, _, _ -> assertThat(commonViewModel).isEqualTo(mediaRecs) }, + ) + + DiffUtil.calculateDiff(mediaLoadedCallback).dispatchUpdatesTo(mediaLoadedListUpdateCallback) + } + + @Test + fun mediaControlRemoved() { + val mediaControl = createMediaControl(InstanceId.fakeInstanceId(123), true) + val oldList = listOf(mediaControl) + val newList = listOf<MediaCommonViewModel>() + val mediaLoadedCallback = MediaViewModelCallback(oldList, newList) + val mediaLoadedListUpdateCallback = + MediaViewModelListUpdateCallback( + oldList, + newList, + { fail("Unexpected to add $it") }, + { fail("Unexpected to update $it") }, + { commonViewModel -> assertThat(commonViewModel).isEqualTo(mediaControl) }, + { commonViewModel, _, _ -> fail("Unexpected to move $commonViewModel ") }, + ) + + DiffUtil.calculateDiff(mediaLoadedCallback).dispatchUpdatesTo(mediaLoadedListUpdateCallback) + } + + @Test + fun mediaRecommendationsRemoved() { + val mediaRecs = createMediaRecommendations(KEY_MEDIA_SMARTSPACE_2, false) + val oldList = listOf(mediaRecs) + val newList = listOf<MediaCommonViewModel>() + val mediaLoadedCallback = MediaViewModelCallback(oldList, newList) + val mediaLoadedListUpdateCallback = + MediaViewModelListUpdateCallback( + oldList, + newList, + { fail("Unexpected to add $it") }, + { fail("Unexpected to update $it") }, + { commonViewModel -> assertThat(commonViewModel).isEqualTo(mediaRecs) }, + { commonViewModel, _, _ -> fail("Unexpected to move $commonViewModel ") }, + ) + + DiffUtil.calculateDiff(mediaLoadedCallback).dispatchUpdatesTo(mediaLoadedListUpdateCallback) + } + + private fun createMediaControl( + instanceId: InstanceId, + immediatelyUpdateUi: Boolean, + ): MediaCommonViewModel.MediaControl { + return MediaCommonViewModel.MediaControl( + instanceId = instanceId, + immediatelyUpdateUi = immediatelyUpdateUi, + controlViewModel = kosmos.mediaControlViewModel, + onAdded = {}, + onRemoved = { _, _ -> }, + onUpdated = {} + ) + } + + private fun createMediaRecommendations( + key: String, + loadingEnabled: Boolean, + ): MediaCommonViewModel.MediaRecommendations { + return MediaCommonViewModel.MediaRecommendations( + key = key, + loadingEnabled = loadingEnabled, + recsViewModel = kosmos.mediaRecommendationsViewModel, + onAdded = {}, + onRemoved = { _, _ -> }, + onUpdated = {} + ) + } + + companion object { + private const val KEY_MEDIA_SMARTSPACE = "MEDIA_SMARTSPACE_ID" + private const val KEY_MEDIA_SMARTSPACE_2 = "MEDIA_SMARTSPACE_ID_2" + } +} diff --git a/packages/SystemUI/multivalentTests/src/com/android/systemui/media/controls/ui/viewmodel/MediaCarouselViewModelTest.kt b/packages/SystemUI/multivalentTests/src/com/android/systemui/media/controls/ui/viewmodel/MediaCarouselViewModelTest.kt new file mode 100644 index 000000000000..4b5fecd9c68d --- /dev/null +++ b/packages/SystemUI/multivalentTests/src/com/android/systemui/media/controls/ui/viewmodel/MediaCarouselViewModelTest.kt @@ -0,0 +1,147 @@ +/* + * Copyright (C) 2024 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.media.controls.ui.viewmodel + +import android.R +import android.content.packageManager +import android.content.pm.ApplicationInfo +import android.graphics.drawable.Icon +import androidx.test.ext.junit.runners.AndroidJUnit4 +import androidx.test.filters.SmallTest +import com.android.internal.logging.InstanceId +import com.android.systemui.SysuiTestCase +import com.android.systemui.coroutines.collectLastValue +import com.android.systemui.flags.Flags +import com.android.systemui.flags.fakeFeatureFlagsClassic +import com.android.systemui.kosmos.testScope +import com.android.systemui.media.controls.MediaTestHelper +import com.android.systemui.media.controls.domain.pipeline.MediaDataFilterImpl +import com.android.systemui.media.controls.domain.pipeline.interactor.mediaCarouselInteractor +import com.android.systemui.media.controls.domain.pipeline.mediaDataFilter +import com.android.systemui.media.controls.shared.model.MediaData +import com.android.systemui.media.controls.shared.model.SmartspaceMediaData +import com.android.systemui.statusbar.notificationLockscreenUserManager +import com.android.systemui.testKosmos +import com.android.systemui.util.mockito.any +import com.android.systemui.util.mockito.eq +import com.android.systemui.util.mockito.whenever +import com.google.common.truth.Truth.assertThat +import kotlinx.coroutines.test.runTest +import org.junit.Before +import org.junit.Test +import org.junit.runner.RunWith +import org.mockito.ArgumentMatchers +import org.mockito.Mockito + +@SmallTest +@RunWith(AndroidJUnit4::class) +class MediaCarouselViewModelTest : SysuiTestCase() { + + private val kosmos = testKosmos() + private val testScope = kosmos.testScope + + private val mediaDataFilter: MediaDataFilterImpl = kosmos.mediaDataFilter + private val notificationLockscreenUserManager = kosmos.notificationLockscreenUserManager + private val packageManager = kosmos.packageManager + private val icon = Icon.createWithResource(context, R.drawable.ic_media_play) + private val drawable = context.getDrawable(R.drawable.ic_media_play) + private val smartspaceMediaData: SmartspaceMediaData = + SmartspaceMediaData( + targetId = KEY_MEDIA_SMARTSPACE, + isActive = true, + packageName = PACKAGE_NAME, + recommendations = MediaTestHelper.getValidRecommendationList(icon), + ) + + private val underTest: MediaCarouselViewModel = kosmos.mediaCarouselViewModel + + @Before + fun setUp() { + kosmos.mediaCarouselInteractor.start() + + whenever(packageManager.getApplicationIcon(Mockito.anyString())).thenReturn(drawable) + whenever(packageManager.getApplicationIcon(any(ApplicationInfo::class.java))) + .thenReturn(drawable) + whenever(packageManager.getApplicationInfo(eq(PACKAGE_NAME), ArgumentMatchers.anyInt())) + .thenReturn(ApplicationInfo()) + whenever(packageManager.getApplicationLabel(any())).thenReturn(PACKAGE_NAME) + + context.setMockPackageManager(packageManager) + } + + @Test + fun loadMediaControls_mediaItemsAreUpdated() = + testScope.runTest { + val sortedMedia by collectLastValue(underTest.mediaItems) + val instanceId1 = InstanceId.fakeInstanceId(123) + val instanceId2 = InstanceId.fakeInstanceId(456) + + loadMediaControl(KEY, instanceId1) + loadMediaControl(KEY_2, instanceId2) + + val firstMediaControl = sortedMedia?.get(0) as MediaCommonViewModel.MediaControl + val secondMediaControl = sortedMedia?.get(1) as MediaCommonViewModel.MediaControl + assertThat(firstMediaControl.instanceId).isEqualTo(instanceId2) + assertThat(secondMediaControl.instanceId).isEqualTo(instanceId1) + } + + @Test + fun loadMediaControlsAndRecommendations_mediaItemsAreUpdated() = + testScope.runTest { + val sortedMedia by collectLastValue(underTest.mediaItems) + kosmos.fakeFeatureFlagsClassic.set(Flags.MEDIA_RETAIN_RECOMMENDATIONS, false) + val instanceId1 = InstanceId.fakeInstanceId(123) + val instanceId2 = InstanceId.fakeInstanceId(456) + + loadMediaControl(KEY, instanceId1) + loadMediaControl(KEY_2, instanceId2) + loadMediaRecommendations() + + val firstMediaControl = sortedMedia?.get(0) as MediaCommonViewModel.MediaControl + val secondMediaControl = sortedMedia?.get(1) as MediaCommonViewModel.MediaControl + val recsCard = sortedMedia?.get(2) as MediaCommonViewModel.MediaRecommendations + assertThat(firstMediaControl.instanceId).isEqualTo(instanceId2) + assertThat(secondMediaControl.instanceId).isEqualTo(instanceId1) + assertThat(recsCard.key).isEqualTo(KEY_MEDIA_SMARTSPACE) + } + + private fun loadMediaControl(key: String, instanceId: InstanceId) { + whenever(notificationLockscreenUserManager.isCurrentProfile(USER_ID)).thenReturn(true) + whenever(notificationLockscreenUserManager.isProfileAvailable(USER_ID)).thenReturn(true) + val mediaData = + MediaData( + userId = USER_ID, + packageName = PACKAGE_NAME, + notificationKey = key, + instanceId = instanceId + ) + + mediaDataFilter.onMediaDataLoaded(key, key, mediaData) + } + + private fun loadMediaRecommendations(key: String = KEY_MEDIA_SMARTSPACE) { + mediaDataFilter.onSmartspaceMediaDataLoaded(key, smartspaceMediaData) + } + + companion object { + private const val USER_ID = 0 + private const val KEY = "key" + private const val KEY_2 = "key2" + private const val PACKAGE_NAME = "com.example.app" + private const val KEY_MEDIA_SMARTSPACE = "MEDIA_SMARTSPACE_ID" + } +} diff --git a/packages/SystemUI/multivalentTests/src/com/android/systemui/qs/ui/viewmodel/QuickSettingsSceneViewModelTest.kt b/packages/SystemUI/multivalentTests/src/com/android/systemui/qs/ui/viewmodel/QuickSettingsSceneViewModelTest.kt index 3727c113a58e..719828ce4a0a 100644 --- a/packages/SystemUI/multivalentTests/src/com/android/systemui/qs/ui/viewmodel/QuickSettingsSceneViewModelTest.kt +++ b/packages/SystemUI/multivalentTests/src/com/android/systemui/qs/ui/viewmodel/QuickSettingsSceneViewModelTest.kt @@ -19,13 +19,20 @@ package com.android.systemui.qs.ui.viewmodel import androidx.test.ext.junit.runners.AndroidJUnit4 import androidx.test.filters.SmallTest import com.android.compose.animation.scene.Back +import com.android.compose.animation.scene.Edge import com.android.compose.animation.scene.Swipe import com.android.compose.animation.scene.SwipeDirection import com.android.compose.animation.scene.UserActionResult import com.android.systemui.SysuiTestCase +import com.android.systemui.authentication.data.repository.fakeAuthenticationRepository +import com.android.systemui.authentication.shared.model.AuthenticationMethodModel import com.android.systemui.coroutines.collectLastValue +import com.android.systemui.deviceentry.data.repository.fakeDeviceEntryRepository +import com.android.systemui.deviceentry.domain.interactor.deviceEntryInteractor import com.android.systemui.flags.Flags import com.android.systemui.flags.fakeFeatureFlagsClassic +import com.android.systemui.keyguard.data.repository.fakeDeviceEntryFingerprintAuthRepository +import com.android.systemui.keyguard.shared.model.SuccessFingerprintAuthenticationStatus import com.android.systemui.kosmos.testScope import com.android.systemui.qs.FooterActionsController import com.android.systemui.qs.footer.ui.viewmodel.FooterActionsViewModel @@ -41,6 +48,7 @@ import com.android.systemui.util.mockito.any import com.android.systemui.util.mockito.mock import com.android.systemui.util.mockito.whenever import com.google.common.truth.Truth.assertThat +import kotlinx.coroutines.ExperimentalCoroutinesApi import kotlinx.coroutines.test.runTest import org.junit.Before import org.junit.Test @@ -66,12 +74,15 @@ class QuickSettingsSceneViewModelTest : SysuiTestCase() { private lateinit var underTest: QuickSettingsSceneViewModel + @OptIn(ExperimentalCoroutinesApi::class) @Before fun setUp() { kosmos.fakeFeatureFlagsClassic.set(Flags.NEW_NETWORK_SLICE_UI, false) underTest = QuickSettingsSceneViewModel( + applicationScope = testScope.backgroundScope, + deviceEntryInteractor = kosmos.deviceEntryInteractor, brightnessMirrorViewModel = kosmos.brightnessMirrorViewModel, shadeHeaderViewModel = kosmos.shadeHeaderViewModel, qsSceneAdapter = qsFlexiglassAdapter, @@ -83,17 +94,27 @@ class QuickSettingsSceneViewModelTest : SysuiTestCase() { } @Test - fun destinations_whenNotCustomizing() = + fun destinations_whenNotCustomizing_unlocked() = testScope.runTest { overrideResource(R.bool.config_use_split_notification_shade, false) val destinations by collectLastValue(underTest.destinationScenes) qsFlexiglassAdapter.setCustomizing(false) + kosmos.fakeAuthenticationRepository.setAuthenticationMethod( + AuthenticationMethodModel.Pin + ) + kosmos.fakeDeviceEntryFingerprintAuthRepository.setAuthenticationStatus( + SuccessFingerprintAuthenticationStatus(0, true) + ) assertThat(destinations) .isEqualTo( mapOf( Back to UserActionResult(Scenes.Shade), Swipe(SwipeDirection.Up) to UserActionResult(Scenes.Shade), + Swipe( + fromSource = Edge.Bottom, + direction = SwipeDirection.Up, + ) to UserActionResult(Scenes.Gone) ) ) } @@ -106,17 +127,44 @@ class QuickSettingsSceneViewModelTest : SysuiTestCase() { val destinations by collectLastValue(underTest.destinationScenes) val currentScene by collectLastValue(sceneInteractor.currentScene) - val previousScene by collectLastValue(sceneInteractor.previousScene) + val previousScene by collectLastValue(sceneInteractor.previousScene()) sceneInteractor.changeScene(Scenes.Lockscreen, "reason") sceneInteractor.changeScene(Scenes.QuickSettings, "reason") assertThat(currentScene).isEqualTo(Scenes.QuickSettings) assertThat(previousScene).isEqualTo(Scenes.Lockscreen) - assertThat(destinations) .isEqualTo( mapOf( Back to UserActionResult(Scenes.Lockscreen), Swipe(SwipeDirection.Up) to UserActionResult(Scenes.Lockscreen), + Swipe( + fromSource = Edge.Bottom, + direction = SwipeDirection.Up, + ) to UserActionResult(Scenes.Lockscreen) + ) + ) + } + + @Test + fun destinations_whenNotCustomizing_authMethodSwipe_lockscreenNotDismissed() = + testScope.runTest { + overrideResource(R.bool.config_use_split_notification_shade, false) + val destinations by collectLastValue(underTest.destinationScenes) + qsFlexiglassAdapter.setCustomizing(false) + kosmos.fakeDeviceEntryRepository.setLockscreenEnabled(true) + kosmos.fakeAuthenticationRepository.setAuthenticationMethod( + AuthenticationMethodModel.None + ) + + assertThat(destinations) + .isEqualTo( + mapOf( + Back to UserActionResult(Scenes.Shade), + Swipe(SwipeDirection.Up) to UserActionResult(Scenes.Shade), + Swipe( + fromSource = Edge.Bottom, + direction = SwipeDirection.Up, + ) to UserActionResult(Scenes.Lockscreen) ) ) } @@ -132,17 +180,27 @@ class QuickSettingsSceneViewModelTest : SysuiTestCase() { } @Test - fun destinations_whenNotCustomizing_inSplitShade() = + fun destinations_whenNotCustomizing_inSplitShade_unlocked() = testScope.runTest { overrideResource(R.bool.config_use_split_notification_shade, true) val destinations by collectLastValue(underTest.destinationScenes) qsFlexiglassAdapter.setCustomizing(false) + kosmos.fakeAuthenticationRepository.setAuthenticationMethod( + AuthenticationMethodModel.Pin + ) + kosmos.fakeDeviceEntryFingerprintAuthRepository.setAuthenticationStatus( + SuccessFingerprintAuthenticationStatus(0, true) + ) assertThat(destinations) .isEqualTo( mapOf( Back to UserActionResult(Scenes.Shade), Swipe(SwipeDirection.Up) to UserActionResult(Scenes.Shade), + Swipe( + fromSource = Edge.Bottom, + direction = SwipeDirection.Up, + ) to UserActionResult(Scenes.Gone), ) ) } diff --git a/packages/SystemUI/multivalentTests/src/com/android/systemui/scene/SceneFrameworkIntegrationTest.kt b/packages/SystemUI/multivalentTests/src/com/android/systemui/scene/SceneFrameworkIntegrationTest.kt index 65fd1010ec38..a8890078a6f3 100644 --- a/packages/SystemUI/multivalentTests/src/com/android/systemui/scene/SceneFrameworkIntegrationTest.kt +++ b/packages/SystemUI/multivalentTests/src/com/android/systemui/scene/SceneFrameworkIntegrationTest.kt @@ -150,6 +150,7 @@ class SceneFrameworkIntegrationTest : SysuiTestCase() { sceneInteractor = sceneInteractor, falsingInteractor = kosmos.falsingInteractor, powerInteractor = kosmos.powerInteractor, + scenes = kosmos.scenes, ) .apply { setTransitionState(transitionState) } } diff --git a/packages/SystemUI/multivalentTests/src/com/android/systemui/scene/domain/interactor/SceneInteractorTest.kt b/packages/SystemUI/multivalentTests/src/com/android/systemui/scene/domain/interactor/SceneInteractorTest.kt index 63f481695232..871ce6d56e97 100644 --- a/packages/SystemUI/multivalentTests/src/com/android/systemui/scene/domain/interactor/SceneInteractorTest.kt +++ b/packages/SystemUI/multivalentTests/src/com/android/systemui/scene/domain/interactor/SceneInteractorTest.kt @@ -296,7 +296,7 @@ class SceneInteractorTest : SysuiTestCase() { fun previousScene() = testScope.runTest { val currentScene by collectLastValue(underTest.currentScene) - val previousScene by collectLastValue(underTest.previousScene) + val previousScene by collectLastValue(underTest.previousScene()) assertThat(previousScene).isNull() val firstScene = currentScene @@ -306,4 +306,19 @@ class SceneInteractorTest : SysuiTestCase() { underTest.changeScene(toScene = Scenes.QuickSettings, "reason") assertThat(previousScene).isEqualTo(Scenes.Shade) } + + @Test + fun previousScene_withIgnoredScene() = + testScope.runTest { + val currentScene by collectLastValue(underTest.currentScene) + val previousScene by collectLastValue(underTest.previousScene(ignored = Scenes.Shade)) + assertThat(previousScene).isNull() + + val firstScene = currentScene + underTest.changeScene(toScene = Scenes.Shade, "reason") + assertThat(previousScene).isEqualTo(firstScene) + + underTest.changeScene(toScene = Scenes.QuickSettings, "reason") + assertThat(previousScene).isNull() + } } diff --git a/packages/SystemUI/multivalentTests/src/com/android/systemui/scene/ui/viewmodel/SceneContainerViewModelTest.kt b/packages/SystemUI/multivalentTests/src/com/android/systemui/scene/ui/viewmodel/SceneContainerViewModelTest.kt index ea95aab4a1c4..5c30379ea2fb 100644 --- a/packages/SystemUI/multivalentTests/src/com/android/systemui/scene/ui/viewmodel/SceneContainerViewModelTest.kt +++ b/packages/SystemUI/multivalentTests/src/com/android/systemui/scene/ui/viewmodel/SceneContainerViewModelTest.kt @@ -28,8 +28,10 @@ import com.android.systemui.kosmos.testScope import com.android.systemui.power.data.repository.fakePowerRepository import com.android.systemui.power.domain.interactor.powerInteractor import com.android.systemui.scene.domain.interactor.sceneInteractor +import com.android.systemui.scene.fakeScenes import com.android.systemui.scene.sceneContainerConfig import com.android.systemui.scene.sceneKeys +import com.android.systemui.scene.scenes import com.android.systemui.scene.shared.model.Scenes import com.android.systemui.scene.shared.model.fakeSceneDataSource import com.android.systemui.testKosmos @@ -64,6 +66,7 @@ class SceneContainerViewModelTest : SysuiTestCase() { sceneInteractor = sceneInteractor, falsingInteractor = kosmos.falsingInteractor, powerInteractor = kosmos.powerInteractor, + scenes = kosmos.scenes, ) } @@ -214,4 +217,23 @@ class SceneContainerViewModelTest : SysuiTestCase() { assertThat(isVisible).isFalse() } + + @Test + fun currentDestinationScenes_onlyTheCurrentSceneIsCollected() = + testScope.runTest { + val unused by collectLastValue(underTest.currentDestinationScenes(backgroundScope)) + val currentScene by collectLastValue(sceneInteractor.currentScene) + kosmos.fakeScenes.forEach { scene -> + fakeSceneDataSource.changeScene(toScene = scene.key) + runCurrent() + assertThat(currentScene).isEqualTo(scene.key) + + assertThat(scene.isDestinationScenesBeingCollected).isTrue() + kosmos.fakeScenes + .filter { it.key != scene.key } + .forEach { otherScene -> + assertThat(otherScene.isDestinationScenesBeingCollected).isFalse() + } + } + } } diff --git a/packages/SystemUI/multivalentTests/src/com/android/systemui/shade/domain/interactor/ShadeBackActionInteractorImplTest.kt b/packages/SystemUI/multivalentTests/src/com/android/systemui/shade/domain/interactor/ShadeBackActionInteractorImplTest.kt index 26f342aa05ce..468c39daa282 100644 --- a/packages/SystemUI/multivalentTests/src/com/android/systemui/shade/domain/interactor/ShadeBackActionInteractorImplTest.kt +++ b/packages/SystemUI/multivalentTests/src/com/android/systemui/shade/domain/interactor/ShadeBackActionInteractorImplTest.kt @@ -22,7 +22,12 @@ import androidx.test.filters.SmallTest import com.android.compose.animation.scene.ObservableTransitionState import com.android.compose.animation.scene.SceneKey import com.android.systemui.SysuiTestCase +import com.android.systemui.authentication.data.repository.fakeAuthenticationRepository +import com.android.systemui.authentication.shared.model.AuthenticationMethodModel +import com.android.systemui.coroutines.collectLastValue import com.android.systemui.flags.EnableSceneContainer +import com.android.systemui.keyguard.data.repository.deviceEntryFingerprintAuthRepository +import com.android.systemui.keyguard.shared.model.SuccessFingerprintAuthenticationStatus import com.android.systemui.kosmos.testScope import com.android.systemui.scene.domain.interactor.sceneInteractor import com.android.systemui.scene.shared.model.Scenes @@ -31,77 +36,93 @@ import com.android.systemui.testKosmos import com.google.common.truth.Truth.assertThat import kotlinx.coroutines.ExperimentalCoroutinesApi import kotlinx.coroutines.flow.MutableStateFlow +import kotlinx.coroutines.test.TestScope import kotlinx.coroutines.test.runCurrent import kotlinx.coroutines.test.runTest import org.junit.Assume import org.junit.Before -import org.junit.Ignore import org.junit.Test import org.junit.runner.RunWith @OptIn(ExperimentalCoroutinesApi::class) @SmallTest @RunWith(AndroidJUnit4::class) -@Ignore("b/328827631") @EnableSceneContainer class ShadeBackActionInteractorImplTest : SysuiTestCase() { val kosmos = testKosmos() val testScope = kosmos.testScope - val sceneInteractor = kosmos.sceneInteractor - val underTest = kosmos.shadeBackActionInteractor + val sceneInteractor by lazy { kosmos.sceneInteractor } + val shadeInteractor by lazy { kosmos.shadeInteractor } + val fakeAuthenticationRepository by lazy { kosmos.fakeAuthenticationRepository } + val deviceEntryFingerprintAuthRepository by lazy { kosmos.deviceEntryFingerprintAuthRepository } + + lateinit var underTest: ShadeBackActionInteractor @Before - fun ignoreSplitShade() { + fun ignoreSplitShadeAndSetup() { Assume.assumeFalse(Utilities.isLargeScreen(kosmos.applicationContext)) + underTest = kosmos.shadeBackActionInteractor } @Test fun animateCollapseQs_notOnQs() = testScope.runTest { + val actual by collectLastValue(sceneInteractor.currentScene) setScene(Scenes.Shade) underTest.animateCollapseQs(true) runCurrent() - assertThat(sceneInteractor.currentScene.value).isEqualTo(Scenes.Shade) + assertThat(actual).isEqualTo(Scenes.Shade) } @Test fun animateCollapseQs_fullyCollapse_entered() = testScope.runTest { + val actual by collectLastValue(sceneInteractor.currentScene) enterDevice() setScene(Scenes.QuickSettings) underTest.animateCollapseQs(true) runCurrent() - assertThat(sceneInteractor.currentScene.value).isEqualTo(Scenes.Gone) + assertThat(actual).isEqualTo(Scenes.Gone) } @Test fun animateCollapseQs_fullyCollapse_locked() = testScope.runTest { + val actual by collectLastValue(sceneInteractor.currentScene) setScene(Scenes.QuickSettings) underTest.animateCollapseQs(true) runCurrent() - assertThat(sceneInteractor.currentScene.value).isEqualTo(Scenes.Lockscreen) + assertThat(actual).isEqualTo(Scenes.Lockscreen) } @Test fun animateCollapseQs_notFullyCollapse() = testScope.runTest { + val actual by collectLastValue(sceneInteractor.currentScene) setScene(Scenes.QuickSettings) underTest.animateCollapseQs(false) runCurrent() - assertThat(sceneInteractor.currentScene.value).isEqualTo(Scenes.Shade) + assertThat(actual).isEqualTo(Scenes.Shade) } - private fun enterDevice() { - testScope.runCurrent() + private fun TestScope.enterDevice() { + // configure device unlocked state + fakeAuthenticationRepository.setAuthenticationMethod(AuthenticationMethodModel.Pin) + runCurrent() + deviceEntryFingerprintAuthRepository.setAuthenticationStatus( + SuccessFingerprintAuthenticationStatus(0, true) + ) + runCurrent() setScene(Scenes.Gone) } - private fun setScene(key: SceneKey) { + private fun TestScope.setScene(key: SceneKey) { + val actual by collectLastValue(sceneInteractor.currentScene) sceneInteractor.changeScene(key, "test") sceneInteractor.setTransitionState( MutableStateFlow<ObservableTransitionState>(ObservableTransitionState.Idle(key)) ) - testScope.runCurrent() + runCurrent() + assertThat(actual).isEqualTo(key) } } diff --git a/packages/SystemUI/multivalentTests/src/com/android/systemui/shade/domain/interactor/ShadeInteractorImplTest.kt b/packages/SystemUI/multivalentTests/src/com/android/systemui/shade/domain/interactor/ShadeInteractorImplTest.kt index 5b33ecbb28be..96b2b7a20342 100644 --- a/packages/SystemUI/multivalentTests/src/com/android/systemui/shade/domain/interactor/ShadeInteractorImplTest.kt +++ b/packages/SystemUI/multivalentTests/src/com/android/systemui/shade/domain/interactor/ShadeInteractorImplTest.kt @@ -19,11 +19,12 @@ package com.android.systemui.shade.domain.interactor import android.app.StatusBarManager.DISABLE2_NONE import android.app.StatusBarManager.DISABLE2_NOTIFICATION_SHADE import android.app.StatusBarManager.DISABLE2_QUICK_SETTINGS -import androidx.test.ext.junit.runners.AndroidJUnit4 +import android.platform.test.flag.junit.FlagsParameterization import androidx.test.filters.SmallTest import com.android.systemui.SysuiTestCase import com.android.systemui.common.ui.data.repository.fakeConfigurationRepository import com.android.systemui.coroutines.collectLastValue +import com.android.systemui.flags.andSceneContainer import com.android.systemui.keyguard.data.repository.fakeKeyguardRepository import com.android.systemui.keyguard.data.repository.fakeKeyguardTransitionRepository import com.android.systemui.keyguard.shared.model.DozeStateModel @@ -36,9 +37,7 @@ import com.android.systemui.kosmos.testScope import com.android.systemui.power.data.repository.fakePowerRepository import com.android.systemui.power.shared.model.WakeSleepReason import com.android.systemui.power.shared.model.WakefulnessState -import com.android.systemui.res.R -import com.android.systemui.scene.domain.interactor.sceneInteractor -import com.android.systemui.shade.data.repository.fakeShadeRepository +import com.android.systemui.shade.shadeTestUtil import com.android.systemui.statusbar.disableflags.data.model.DisableFlagsModel import com.android.systemui.statusbar.disableflags.data.repository.fakeDisableFlagsRepository import com.android.systemui.statusbar.phone.dozeParameters @@ -52,28 +51,47 @@ import com.google.common.truth.Truth.assertThat import kotlinx.coroutines.ExperimentalCoroutinesApi import kotlinx.coroutines.test.runCurrent import kotlinx.coroutines.test.runTest +import org.junit.Before import org.junit.Test import org.junit.runner.RunWith +import platform.test.runner.parameterized.ParameterizedAndroidJunit4 +import platform.test.runner.parameterized.Parameters @OptIn(ExperimentalCoroutinesApi::class) @SmallTest -@RunWith(AndroidJUnit4::class) -class ShadeInteractorImplTest : SysuiTestCase() { +@RunWith(ParameterizedAndroidJunit4::class) +class ShadeInteractorImplTest(flags: FlagsParameterization?) : SysuiTestCase() { val kosmos = testKosmos() val testScope = kosmos.testScope - val configurationRepository = kosmos.fakeConfigurationRepository - val deviceProvisioningRepository = kosmos.fakeDeviceProvisioningRepository - val disableFlagsRepository = kosmos.fakeDisableFlagsRepository - val keyguardRepository = kosmos.fakeKeyguardRepository - val keyguardTransitionRepository = kosmos.fakeKeyguardTransitionRepository - val powerRepository = kosmos.fakePowerRepository - val sceneInteractor = kosmos.sceneInteractor - val shadeRepository = kosmos.fakeShadeRepository - val userRepository = kosmos.fakeUserRepository - val userSetupRepository = kosmos.fakeUserSetupRepository - val dozeParameters = kosmos.dozeParameters - - val underTest = kosmos.shadeInteractorImpl + val configurationRepository by lazy { kosmos.fakeConfigurationRepository } + val deviceProvisioningRepository by lazy { kosmos.fakeDeviceProvisioningRepository } + val disableFlagsRepository by lazy { kosmos.fakeDisableFlagsRepository } + val keyguardRepository by lazy { kosmos.fakeKeyguardRepository } + val keyguardTransitionRepository by lazy { kosmos.fakeKeyguardTransitionRepository } + val powerRepository by lazy { kosmos.fakePowerRepository } + val shadeTestUtil by lazy { kosmos.shadeTestUtil } + val userRepository by lazy { kosmos.fakeUserRepository } + val userSetupRepository by lazy { kosmos.fakeUserSetupRepository } + val dozeParameters by lazy { kosmos.dozeParameters } + + lateinit var underTest: ShadeInteractorImpl + + companion object { + @JvmStatic + @Parameters(name = "{0}") + fun getParams(): List<FlagsParameterization> { + return FlagsParameterization.allCombinationsOf().andSceneContainer() + } + } + + init { + mSetFlagsRule.setFlagsParameterization(flags!!) + } + + @Before + fun setup() { + underTest = kosmos.shadeInteractorImpl + } @Test fun isShadeEnabled_matchesDisableFlagsRepo() = @@ -284,88 +302,13 @@ class ShadeInteractorImplTest : SysuiTestCase() { } @Test - fun fullShadeExpansionWhenShadeLocked() = - testScope.runTest { - val actual by collectLastValue(underTest.shadeExpansion) - - keyguardRepository.setStatusBarState(StatusBarState.SHADE_LOCKED) - shadeRepository.setLockscreenShadeExpansion(0.5f) - - assertThat(actual).isEqualTo(1f) - } - - @Test - fun fullShadeExpansionWhenStatusBarStateIsNotShadeLocked() = - testScope.runTest { - val actual by collectLastValue(underTest.shadeExpansion) - - keyguardRepository.setStatusBarState(StatusBarState.KEYGUARD) - - shadeRepository.setLockscreenShadeExpansion(0.5f) - assertThat(actual).isEqualTo(0.5f) - - shadeRepository.setLockscreenShadeExpansion(0.8f) - assertThat(actual).isEqualTo(0.8f) - } - - @Test - fun shadeExpansionWhenInSplitShadeAndQsExpanded() = - testScope.runTest { - val actual by collectLastValue(underTest.shadeExpansion) - - // WHEN split shade is enabled and QS is expanded - keyguardRepository.setStatusBarState(StatusBarState.SHADE) - overrideResource(R.bool.config_use_split_notification_shade, true) - configurationRepository.onAnyConfigurationChange() - shadeRepository.setQsExpansion(.5f) - shadeRepository.setLegacyShadeExpansion(.7f) - runCurrent() - - // THEN legacy shade expansion is passed through - assertThat(actual).isEqualTo(.7f) - } - - @Test - fun shadeExpansionWhenNotInSplitShadeAndQsPartiallyExpanded() = - testScope.runTest { - val actual by collectLastValue(underTest.shadeExpansion) - - // WHEN split shade is not enabled and QS is expanded - keyguardRepository.setStatusBarState(StatusBarState.SHADE) - overrideResource(R.bool.config_use_split_notification_shade, false) - shadeRepository.setQsExpansion(.5f) - shadeRepository.setLegacyShadeExpansion(1f) - runCurrent() - - // THEN shade expansion is zero - assertThat(actual).isEqualTo(.5f) - } - - @Test - fun shadeExpansionWhenNotInSplitShadeAndQsFullyExpanded() = - testScope.runTest { - val actual by collectLastValue(underTest.shadeExpansion) - - // WHEN split shade is not enabled and QS is expanded - keyguardRepository.setStatusBarState(StatusBarState.SHADE) - overrideResource(R.bool.config_use_split_notification_shade, false) - shadeRepository.setQsExpansion(1f) - shadeRepository.setLegacyShadeExpansion(1f) - runCurrent() - - // THEN shade expansion is zero - assertThat(actual).isEqualTo(0f) - } - - @Test fun shadeExpansionWhenNotInSplitShadeAndQsCollapsed() = testScope.runTest { val actual by collectLastValue(underTest.shadeExpansion) // WHEN split shade is not enabled and QS is expanded keyguardRepository.setStatusBarState(StatusBarState.SHADE) - shadeRepository.setQsExpansion(0f) - shadeRepository.setLegacyShadeExpansion(.6f) + shadeTestUtil.setShadeAndQsExpansion(.6f, 0f) // THEN shade expansion is zero assertThat(actual).isEqualTo(.6f) @@ -375,8 +318,7 @@ class ShadeInteractorImplTest : SysuiTestCase() { fun anyExpansion_shadeGreater() = testScope.runTest() { // WHEN shade is more expanded than QS - shadeRepository.setLegacyShadeExpansion(.5f) - shadeRepository.setQsExpansion(0f) + shadeTestUtil.setShadeAndQsExpansion(.5f, 0f) runCurrent() // THEN anyExpansion is .5f @@ -387,8 +329,7 @@ class ShadeInteractorImplTest : SysuiTestCase() { fun anyExpansion_qsGreater() = testScope.runTest() { // WHEN qs is more expanded than shade - shadeRepository.setLegacyShadeExpansion(0f) - shadeRepository.setQsExpansion(.5f) + shadeTestUtil.setShadeAndQsExpansion(0f, .5f) runCurrent() // THEN anyExpansion is .5f @@ -396,229 +337,6 @@ class ShadeInteractorImplTest : SysuiTestCase() { } @Test - fun userInteractingWithShade_shadeDraggedUpAndDown() = - testScope.runTest() { - val actual by collectLastValue(underTest.isUserInteractingWithShade) - // GIVEN shade collapsed and not tracking input - shadeRepository.setLegacyShadeExpansion(0f) - shadeRepository.setLegacyShadeTracking(false) - runCurrent() - - // THEN user is not interacting - assertThat(actual).isFalse() - - // WHEN shade tracking starts - shadeRepository.setLegacyShadeTracking(true) - runCurrent() - - // THEN user is interacting - assertThat(actual).isTrue() - - // WHEN shade dragged down halfway - shadeRepository.setLegacyShadeExpansion(.5f) - runCurrent() - - // THEN user is interacting - assertThat(actual).isTrue() - - // WHEN shade fully expanded but tracking is not stopped - shadeRepository.setLegacyShadeExpansion(1f) - runCurrent() - - // THEN user is interacting - assertThat(actual).isTrue() - - // WHEN shade fully collapsed but tracking is not stopped - shadeRepository.setLegacyShadeExpansion(0f) - runCurrent() - - // THEN user is interacting - assertThat(actual).isTrue() - - // WHEN shade dragged halfway and tracking is stopped - shadeRepository.setLegacyShadeExpansion(.6f) - shadeRepository.setLegacyShadeTracking(false) - runCurrent() - - // THEN user is interacting - assertThat(actual).isTrue() - - // WHEN shade completes expansion stopped - shadeRepository.setLegacyShadeExpansion(1f) - runCurrent() - - // THEN user is not interacting - assertThat(actual).isFalse() - } - - @Test - fun userInteractingWithShade_shadeExpanded() = - testScope.runTest() { - val actual by collectLastValue(underTest.isUserInteractingWithShade) - // GIVEN shade collapsed and not tracking input - shadeRepository.setLegacyShadeExpansion(0f) - shadeRepository.setLegacyShadeTracking(false) - runCurrent() - - // THEN user is not interacting - assertThat(actual).isFalse() - - // WHEN shade tracking starts - shadeRepository.setLegacyShadeTracking(true) - runCurrent() - - // THEN user is interacting - assertThat(actual).isTrue() - - // WHEN shade dragged down halfway - shadeRepository.setLegacyShadeExpansion(.5f) - runCurrent() - - // THEN user is interacting - assertThat(actual).isTrue() - - // WHEN shade fully expanded and tracking is stopped - shadeRepository.setLegacyShadeExpansion(1f) - shadeRepository.setLegacyShadeTracking(false) - runCurrent() - - // THEN user is not interacting - assertThat(actual).isFalse() - } - - @Test - fun userInteractingWithShade_shadePartiallyExpanded() = - testScope.runTest() { - val actual by collectLastValue(underTest.isUserInteractingWithShade) - // GIVEN shade collapsed and not tracking input - shadeRepository.setLegacyShadeExpansion(0f) - shadeRepository.setLegacyShadeTracking(false) - runCurrent() - - // THEN user is not interacting - assertThat(actual).isFalse() - - // WHEN shade tracking starts - shadeRepository.setLegacyShadeTracking(true) - runCurrent() - - // THEN user is interacting - assertThat(actual).isTrue() - - // WHEN shade partially expanded - shadeRepository.setLegacyShadeExpansion(.4f) - runCurrent() - - // THEN user is interacting - assertThat(actual).isTrue() - - // WHEN tracking is stopped - shadeRepository.setLegacyShadeTracking(false) - runCurrent() - - // THEN user is interacting - assertThat(actual).isTrue() - - // WHEN shade goes back to collapsed - shadeRepository.setLegacyShadeExpansion(0f) - runCurrent() - - // THEN user is not interacting - assertThat(actual).isFalse() - } - - @Test - fun userInteractingWithShade_shadeCollapsed() = - testScope.runTest() { - val actual by collectLastValue(underTest.isUserInteractingWithShade) - // GIVEN shade expanded and not tracking input - shadeRepository.setLegacyShadeExpansion(1f) - shadeRepository.setLegacyShadeTracking(false) - runCurrent() - - // THEN user is not interacting - assertThat(actual).isFalse() - - // WHEN shade tracking starts - shadeRepository.setLegacyShadeTracking(true) - runCurrent() - - // THEN user is interacting - assertThat(actual).isTrue() - - // WHEN shade dragged up halfway - shadeRepository.setLegacyShadeExpansion(.5f) - runCurrent() - - // THEN user is interacting - assertThat(actual).isTrue() - - // WHEN shade fully collapsed and tracking is stopped - shadeRepository.setLegacyShadeExpansion(0f) - shadeRepository.setLegacyShadeTracking(false) - runCurrent() - - // THEN user is not interacting - assertThat(actual).isFalse() - } - - @Test - fun userInteractingWithQs_qsDraggedUpAndDown() = - testScope.runTest() { - val actual by collectLastValue(underTest.isUserInteractingWithQs) - // GIVEN qs collapsed and not tracking input - shadeRepository.setQsExpansion(0f) - shadeRepository.setLegacyQsTracking(false) - runCurrent() - - // THEN user is not interacting - assertThat(actual).isFalse() - - // WHEN qs tracking starts - shadeRepository.setLegacyQsTracking(true) - runCurrent() - - // THEN user is interacting - assertThat(actual).isTrue() - - // WHEN qs dragged down halfway - shadeRepository.setQsExpansion(.5f) - runCurrent() - - // THEN user is interacting - assertThat(actual).isTrue() - - // WHEN qs fully expanded but tracking is not stopped - shadeRepository.setQsExpansion(1f) - runCurrent() - - // THEN user is interacting - assertThat(actual).isTrue() - - // WHEN qs fully collapsed but tracking is not stopped - shadeRepository.setQsExpansion(0f) - runCurrent() - - // THEN user is interacting - assertThat(actual).isTrue() - - // WHEN qs dragged halfway and tracking is stopped - shadeRepository.setQsExpansion(.6f) - shadeRepository.setLegacyQsTracking(false) - runCurrent() - - // THEN user is interacting - assertThat(actual).isTrue() - - // WHEN qs completes expansion stopped - shadeRepository.setQsExpansion(1f) - runCurrent() - - // THEN user is not interacting - assertThat(actual).isFalse() - } - - @Test fun isShadeTouchable_isFalse_whenDeviceAsleepAndNotPulsing() = testScope.runTest { powerRepository.updateWakefulness( diff --git a/packages/SystemUI/multivalentTests/src/com/android/systemui/shade/domain/interactor/ShadeInteractorLegacyImplTest.kt b/packages/SystemUI/multivalentTests/src/com/android/systemui/shade/domain/interactor/ShadeInteractorLegacyImplTest.kt index 0ae95e708d24..109cd05368e6 100644 --- a/packages/SystemUI/multivalentTests/src/com/android/systemui/shade/domain/interactor/ShadeInteractorLegacyImplTest.kt +++ b/packages/SystemUI/multivalentTests/src/com/android/systemui/shade/domain/interactor/ShadeInteractorLegacyImplTest.kt @@ -21,6 +21,7 @@ import androidx.test.filters.SmallTest import com.android.systemui.SysuiTestCase import com.android.systemui.common.ui.data.repository.fakeConfigurationRepository import com.android.systemui.coroutines.collectLastValue +import com.android.systemui.flags.DisableSceneContainer import com.android.systemui.keyguard.data.repository.fakeKeyguardRepository import com.android.systemui.keyguard.data.repository.fakeKeyguardTransitionRepository import com.android.systemui.keyguard.shared.model.StatusBarState @@ -40,6 +41,7 @@ import org.junit.runner.RunWith @OptIn(ExperimentalCoroutinesApi::class) @SmallTest @RunWith(AndroidJUnit4::class) +@DisableSceneContainer class ShadeInteractorLegacyImplTest : SysuiTestCase() { val kosmos = testKosmos() val testScope = kosmos.testScope @@ -95,6 +97,22 @@ class ShadeInteractorLegacyImplTest : SysuiTestCase() { } @Test + fun shadeExpansionWhenNotInSplitShadeAndQsPartiallyExpanded() = + testScope.runTest { + val actual by collectLastValue(underTest.shadeExpansion) + + // WHEN split shade is not enabled and QS is expanded + keyguardRepository.setStatusBarState(StatusBarState.SHADE) + overrideResource(R.bool.config_use_split_notification_shade, false) + shadeRepository.setQsExpansion(.5f) + shadeRepository.setLegacyShadeExpansion(1f) + runCurrent() + + // THEN shade expansion is zero + assertThat(actual).isEqualTo(.5f) + } + + @Test fun shadeExpansionWhenNotInSplitShadeAndQsFullyExpanded() = testScope.runTest { val actual by collectLastValue(underTest.shadeExpansion) diff --git a/packages/SystemUI/multivalentTests/src/com/android/systemui/shade/domain/interactor/ShadeInteractorSceneContainerImplTest.kt b/packages/SystemUI/multivalentTests/src/com/android/systemui/shade/domain/interactor/ShadeInteractorSceneContainerImplTest.kt index 8c9036a4c68e..e1908b9bd136 100644 --- a/packages/SystemUI/multivalentTests/src/com/android/systemui/shade/domain/interactor/ShadeInteractorSceneContainerImplTest.kt +++ b/packages/SystemUI/multivalentTests/src/com/android/systemui/shade/domain/interactor/ShadeInteractorSceneContainerImplTest.kt @@ -23,7 +23,6 @@ import com.android.systemui.SysuiTestCase import com.android.systemui.common.ui.data.repository.fakeConfigurationRepository import com.android.systemui.coroutines.collectLastValue import com.android.systemui.keyguard.data.repository.fakeKeyguardRepository -import com.android.systemui.keyguard.data.repository.keyguardTransitionRepository import com.android.systemui.keyguard.shared.model.StatusBarState import com.android.systemui.kosmos.testScope import com.android.systemui.res.R @@ -32,7 +31,6 @@ import com.android.systemui.scene.shared.model.Scenes import com.android.systemui.shade.data.repository.shadeRepository import com.android.systemui.shade.shared.model.ShadeMode import com.android.systemui.testKosmos -import com.android.systemui.user.data.repository.userRepository import com.google.common.truth.Truth import com.google.common.truth.Truth.assertThat import kotlinx.coroutines.ExperimentalCoroutinesApi @@ -52,9 +50,7 @@ class ShadeInteractorSceneContainerImplTest : SysuiTestCase() { private val testScope = kosmos.testScope private val configurationRepository = kosmos.fakeConfigurationRepository private val keyguardRepository = kosmos.fakeKeyguardRepository - private val keyguardTransitionRepository = kosmos.keyguardTransitionRepository private val sceneInteractor = kosmos.sceneInteractor - private val userRepository = kosmos.userRepository private val shadeRepository = kosmos.shadeRepository private val underTest = kosmos.shadeInteractorSceneContainerImpl diff --git a/packages/SystemUI/multivalentTests/src/com/android/systemui/statusbar/policy/AvalancheControllerTest.kt b/packages/SystemUI/multivalentTests/src/com/android/systemui/statusbar/policy/AvalancheControllerTest.kt index 29f286fd31fa..7420ea0ba56a 100644 --- a/packages/SystemUI/multivalentTests/src/com/android/systemui/statusbar/policy/AvalancheControllerTest.kt +++ b/packages/SystemUI/multivalentTests/src/com/android/systemui/statusbar/policy/AvalancheControllerTest.kt @@ -248,6 +248,35 @@ class AvalancheControllerTest : SysuiTestCase() { } @Test + fun testGetDurationMs_untrackedEntryEmptyAvalanche_useAutoDismissTime() { + val givenEntry = createHeadsUpEntry(id = 0) + + // Nothing is showing + mAvalancheController.headsUpEntryShowing = null + + // Nothing is next + mAvalancheController.clearNext() + + val durationMs = mAvalancheController.getDurationMs(givenEntry, autoDismissMs = 5000) + Truth.assertThat(durationMs).isEqualTo(5000) + } + + @Test + fun testGetDurationMs_untrackedEntryNonEmptyAvalanche_useAutoDismissTime() { + val givenEntry = createHeadsUpEntry(id = 0) + + // Given entry not tracked + mAvalancheController.headsUpEntryShowing = createHeadsUpEntry(id = 1) + + mAvalancheController.clearNext() + val nextEntry = createHeadsUpEntry(id = 2) + mAvalancheController.addToNext(nextEntry, runnableMock!!) + + val durationMs = mAvalancheController.getDurationMs(givenEntry, autoDismissMs = 5000) + Truth.assertThat(durationMs).isEqualTo(5000) + } + + @Test fun testGetDurationMs_lastEntry_useAutoDismissTime() { // Entry is showing val showingEntry = createHeadsUpEntry(id = 0) @@ -261,7 +290,7 @@ class AvalancheControllerTest : SysuiTestCase() { } @Test - fun testGetDurationMs_nextEntryLowerPriority_500() { + fun testGetDurationMs_nextEntryLowerPriority_5000() { // Entry is showing val showingEntry = createFsiHeadsUpEntry(id = 1) mAvalancheController.headsUpEntryShowing = showingEntry diff --git a/packages/SystemUI/multivalentTests/src/com/android/systemui/statusbar/policy/BaseHeadsUpManagerTest.java b/packages/SystemUI/multivalentTests/src/com/android/systemui/statusbar/policy/BaseHeadsUpManagerTest.java index 7c130be7849e..db8e14c170b9 100644 --- a/packages/SystemUI/multivalentTests/src/com/android/systemui/statusbar/policy/BaseHeadsUpManagerTest.java +++ b/packages/SystemUI/multivalentTests/src/com/android/systemui/statusbar/policy/BaseHeadsUpManagerTest.java @@ -38,9 +38,9 @@ import static org.mockito.Mockito.when; import android.app.Notification; import android.app.PendingIntent; import android.app.Person; +import android.platform.test.flag.junit.FlagsParameterization; import android.testing.TestableLooper; -import androidx.test.ext.junit.runners.AndroidJUnit4; import androidx.test.filters.SmallTest; import com.android.internal.logging.testing.UiEventLoggerFake; @@ -62,9 +62,14 @@ import org.mockito.Mock; import org.mockito.junit.MockitoJUnit; import org.mockito.junit.MockitoRule; +import java.util.List; + +import platform.test.runner.parameterized.ParameterizedAndroidJunit4; +import platform.test.runner.parameterized.Parameters; + @SmallTest @TestableLooper.RunWithLooper -@RunWith(AndroidJUnit4.class) +@RunWith(ParameterizedAndroidJunit4.class) public class BaseHeadsUpManagerTest extends SysuiTestCase { @Rule public MockitoRule rule = MockitoJUnit.rule(); @@ -129,10 +134,18 @@ public class BaseHeadsUpManagerTest extends SysuiTestCase { } } + @Parameters(name = "{0}") + public static List<FlagsParameterization> getFlags() { + return FlagsParameterization.allCombinationsOf(NotificationThrottleHun.FLAG_NAME); + } + + public BaseHeadsUpManagerTest(FlagsParameterization flags) { + mSetFlagsRule.setFlagsParameterization(flags); + } + @Override public void SysuiSetup() throws Exception { super.SysuiSetup(); - mSetFlagsRule.disableFlags(NotificationThrottleHun.FLAG_NAME); mAvalancheController = new AvalancheController(dumpManager); } diff --git a/packages/SystemUI/multivalentTests/src/com/android/systemui/statusbar/policy/HeadsUpManagerPhoneTest.java b/packages/SystemUI/multivalentTests/src/com/android/systemui/statusbar/policy/HeadsUpManagerPhoneTest.java index a8a75c052000..f66e75a0fefb 100644 --- a/packages/SystemUI/multivalentTests/src/com/android/systemui/statusbar/policy/HeadsUpManagerPhoneTest.java +++ b/packages/SystemUI/multivalentTests/src/com/android/systemui/statusbar/policy/HeadsUpManagerPhoneTest.java @@ -26,9 +26,9 @@ import static org.mockito.ArgumentMatchers.anyInt; import static org.mockito.Mockito.when; import android.content.Context; +import android.platform.test.flag.junit.FlagsParameterization; import android.testing.TestableLooper; -import androidx.test.ext.junit.runners.AndroidJUnit4; import androidx.test.filters.SmallTest; import com.android.internal.logging.UiEventLogger; @@ -58,10 +58,14 @@ import org.mockito.Mock; import org.mockito.junit.MockitoJUnit; import org.mockito.junit.MockitoRule; +import java.util.List; + import kotlinx.coroutines.flow.StateFlowKt; +import platform.test.runner.parameterized.ParameterizedAndroidJunit4; +import platform.test.runner.parameterized.Parameters; @SmallTest -@RunWith(AndroidJUnit4.class) +@RunWith(ParameterizedAndroidJunit4.class) @TestableLooper.RunWithLooper public class HeadsUpManagerPhoneTest extends BaseHeadsUpManagerTest { @Rule public MockitoRule rule = MockitoJUnit.rule(); @@ -141,12 +145,17 @@ public class HeadsUpManagerPhoneTest extends BaseHeadsUpManagerTest { ); } + @Parameters(name = "{0}") + public static List<FlagsParameterization> getFlags() { + return FlagsParameterization.allCombinationsOf(NotificationThrottleHun.FLAG_NAME); + } + + public HeadsUpManagerPhoneTest(FlagsParameterization flags) { + super(flags); + } + @Before public void setUp() { - // TODO(b/315362456) create separate test with the flag disabled - // then modify this file to test with the flag enabled - mSetFlagsRule.disableFlags(NotificationThrottleHun.FLAG_NAME); - when(mShadeInteractor.isAnyExpanded()).thenReturn(StateFlowKt.MutableStateFlow(false)); final AccessibilityManagerWrapper accessibilityMgr = mDependency.injectMockDependency(AccessibilityManagerWrapper.class); diff --git a/packages/SystemUI/multivalentTests/src/com/android/systemui/util/kotlin/BooleanFlowOperatorsTest.kt b/packages/SystemUI/multivalentTests/src/com/android/systemui/util/kotlin/BooleanFlowOperatorsTest.kt index 96d1c0de9b66..03a39f8f07d8 100644 --- a/packages/SystemUI/multivalentTests/src/com/android/systemui/util/kotlin/BooleanFlowOperatorsTest.kt +++ b/packages/SystemUI/multivalentTests/src/com/android/systemui/util/kotlin/BooleanFlowOperatorsTest.kt @@ -20,6 +20,7 @@ import androidx.test.ext.junit.runners.AndroidJUnit4 import androidx.test.filters.SmallTest import com.android.systemui.SysuiTestCase import com.android.systemui.coroutines.collectLastValue +import com.android.systemui.coroutines.collectValues import com.android.systemui.kosmos.testScope import com.android.systemui.testKosmos import com.android.systemui.util.kotlin.BooleanFlowOperators.and @@ -27,6 +28,7 @@ import com.android.systemui.util.kotlin.BooleanFlowOperators.not import com.android.systemui.util.kotlin.BooleanFlowOperators.or import com.google.common.truth.Truth.assertThat import kotlinx.coroutines.flow.Flow +import kotlinx.coroutines.flow.MutableStateFlow import kotlinx.coroutines.flow.flowOf import kotlinx.coroutines.test.runTest import org.junit.Test @@ -62,6 +64,21 @@ class BooleanFlowOperatorsTest : SysuiTestCase() { } @Test + fun and_onlyEmitsWhenValueChanges() = + testScope.runTest { + val flow1 = MutableStateFlow(false) + val flow2 = MutableStateFlow(false) + val values by collectValues(and(flow1, flow2)) + + assertThat(values).containsExactly(false) + flow1.value = true + // Overall value is still false, we should not have emitted again. + assertThat(values).containsExactly(false) + flow2.value = true + assertThat(values).containsExactly(false, true).inOrder() + } + + @Test fun or_allTrue_returnsTrue() = testScope.runTest { val result by collectLastValue(or(TRUE, TRUE)) @@ -83,6 +100,20 @@ class BooleanFlowOperatorsTest : SysuiTestCase() { } @Test + fun or_onlyEmitsWhenValueChanges() = + testScope.runTest { + val flow1 = MutableStateFlow(false) + val flow2 = MutableStateFlow(false) + val values by collectValues(or(flow1, flow2)) + + assertThat(values).containsExactly(false) + flow1.value = true + assertThat(values).containsExactly(false, true).inOrder() + flow2.value = true + assertThat(values).containsExactly(false, true).inOrder() + } + + @Test fun not_true_returnsFalse() = testScope.runTest { val result by collectLastValue(not(TRUE)) diff --git a/packages/SystemUI/res/drawable/notification_material_bg.xml b/packages/SystemUI/res/drawable/notification_material_bg.xml index 587a5a05458f..715be074eaa8 100644 --- a/packages/SystemUI/res/drawable/notification_material_bg.xml +++ b/packages/SystemUI/res/drawable/notification_material_bg.xml @@ -28,9 +28,10 @@ <solid android:color="@color/notification_state_color_default" /> </shape> </item> - <item> + <item android:id="@+id/notification_focus_overlay"> <shape> - <stroke android:width="3dp" android:color="@color/notification_focus_overlay_color"/> + <stroke android:width="@dimen/notification_focus_stroke_width" + android:color="@color/notification_focus_overlay_color"/> </shape> </item> </layer-list>
\ No newline at end of file diff --git a/packages/SystemUI/res/layout/media_carousel.xml b/packages/SystemUI/res/layout/media_carousel.xml index 825ece856ed2..ffe269abe08f 100644 --- a/packages/SystemUI/res/layout/media_carousel.xml +++ b/packages/SystemUI/res/layout/media_carousel.xml @@ -19,7 +19,7 @@ <FrameLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" - android:layout_height="wrap_content" + android:layout_height="match_parent" android:clipChildren="false" android:clipToPadding="false" android:forceHasOverlappingRendering="false" @@ -27,7 +27,7 @@ <com.android.systemui.media.controls.ui.view.MediaScrollView android:id="@+id/media_carousel_scroller" android:layout_width="match_parent" - android:layout_height="wrap_content" + android:layout_height="match_parent" android:scrollbars="none" android:clipChildren="false" android:clipToPadding="false" diff --git a/packages/SystemUI/res/values-af/strings.xml b/packages/SystemUI/res/values-af/strings.xml index 0e1bed8a0a21..1fd58e842249 100644 --- a/packages/SystemUI/res/values-af/strings.xml +++ b/packages/SystemUI/res/values-af/strings.xml @@ -235,7 +235,8 @@ <string name="accessibility_desc_notification_shade" msgid="5355229129428759989">"Kennisgewingskerm."</string> <string name="accessibility_desc_quick_settings" msgid="4374766941484719179">"Vinnige instellings."</string> <string name="accessibility_desc_qs_notification_shade" msgid="8327226953072700376">"Kitsinstellings en kennisgewingskerm."</string> - <string name="accessibility_desc_lock_screen" msgid="5983125095181194887">"Sluitskerm."</string> + <!-- no translation found for accessibility_desc_lock_screen (409034672704273634) --> + <skip /> <string name="accessibility_desc_work_lock" msgid="4355620395354680575">"Werksluitskerm"</string> <string name="accessibility_desc_close" msgid="8293708213442107755">"Maak toe"</string> <string name="accessibility_quick_settings_dnd_none_on" msgid="3235552940146035383">"volkome stilte"</string> @@ -270,20 +271,15 @@ <string name="see_all_bluetooth_devices" msgid="1761596816620200433">"Sien alles"</string> <string name="turn_on_bluetooth" msgid="5681370462180289071">"Gebruik Bluetooth"</string> <string name="quick_settings_bluetooth_device_connected" msgid="7884777006729260996">"Gekoppel"</string> - <!-- no translation found for quick_settings_bluetooth_device_audio_sharing (1496358082943301670) --> - <skip /> + <string name="quick_settings_bluetooth_device_audio_sharing" msgid="1496358082943301670">"Oudiodeling"</string> <string name="quick_settings_bluetooth_device_saved" msgid="7549938728928069477">"Gestoor"</string> <string name="accessibility_quick_settings_bluetooth_device_tap_to_disconnect" msgid="415980329093277342">"ontkoppel"</string> <string name="accessibility_quick_settings_bluetooth_device_tap_to_activate" msgid="3724301751036877403">"aktiveer"</string> <string name="turn_on_bluetooth_auto_tomorrow" msgid="414836329962473906">"Skakel dit môre outomaties weer aan"</string> - <!-- no translation found for turn_on_bluetooth_auto_info_disabled (682984290339848844) --> - <skip /> - <!-- no translation found for turn_on_bluetooth_auto_info_enabled (7440944034584560279) --> - <skip /> - <!-- no translation found for quick_settings_bluetooth_audio_sharing_button (4499275822759907822) --> - <skip /> - <!-- no translation found for quick_settings_bluetooth_audio_sharing_button_sharing (8626191139359072540) --> - <skip /> + <string name="turn_on_bluetooth_auto_info_disabled" msgid="682984290339848844">"Kenmerke soos Kitsdeel en Kry My Toestel gebruik Bluetooth"</string> + <string name="turn_on_bluetooth_auto_info_enabled" msgid="7440944034584560279">"Bluetooth sal môreoggend aanskakel"</string> + <string name="quick_settings_bluetooth_audio_sharing_button" msgid="4499275822759907822">"Oudiodeling"</string> + <string name="quick_settings_bluetooth_audio_sharing_button_sharing" msgid="8626191139359072540">"Deel tans oudio"</string> <string name="quick_settings_bluetooth_secondary_label_battery_level" msgid="4182034939479344093">"<xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE">%s</xliff:g> batterykrag"</string> <string name="quick_settings_bluetooth_secondary_label_audio" msgid="780333390310051161">"Oudio"</string> <string name="quick_settings_bluetooth_secondary_label_headset" msgid="2332093067553000852">"Kopstuk"</string> @@ -376,6 +372,8 @@ <string name="quick_settings_hearing_devices_dialog_title" msgid="9004774017688484981">"Gehoortoestelle"</string> <string name="quick_settings_pair_hearing_devices" msgid="5987105102207447322">"Bind nuwe toestel saam"</string> <string name="accessibility_hearing_device_pair_new_device" msgid="8440082580186130090">"Klik om nuwe toestel saam te bind"</string> + <!-- no translation found for hearing_devices_presets_error (350363093458408536) --> + <skip /> <string name="sensor_privacy_start_use_mic_dialog_title" msgid="563796653825944944">"Deblokkeer toestelmikrofoon?"</string> <string name="sensor_privacy_start_use_camera_dialog_title" msgid="8807639852654305227">"Deblokkeer toestelkamera?"</string> <string name="sensor_privacy_start_use_mic_camera_dialog_title" msgid="4316471859905020023">"Deblokkeer toestelkamera en mikrofoon?"</string> @@ -441,6 +439,8 @@ <string name="keyguard_indication_charging_time_fast" msgid="8390311020603859480">"<xliff:g id="PERCENTAGE">%2$s</xliff:g> • Laai tans vinnig • Vol oor <xliff:g id="CHARGING_TIME_LEFT">%1$s</xliff:g>"</string> <string name="keyguard_indication_charging_time_slowly" msgid="301936949731705417">"<xliff:g id="PERCENTAGE">%2$s</xliff:g> • Laai tans stadig • Vol oor <xliff:g id="CHARGING_TIME_LEFT">%1$s</xliff:g>"</string> <string name="keyguard_indication_charging_time_dock" msgid="3149328898931741271">"<xliff:g id="PERCENTAGE">%2$s</xliff:g> • Laai tans • Vol oor <xliff:g id="CHARGING_TIME_LEFT">%1$s</xliff:g>"</string> + <!-- no translation found for accessibility_action_open_communal_hub (3081702792413787849) --> + <skip /> <string name="communal_tutorial_indicator_text" msgid="4503010353591430123">"Swiep links om die gemeenskaplike tutoriaal te begin"</string> <string name="cta_tile_button_to_open_widget_editor" msgid="3871562362382963878">"Pasmaak"</string> <string name="cta_tile_button_to_dismiss" msgid="3377597875997861754">"Maak toe"</string> @@ -459,6 +459,10 @@ <string name="button_text_to_open_settings" msgid="1987729256950941628">"Maak instellings oop"</string> <string name="work_mode_off_title" msgid="5794818421357835873">"Hervat werkapps?"</string> <string name="work_mode_turn_on" msgid="907813741770247267">"Hervat"</string> + <!-- no translation found for accessibility_action_label_close_communal_hub (6790396569621032333) --> + <skip /> + <!-- no translation found for accessibility_content_description_for_communal_hub (1670220840599380118) --> + <skip /> <string name="accessibility_multi_user_switch_switcher" msgid="5330448341251092660">"Wissel gebruiker"</string> <string name="accessibility_multi_user_list_switcher" msgid="8574105376229857407">"aftrekkieslys"</string> <string name="guest_exit_guest_dialog_message" msgid="8183450985628495709">"Alle programme en data in hierdie sessie sal uitgevee word."</string> diff --git a/packages/SystemUI/res/values-am/strings.xml b/packages/SystemUI/res/values-am/strings.xml index 3709a9009f09..71b69d5e4487 100644 --- a/packages/SystemUI/res/values-am/strings.xml +++ b/packages/SystemUI/res/values-am/strings.xml @@ -235,7 +235,8 @@ <string name="accessibility_desc_notification_shade" msgid="5355229129428759989">"የማሳወቂያ ጥላ።"</string> <string name="accessibility_desc_quick_settings" msgid="4374766941484719179">"ፈጣን ቅንብሮች።"</string> <string name="accessibility_desc_qs_notification_shade" msgid="8327226953072700376">"ፈጣን ቅንብሮች እና የማሳወቂያ ጥላ።"</string> - <string name="accessibility_desc_lock_screen" msgid="5983125095181194887">"ማያ ገፅ ቆልፍ።"</string> + <!-- no translation found for accessibility_desc_lock_screen (409034672704273634) --> + <skip /> <string name="accessibility_desc_work_lock" msgid="4355620395354680575">"የስራ ማያ ገፅ ቁልፍ"</string> <string name="accessibility_desc_close" msgid="8293708213442107755">"ዝጋ"</string> <string name="accessibility_quick_settings_dnd_none_on" msgid="3235552940146035383">"ሙሉ ለሙሉ ፀጥታ"</string> @@ -376,6 +377,8 @@ <string name="quick_settings_hearing_devices_dialog_title" msgid="9004774017688484981">"የመስማት ችሎታ መሣሪያ"</string> <string name="quick_settings_pair_hearing_devices" msgid="5987105102207447322">"አዲስ መሣሪያ ያጣምሩ"</string> <string name="accessibility_hearing_device_pair_new_device" msgid="8440082580186130090">"አዲስ መሣሪያ ለማጣመር ጠቅ ያድርጉ"</string> + <!-- no translation found for hearing_devices_presets_error (350363093458408536) --> + <skip /> <string name="sensor_privacy_start_use_mic_dialog_title" msgid="563796653825944944">"የመሣሪያ ማይክሮፎን እገዳ ይነሳ?"</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> @@ -441,6 +444,8 @@ <string name="keyguard_indication_charging_time_fast" msgid="8390311020603859480">"<xliff:g id="PERCENTAGE">%2$s</xliff:g> • በፍጥነት ኃይልን በመሙላት ላይ • በ<xliff:g id="CHARGING_TIME_LEFT">%1$s</xliff:g> ውስጥ ይሞላል"</string> <string name="keyguard_indication_charging_time_slowly" msgid="301936949731705417">"<xliff:g id="PERCENTAGE">%2$s</xliff:g> • በዝግታ ኃይልን በመሙላት ላይ • በ<xliff:g id="CHARGING_TIME_LEFT">%1$s</xliff:g> ውስጥ ይሞላል"</string> <string name="keyguard_indication_charging_time_dock" msgid="3149328898931741271">"<xliff:g id="PERCENTAGE">%2$s</xliff:g> • ኃይል በመሙላት ላይ • በ<xliff:g id="CHARGING_TIME_LEFT">%1$s</xliff:g> ውስጥ ይሞላል"</string> + <!-- no translation found for accessibility_action_open_communal_hub (3081702792413787849) --> + <skip /> <string name="communal_tutorial_indicator_text" msgid="4503010353591430123">"የጋራ አጋዥ ሥልጠናውን ለመጀመር ወደ ግራ ያንሸራትቱ።"</string> <string name="cta_tile_button_to_open_widget_editor" msgid="3871562362382963878">"አብጅ"</string> <string name="cta_tile_button_to_dismiss" msgid="3377597875997861754">"አሰናብት"</string> @@ -459,6 +464,10 @@ <string name="button_text_to_open_settings" msgid="1987729256950941628">"ቅንብሮችን ክፈት"</string> <string name="work_mode_off_title" msgid="5794818421357835873">"የሥራ መተግበሪያዎች ከቆሙበት ይቀጥሉ?"</string> <string name="work_mode_turn_on" msgid="907813741770247267">"ከቆመበት ቀጥል"</string> + <!-- no translation found for accessibility_action_label_close_communal_hub (6790396569621032333) --> + <skip /> + <!-- no translation found for accessibility_content_description_for_communal_hub (1670220840599380118) --> + <skip /> <string name="accessibility_multi_user_switch_switcher" msgid="5330448341251092660">"ተጠቃሚ ቀይር"</string> <string name="accessibility_multi_user_list_switcher" msgid="8574105376229857407">"ወደታች ተጎታች ምናሌ"</string> <string name="guest_exit_guest_dialog_message" msgid="8183450985628495709">"በዚህ ክፍለ-ጊዜ ውስጥ ያሉ ሁሉም መተግበሪያዎች እና ውሂብ ይሰረዛሉ።"</string> diff --git a/packages/SystemUI/res/values-ar/strings.xml b/packages/SystemUI/res/values-ar/strings.xml index 0a7250ab56b5..0d9465531e68 100644 --- a/packages/SystemUI/res/values-ar/strings.xml +++ b/packages/SystemUI/res/values-ar/strings.xml @@ -235,7 +235,8 @@ <string name="accessibility_desc_notification_shade" msgid="5355229129428759989">"مركز الإشعارات."</string> <string name="accessibility_desc_quick_settings" msgid="4374766941484719179">"الإعدادات السريعة."</string> <string name="accessibility_desc_qs_notification_shade" msgid="8327226953072700376">"\"الإعدادات السريعة\" و\"مركز الإشعارات\""</string> - <string name="accessibility_desc_lock_screen" msgid="5983125095181194887">"شاشة القفل."</string> + <!-- no translation found for accessibility_desc_lock_screen (409034672704273634) --> + <skip /> <string name="accessibility_desc_work_lock" msgid="4355620395354680575">"شاشة قفل بيانات العمل"</string> <string name="accessibility_desc_close" msgid="8293708213442107755">"إغلاق"</string> <string name="accessibility_quick_settings_dnd_none_on" msgid="3235552940146035383">"كتم الصوت تمامًا"</string> @@ -376,6 +377,8 @@ <string name="quick_settings_hearing_devices_dialog_title" msgid="9004774017688484981">"سماعات الأذن الطبية"</string> <string name="quick_settings_pair_hearing_devices" msgid="5987105102207447322">"إقران جهاز جديد"</string> <string name="accessibility_hearing_device_pair_new_device" msgid="8440082580186130090">"انقر لإقران جهاز جديد"</string> + <!-- no translation found for hearing_devices_presets_error (350363093458408536) --> + <skip /> <string name="sensor_privacy_start_use_mic_dialog_title" msgid="563796653825944944">"هل تريد إزالة حظر ميكروفون الجهاز؟"</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> @@ -441,6 +444,8 @@ <string name="keyguard_indication_charging_time_fast" msgid="8390311020603859480">"<xliff:g id="PERCENTAGE">%2$s</xliff:g> • جارٍ الشحن سريعًا • ستمتلئ البطارية خلال <xliff:g id="CHARGING_TIME_LEFT">%1$s</xliff:g>"</string> <string name="keyguard_indication_charging_time_slowly" msgid="301936949731705417">"<xliff:g id="PERCENTAGE">%2$s</xliff:g> • جارٍ الشحن ببطء • ستمتلئ البطارية خلال <xliff:g id="CHARGING_TIME_LEFT">%1$s</xliff:g>"</string> <string name="keyguard_indication_charging_time_dock" msgid="3149328898931741271">"<xliff:g id="PERCENTAGE">%2$s</xliff:g> • جارٍ الشحن • ستمتلئ البطارية خلال <xliff:g id="CHARGING_TIME_LEFT">%1$s</xliff:g>"</string> + <!-- no translation found for accessibility_action_open_communal_hub (3081702792413787849) --> + <skip /> <string name="communal_tutorial_indicator_text" msgid="4503010353591430123">"مرِّر سريعًا لليمين لبدء الدليل التوجيهي العام."</string> <string name="cta_tile_button_to_open_widget_editor" msgid="3871562362382963878">"تخصيص"</string> <string name="cta_tile_button_to_dismiss" msgid="3377597875997861754">"إغلاق"</string> @@ -459,6 +464,10 @@ <string name="button_text_to_open_settings" msgid="1987729256950941628">"فتح الإعدادات"</string> <string name="work_mode_off_title" msgid="5794818421357835873">"أتريد إعادة تفعيل تطبيقات العمل؟"</string> <string name="work_mode_turn_on" msgid="907813741770247267">"إعادة التفعيل"</string> + <!-- no translation found for accessibility_action_label_close_communal_hub (6790396569621032333) --> + <skip /> + <!-- no translation found for accessibility_content_description_for_communal_hub (1670220840599380118) --> + <skip /> <string name="accessibility_multi_user_switch_switcher" msgid="5330448341251092660">"تبديل المستخدم"</string> <string name="accessibility_multi_user_list_switcher" msgid="8574105376229857407">"القائمة المنسدلة"</string> <string name="guest_exit_guest_dialog_message" msgid="8183450985628495709">"سيتم حذف كل التطبيقات والبيانات في هذه الجلسة."</string> diff --git a/packages/SystemUI/res/values-as/strings.xml b/packages/SystemUI/res/values-as/strings.xml index 3311588fcf89..f193274f9c22 100644 --- a/packages/SystemUI/res/values-as/strings.xml +++ b/packages/SystemUI/res/values-as/strings.xml @@ -235,7 +235,8 @@ <string name="accessibility_desc_notification_shade" msgid="5355229129428759989">"জাননী পেনেল।"</string> <string name="accessibility_desc_quick_settings" msgid="4374766941484719179">"ক্ষিপ্ৰ ছেটিং।"</string> <string name="accessibility_desc_qs_notification_shade" msgid="8327226953072700376">"ক্ষিপ্ৰ ছেটিং জাননী পেনেল।"</string> - <string name="accessibility_desc_lock_screen" msgid="5983125095181194887">"বন্ধ স্ক্ৰীন।"</string> + <!-- no translation found for accessibility_desc_lock_screen (409034672704273634) --> + <skip /> <string name="accessibility_desc_work_lock" msgid="4355620395354680575">"কৰ্মস্থানৰ প্ৰ\'ফাইলৰ লক স্ক্ৰীন"</string> <string name="accessibility_desc_close" msgid="8293708213442107755">"বন্ধ কৰক"</string> <string name="accessibility_quick_settings_dnd_none_on" msgid="3235552940146035383">"সম্পূৰ্ণ নিৰৱতা"</string> @@ -270,20 +271,15 @@ <string name="see_all_bluetooth_devices" msgid="1761596816620200433">"আটাইবোৰ চাওক"</string> <string name="turn_on_bluetooth" msgid="5681370462180289071">"ব্লুটুথ ব্যৱহাৰ কৰক"</string> <string name="quick_settings_bluetooth_device_connected" msgid="7884777006729260996">"সংযুক্ত আছে"</string> - <!-- no translation found for quick_settings_bluetooth_device_audio_sharing (1496358082943301670) --> - <skip /> + <string name="quick_settings_bluetooth_device_audio_sharing" msgid="1496358082943301670">"অডিঅ’ শ্বেয়াৰ কৰা"</string> <string name="quick_settings_bluetooth_device_saved" msgid="7549938728928069477">"ছেভ কৰা হৈছে"</string> <string name="accessibility_quick_settings_bluetooth_device_tap_to_disconnect" msgid="415980329093277342">"সংযোগ বিচ্ছিন্ন কৰক"</string> <string name="accessibility_quick_settings_bluetooth_device_tap_to_activate" msgid="3724301751036877403">"সক্ৰিয় কৰক"</string> <string name="turn_on_bluetooth_auto_tomorrow" msgid="414836329962473906">"কাইলৈ পুনৰ স্বয়ংক্ৰিয়ভাৱে অন কৰক"</string> - <!-- no translation found for turn_on_bluetooth_auto_info_disabled (682984290339848844) --> - <skip /> - <!-- no translation found for turn_on_bluetooth_auto_info_enabled (7440944034584560279) --> - <skip /> - <!-- no translation found for quick_settings_bluetooth_audio_sharing_button (4499275822759907822) --> - <skip /> - <!-- no translation found for quick_settings_bluetooth_audio_sharing_button_sharing (8626191139359072540) --> - <skip /> + <string name="turn_on_bluetooth_auto_info_disabled" msgid="682984290339848844">"Quick Share আৰু Find My Deviceৰ দৰে সুবিধাসমূহে ব্লুটুথ ব্যৱহাৰ কৰে"</string> + <string name="turn_on_bluetooth_auto_info_enabled" msgid="7440944034584560279">"কাইলৈ পুৱা ব্লুটুথ অন হ’ব"</string> + <string name="quick_settings_bluetooth_audio_sharing_button" msgid="4499275822759907822">"অডিঅ’ শ্বেয়াৰ কৰা"</string> + <string name="quick_settings_bluetooth_audio_sharing_button_sharing" msgid="8626191139359072540">"অডিঅ’ শ্বেয়াৰ কৰি থকা হৈছে"</string> <string name="quick_settings_bluetooth_secondary_label_battery_level" msgid="4182034939479344093">"বেটাৰী <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE">%s</xliff:g>"</string> <string name="quick_settings_bluetooth_secondary_label_audio" msgid="780333390310051161">"অডিঅ’"</string> <string name="quick_settings_bluetooth_secondary_label_headset" msgid="2332093067553000852">"হেডছেট"</string> @@ -376,6 +372,8 @@ <string name="quick_settings_hearing_devices_dialog_title" msgid="9004774017688484981">"শুনাৰ ডিভাইচ"</string> <string name="quick_settings_pair_hearing_devices" msgid="5987105102207447322">"নতুন ডিভাইচ পেয়াৰ কৰক"</string> <string name="accessibility_hearing_device_pair_new_device" msgid="8440082580186130090">"নতুন ডিভাইচ পেয়াৰ কৰিবলৈ ক্লিক কৰক"</string> + <!-- no translation found for hearing_devices_presets_error (350363093458408536) --> + <skip /> <string name="sensor_privacy_start_use_mic_dialog_title" msgid="563796653825944944">"ডিভাইচৰ মাইক্ৰ\'ফ\'ন অৱৰোধৰ পৰা আঁতৰাবনে?"</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> @@ -441,6 +439,8 @@ <string name="keyguard_indication_charging_time_fast" msgid="8390311020603859480">"<xliff:g id="PERCENTAGE">%2$s</xliff:g> • দ্ৰুতগতিৰে চাৰ্জ হৈ আছে • <xliff:g id="CHARGING_TIME_LEFT">%1$s</xliff:g>ত সম্পূৰ্ণ হ’ব"</string> <string name="keyguard_indication_charging_time_slowly" msgid="301936949731705417">"<xliff:g id="PERCENTAGE">%2$s</xliff:g> • লাহে লাহে চাৰ্জ হৈ আছে • <xliff:g id="CHARGING_TIME_LEFT">%1$s</xliff:g>ত সম্পূৰ্ণ হ’ব"</string> <string name="keyguard_indication_charging_time_dock" msgid="3149328898931741271">"<xliff:g id="PERCENTAGE">%2$s</xliff:g> • চাৰ্জ হৈ আছে • <xliff:g id="CHARGING_TIME_LEFT">%1$s</xliff:g>ত সম্পূৰ্ণ হ’ব"</string> + <!-- no translation found for accessibility_action_open_communal_hub (3081702792413787849) --> + <skip /> <string name="communal_tutorial_indicator_text" msgid="4503010353591430123">"সম্প্ৰদায় সম্পৰ্কীয় নিৰ্দেশনা আৰম্ভ কৰিবলৈ বাওঁফালে ছোৱাইপ কৰক"</string> <string name="cta_tile_button_to_open_widget_editor" msgid="3871562362382963878">"কাষ্টমাইজ কৰক"</string> <string name="cta_tile_button_to_dismiss" msgid="3377597875997861754">"অগ্ৰাহ্য কৰক"</string> @@ -459,6 +459,10 @@ <string name="button_text_to_open_settings" msgid="1987729256950941628">"ছেটিং খোলক"</string> <string name="work_mode_off_title" msgid="5794818421357835873">"কাম সম্পৰ্কীয় এপ্ আনপজ কৰিবনে?"</string> <string name="work_mode_turn_on" msgid="907813741770247267">"আনপজ কৰক"</string> + <!-- no translation found for accessibility_action_label_close_communal_hub (6790396569621032333) --> + <skip /> + <!-- no translation found for accessibility_content_description_for_communal_hub (1670220840599380118) --> + <skip /> <string name="accessibility_multi_user_switch_switcher" msgid="5330448341251092660">"ব্যৱহাৰকাৰী সলনি কৰক"</string> <string name="accessibility_multi_user_list_switcher" msgid="8574105376229857407">"পুল-ডাউনৰ মেনু"</string> <string name="guest_exit_guest_dialog_message" msgid="8183450985628495709">"এই ছেশ্বনৰ আটাইবোৰ এপ্ আৰু ডেটা মচা হ\'ব।"</string> diff --git a/packages/SystemUI/res/values-az/strings.xml b/packages/SystemUI/res/values-az/strings.xml index 741cc41ab1dd..03f427e851a2 100644 --- a/packages/SystemUI/res/values-az/strings.xml +++ b/packages/SystemUI/res/values-az/strings.xml @@ -235,7 +235,8 @@ <string name="accessibility_desc_notification_shade" msgid="5355229129428759989">"Bildiriş kölgəsi."</string> <string name="accessibility_desc_quick_settings" msgid="4374766941484719179">"Tez ayarlar."</string> <string name="accessibility_desc_qs_notification_shade" msgid="8327226953072700376">"Sürətli ayarlar və Bildiriş göstərişi."</string> - <string name="accessibility_desc_lock_screen" msgid="5983125095181194887">"Kilid ekranı."</string> + <!-- no translation found for accessibility_desc_lock_screen (409034672704273634) --> + <skip /> <string name="accessibility_desc_work_lock" msgid="4355620395354680575">"Ekran kilidi"</string> <string name="accessibility_desc_close" msgid="8293708213442107755">"Qapadın"</string> <string name="accessibility_quick_settings_dnd_none_on" msgid="3235552940146035383">"tam sakitlik"</string> @@ -270,20 +271,15 @@ <string name="see_all_bluetooth_devices" msgid="1761596816620200433">"Hamısına baxın"</string> <string name="turn_on_bluetooth" msgid="5681370462180289071">"Bluetooth aç"</string> <string name="quick_settings_bluetooth_device_connected" msgid="7884777006729260996">"Qoşulub"</string> - <!-- no translation found for quick_settings_bluetooth_device_audio_sharing (1496358082943301670) --> - <skip /> + <string name="quick_settings_bluetooth_device_audio_sharing" msgid="1496358082943301670">"Audio paylaşma"</string> <string name="quick_settings_bluetooth_device_saved" msgid="7549938728928069477">"Yadda saxlandı"</string> <string name="accessibility_quick_settings_bluetooth_device_tap_to_disconnect" msgid="415980329093277342">"əlaqəni kəsin"</string> <string name="accessibility_quick_settings_bluetooth_device_tap_to_activate" msgid="3724301751036877403">"aktivləşdirin"</string> <string name="turn_on_bluetooth_auto_tomorrow" msgid="414836329962473906">"Sabah avtomatik aktiv edin"</string> - <!-- no translation found for turn_on_bluetooth_auto_info_disabled (682984290339848844) --> - <skip /> - <!-- no translation found for turn_on_bluetooth_auto_info_enabled (7440944034584560279) --> - <skip /> - <!-- no translation found for quick_settings_bluetooth_audio_sharing_button (4499275822759907822) --> - <skip /> - <!-- no translation found for quick_settings_bluetooth_audio_sharing_button_sharing (8626191139359072540) --> - <skip /> + <string name="turn_on_bluetooth_auto_info_disabled" msgid="682984290339848844">"Cəld Paylaşım və Cihazın Tapılması kimi funksiyalar Bluetooth istifadə edir"</string> + <string name="turn_on_bluetooth_auto_info_enabled" msgid="7440944034584560279">"Bluetooth sabah səhər aktiv ediləcək"</string> + <string name="quick_settings_bluetooth_audio_sharing_button" msgid="4499275822759907822">"Audio paylaşma"</string> + <string name="quick_settings_bluetooth_audio_sharing_button_sharing" msgid="8626191139359072540">"Audio paylaşılır"</string> <string name="quick_settings_bluetooth_secondary_label_battery_level" msgid="4182034939479344093">"<xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE">%s</xliff:g> batareya"</string> <string name="quick_settings_bluetooth_secondary_label_audio" msgid="780333390310051161">"Audio"</string> <string name="quick_settings_bluetooth_secondary_label_headset" msgid="2332093067553000852">"Qulaqlıq"</string> @@ -376,6 +372,8 @@ <string name="quick_settings_hearing_devices_dialog_title" msgid="9004774017688484981">"Eşitmə cihazları"</string> <string name="quick_settings_pair_hearing_devices" msgid="5987105102207447322">"Yeni cihaz birləşdirin"</string> <string name="accessibility_hearing_device_pair_new_device" msgid="8440082580186130090">"Yeni cihaz birləşdirmək üçün klikləyin"</string> + <!-- no translation found for hearing_devices_presets_error (350363093458408536) --> + <skip /> <string name="sensor_privacy_start_use_mic_dialog_title" msgid="563796653825944944">"Cihaz mikrofonu blokdan çıxarılsın?"</string> <string name="sensor_privacy_start_use_camera_dialog_title" msgid="8807639852654305227">"Cihaz kamerası blokdan çıxarılsın?"</string> <string name="sensor_privacy_start_use_mic_camera_dialog_title" msgid="4316471859905020023">"Cihaz kamerası və mikrofonu blokdan çıxarılsın?"</string> @@ -441,6 +439,8 @@ <string name="keyguard_indication_charging_time_fast" msgid="8390311020603859480">"<xliff:g id="PERCENTAGE">%2$s</xliff:g> • Sürətlə şarj edilir • <xliff:g id="CHARGING_TIME_LEFT">%1$s</xliff:g> sonra dolacaq"</string> <string name="keyguard_indication_charging_time_slowly" msgid="301936949731705417">"<xliff:g id="PERCENTAGE">%2$s</xliff:g> • Asta şarj edilir • <xliff:g id="CHARGING_TIME_LEFT">%1$s</xliff:g> sonra dolacaq"</string> <string name="keyguard_indication_charging_time_dock" msgid="3149328898931741271">"<xliff:g id="PERCENTAGE">%2$s</xliff:g> • Şarj edilir • <xliff:g id="CHARGING_TIME_LEFT">%1$s</xliff:g> sonra dolacaq"</string> + <!-- no translation found for accessibility_action_open_communal_hub (3081702792413787849) --> + <skip /> <string name="communal_tutorial_indicator_text" msgid="4503010353591430123">"İcma təlimatını başlatmaq üçün sola sürüşdürün"</string> <string name="cta_tile_button_to_open_widget_editor" msgid="3871562362382963878">"Fərdiləşdirin"</string> <string name="cta_tile_button_to_dismiss" msgid="3377597875997861754">"Bağlayın"</string> @@ -459,6 +459,10 @@ <string name="button_text_to_open_settings" msgid="1987729256950941628">"Ayarları açın"</string> <string name="work_mode_off_title" msgid="5794818421357835873">"İş tətbiqi üzrə pauza bitsin?"</string> <string name="work_mode_turn_on" msgid="907813741770247267">"Pauzanı bitirin"</string> + <!-- no translation found for accessibility_action_label_close_communal_hub (6790396569621032333) --> + <skip /> + <!-- no translation found for accessibility_content_description_for_communal_hub (1670220840599380118) --> + <skip /> <string name="accessibility_multi_user_switch_switcher" msgid="5330448341251092660">"Switch user"</string> <string name="accessibility_multi_user_list_switcher" msgid="8574105376229857407">"aşağı çəkilən menyu"</string> <string name="guest_exit_guest_dialog_message" msgid="8183450985628495709">"Bu sessiyada bütün tətbiqlər və data silinəcək."</string> diff --git a/packages/SystemUI/res/values-b+sr+Latn/strings.xml b/packages/SystemUI/res/values-b+sr+Latn/strings.xml index 583ffaff2b9d..d56f023dd2ac 100644 --- a/packages/SystemUI/res/values-b+sr+Latn/strings.xml +++ b/packages/SystemUI/res/values-b+sr+Latn/strings.xml @@ -235,7 +235,8 @@ <string name="accessibility_desc_notification_shade" msgid="5355229129428759989">"Prozor sa obaveštenjima."</string> <string name="accessibility_desc_quick_settings" msgid="4374766941484719179">"Brza podešavanja."</string> <string name="accessibility_desc_qs_notification_shade" msgid="8327226953072700376">"Brza podešavanja i traka sa obaveštenjima."</string> - <string name="accessibility_desc_lock_screen" msgid="5983125095181194887">"Zaključan ekran"</string> + <!-- no translation found for accessibility_desc_lock_screen (409034672704273634) --> + <skip /> <string name="accessibility_desc_work_lock" msgid="4355620395354680575">"Zaključan ekran za posao"</string> <string name="accessibility_desc_close" msgid="8293708213442107755">"Zatvori"</string> <string name="accessibility_quick_settings_dnd_none_on" msgid="3235552940146035383">"potpuna tišina"</string> @@ -270,20 +271,15 @@ <string name="see_all_bluetooth_devices" msgid="1761596816620200433">"Prikaži sve"</string> <string name="turn_on_bluetooth" msgid="5681370462180289071">"Koristi Bluetooth"</string> <string name="quick_settings_bluetooth_device_connected" msgid="7884777006729260996">"Povezano"</string> - <!-- no translation found for quick_settings_bluetooth_device_audio_sharing (1496358082943301670) --> - <skip /> + <string name="quick_settings_bluetooth_device_audio_sharing" msgid="1496358082943301670">"Deljenje zvuka"</string> <string name="quick_settings_bluetooth_device_saved" msgid="7549938728928069477">"Sačuvano"</string> <string name="accessibility_quick_settings_bluetooth_device_tap_to_disconnect" msgid="415980329093277342">"prekinite vezu"</string> <string name="accessibility_quick_settings_bluetooth_device_tap_to_activate" msgid="3724301751036877403">"aktivirajte"</string> <string name="turn_on_bluetooth_auto_tomorrow" msgid="414836329962473906">"Automatski ponovo uključi sutra"</string> - <!-- no translation found for turn_on_bluetooth_auto_info_disabled (682984290339848844) --> - <skip /> - <!-- no translation found for turn_on_bluetooth_auto_info_enabled (7440944034584560279) --> - <skip /> - <!-- no translation found for quick_settings_bluetooth_audio_sharing_button (4499275822759907822) --> - <skip /> - <!-- no translation found for quick_settings_bluetooth_audio_sharing_button_sharing (8626191139359072540) --> - <skip /> + <string name="turn_on_bluetooth_auto_info_disabled" msgid="682984290339848844">"Funkcije kao što su Quick Share i Pronađi moj uređaj koriste Bluetooth"</string> + <string name="turn_on_bluetooth_auto_info_enabled" msgid="7440944034584560279">"Bluetooth će se uključiti sutra ujutru"</string> + <string name="quick_settings_bluetooth_audio_sharing_button" msgid="4499275822759907822">"Deljenje zvuka"</string> + <string name="quick_settings_bluetooth_audio_sharing_button_sharing" msgid="8626191139359072540">"Deli se zvuk"</string> <string name="quick_settings_bluetooth_secondary_label_battery_level" msgid="4182034939479344093">"Nivo baterije je <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE">%s</xliff:g>"</string> <string name="quick_settings_bluetooth_secondary_label_audio" msgid="780333390310051161">"Audio"</string> <string name="quick_settings_bluetooth_secondary_label_headset" msgid="2332093067553000852">"Slušalice"</string> @@ -376,6 +372,8 @@ <string name="quick_settings_hearing_devices_dialog_title" msgid="9004774017688484981">"Slušni aparati"</string> <string name="quick_settings_pair_hearing_devices" msgid="5987105102207447322">"Upari novi uređaj"</string> <string name="accessibility_hearing_device_pair_new_device" msgid="8440082580186130090">"Kliknite da biste uparili nov uređaj"</string> + <!-- no translation found for hearing_devices_presets_error (350363093458408536) --> + <skip /> <string name="sensor_privacy_start_use_mic_dialog_title" msgid="563796653825944944">"Želite da odblokirate mikrofon uređaja?"</string> <string name="sensor_privacy_start_use_camera_dialog_title" msgid="8807639852654305227">"Želite da odblokirate kameru uređaja?"</string> <string name="sensor_privacy_start_use_mic_camera_dialog_title" msgid="4316471859905020023">"Želite da odblokirate kameru i mikrofon uređaja?"</string> @@ -441,6 +439,8 @@ <string name="keyguard_indication_charging_time_fast" msgid="8390311020603859480">"<xliff:g id="PERCENTAGE">%2$s</xliff:g> • Brzo se puni • <xliff:g id="CHARGING_TIME_LEFT">%1$s</xliff:g> do kraja punjenja"</string> <string name="keyguard_indication_charging_time_slowly" msgid="301936949731705417">"<xliff:g id="PERCENTAGE">%2$s</xliff:g> • Sporo se puni • <xliff:g id="CHARGING_TIME_LEFT">%1$s</xliff:g> do kraja punjenja"</string> <string name="keyguard_indication_charging_time_dock" msgid="3149328898931741271">"<xliff:g id="PERCENTAGE">%2$s</xliff:g> • Puni se • <xliff:g id="CHARGING_TIME_LEFT">%1$s</xliff:g> do kraja punjenja"</string> + <!-- no translation found for accessibility_action_open_communal_hub (3081702792413787849) --> + <skip /> <string name="communal_tutorial_indicator_text" msgid="4503010353591430123">"Prevucite ulevo da biste započeli zajednički vodič"</string> <string name="cta_tile_button_to_open_widget_editor" msgid="3871562362382963878">"Prilagodite"</string> <string name="cta_tile_button_to_dismiss" msgid="3377597875997861754">"Odbaci"</string> @@ -459,6 +459,10 @@ <string name="button_text_to_open_settings" msgid="1987729256950941628">"Otvori podešavanja"</string> <string name="work_mode_off_title" msgid="5794818421357835873">"Uključiti poslovne aplikacije?"</string> <string name="work_mode_turn_on" msgid="907813741770247267">"Ponovo aktiviraj"</string> + <!-- no translation found for accessibility_action_label_close_communal_hub (6790396569621032333) --> + <skip /> + <!-- no translation found for accessibility_content_description_for_communal_hub (1670220840599380118) --> + <skip /> <string name="accessibility_multi_user_switch_switcher" msgid="5330448341251092660">"Zameni korisnika"</string> <string name="accessibility_multi_user_list_switcher" msgid="8574105376229857407">"padajući meni"</string> <string name="guest_exit_guest_dialog_message" msgid="8183450985628495709">"Sve aplikacije i podaci u ovoj sesiji će biti izbrisani."</string> @@ -772,7 +776,7 @@ <string name="group_system_cycle_back" msgid="8194102916946802902">"Pregledaj nedavno korišćene aplikacije unazad"</string> <string name="group_system_access_all_apps_search" msgid="1553588630154197469">"Otvori listu aplikacija"</string> <string name="group_system_access_system_settings" msgid="8731721963449070017">"Otvori podešavanja"</string> - <string name="group_system_access_google_assistant" msgid="7210074957915968110">"Otvori pomoćnika"</string> + <string name="group_system_access_google_assistant" msgid="7210074957915968110">"Otvori Pomoćnik"</string> <string name="group_system_lock_screen" msgid="7391191300363416543">"Zaključavanje ekrana"</string> <string name="group_system_quick_memo" msgid="3764560265935722903">"Napravi belešku"</string> <string name="keyboard_shortcut_group_system_multitasking" msgid="6967816258924795558">"Obavljanje više zadataka istovremeno"</string> diff --git a/packages/SystemUI/res/values-be/strings.xml b/packages/SystemUI/res/values-be/strings.xml index 50b407ff17e3..1fabf524b918 100644 --- a/packages/SystemUI/res/values-be/strings.xml +++ b/packages/SystemUI/res/values-be/strings.xml @@ -235,7 +235,8 @@ <string name="accessibility_desc_notification_shade" msgid="5355229129428759989">"Цень апавяшчэння.."</string> <string name="accessibility_desc_quick_settings" msgid="4374766941484719179">"Хуткія налады."</string> <string name="accessibility_desc_qs_notification_shade" msgid="8327226953072700376">"Хуткія налады і шчыток апавяшчэнняў."</string> - <string name="accessibility_desc_lock_screen" msgid="5983125095181194887">"Экран блакіроўкі."</string> + <!-- no translation found for accessibility_desc_lock_screen (409034672704273634) --> + <skip /> <string name="accessibility_desc_work_lock" msgid="4355620395354680575">"Экран блакіроўкі дзейнасці"</string> <string name="accessibility_desc_close" msgid="8293708213442107755">"Закрыць"</string> <string name="accessibility_quick_settings_dnd_none_on" msgid="3235552940146035383">"поўная цішыня"</string> @@ -376,6 +377,8 @@ <string name="quick_settings_hearing_devices_dialog_title" msgid="9004774017688484981">"Слыхавыя апараты"</string> <string name="quick_settings_pair_hearing_devices" msgid="5987105102207447322">"Спалучыць новую прыладу"</string> <string name="accessibility_hearing_device_pair_new_device" msgid="8440082580186130090">"Націсніце, каб спалучыць новую прыладу"</string> + <!-- no translation found for hearing_devices_presets_error (350363093458408536) --> + <skip /> <string name="sensor_privacy_start_use_mic_dialog_title" msgid="563796653825944944">"Разблакіраваць мікрафон прылады?"</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> @@ -441,6 +444,8 @@ <string name="keyguard_indication_charging_time_fast" msgid="8390311020603859480">"<xliff:g id="PERCENTAGE">%2$s</xliff:g> • Ідзе хуткая зарадка • Поўны зарад праз <xliff:g id="CHARGING_TIME_LEFT">%1$s</xliff:g>"</string> <string name="keyguard_indication_charging_time_slowly" msgid="301936949731705417">"<xliff:g id="PERCENTAGE">%2$s</xliff:g> • Ідзе павольная зарадка • Поўны зарад праз <xliff:g id="CHARGING_TIME_LEFT">%1$s</xliff:g>"</string> <string name="keyguard_indication_charging_time_dock" msgid="3149328898931741271">"<xliff:g id="PERCENTAGE">%2$s</xliff:g> • Ідзе зарадка • Поўны зарад праз <xliff:g id="CHARGING_TIME_LEFT">%1$s</xliff:g>"</string> + <!-- no translation found for accessibility_action_open_communal_hub (3081702792413787849) --> + <skip /> <string name="communal_tutorial_indicator_text" msgid="4503010353591430123">"Правядзіце пальцам па экране ўлева, каб азнаёміцца з дапаможнікам"</string> <string name="cta_tile_button_to_open_widget_editor" msgid="3871562362382963878">"Наладзіць"</string> <string name="cta_tile_button_to_dismiss" msgid="3377597875997861754">"Закрыць"</string> @@ -459,6 +464,10 @@ <string name="button_text_to_open_settings" msgid="1987729256950941628">"Адкрыць налады"</string> <string name="work_mode_off_title" msgid="5794818421357835873">"Уключыць працоўныя праграмы?"</string> <string name="work_mode_turn_on" msgid="907813741770247267">"Уключыць"</string> + <!-- no translation found for accessibility_action_label_close_communal_hub (6790396569621032333) --> + <skip /> + <!-- no translation found for accessibility_content_description_for_communal_hub (1670220840599380118) --> + <skip /> <string name="accessibility_multi_user_switch_switcher" msgid="5330448341251092660">"Перайсці да іншага карыстальніка"</string> <string name="accessibility_multi_user_list_switcher" msgid="8574105376229857407">"высоўнае меню"</string> <string name="guest_exit_guest_dialog_message" msgid="8183450985628495709">"Усе праграмы і даныя гэтага сеанса будуць выдалены."</string> diff --git a/packages/SystemUI/res/values-bg/strings.xml b/packages/SystemUI/res/values-bg/strings.xml index 3a283296dd9c..d4ffad3f9d64 100644 --- a/packages/SystemUI/res/values-bg/strings.xml +++ b/packages/SystemUI/res/values-bg/strings.xml @@ -235,7 +235,7 @@ <string name="accessibility_desc_notification_shade" msgid="5355229129428759989">"Падащ панел с известия."</string> <string name="accessibility_desc_quick_settings" msgid="4374766941484719179">"Бързи настройки."</string> <string name="accessibility_desc_qs_notification_shade" msgid="8327226953072700376">"Падащ панел с бързи настройки и известия."</string> - <string name="accessibility_desc_lock_screen" msgid="5983125095181194887">"Заключване на екрана."</string> + <string name="accessibility_desc_lock_screen" msgid="409034672704273634">"Заключен екран"</string> <string name="accessibility_desc_work_lock" msgid="4355620395354680575">"Заключен екран на служебния профил"</string> <string name="accessibility_desc_close" msgid="8293708213442107755">"Затваряне"</string> <string name="accessibility_quick_settings_dnd_none_on" msgid="3235552940146035383">"пълна тишина"</string> @@ -376,6 +376,8 @@ <string name="quick_settings_hearing_devices_dialog_title" msgid="9004774017688484981">"Слухови апарати"</string> <string name="quick_settings_pair_hearing_devices" msgid="5987105102207447322">"Сдвояване на ново устройство"</string> <string name="accessibility_hearing_device_pair_new_device" msgid="8440082580186130090">"Кликнете за сдвояване на ново устройство"</string> + <!-- no translation found for hearing_devices_presets_error (350363093458408536) --> + <skip /> <string name="sensor_privacy_start_use_mic_dialog_title" msgid="563796653825944944">"Да се отблокира ли микрофонът на устройството?"</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> @@ -441,6 +443,7 @@ <string name="keyguard_indication_charging_time_fast" msgid="8390311020603859480">"<xliff:g id="PERCENTAGE">%2$s</xliff:g> • Зарежда се бързо • <xliff:g id="CHARGING_TIME_LEFT">%1$s</xliff:g> до пълно зареждане"</string> <string name="keyguard_indication_charging_time_slowly" msgid="301936949731705417">"<xliff:g id="PERCENTAGE">%2$s</xliff:g> • Зарежда се бавно • <xliff:g id="CHARGING_TIME_LEFT">%1$s</xliff:g> до пълно зареждане"</string> <string name="keyguard_indication_charging_time_dock" msgid="3149328898931741271">"<xliff:g id="PERCENTAGE">%2$s</xliff:g> • Зарежда се • <xliff:g id="CHARGING_TIME_LEFT">%1$s</xliff:g> до пълно зареждане"</string> + <string name="accessibility_action_open_communal_hub" msgid="3081702792413787849">"Приспособления на заключения екран"</string> <string name="communal_tutorial_indicator_text" msgid="4503010353591430123">"Прекарайте пръст наляво, за да стартирате общия урок"</string> <string name="cta_tile_button_to_open_widget_editor" msgid="3871562362382963878">"Персонализиране"</string> <string name="cta_tile_button_to_dismiss" msgid="3377597875997861754">"Отхвърляне"</string> @@ -459,6 +462,8 @@ <string name="button_text_to_open_settings" msgid="1987729256950941628">"Отваряне на настройките"</string> <string name="work_mode_off_title" msgid="5794818421357835873">"Отмяна на паузата за служ. прил.?"</string> <string name="work_mode_turn_on" msgid="907813741770247267">"Отмяна на паузата"</string> + <string name="accessibility_action_label_close_communal_hub" msgid="6790396569621032333">"Затваряне на приспособленията на заключения екран"</string> + <string name="accessibility_content_description_for_communal_hub" msgid="1670220840599380118">"Приспособления на заключения екран"</string> <string name="accessibility_multi_user_switch_switcher" msgid="5330448341251092660">"Превключване между потребителите"</string> <string name="accessibility_multi_user_list_switcher" msgid="8574105376229857407">"падащо меню"</string> <string name="guest_exit_guest_dialog_message" msgid="8183450985628495709">"Всички приложения и данни в тази сесия ще бъдат изтрити."</string> diff --git a/packages/SystemUI/res/values-bn/strings.xml b/packages/SystemUI/res/values-bn/strings.xml index ec704b8b8c32..b1b3ac112bd3 100644 --- a/packages/SystemUI/res/values-bn/strings.xml +++ b/packages/SystemUI/res/values-bn/strings.xml @@ -235,7 +235,8 @@ <string name="accessibility_desc_notification_shade" msgid="5355229129428759989">"বিজ্ঞপ্তি শেড৷"</string> <string name="accessibility_desc_quick_settings" msgid="4374766941484719179">"দ্রুত সেটিংস৷"</string> <string name="accessibility_desc_qs_notification_shade" msgid="8327226953072700376">"দ্রুত সেটিংস এবং বিজ্ঞপ্তি শেড।"</string> - <string name="accessibility_desc_lock_screen" msgid="5983125095181194887">"লক স্ক্রিন।"</string> + <!-- no translation found for accessibility_desc_lock_screen (409034672704273634) --> + <skip /> <string name="accessibility_desc_work_lock" msgid="4355620395354680575">"কর্মস্থলের স্ক্রিন লক"</string> <string name="accessibility_desc_close" msgid="8293708213442107755">"বন্ধ করুন"</string> <string name="accessibility_quick_settings_dnd_none_on" msgid="3235552940146035383">"সম্পূর্ণ নীরব"</string> @@ -376,6 +377,8 @@ <string name="quick_settings_hearing_devices_dialog_title" msgid="9004774017688484981">"হিয়ারিং ডিভাইস"</string> <string name="quick_settings_pair_hearing_devices" msgid="5987105102207447322">"নতুন ডিভাইস পেয়ার করুন"</string> <string name="accessibility_hearing_device_pair_new_device" msgid="8440082580186130090">"নতুন ডিভাইস পেয়ার করতে ক্লিক করুন"</string> + <!-- no translation found for hearing_devices_presets_error (350363093458408536) --> + <skip /> <string name="sensor_privacy_start_use_mic_dialog_title" msgid="563796653825944944">"ডিভাইসের মাইক্রোফোন আনব্লক করতে চান?"</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> @@ -441,6 +444,8 @@ <string name="keyguard_indication_charging_time_fast" msgid="8390311020603859480">"<xliff:g id="PERCENTAGE">%2$s</xliff:g> • দ্রুত চার্জ হচ্ছে • পুরো চার্জ হতে <xliff:g id="CHARGING_TIME_LEFT">%1$s</xliff:g> লাগবে"</string> <string name="keyguard_indication_charging_time_slowly" msgid="301936949731705417">"<xliff:g id="PERCENTAGE">%2$s</xliff:g> • ধীরে চার্জ হচ্ছে • পুরো চার্জ হতে <xliff:g id="CHARGING_TIME_LEFT">%1$s</xliff:g> লাগবে"</string> <string name="keyguard_indication_charging_time_dock" msgid="3149328898931741271">"<xliff:g id="PERCENTAGE">%2$s</xliff:g> • চার্জ হচ্ছে • পুরো চার্জ হতে আরও <xliff:g id="CHARGING_TIME_LEFT">%1$s</xliff:g> সময় লাগবে"</string> + <!-- no translation found for accessibility_action_open_communal_hub (3081702792413787849) --> + <skip /> <string name="communal_tutorial_indicator_text" msgid="4503010353591430123">"কমিউনিটি টিউটোরিয়াল চালু করতে বাঁদিকে সোয়াইপ করুন"</string> <string name="cta_tile_button_to_open_widget_editor" msgid="3871562362382963878">"কাস্টমাইজ করুন"</string> <string name="cta_tile_button_to_dismiss" msgid="3377597875997861754">"বাতিল করুন"</string> @@ -459,6 +464,10 @@ <string name="button_text_to_open_settings" msgid="1987729256950941628">"সেটিংস খুলুন"</string> <string name="work_mode_off_title" msgid="5794818421357835873">"অফিসের অ্যাপ আনপজ করতে চান?"</string> <string name="work_mode_turn_on" msgid="907813741770247267">"আনপজ করুন"</string> + <!-- no translation found for accessibility_action_label_close_communal_hub (6790396569621032333) --> + <skip /> + <!-- no translation found for accessibility_content_description_for_communal_hub (1670220840599380118) --> + <skip /> <string name="accessibility_multi_user_switch_switcher" msgid="5330448341251092660">"ব্যবহারকারী পাল্টে দিন"</string> <string name="accessibility_multi_user_list_switcher" msgid="8574105376229857407">"পুলডাউন মেনু"</string> <string name="guest_exit_guest_dialog_message" msgid="8183450985628495709">"এই সেশনের সব অ্যাপ ও ডেটা মুছে ফেলা হবে।"</string> diff --git a/packages/SystemUI/res/values-bs/strings.xml b/packages/SystemUI/res/values-bs/strings.xml index fd77f144f128..aad6a9105b74 100644 --- a/packages/SystemUI/res/values-bs/strings.xml +++ b/packages/SystemUI/res/values-bs/strings.xml @@ -235,7 +235,8 @@ <string name="accessibility_desc_notification_shade" msgid="5355229129428759989">"Obavještenja sa sjenčenjem."</string> <string name="accessibility_desc_quick_settings" msgid="4374766941484719179">"Brze postavke."</string> <string name="accessibility_desc_qs_notification_shade" msgid="8327226953072700376">"Brze postavke i lokacija za obavještenja."</string> - <string name="accessibility_desc_lock_screen" msgid="5983125095181194887">"Zaključan ekran."</string> + <!-- no translation found for accessibility_desc_lock_screen (409034672704273634) --> + <skip /> <string name="accessibility_desc_work_lock" msgid="4355620395354680575">"Zaključan ekran radnog profila"</string> <string name="accessibility_desc_close" msgid="8293708213442107755">"Zatvori"</string> <string name="accessibility_quick_settings_dnd_none_on" msgid="3235552940146035383">"potpuna tišina"</string> @@ -376,6 +377,8 @@ <string name="quick_settings_hearing_devices_dialog_title" msgid="9004774017688484981">"Slušni aparati"</string> <string name="quick_settings_pair_hearing_devices" msgid="5987105102207447322">"Uparite novi uređaj"</string> <string name="accessibility_hearing_device_pair_new_device" msgid="8440082580186130090">"Kliknite da uparite novi uređaj"</string> + <!-- no translation found for hearing_devices_presets_error (350363093458408536) --> + <skip /> <string name="sensor_privacy_start_use_mic_dialog_title" msgid="563796653825944944">"Deblokirati mikrofon uređaja?"</string> <string name="sensor_privacy_start_use_camera_dialog_title" msgid="8807639852654305227">"Deblokirati kameru uređaja?"</string> <string name="sensor_privacy_start_use_mic_camera_dialog_title" msgid="4316471859905020023">"Deblokirati kameru i mikrofon uređaja?"</string> @@ -441,6 +444,8 @@ <string name="keyguard_indication_charging_time_fast" msgid="8390311020603859480">"<xliff:g id="PERCENTAGE">%2$s</xliff:g> • Brzo punjenje • Potpuna napunjenost za <xliff:g id="CHARGING_TIME_LEFT">%1$s</xliff:g>"</string> <string name="keyguard_indication_charging_time_slowly" msgid="301936949731705417">"<xliff:g id="PERCENTAGE">%2$s</xliff:g> • Sporo punjenje • Potpuna napunjenost za <xliff:g id="CHARGING_TIME_LEFT">%1$s</xliff:g>"</string> <string name="keyguard_indication_charging_time_dock" msgid="3149328898931741271">"<xliff:g id="PERCENTAGE">%2$s</xliff:g> • Punjenje • Potpuna napunjenost za <xliff:g id="CHARGING_TIME_LEFT">%1$s</xliff:g>"</string> + <!-- no translation found for accessibility_action_open_communal_hub (3081702792413787849) --> + <skip /> <string name="communal_tutorial_indicator_text" msgid="4503010353591430123">"Prevucite ulijevo da pokrenete zajednički vodič"</string> <string name="cta_tile_button_to_open_widget_editor" msgid="3871562362382963878">"Prilagodite"</string> <string name="cta_tile_button_to_dismiss" msgid="3377597875997861754">"Odbaci"</string> @@ -459,6 +464,10 @@ <string name="button_text_to_open_settings" msgid="1987729256950941628">"Otvori postavke"</string> <string name="work_mode_off_title" msgid="5794818421357835873">"Pokrenuti poslovne aplikacije?"</string> <string name="work_mode_turn_on" msgid="907813741770247267">"Ponovo pokreni"</string> + <!-- no translation found for accessibility_action_label_close_communal_hub (6790396569621032333) --> + <skip /> + <!-- no translation found for accessibility_content_description_for_communal_hub (1670220840599380118) --> + <skip /> <string name="accessibility_multi_user_switch_switcher" msgid="5330448341251092660">"Zamijeni korisnika"</string> <string name="accessibility_multi_user_list_switcher" msgid="8574105376229857407">"padajući meni"</string> <string name="guest_exit_guest_dialog_message" msgid="8183450985628495709">"Sve aplikacije i podaci iz ove sesije će se izbrisati."</string> @@ -1010,7 +1019,7 @@ <string name="accessibility_floating_button_action_move_out_edge_and_show" msgid="8354760891651663326">"Pomjeranje izvan ivice i prikaz"</string> <string name="accessibility_floating_button_action_remove_menu" msgid="6730432848162552135">"Uklanjanje"</string> <string name="accessibility_floating_button_action_double_tap_to_toggle" msgid="7976492639670692037">"aktiviranje/deaktiviranje"</string> - <string name="accessibility_floating_button_action_edit" msgid="1688227814600463987">"Uredite"</string> + <string name="accessibility_floating_button_action_edit" msgid="1688227814600463987">"Uređivanje"</string> <string name="quick_controls_title" msgid="6839108006171302273">"Kontrole uređaja"</string> <string name="controls_providers_title" msgid="6879775889857085056">"Odaberite aplikaciju da dodate kontrole"</string> <string name="controls_number_of_favorites" msgid="4481806788981836355">"{count,plural, =1{Dodana je # kontrola.}one{Dodana je # kontrola.}few{Dodane su # kontrole.}other{Dodano je # kontrola.}}"</string> diff --git a/packages/SystemUI/res/values-ca/strings.xml b/packages/SystemUI/res/values-ca/strings.xml index aeb0ef0045a8..fde008eaf43d 100644 --- a/packages/SystemUI/res/values-ca/strings.xml +++ b/packages/SystemUI/res/values-ca/strings.xml @@ -235,7 +235,7 @@ <string name="accessibility_desc_notification_shade" msgid="5355229129428759989">"Àrea de notificacions"</string> <string name="accessibility_desc_quick_settings" msgid="4374766941484719179">"Configuració ràpida"</string> <string name="accessibility_desc_qs_notification_shade" msgid="8327226953072700376">"Configuració ràpida i àrea de notificacions."</string> - <string name="accessibility_desc_lock_screen" msgid="5983125095181194887">"Pantalla de bloqueig"</string> + <string name="accessibility_desc_lock_screen" msgid="409034672704273634">"Pantalla de bloqueig"</string> <string name="accessibility_desc_work_lock" msgid="4355620395354680575">"Pantalla de bloqueig per a la feina"</string> <string name="accessibility_desc_close" msgid="8293708213442107755">"Tanca"</string> <string name="accessibility_quick_settings_dnd_none_on" msgid="3235552940146035383">"silenci total"</string> @@ -270,20 +270,15 @@ <string name="see_all_bluetooth_devices" msgid="1761596816620200433">"Mostra-ho tot"</string> <string name="turn_on_bluetooth" msgid="5681370462180289071">"Utilitza\'l"</string> <string name="quick_settings_bluetooth_device_connected" msgid="7884777006729260996">"Connectat"</string> - <!-- no translation found for quick_settings_bluetooth_device_audio_sharing (1496358082943301670) --> - <skip /> + <string name="quick_settings_bluetooth_device_audio_sharing" msgid="1496358082943301670">"Compartició d\'àudio"</string> <string name="quick_settings_bluetooth_device_saved" msgid="7549938728928069477">"Desat"</string> <string name="accessibility_quick_settings_bluetooth_device_tap_to_disconnect" msgid="415980329093277342">"desconnecta"</string> <string name="accessibility_quick_settings_bluetooth_device_tap_to_activate" msgid="3724301751036877403">"activa"</string> <string name="turn_on_bluetooth_auto_tomorrow" msgid="414836329962473906">"Torna\'l a activar automàticament demà"</string> - <!-- no translation found for turn_on_bluetooth_auto_info_disabled (682984290339848844) --> - <skip /> - <!-- no translation found for turn_on_bluetooth_auto_info_enabled (7440944034584560279) --> - <skip /> - <!-- no translation found for quick_settings_bluetooth_audio_sharing_button (4499275822759907822) --> - <skip /> - <!-- no translation found for quick_settings_bluetooth_audio_sharing_button_sharing (8626191139359072540) --> - <skip /> + <string name="turn_on_bluetooth_auto_info_disabled" msgid="682984290339848844">"Les funcions com Quick Share i Troba el meu dispositiu utilitzen el Bluetooth"</string> + <string name="turn_on_bluetooth_auto_info_enabled" msgid="7440944034584560279">"El Bluetooth s\'activarà demà al matí"</string> + <string name="quick_settings_bluetooth_audio_sharing_button" msgid="4499275822759907822">"Compartició d\'àudio"</string> + <string name="quick_settings_bluetooth_audio_sharing_button_sharing" msgid="8626191139359072540">"S\'està compartint l\'àudio"</string> <string name="quick_settings_bluetooth_secondary_label_battery_level" msgid="4182034939479344093">"<xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE">%s</xliff:g> de bateria"</string> <string name="quick_settings_bluetooth_secondary_label_audio" msgid="780333390310051161">"Àudio"</string> <string name="quick_settings_bluetooth_secondary_label_headset" msgid="2332093067553000852">"Auriculars"</string> @@ -376,6 +371,8 @@ <string name="quick_settings_hearing_devices_dialog_title" msgid="9004774017688484981">"Audiòfons"</string> <string name="quick_settings_pair_hearing_devices" msgid="5987105102207447322">"Vincula un dispositiu nou"</string> <string name="accessibility_hearing_device_pair_new_device" msgid="8440082580186130090">"Fes clic per vincular un dispositiu nou"</string> + <!-- no translation found for hearing_devices_presets_error (350363093458408536) --> + <skip /> <string name="sensor_privacy_start_use_mic_dialog_title" msgid="563796653825944944">"Vols desbloquejar el micròfon del dispositiu?"</string> <string name="sensor_privacy_start_use_camera_dialog_title" msgid="8807639852654305227">"Vols desbloquejar la càmera del dispositiu?"</string> <string name="sensor_privacy_start_use_mic_camera_dialog_title" msgid="4316471859905020023">"Vols desbloquejar la càmera i el micròfon del dispositiu?"</string> @@ -441,6 +438,7 @@ <string name="keyguard_indication_charging_time_fast" msgid="8390311020603859480">"<xliff:g id="PERCENTAGE">%2$s</xliff:g> • Carregant ràpidament • Es completarà d\'aquí a <xliff:g id="CHARGING_TIME_LEFT">%1$s</xliff:g>"</string> <string name="keyguard_indication_charging_time_slowly" msgid="301936949731705417">"<xliff:g id="PERCENTAGE">%2$s</xliff:g> • Carregant lentament • Es completarà d\'aquí a <xliff:g id="CHARGING_TIME_LEFT">%1$s</xliff:g>"</string> <string name="keyguard_indication_charging_time_dock" msgid="3149328898931741271">"<xliff:g id="PERCENTAGE">%2$s</xliff:g> • S\'està carregant • Es completarà d\'aquí a <xliff:g id="CHARGING_TIME_LEFT">%1$s</xliff:g>"</string> + <string name="accessibility_action_open_communal_hub" msgid="3081702792413787849">"Widgets a la pantalla de bloqueig"</string> <string name="communal_tutorial_indicator_text" msgid="4503010353591430123">"Llisca cap a l\'esquerra per iniciar el tutorial de la comunitat"</string> <string name="cta_tile_button_to_open_widget_editor" msgid="3871562362382963878">"Personalitza"</string> <string name="cta_tile_button_to_dismiss" msgid="3377597875997861754">"Ignora"</string> @@ -459,6 +457,8 @@ <string name="button_text_to_open_settings" msgid="1987729256950941628">"Obre la configuració"</string> <string name="work_mode_off_title" msgid="5794818421357835873">"Reactivar les apps de treball?"</string> <string name="work_mode_turn_on" msgid="907813741770247267">"Reactiva"</string> + <string name="accessibility_action_label_close_communal_hub" msgid="6790396569621032333">"Tanca els widgets a la pantalla de bloqueig"</string> + <string name="accessibility_content_description_for_communal_hub" msgid="1670220840599380118">"Widgets a la pantalla de bloqueig"</string> <string name="accessibility_multi_user_switch_switcher" msgid="5330448341251092660">"Canvia d\'usuari"</string> <string name="accessibility_multi_user_list_switcher" msgid="8574105376229857407">"menú desplegable"</string> <string name="guest_exit_guest_dialog_message" msgid="8183450985628495709">"Totes les aplicacions i les dades d\'aquesta sessió se suprimiran."</string> @@ -1006,7 +1006,7 @@ <string name="accessibility_floating_button_action_move_top_right" msgid="6106225581993479711">"Mou a dalt a la dreta"</string> <string name="accessibility_floating_button_action_move_bottom_left" msgid="8063394111137429725">"Mou a baix a l\'esquerra"</string> <string name="accessibility_floating_button_action_move_bottom_right" msgid="6196904373227440500">"Mou a baix a la dreta"</string> - <string name="accessibility_floating_button_action_move_to_edge_and_hide_to_half" msgid="662401168245782658">"Mou dins de les vores i amaga"</string> + <string name="accessibility_floating_button_action_move_to_edge_and_hide_to_half" msgid="662401168245782658">"Mou fins la vora i amaga"</string> <string name="accessibility_floating_button_action_move_out_edge_and_show" msgid="8354760891651663326">"Mou fora de les vores i mostra"</string> <string name="accessibility_floating_button_action_remove_menu" msgid="6730432848162552135">"Suprimeix"</string> <string name="accessibility_floating_button_action_double_tap_to_toggle" msgid="7976492639670692037">"commuta"</string> diff --git a/packages/SystemUI/res/values-cs/strings.xml b/packages/SystemUI/res/values-cs/strings.xml index 891f836504cf..cb35d120a04e 100644 --- a/packages/SystemUI/res/values-cs/strings.xml +++ b/packages/SystemUI/res/values-cs/strings.xml @@ -235,7 +235,7 @@ <string name="accessibility_desc_notification_shade" msgid="5355229129428759989">"Panel oznámení."</string> <string name="accessibility_desc_quick_settings" msgid="4374766941484719179">"Rychlé nastavení."</string> <string name="accessibility_desc_qs_notification_shade" msgid="8327226953072700376">"Rychlé nastavení a panel oznámení"</string> - <string name="accessibility_desc_lock_screen" msgid="5983125095181194887">"Obrazovka uzamčení"</string> + <string name="accessibility_desc_lock_screen" msgid="409034672704273634">"Obrazovka uzamčení"</string> <string name="accessibility_desc_work_lock" msgid="4355620395354680575">"Obrazovka uzamčení pracovního profilu"</string> <string name="accessibility_desc_close" msgid="8293708213442107755">"Zavřít"</string> <string name="accessibility_quick_settings_dnd_none_on" msgid="3235552940146035383">"úplné ticho"</string> @@ -376,6 +376,8 @@ <string name="quick_settings_hearing_devices_dialog_title" msgid="9004774017688484981">"Naslouchátka"</string> <string name="quick_settings_pair_hearing_devices" msgid="5987105102207447322">"Spárovat nové zařízení"</string> <string name="accessibility_hearing_device_pair_new_device" msgid="8440082580186130090">"Kliknutím spárujete nové zařízení"</string> + <!-- no translation found for hearing_devices_presets_error (350363093458408536) --> + <skip /> <string name="sensor_privacy_start_use_mic_dialog_title" msgid="563796653825944944">"Odblokovat mikrofon zařízení?"</string> <string name="sensor_privacy_start_use_camera_dialog_title" msgid="8807639852654305227">"Odblokovat fotoaparát zařízení?"</string> <string name="sensor_privacy_start_use_mic_camera_dialog_title" msgid="4316471859905020023">"Odblokovat fotoaparát a mikrofon zařízení?"</string> @@ -441,6 +443,7 @@ <string name="keyguard_indication_charging_time_fast" msgid="8390311020603859480">"<xliff:g id="PERCENTAGE">%2$s</xliff:g> • Rychlé nabíjení • Plně nabito za <xliff:g id="CHARGING_TIME_LEFT">%1$s</xliff:g>"</string> <string name="keyguard_indication_charging_time_slowly" msgid="301936949731705417">"<xliff:g id="PERCENTAGE">%2$s</xliff:g> • Pomalé nabíjení • Plně nabito za <xliff:g id="CHARGING_TIME_LEFT">%1$s</xliff:g>"</string> <string name="keyguard_indication_charging_time_dock" msgid="3149328898931741271">"<xliff:g id="PERCENTAGE">%2$s</xliff:g> • Nabíjení • Plně nabito za <xliff:g id="CHARGING_TIME_LEFT">%1$s</xliff:g>"</string> + <string name="accessibility_action_open_communal_hub" msgid="3081702792413787849">"Widgety na obrazovce uzamčení"</string> <string name="communal_tutorial_indicator_text" msgid="4503010353591430123">"Přejetím doleva spustíte komunitní výukový program"</string> <string name="cta_tile_button_to_open_widget_editor" msgid="3871562362382963878">"Přizpůsobit"</string> <string name="cta_tile_button_to_dismiss" msgid="3377597875997861754">"Zavřít"</string> @@ -459,6 +462,8 @@ <string name="button_text_to_open_settings" msgid="1987729256950941628">"Otevřít nastavení"</string> <string name="work_mode_off_title" msgid="5794818421357835873">"Zrušit pozastavení pracovních aplikací?"</string> <string name="work_mode_turn_on" msgid="907813741770247267">"Zrušit pozastavení"</string> + <string name="accessibility_action_label_close_communal_hub" msgid="6790396569621032333">"Zavřít widgety na obrazovce uzamčení"</string> + <string name="accessibility_content_description_for_communal_hub" msgid="1670220840599380118">"Widgety na obrazovce uzamčení"</string> <string name="accessibility_multi_user_switch_switcher" msgid="5330448341251092660">"Přepnout uživatele"</string> <string name="accessibility_multi_user_list_switcher" msgid="8574105376229857407">"rozbalovací nabídka"</string> <string name="guest_exit_guest_dialog_message" msgid="8183450985628495709">"Veškeré aplikace a data v této relaci budou vymazána."</string> diff --git a/packages/SystemUI/res/values-da/strings.xml b/packages/SystemUI/res/values-da/strings.xml index 5c721a14e0a7..5f511dd991ad 100644 --- a/packages/SystemUI/res/values-da/strings.xml +++ b/packages/SystemUI/res/values-da/strings.xml @@ -235,7 +235,8 @@ <string name="accessibility_desc_notification_shade" msgid="5355229129428759989">"Notifikationspanel."</string> <string name="accessibility_desc_quick_settings" msgid="4374766941484719179">"Kvikmenu."</string> <string name="accessibility_desc_qs_notification_shade" msgid="8327226953072700376">"Kvikmenu og notifikationspanel."</string> - <string name="accessibility_desc_lock_screen" msgid="5983125095181194887">"Låseskærm."</string> + <!-- no translation found for accessibility_desc_lock_screen (409034672704273634) --> + <skip /> <string name="accessibility_desc_work_lock" msgid="4355620395354680575">"Låseskærm til arbejde"</string> <string name="accessibility_desc_close" msgid="8293708213442107755">"Luk"</string> <string name="accessibility_quick_settings_dnd_none_on" msgid="3235552940146035383">"total stilhed"</string> @@ -376,6 +377,8 @@ <string name="quick_settings_hearing_devices_dialog_title" msgid="9004774017688484981">"Høreapparater"</string> <string name="quick_settings_pair_hearing_devices" msgid="5987105102207447322">"Par ny enhed"</string> <string name="accessibility_hearing_device_pair_new_device" msgid="8440082580186130090">"Klik for at parre en ny enhed"</string> + <!-- no translation found for hearing_devices_presets_error (350363093458408536) --> + <skip /> <string name="sensor_privacy_start_use_mic_dialog_title" msgid="563796653825944944">"Vil du fjerne blokeringen af enhedens mikrofon?"</string> <string name="sensor_privacy_start_use_camera_dialog_title" msgid="8807639852654305227">"Vil du fjerne blokeringen af enhedens kamera?"</string> <string name="sensor_privacy_start_use_mic_camera_dialog_title" msgid="4316471859905020023">"Vil du fjerne blokeringen af enhedens kamera og mikrofon?"</string> @@ -441,6 +444,8 @@ <string name="keyguard_indication_charging_time_fast" msgid="8390311020603859480">"<xliff:g id="PERCENTAGE">%2$s</xliff:g> • Oplader hurtigt • Fuldt opladet om <xliff:g id="CHARGING_TIME_LEFT">%1$s</xliff:g>"</string> <string name="keyguard_indication_charging_time_slowly" msgid="301936949731705417">"<xliff:g id="PERCENTAGE">%2$s</xliff:g> • Oplader langsomt • Fuldt opladet om <xliff:g id="CHARGING_TIME_LEFT">%1$s</xliff:g>"</string> <string name="keyguard_indication_charging_time_dock" msgid="3149328898931741271">"<xliff:g id="PERCENTAGE">%2$s</xliff:g> • Oplader • Fuldt opladet om <xliff:g id="CHARGING_TIME_LEFT">%1$s</xliff:g>"</string> + <!-- no translation found for accessibility_action_open_communal_hub (3081702792413787849) --> + <skip /> <string name="communal_tutorial_indicator_text" msgid="4503010353591430123">"Stryg mod venstre for at starte den fælles vejledning"</string> <string name="cta_tile_button_to_open_widget_editor" msgid="3871562362382963878">"Tilpas"</string> <string name="cta_tile_button_to_dismiss" msgid="3377597875997861754">"Luk"</string> @@ -459,6 +464,10 @@ <string name="button_text_to_open_settings" msgid="1987729256950941628">"Åbn Indstillinger"</string> <string name="work_mode_off_title" msgid="5794818421357835873">"Vil du genoptage arbejdsapps?"</string> <string name="work_mode_turn_on" msgid="907813741770247267">"Genoptag"</string> + <!-- no translation found for accessibility_action_label_close_communal_hub (6790396569621032333) --> + <skip /> + <!-- no translation found for accessibility_content_description_for_communal_hub (1670220840599380118) --> + <skip /> <string name="accessibility_multi_user_switch_switcher" msgid="5330448341251092660">"Skift bruger"</string> <string name="accessibility_multi_user_list_switcher" msgid="8574105376229857407">"rullemenu"</string> <string name="guest_exit_guest_dialog_message" msgid="8183450985628495709">"Alle apps og data i denne session slettes."</string> @@ -1156,7 +1165,7 @@ <string name="status_before_loading" msgid="1500477307859631381">"Indhold dukker snart op"</string> <string name="missed_call" msgid="4228016077700161689">"Ubesvaret opkald"</string> <string name="messages_count_overflow_indicator" msgid="7850934067082006043">"<xliff:g id="NUMBER">%d</xliff:g>+"</string> - <string name="people_tile_description" msgid="8154966188085545556">"Se dine seneste beskeder, mistede opkald og statusopdateringer"</string> + <string name="people_tile_description" msgid="8154966188085545556">"Se dine seneste beskeder, ubesvarede opkald og statusopdateringer"</string> <string name="people_tile_title" msgid="6589377493334871272">"Samtale"</string> <string name="paused_by_dnd" msgid="7856941866433556428">"Sat på pause af Forstyr ikke"</string> <string name="new_notification_text_content_description" msgid="2915029960094389291">"<xliff:g id="NAME">%1$s</xliff:g> har sendt en besked: <xliff:g id="NOTIFICATION">%2$s</xliff:g>"</string> diff --git a/packages/SystemUI/res/values-de/strings.xml b/packages/SystemUI/res/values-de/strings.xml index 510dba96c418..55c5553e1803 100644 --- a/packages/SystemUI/res/values-de/strings.xml +++ b/packages/SystemUI/res/values-de/strings.xml @@ -235,7 +235,8 @@ <string name="accessibility_desc_notification_shade" msgid="5355229129428759989">"Benachrichtigungsleiste"</string> <string name="accessibility_desc_quick_settings" msgid="4374766941484719179">"Schnelleinstellungen"</string> <string name="accessibility_desc_qs_notification_shade" msgid="8327226953072700376">"Schnelleinstellungen und Benachrichtigungsleiste."</string> - <string name="accessibility_desc_lock_screen" msgid="5983125095181194887">"Sperrbildschirm"</string> + <!-- no translation found for accessibility_desc_lock_screen (409034672704273634) --> + <skip /> <string name="accessibility_desc_work_lock" msgid="4355620395354680575">"Sperrbildschirm für Arbeitsprofil"</string> <string name="accessibility_desc_close" msgid="8293708213442107755">"Schließen"</string> <string name="accessibility_quick_settings_dnd_none_on" msgid="3235552940146035383">"lautlos"</string> @@ -376,6 +377,8 @@ <string name="quick_settings_hearing_devices_dialog_title" msgid="9004774017688484981">"Hörgeräte"</string> <string name="quick_settings_pair_hearing_devices" msgid="5987105102207447322">"Neues Gerät koppeln"</string> <string name="accessibility_hearing_device_pair_new_device" msgid="8440082580186130090">"Klicken, um neues Gerät zu koppeln"</string> + <!-- no translation found for hearing_devices_presets_error (350363093458408536) --> + <skip /> <string name="sensor_privacy_start_use_mic_dialog_title" msgid="563796653825944944">"Blockierung des Gerätemikrofons aufheben?"</string> <string name="sensor_privacy_start_use_camera_dialog_title" msgid="8807639852654305227">"Blockierung der Gerätekamera aufheben?"</string> <string name="sensor_privacy_start_use_mic_camera_dialog_title" msgid="4316471859905020023">"Blockierung von Gerätekamera und Gerätemikrofon aufheben?"</string> @@ -441,6 +444,8 @@ <string name="keyguard_indication_charging_time_fast" msgid="8390311020603859480">"<xliff:g id="PERCENTAGE">%2$s</xliff:g> • Wird schnell geladen • Voll in <xliff:g id="CHARGING_TIME_LEFT">%1$s</xliff:g>"</string> <string name="keyguard_indication_charging_time_slowly" msgid="301936949731705417">"<xliff:g id="PERCENTAGE">%2$s</xliff:g> • Wird langsam geladen • Voll in <xliff:g id="CHARGING_TIME_LEFT">%1$s</xliff:g>"</string> <string name="keyguard_indication_charging_time_dock" msgid="3149328898931741271">"<xliff:g id="PERCENTAGE">%2$s</xliff:g> • Wird geladen • Voll in <xliff:g id="CHARGING_TIME_LEFT">%1$s</xliff:g>"</string> + <!-- no translation found for accessibility_action_open_communal_hub (3081702792413787849) --> + <skip /> <string name="communal_tutorial_indicator_text" msgid="4503010353591430123">"Wische nach links, um das gemeinsame Tutorial zu starten"</string> <string name="cta_tile_button_to_open_widget_editor" msgid="3871562362382963878">"Anpassen"</string> <string name="cta_tile_button_to_dismiss" msgid="3377597875997861754">"Schließen"</string> @@ -459,6 +464,10 @@ <string name="button_text_to_open_settings" msgid="1987729256950941628">"Einstellungen öffnen"</string> <string name="work_mode_off_title" msgid="5794818421357835873">"Geschäftliche Apps nicht mehr pausieren?"</string> <string name="work_mode_turn_on" msgid="907813741770247267">"Nicht mehr pausieren"</string> + <!-- no translation found for accessibility_action_label_close_communal_hub (6790396569621032333) --> + <skip /> + <!-- no translation found for accessibility_content_description_for_communal_hub (1670220840599380118) --> + <skip /> <string name="accessibility_multi_user_switch_switcher" msgid="5330448341251092660">"Nutzer wechseln"</string> <string name="accessibility_multi_user_list_switcher" msgid="8574105376229857407">"Pull-down-Menü"</string> <string name="guest_exit_guest_dialog_message" msgid="8183450985628495709">"Alle Apps und Daten in dieser Sitzung werden gelöscht."</string> @@ -1003,7 +1012,7 @@ <string name="accessibility_floating_button_undo_message_label_text" msgid="9017658016426242640">"Verknüpfung für „<xliff:g id="FEATURE_NAME">%s</xliff:g>“ entfernt"</string> <string name="accessibility_floating_button_undo_message_number_text" msgid="4909270290725226075">"{count,plural, =1{# Verknüpfung entfernt}other{# Verknüpfungen entfernt}}"</string> <string name="accessibility_floating_button_action_move_top_left" msgid="6253520703618545705">"Nach oben links verschieben"</string> - <string name="accessibility_floating_button_action_move_top_right" msgid="6106225581993479711">"Nach rechts oben verschieben"</string> + <string name="accessibility_floating_button_action_move_top_right" msgid="6106225581993479711">"Nach oben rechts verschieben"</string> <string name="accessibility_floating_button_action_move_bottom_left" msgid="8063394111137429725">"Nach unten links verschieben"</string> <string name="accessibility_floating_button_action_move_bottom_right" msgid="6196904373227440500">"Nach unten rechts verschieben"</string> <string name="accessibility_floating_button_action_move_to_edge_and_hide_to_half" msgid="662401168245782658">"An den Rand verschieben und verbergen"</string> diff --git a/packages/SystemUI/res/values-el/strings.xml b/packages/SystemUI/res/values-el/strings.xml index a8815363bb9c..be273e5bc8ed 100644 --- a/packages/SystemUI/res/values-el/strings.xml +++ b/packages/SystemUI/res/values-el/strings.xml @@ -235,7 +235,7 @@ <string name="accessibility_desc_notification_shade" msgid="5355229129428759989">"Πλαίσιο σκίασης ειδοποιήσεων."</string> <string name="accessibility_desc_quick_settings" msgid="4374766941484719179">"Γρήγορες ρυθμίσεις."</string> <string name="accessibility_desc_qs_notification_shade" msgid="8327226953072700376">"Γρήγορες ρυθμίσεις και πλαίσιο σκίασης ειδοποιήσεων."</string> - <string name="accessibility_desc_lock_screen" msgid="5983125095181194887">"Οθόνη κλειδώματος"</string> + <string name="accessibility_desc_lock_screen" msgid="409034672704273634">"Κλείδωμα οθόνης"</string> <string name="accessibility_desc_work_lock" msgid="4355620395354680575">"Οθόνη κλειδωμένης εργασίας"</string> <string name="accessibility_desc_close" msgid="8293708213442107755">"Κλείσιμο"</string> <string name="accessibility_quick_settings_dnd_none_on" msgid="3235552940146035383">"πλήρης σίγαση"</string> @@ -270,20 +270,15 @@ <string name="see_all_bluetooth_devices" msgid="1761596816620200433">"Εμφάνιση όλων"</string> <string name="turn_on_bluetooth" msgid="5681370462180289071">"Χρήση Bluetooth"</string> <string name="quick_settings_bluetooth_device_connected" msgid="7884777006729260996">"Συνδέθηκε"</string> - <!-- no translation found for quick_settings_bluetooth_device_audio_sharing (1496358082943301670) --> - <skip /> + <string name="quick_settings_bluetooth_device_audio_sharing" msgid="1496358082943301670">"Κοινή χρήση ήχου"</string> <string name="quick_settings_bluetooth_device_saved" msgid="7549938728928069477">"Αποθηκεύτηκε"</string> <string name="accessibility_quick_settings_bluetooth_device_tap_to_disconnect" msgid="415980329093277342">"αποσύνδεση"</string> <string name="accessibility_quick_settings_bluetooth_device_tap_to_activate" msgid="3724301751036877403">"ενεργοποίηση"</string> <string name="turn_on_bluetooth_auto_tomorrow" msgid="414836329962473906">"Αυτόματη ενεργοποίηση ξανά αύριο"</string> - <!-- no translation found for turn_on_bluetooth_auto_info_disabled (682984290339848844) --> - <skip /> - <!-- no translation found for turn_on_bluetooth_auto_info_enabled (7440944034584560279) --> - <skip /> - <!-- no translation found for quick_settings_bluetooth_audio_sharing_button (4499275822759907822) --> - <skip /> - <!-- no translation found for quick_settings_bluetooth_audio_sharing_button_sharing (8626191139359072540) --> - <skip /> + <string name="turn_on_bluetooth_auto_info_disabled" msgid="682984290339848844">"Λειτουργίες όπως το Quick Share και η Εύρεση συσκευής χρησιμοποιούν το Bluetooth"</string> + <string name="turn_on_bluetooth_auto_info_enabled" msgid="7440944034584560279">"Το Bluetooth θα ενεργοποιηθεί αύριο το πρωί"</string> + <string name="quick_settings_bluetooth_audio_sharing_button" msgid="4499275822759907822">"Κοινή χρήση ήχου"</string> + <string name="quick_settings_bluetooth_audio_sharing_button_sharing" msgid="8626191139359072540">"Κοινή χρήση ήχου"</string> <string name="quick_settings_bluetooth_secondary_label_battery_level" msgid="4182034939479344093">"Μπαταρία <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE">%s</xliff:g>"</string> <string name="quick_settings_bluetooth_secondary_label_audio" msgid="780333390310051161">"Ήχος"</string> <string name="quick_settings_bluetooth_secondary_label_headset" msgid="2332093067553000852">"Ακουστικά"</string> @@ -376,6 +371,8 @@ <string name="quick_settings_hearing_devices_dialog_title" msgid="9004774017688484981">"Συσκευές ακοής"</string> <string name="quick_settings_pair_hearing_devices" msgid="5987105102207447322">"Σύζευξη νέας συσκευής"</string> <string name="accessibility_hearing_device_pair_new_device" msgid="8440082580186130090">"Κάντε κλικ για σύζευξη νέας συσκευής"</string> + <!-- no translation found for hearing_devices_presets_error (350363093458408536) --> + <skip /> <string name="sensor_privacy_start_use_mic_dialog_title" msgid="563796653825944944">"Κατάργηση αποκλεισμού μικροφώνου συσκευής;"</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> @@ -441,6 +438,7 @@ <string name="keyguard_indication_charging_time_fast" msgid="8390311020603859480">"<xliff:g id="PERCENTAGE">%2$s</xliff:g> • Γρήγορη φόρτιση • Πλήρης φόρτιση σε <xliff:g id="CHARGING_TIME_LEFT">%1$s</xliff:g>"</string> <string name="keyguard_indication_charging_time_slowly" msgid="301936949731705417">"<xliff:g id="PERCENTAGE">%2$s</xliff:g> • Αργή φόρτιση • Πλήρης φόρτιση σε <xliff:g id="CHARGING_TIME_LEFT">%1$s</xliff:g>"</string> <string name="keyguard_indication_charging_time_dock" msgid="3149328898931741271">"<xliff:g id="PERCENTAGE">%2$s</xliff:g> • Φόρτιση • Πλήρης φόρτιση σε <xliff:g id="CHARGING_TIME_LEFT">%1$s</xliff:g>"</string> + <string name="accessibility_action_open_communal_hub" msgid="3081702792413787849">"Γραφικά στοιχεία στην οθόνη κλειδώματος"</string> <string name="communal_tutorial_indicator_text" msgid="4503010353591430123">"Σύρετε προς τα αριστερά για να ξεκινήσετε τον κοινόχρηστο οδηγό"</string> <string name="cta_tile_button_to_open_widget_editor" msgid="3871562362382963878">"Προσαρμογή"</string> <string name="cta_tile_button_to_dismiss" msgid="3377597875997861754">"Παράβλεψη"</string> @@ -459,6 +457,8 @@ <string name="button_text_to_open_settings" msgid="1987729256950941628">"Άνοιγμα ρυθμίσεων"</string> <string name="work_mode_off_title" msgid="5794818421357835873">"Αναίρ. παύσης εφαρμ. εργασιών;"</string> <string name="work_mode_turn_on" msgid="907813741770247267">"Αναίρεση παύσης"</string> + <string name="accessibility_action_label_close_communal_hub" msgid="6790396569621032333">"Κλείσιμο γραφικών στοιχείων στην οθόνη κλειδώματος"</string> + <string name="accessibility_content_description_for_communal_hub" msgid="1670220840599380118">"Γραφικά στοιχεία στην οθόνη κλειδώματος"</string> <string name="accessibility_multi_user_switch_switcher" msgid="5330448341251092660">"Εναλλαγή χρήστη"</string> <string name="accessibility_multi_user_list_switcher" msgid="8574105376229857407">"αναπτυσσόμενο μενού"</string> <string name="guest_exit_guest_dialog_message" msgid="8183450985628495709">"Όλες οι εφαρμογές και τα δεδομένα αυτής της περιόδου σύνδεσης θα διαγραφούν."</string> diff --git a/packages/SystemUI/res/values-en-rAU/strings.xml b/packages/SystemUI/res/values-en-rAU/strings.xml index d2af8a6977dc..10fe331c8814 100644 --- a/packages/SystemUI/res/values-en-rAU/strings.xml +++ b/packages/SystemUI/res/values-en-rAU/strings.xml @@ -235,7 +235,8 @@ <string name="accessibility_desc_notification_shade" msgid="5355229129428759989">"Notification shade."</string> <string name="accessibility_desc_quick_settings" msgid="4374766941484719179">"Quick settings."</string> <string name="accessibility_desc_qs_notification_shade" msgid="8327226953072700376">"Quick Settings and notification shade."</string> - <string name="accessibility_desc_lock_screen" msgid="5983125095181194887">"Lock screen."</string> + <!-- no translation found for accessibility_desc_lock_screen (409034672704273634) --> + <skip /> <string name="accessibility_desc_work_lock" msgid="4355620395354680575">"Work lock screen"</string> <string name="accessibility_desc_close" msgid="8293708213442107755">"Close"</string> <string name="accessibility_quick_settings_dnd_none_on" msgid="3235552940146035383">"total silence"</string> @@ -376,6 +377,8 @@ <string name="quick_settings_hearing_devices_dialog_title" msgid="9004774017688484981">"Hearing devices"</string> <string name="quick_settings_pair_hearing_devices" msgid="5987105102207447322">"Pair new device"</string> <string name="accessibility_hearing_device_pair_new_device" msgid="8440082580186130090">"Click to pair new device"</string> + <!-- no translation found for hearing_devices_presets_error (350363093458408536) --> + <skip /> <string name="sensor_privacy_start_use_mic_dialog_title" msgid="563796653825944944">"Unblock device microphone?"</string> <string name="sensor_privacy_start_use_camera_dialog_title" msgid="8807639852654305227">"Unblock device camera?"</string> <string name="sensor_privacy_start_use_mic_camera_dialog_title" msgid="4316471859905020023">"Unblock device camera and microphone?"</string> @@ -441,6 +444,8 @@ <string name="keyguard_indication_charging_time_fast" msgid="8390311020603859480">"<xliff:g id="PERCENTAGE">%2$s</xliff:g> • Charging rapidly • Full in <xliff:g id="CHARGING_TIME_LEFT">%1$s</xliff:g>"</string> <string name="keyguard_indication_charging_time_slowly" msgid="301936949731705417">"<xliff:g id="PERCENTAGE">%2$s</xliff:g> • Charging slowly • Full in <xliff:g id="CHARGING_TIME_LEFT">%1$s</xliff:g>"</string> <string name="keyguard_indication_charging_time_dock" msgid="3149328898931741271">"<xliff:g id="PERCENTAGE">%2$s</xliff:g> • Charging • Full in <xliff:g id="CHARGING_TIME_LEFT">%1$s</xliff:g>"</string> + <!-- no translation found for accessibility_action_open_communal_hub (3081702792413787849) --> + <skip /> <string name="communal_tutorial_indicator_text" msgid="4503010353591430123">"Swipe left to start the communal tutorial"</string> <string name="cta_tile_button_to_open_widget_editor" msgid="3871562362382963878">"Customise"</string> <string name="cta_tile_button_to_dismiss" msgid="3377597875997861754">"Dismiss"</string> @@ -459,6 +464,10 @@ <string name="button_text_to_open_settings" msgid="1987729256950941628">"Open settings"</string> <string name="work_mode_off_title" msgid="5794818421357835873">"Unpause work apps?"</string> <string name="work_mode_turn_on" msgid="907813741770247267">"Unpause"</string> + <!-- no translation found for accessibility_action_label_close_communal_hub (6790396569621032333) --> + <skip /> + <!-- no translation found for accessibility_content_description_for_communal_hub (1670220840599380118) --> + <skip /> <string name="accessibility_multi_user_switch_switcher" msgid="5330448341251092660">"Switch user"</string> <string name="accessibility_multi_user_list_switcher" msgid="8574105376229857407">"pulldown menu"</string> <string name="guest_exit_guest_dialog_message" msgid="8183450985628495709">"All apps and data in this session will be deleted."</string> diff --git a/packages/SystemUI/res/values-en-rCA/strings.xml b/packages/SystemUI/res/values-en-rCA/strings.xml index 836eefa6378c..42902649d104 100644 --- a/packages/SystemUI/res/values-en-rCA/strings.xml +++ b/packages/SystemUI/res/values-en-rCA/strings.xml @@ -235,7 +235,7 @@ <string name="accessibility_desc_notification_shade" msgid="5355229129428759989">"Notification shade."</string> <string name="accessibility_desc_quick_settings" msgid="4374766941484719179">"Quick settings."</string> <string name="accessibility_desc_qs_notification_shade" msgid="8327226953072700376">"Quick settings and Notification shade."</string> - <string name="accessibility_desc_lock_screen" msgid="5983125095181194887">"Lock screen."</string> + <string name="accessibility_desc_lock_screen" msgid="409034672704273634">"Lock screen"</string> <string name="accessibility_desc_work_lock" msgid="4355620395354680575">"Work lock screen"</string> <string name="accessibility_desc_close" msgid="8293708213442107755">"Close"</string> <string name="accessibility_quick_settings_dnd_none_on" msgid="3235552940146035383">"total silence"</string> @@ -371,6 +371,8 @@ <string name="quick_settings_hearing_devices_dialog_title" msgid="9004774017688484981">"Hearing devices"</string> <string name="quick_settings_pair_hearing_devices" msgid="5987105102207447322">"Pair new device"</string> <string name="accessibility_hearing_device_pair_new_device" msgid="8440082580186130090">"Click to pair new device"</string> + <!-- no translation found for hearing_devices_presets_error (350363093458408536) --> + <skip /> <string name="sensor_privacy_start_use_mic_dialog_title" msgid="563796653825944944">"Unblock device microphone?"</string> <string name="sensor_privacy_start_use_camera_dialog_title" msgid="8807639852654305227">"Unblock device camera?"</string> <string name="sensor_privacy_start_use_mic_camera_dialog_title" msgid="4316471859905020023">"Unblock device camera and microphone?"</string> @@ -436,6 +438,7 @@ <string name="keyguard_indication_charging_time_fast" msgid="8390311020603859480">"<xliff:g id="PERCENTAGE">%2$s</xliff:g> • Charging rapidly • Full in <xliff:g id="CHARGING_TIME_LEFT">%1$s</xliff:g>"</string> <string name="keyguard_indication_charging_time_slowly" msgid="301936949731705417">"<xliff:g id="PERCENTAGE">%2$s</xliff:g> • Charging slowly • Full in <xliff:g id="CHARGING_TIME_LEFT">%1$s</xliff:g>"</string> <string name="keyguard_indication_charging_time_dock" msgid="3149328898931741271">"<xliff:g id="PERCENTAGE">%2$s</xliff:g> • Charging • Full in <xliff:g id="CHARGING_TIME_LEFT">%1$s</xliff:g>"</string> + <string name="accessibility_action_open_communal_hub" msgid="3081702792413787849">"Widgets on lock screen"</string> <string name="communal_tutorial_indicator_text" msgid="4503010353591430123">"Swipe left to start the communal tutorial"</string> <string name="cta_tile_button_to_open_widget_editor" msgid="3871562362382963878">"Customize"</string> <string name="cta_tile_button_to_dismiss" msgid="3377597875997861754">"Dismiss"</string> @@ -454,6 +457,8 @@ <string name="button_text_to_open_settings" msgid="1987729256950941628">"Open settings"</string> <string name="work_mode_off_title" msgid="5794818421357835873">"Unpause work apps?"</string> <string name="work_mode_turn_on" msgid="907813741770247267">"Unpause"</string> + <string name="accessibility_action_label_close_communal_hub" msgid="6790396569621032333">"Close widgets on lock screen"</string> + <string name="accessibility_content_description_for_communal_hub" msgid="1670220840599380118">"Widgets on lock screen"</string> <string name="accessibility_multi_user_switch_switcher" msgid="5330448341251092660">"Switch user"</string> <string name="accessibility_multi_user_list_switcher" msgid="8574105376229857407">"pulldown menu"</string> <string name="guest_exit_guest_dialog_message" msgid="8183450985628495709">"All apps and data in this session will be deleted."</string> diff --git a/packages/SystemUI/res/values-en-rGB/strings.xml b/packages/SystemUI/res/values-en-rGB/strings.xml index d2af8a6977dc..10fe331c8814 100644 --- a/packages/SystemUI/res/values-en-rGB/strings.xml +++ b/packages/SystemUI/res/values-en-rGB/strings.xml @@ -235,7 +235,8 @@ <string name="accessibility_desc_notification_shade" msgid="5355229129428759989">"Notification shade."</string> <string name="accessibility_desc_quick_settings" msgid="4374766941484719179">"Quick settings."</string> <string name="accessibility_desc_qs_notification_shade" msgid="8327226953072700376">"Quick Settings and notification shade."</string> - <string name="accessibility_desc_lock_screen" msgid="5983125095181194887">"Lock screen."</string> + <!-- no translation found for accessibility_desc_lock_screen (409034672704273634) --> + <skip /> <string name="accessibility_desc_work_lock" msgid="4355620395354680575">"Work lock screen"</string> <string name="accessibility_desc_close" msgid="8293708213442107755">"Close"</string> <string name="accessibility_quick_settings_dnd_none_on" msgid="3235552940146035383">"total silence"</string> @@ -376,6 +377,8 @@ <string name="quick_settings_hearing_devices_dialog_title" msgid="9004774017688484981">"Hearing devices"</string> <string name="quick_settings_pair_hearing_devices" msgid="5987105102207447322">"Pair new device"</string> <string name="accessibility_hearing_device_pair_new_device" msgid="8440082580186130090">"Click to pair new device"</string> + <!-- no translation found for hearing_devices_presets_error (350363093458408536) --> + <skip /> <string name="sensor_privacy_start_use_mic_dialog_title" msgid="563796653825944944">"Unblock device microphone?"</string> <string name="sensor_privacy_start_use_camera_dialog_title" msgid="8807639852654305227">"Unblock device camera?"</string> <string name="sensor_privacy_start_use_mic_camera_dialog_title" msgid="4316471859905020023">"Unblock device camera and microphone?"</string> @@ -441,6 +444,8 @@ <string name="keyguard_indication_charging_time_fast" msgid="8390311020603859480">"<xliff:g id="PERCENTAGE">%2$s</xliff:g> • Charging rapidly • Full in <xliff:g id="CHARGING_TIME_LEFT">%1$s</xliff:g>"</string> <string name="keyguard_indication_charging_time_slowly" msgid="301936949731705417">"<xliff:g id="PERCENTAGE">%2$s</xliff:g> • Charging slowly • Full in <xliff:g id="CHARGING_TIME_LEFT">%1$s</xliff:g>"</string> <string name="keyguard_indication_charging_time_dock" msgid="3149328898931741271">"<xliff:g id="PERCENTAGE">%2$s</xliff:g> • Charging • Full in <xliff:g id="CHARGING_TIME_LEFT">%1$s</xliff:g>"</string> + <!-- no translation found for accessibility_action_open_communal_hub (3081702792413787849) --> + <skip /> <string name="communal_tutorial_indicator_text" msgid="4503010353591430123">"Swipe left to start the communal tutorial"</string> <string name="cta_tile_button_to_open_widget_editor" msgid="3871562362382963878">"Customise"</string> <string name="cta_tile_button_to_dismiss" msgid="3377597875997861754">"Dismiss"</string> @@ -459,6 +464,10 @@ <string name="button_text_to_open_settings" msgid="1987729256950941628">"Open settings"</string> <string name="work_mode_off_title" msgid="5794818421357835873">"Unpause work apps?"</string> <string name="work_mode_turn_on" msgid="907813741770247267">"Unpause"</string> + <!-- no translation found for accessibility_action_label_close_communal_hub (6790396569621032333) --> + <skip /> + <!-- no translation found for accessibility_content_description_for_communal_hub (1670220840599380118) --> + <skip /> <string name="accessibility_multi_user_switch_switcher" msgid="5330448341251092660">"Switch user"</string> <string name="accessibility_multi_user_list_switcher" msgid="8574105376229857407">"pulldown menu"</string> <string name="guest_exit_guest_dialog_message" msgid="8183450985628495709">"All apps and data in this session will be deleted."</string> diff --git a/packages/SystemUI/res/values-en-rIN/strings.xml b/packages/SystemUI/res/values-en-rIN/strings.xml index d2af8a6977dc..10fe331c8814 100644 --- a/packages/SystemUI/res/values-en-rIN/strings.xml +++ b/packages/SystemUI/res/values-en-rIN/strings.xml @@ -235,7 +235,8 @@ <string name="accessibility_desc_notification_shade" msgid="5355229129428759989">"Notification shade."</string> <string name="accessibility_desc_quick_settings" msgid="4374766941484719179">"Quick settings."</string> <string name="accessibility_desc_qs_notification_shade" msgid="8327226953072700376">"Quick Settings and notification shade."</string> - <string name="accessibility_desc_lock_screen" msgid="5983125095181194887">"Lock screen."</string> + <!-- no translation found for accessibility_desc_lock_screen (409034672704273634) --> + <skip /> <string name="accessibility_desc_work_lock" msgid="4355620395354680575">"Work lock screen"</string> <string name="accessibility_desc_close" msgid="8293708213442107755">"Close"</string> <string name="accessibility_quick_settings_dnd_none_on" msgid="3235552940146035383">"total silence"</string> @@ -376,6 +377,8 @@ <string name="quick_settings_hearing_devices_dialog_title" msgid="9004774017688484981">"Hearing devices"</string> <string name="quick_settings_pair_hearing_devices" msgid="5987105102207447322">"Pair new device"</string> <string name="accessibility_hearing_device_pair_new_device" msgid="8440082580186130090">"Click to pair new device"</string> + <!-- no translation found for hearing_devices_presets_error (350363093458408536) --> + <skip /> <string name="sensor_privacy_start_use_mic_dialog_title" msgid="563796653825944944">"Unblock device microphone?"</string> <string name="sensor_privacy_start_use_camera_dialog_title" msgid="8807639852654305227">"Unblock device camera?"</string> <string name="sensor_privacy_start_use_mic_camera_dialog_title" msgid="4316471859905020023">"Unblock device camera and microphone?"</string> @@ -441,6 +444,8 @@ <string name="keyguard_indication_charging_time_fast" msgid="8390311020603859480">"<xliff:g id="PERCENTAGE">%2$s</xliff:g> • Charging rapidly • Full in <xliff:g id="CHARGING_TIME_LEFT">%1$s</xliff:g>"</string> <string name="keyguard_indication_charging_time_slowly" msgid="301936949731705417">"<xliff:g id="PERCENTAGE">%2$s</xliff:g> • Charging slowly • Full in <xliff:g id="CHARGING_TIME_LEFT">%1$s</xliff:g>"</string> <string name="keyguard_indication_charging_time_dock" msgid="3149328898931741271">"<xliff:g id="PERCENTAGE">%2$s</xliff:g> • Charging • Full in <xliff:g id="CHARGING_TIME_LEFT">%1$s</xliff:g>"</string> + <!-- no translation found for accessibility_action_open_communal_hub (3081702792413787849) --> + <skip /> <string name="communal_tutorial_indicator_text" msgid="4503010353591430123">"Swipe left to start the communal tutorial"</string> <string name="cta_tile_button_to_open_widget_editor" msgid="3871562362382963878">"Customise"</string> <string name="cta_tile_button_to_dismiss" msgid="3377597875997861754">"Dismiss"</string> @@ -459,6 +464,10 @@ <string name="button_text_to_open_settings" msgid="1987729256950941628">"Open settings"</string> <string name="work_mode_off_title" msgid="5794818421357835873">"Unpause work apps?"</string> <string name="work_mode_turn_on" msgid="907813741770247267">"Unpause"</string> + <!-- no translation found for accessibility_action_label_close_communal_hub (6790396569621032333) --> + <skip /> + <!-- no translation found for accessibility_content_description_for_communal_hub (1670220840599380118) --> + <skip /> <string name="accessibility_multi_user_switch_switcher" msgid="5330448341251092660">"Switch user"</string> <string name="accessibility_multi_user_list_switcher" msgid="8574105376229857407">"pulldown menu"</string> <string name="guest_exit_guest_dialog_message" msgid="8183450985628495709">"All apps and data in this session will be deleted."</string> diff --git a/packages/SystemUI/res/values-en-rXC/strings.xml b/packages/SystemUI/res/values-en-rXC/strings.xml index 77ef52e6e5a8..bd578d74e269 100644 --- a/packages/SystemUI/res/values-en-rXC/strings.xml +++ b/packages/SystemUI/res/values-en-rXC/strings.xml @@ -235,7 +235,7 @@ <string name="accessibility_desc_notification_shade" msgid="5355229129428759989">"Notification shade."</string> <string name="accessibility_desc_quick_settings" msgid="4374766941484719179">"Quick settings."</string> <string name="accessibility_desc_qs_notification_shade" msgid="8327226953072700376">"Quick settings and Notification shade."</string> - <string name="accessibility_desc_lock_screen" msgid="5983125095181194887">"Lock screen."</string> + <string name="accessibility_desc_lock_screen" msgid="409034672704273634">"Lock screen"</string> <string name="accessibility_desc_work_lock" msgid="4355620395354680575">"Work lock screen"</string> <string name="accessibility_desc_close" msgid="8293708213442107755">"Close"</string> <string name="accessibility_quick_settings_dnd_none_on" msgid="3235552940146035383">"total silence"</string> @@ -371,6 +371,8 @@ <string name="quick_settings_hearing_devices_dialog_title" msgid="9004774017688484981">"Hearing devices"</string> <string name="quick_settings_pair_hearing_devices" msgid="5987105102207447322">"Pair new device"</string> <string name="accessibility_hearing_device_pair_new_device" msgid="8440082580186130090">"Click to pair new device"</string> + <!-- no translation found for hearing_devices_presets_error (350363093458408536) --> + <skip /> <string name="sensor_privacy_start_use_mic_dialog_title" msgid="563796653825944944">"Unblock device microphone?"</string> <string name="sensor_privacy_start_use_camera_dialog_title" msgid="8807639852654305227">"Unblock device camera?"</string> <string name="sensor_privacy_start_use_mic_camera_dialog_title" msgid="4316471859905020023">"Unblock device camera and microphone?"</string> @@ -436,6 +438,7 @@ <string name="keyguard_indication_charging_time_fast" msgid="8390311020603859480">"<xliff:g id="PERCENTAGE">%2$s</xliff:g> • Charging rapidly • Full in <xliff:g id="CHARGING_TIME_LEFT">%1$s</xliff:g>"</string> <string name="keyguard_indication_charging_time_slowly" msgid="301936949731705417">"<xliff:g id="PERCENTAGE">%2$s</xliff:g> • Charging slowly • Full in <xliff:g id="CHARGING_TIME_LEFT">%1$s</xliff:g>"</string> <string name="keyguard_indication_charging_time_dock" msgid="3149328898931741271">"<xliff:g id="PERCENTAGE">%2$s</xliff:g> • Charging • Full in <xliff:g id="CHARGING_TIME_LEFT">%1$s</xliff:g>"</string> + <string name="accessibility_action_open_communal_hub" msgid="3081702792413787849">"Widgets on lock screen"</string> <string name="communal_tutorial_indicator_text" msgid="4503010353591430123">"Swipe left to start the communal tutorial"</string> <string name="cta_tile_button_to_open_widget_editor" msgid="3871562362382963878">"Customize"</string> <string name="cta_tile_button_to_dismiss" msgid="3377597875997861754">"Dismiss"</string> @@ -454,6 +457,8 @@ <string name="button_text_to_open_settings" msgid="1987729256950941628">"Open settings"</string> <string name="work_mode_off_title" msgid="5794818421357835873">"Unpause work apps?"</string> <string name="work_mode_turn_on" msgid="907813741770247267">"Unpause"</string> + <string name="accessibility_action_label_close_communal_hub" msgid="6790396569621032333">"Close widgets on lock screen"</string> + <string name="accessibility_content_description_for_communal_hub" msgid="1670220840599380118">"Widgets on lock screen"</string> <string name="accessibility_multi_user_switch_switcher" msgid="5330448341251092660">"Switch user"</string> <string name="accessibility_multi_user_list_switcher" msgid="8574105376229857407">"pulldown menu"</string> <string name="guest_exit_guest_dialog_message" msgid="8183450985628495709">"All apps and data in this session will be deleted."</string> diff --git a/packages/SystemUI/res/values-es-rUS/strings.xml b/packages/SystemUI/res/values-es-rUS/strings.xml index c33213aae5cf..4bdb9512ee21 100644 --- a/packages/SystemUI/res/values-es-rUS/strings.xml +++ b/packages/SystemUI/res/values-es-rUS/strings.xml @@ -235,7 +235,8 @@ <string name="accessibility_desc_notification_shade" msgid="5355229129428759989">"Pantalla de notificaciones"</string> <string name="accessibility_desc_quick_settings" msgid="4374766941484719179">"Configuración rápida"</string> <string name="accessibility_desc_qs_notification_shade" msgid="8327226953072700376">"Configuración rápida y panel de notificaciones."</string> - <string name="accessibility_desc_lock_screen" msgid="5983125095181194887">"Pantalla de bloqueo"</string> + <!-- no translation found for accessibility_desc_lock_screen (409034672704273634) --> + <skip /> <string name="accessibility_desc_work_lock" msgid="4355620395354680575">"Pantalla bloqueada del perfil de trabajo"</string> <string name="accessibility_desc_close" msgid="8293708213442107755">"Cerrar"</string> <string name="accessibility_quick_settings_dnd_none_on" msgid="3235552940146035383">"silencio total"</string> @@ -376,6 +377,8 @@ <string name="quick_settings_hearing_devices_dialog_title" msgid="9004774017688484981">"Dispositivos auditivos"</string> <string name="quick_settings_pair_hearing_devices" msgid="5987105102207447322">"Vincular dispositivo nuevo"</string> <string name="accessibility_hearing_device_pair_new_device" msgid="8440082580186130090">"Haz clic para vincular un dispositivo nuevo"</string> + <!-- no translation found for hearing_devices_presets_error (350363093458408536) --> + <skip /> <string name="sensor_privacy_start_use_mic_dialog_title" msgid="563796653825944944">"¿Quieres desbloquear el micrófono del dispositivo?"</string> <string name="sensor_privacy_start_use_camera_dialog_title" msgid="8807639852654305227">"¿Quieres desbloquear la cámara del dispositivo?"</string> <string name="sensor_privacy_start_use_mic_camera_dialog_title" msgid="4316471859905020023">"¿Quieres desbloquear la cámara y el micrófono del dispositivo?"</string> @@ -441,6 +444,8 @@ <string name="keyguard_indication_charging_time_fast" msgid="8390311020603859480">"<xliff:g id="PERCENTAGE">%2$s</xliff:g> • Carga rápida • Se completará en <xliff:g id="CHARGING_TIME_LEFT">%1$s</xliff:g>"</string> <string name="keyguard_indication_charging_time_slowly" msgid="301936949731705417">"<xliff:g id="PERCENTAGE">%2$s</xliff:g> • Cargando lento • Se completará en <xliff:g id="CHARGING_TIME_LEFT">%1$s</xliff:g>"</string> <string name="keyguard_indication_charging_time_dock" msgid="3149328898931741271">"<xliff:g id="PERCENTAGE">%2$s</xliff:g> • Cargando • Se completará en <xliff:g id="CHARGING_TIME_LEFT">%1$s</xliff:g>"</string> + <!-- no translation found for accessibility_action_open_communal_hub (3081702792413787849) --> + <skip /> <string name="communal_tutorial_indicator_text" msgid="4503010353591430123">"Desliza el dedo a la izquierda para iniciar el instructivo comunal"</string> <string name="cta_tile_button_to_open_widget_editor" msgid="3871562362382963878">"Personalizar"</string> <string name="cta_tile_button_to_dismiss" msgid="3377597875997861754">"Descartar"</string> @@ -459,6 +464,10 @@ <string name="button_text_to_open_settings" msgid="1987729256950941628">"Abrir configuración"</string> <string name="work_mode_off_title" msgid="5794818421357835873">"¿Reanudar apps de trabajo?"</string> <string name="work_mode_turn_on" msgid="907813741770247267">"Reanudar"</string> + <!-- no translation found for accessibility_action_label_close_communal_hub (6790396569621032333) --> + <skip /> + <!-- no translation found for accessibility_content_description_for_communal_hub (1670220840599380118) --> + <skip /> <string name="accessibility_multi_user_switch_switcher" msgid="5330448341251092660">"Cambiar usuario"</string> <string name="accessibility_multi_user_list_switcher" msgid="8574105376229857407">"menú expandible"</string> <string name="guest_exit_guest_dialog_message" msgid="8183450985628495709">"Se eliminarán las aplicaciones y los datos de esta sesión."</string> @@ -1006,7 +1015,7 @@ <string name="accessibility_floating_button_action_move_top_right" msgid="6106225581993479711">"Mover arriba a la derecha"</string> <string name="accessibility_floating_button_action_move_bottom_left" msgid="8063394111137429725">"Mover abajo a la izquierda"</string> <string name="accessibility_floating_button_action_move_bottom_right" msgid="6196904373227440500">"Mover abajo a la derecha"</string> - <string name="accessibility_floating_button_action_move_to_edge_and_hide_to_half" msgid="662401168245782658">"Mover fuera de borde y ocultar"</string> + <string name="accessibility_floating_button_action_move_to_edge_and_hide_to_half" msgid="662401168245782658">"Mover al borde y ocultar"</string> <string name="accessibility_floating_button_action_move_out_edge_and_show" msgid="8354760891651663326">"Mover fuera de borde y mostrar"</string> <string name="accessibility_floating_button_action_remove_menu" msgid="6730432848162552135">"Quitar"</string> <string name="accessibility_floating_button_action_double_tap_to_toggle" msgid="7976492639670692037">"activar o desactivar"</string> diff --git a/packages/SystemUI/res/values-es/strings.xml b/packages/SystemUI/res/values-es/strings.xml index 1dc93fde85be..6b4f37084507 100644 --- a/packages/SystemUI/res/values-es/strings.xml +++ b/packages/SystemUI/res/values-es/strings.xml @@ -235,7 +235,8 @@ <string name="accessibility_desc_notification_shade" msgid="5355229129428759989">"Pantalla de notificaciones"</string> <string name="accessibility_desc_quick_settings" msgid="4374766941484719179">"Ajustes rápidos"</string> <string name="accessibility_desc_qs_notification_shade" msgid="8327226953072700376">"Ajustes rápidos y pantalla de notificaciones."</string> - <string name="accessibility_desc_lock_screen" msgid="5983125095181194887">"Pantalla de bloqueo."</string> + <!-- no translation found for accessibility_desc_lock_screen (409034672704273634) --> + <skip /> <string name="accessibility_desc_work_lock" msgid="4355620395354680575">"Pantalla de bloqueo para el perfil de trabajo"</string> <string name="accessibility_desc_close" msgid="8293708213442107755">"Cerrar"</string> <string name="accessibility_quick_settings_dnd_none_on" msgid="3235552940146035383">"silencio total"</string> @@ -376,6 +377,8 @@ <string name="quick_settings_hearing_devices_dialog_title" msgid="9004774017688484981">"Audífonos"</string> <string name="quick_settings_pair_hearing_devices" msgid="5987105102207447322">"Emparejar nuevo dispositivo"</string> <string name="accessibility_hearing_device_pair_new_device" msgid="8440082580186130090">"Haz clic para emparejar un nuevo dispositivo"</string> + <!-- no translation found for hearing_devices_presets_error (350363093458408536) --> + <skip /> <string name="sensor_privacy_start_use_mic_dialog_title" msgid="563796653825944944">"¿Desbloquear el micrófono del dispositivo?"</string> <string name="sensor_privacy_start_use_camera_dialog_title" msgid="8807639852654305227">"¿Desbloquear la cámara del dispositivo?"</string> <string name="sensor_privacy_start_use_mic_camera_dialog_title" msgid="4316471859905020023">"¿Desbloquear la cámara y el micrófono del dispositivo?"</string> @@ -441,6 +444,8 @@ <string name="keyguard_indication_charging_time_fast" msgid="8390311020603859480">"<xliff:g id="PERCENTAGE">%2$s</xliff:g> • Carga rápida • En <xliff:g id="CHARGING_TIME_LEFT">%1$s</xliff:g> terminará de cargarse"</string> <string name="keyguard_indication_charging_time_slowly" msgid="301936949731705417">"<xliff:g id="PERCENTAGE">%2$s</xliff:g> • Carga lenta • En <xliff:g id="CHARGING_TIME_LEFT">%1$s</xliff:g> terminará de cargarse"</string> <string name="keyguard_indication_charging_time_dock" msgid="3149328898931741271">"<xliff:g id="PERCENTAGE">%2$s</xliff:g> • Cargando • Carga completa en <xliff:g id="CHARGING_TIME_LEFT">%1$s</xliff:g>"</string> + <!-- no translation found for accessibility_action_open_communal_hub (3081702792413787849) --> + <skip /> <string name="communal_tutorial_indicator_text" msgid="4503010353591430123">"Desliza hacia la izquierda para iniciar el tutorial de la comunidad"</string> <string name="cta_tile_button_to_open_widget_editor" msgid="3871562362382963878">"Personalizar"</string> <string name="cta_tile_button_to_dismiss" msgid="3377597875997861754">"Cerrar"</string> @@ -459,6 +464,10 @@ <string name="button_text_to_open_settings" msgid="1987729256950941628">"Abrir ajustes"</string> <string name="work_mode_off_title" msgid="5794818421357835873">"¿Reactivar apps de trabajo?"</string> <string name="work_mode_turn_on" msgid="907813741770247267">"Reactivar"</string> + <!-- no translation found for accessibility_action_label_close_communal_hub (6790396569621032333) --> + <skip /> + <!-- no translation found for accessibility_content_description_for_communal_hub (1670220840599380118) --> + <skip /> <string name="accessibility_multi_user_switch_switcher" msgid="5330448341251092660">"Cambiar de usuario"</string> <string name="accessibility_multi_user_list_switcher" msgid="8574105376229857407">"menú desplegable"</string> <string name="guest_exit_guest_dialog_message" msgid="8183450985628495709">"Se eliminarán todas las aplicaciones y datos de esta sesión."</string> diff --git a/packages/SystemUI/res/values-et/strings.xml b/packages/SystemUI/res/values-et/strings.xml index fea407db4682..ab57fca703db 100644 --- a/packages/SystemUI/res/values-et/strings.xml +++ b/packages/SystemUI/res/values-et/strings.xml @@ -235,7 +235,8 @@ <string name="accessibility_desc_notification_shade" msgid="5355229129428759989">"Märguande vari."</string> <string name="accessibility_desc_quick_settings" msgid="4374766941484719179">"Kiirseaded."</string> <string name="accessibility_desc_qs_notification_shade" msgid="8327226953072700376">"Kiirseaded ja märguandeala."</string> - <string name="accessibility_desc_lock_screen" msgid="5983125095181194887">"Kuva lukustamine."</string> + <!-- no translation found for accessibility_desc_lock_screen (409034672704273634) --> + <skip /> <string name="accessibility_desc_work_lock" msgid="4355620395354680575">"Töö lukustuskuva"</string> <string name="accessibility_desc_close" msgid="8293708213442107755">"Sulgemine"</string> <string name="accessibility_quick_settings_dnd_none_on" msgid="3235552940146035383">"täielik vaikus"</string> @@ -376,6 +377,8 @@ <string name="quick_settings_hearing_devices_dialog_title" msgid="9004774017688484981">"Kuuldeseadmed"</string> <string name="quick_settings_pair_hearing_devices" msgid="5987105102207447322">"Uue seadme sidumine"</string> <string name="accessibility_hearing_device_pair_new_device" msgid="8440082580186130090">"Uue seadme sidumiseks klõpsake"</string> + <!-- no translation found for hearing_devices_presets_error (350363093458408536) --> + <skip /> <string name="sensor_privacy_start_use_mic_dialog_title" msgid="563796653825944944">"Kas tühistada seadme mikrofoni blokeerimine?"</string> <string name="sensor_privacy_start_use_camera_dialog_title" msgid="8807639852654305227">"Kas tühistada seadme kaamera blokeerimine?"</string> <string name="sensor_privacy_start_use_mic_camera_dialog_title" msgid="4316471859905020023">"Kas tühistada seadme kaamera ja mikrofoni blokeerimine?"</string> @@ -441,6 +444,8 @@ <string name="keyguard_indication_charging_time_fast" msgid="8390311020603859480">"<xliff:g id="PERCENTAGE">%2$s</xliff:g> • Kiirlaadimine • Täis <xliff:g id="CHARGING_TIME_LEFT">%1$s</xliff:g> pärast"</string> <string name="keyguard_indication_charging_time_slowly" msgid="301936949731705417">"<xliff:g id="PERCENTAGE">%2$s</xliff:g> • Aeglane laadimine • Täis <xliff:g id="CHARGING_TIME_LEFT">%1$s</xliff:g> pärast"</string> <string name="keyguard_indication_charging_time_dock" msgid="3149328898931741271">"<xliff:g id="PERCENTAGE">%2$s</xliff:g> • Laadimine • Täis <xliff:g id="CHARGING_TIME_LEFT">%1$s</xliff:g> pärast"</string> + <!-- no translation found for accessibility_action_open_communal_hub (3081702792413787849) --> + <skip /> <string name="communal_tutorial_indicator_text" msgid="4503010353591430123">"Ühise õpetuse käivitamiseks pühkige vasakule"</string> <string name="cta_tile_button_to_open_widget_editor" msgid="3871562362382963878">"Kohandage"</string> <string name="cta_tile_button_to_dismiss" msgid="3377597875997861754">"Loobuge"</string> @@ -459,6 +464,10 @@ <string name="button_text_to_open_settings" msgid="1987729256950941628">"Ava seaded"</string> <string name="work_mode_off_title" msgid="5794818421357835873">"Kas lõpetada töörakenduste peatamine?"</string> <string name="work_mode_turn_on" msgid="907813741770247267">"Lõpeta peatamine"</string> + <!-- no translation found for accessibility_action_label_close_communal_hub (6790396569621032333) --> + <skip /> + <!-- no translation found for accessibility_content_description_for_communal_hub (1670220840599380118) --> + <skip /> <string name="accessibility_multi_user_switch_switcher" msgid="5330448341251092660">"Kasutaja vahetamine"</string> <string name="accessibility_multi_user_list_switcher" msgid="8574105376229857407">"rippmenüü"</string> <string name="guest_exit_guest_dialog_message" msgid="8183450985628495709">"Seansi kõik rakendused ja andmed kustutatakse."</string> @@ -1006,7 +1015,7 @@ <string name="accessibility_floating_button_action_move_top_right" msgid="6106225581993479711">"Teisalda üles paremale"</string> <string name="accessibility_floating_button_action_move_bottom_left" msgid="8063394111137429725">"Teisalda alla vasakule"</string> <string name="accessibility_floating_button_action_move_bottom_right" msgid="6196904373227440500">"Teisalda alla paremale"</string> - <string name="accessibility_floating_button_action_move_to_edge_and_hide_to_half" msgid="662401168245782658">"Teisalda serva ja kuva"</string> + <string name="accessibility_floating_button_action_move_to_edge_and_hide_to_half" msgid="662401168245782658">"Teisalda serva ja peida"</string> <string name="accessibility_floating_button_action_move_out_edge_and_show" msgid="8354760891651663326">"Teisalda servast eemale ja kuva"</string> <string name="accessibility_floating_button_action_remove_menu" msgid="6730432848162552135">"Eemalda"</string> <string name="accessibility_floating_button_action_double_tap_to_toggle" msgid="7976492639670692037">"lülita"</string> diff --git a/packages/SystemUI/res/values-eu/strings.xml b/packages/SystemUI/res/values-eu/strings.xml index 41de1d434c88..496c40b16063 100644 --- a/packages/SystemUI/res/values-eu/strings.xml +++ b/packages/SystemUI/res/values-eu/strings.xml @@ -235,7 +235,8 @@ <string name="accessibility_desc_notification_shade" msgid="5355229129428759989">"Jakinarazpenen panela."</string> <string name="accessibility_desc_quick_settings" msgid="4374766941484719179">"Ezarpen bizkorrak."</string> <string name="accessibility_desc_qs_notification_shade" msgid="8327226953072700376">"Ezarpen bizkorrak eta jakinarazpenen panela."</string> - <string name="accessibility_desc_lock_screen" msgid="5983125095181194887">"Pantaila blokeatzeko aukera."</string> + <!-- no translation found for accessibility_desc_lock_screen (409034672704273634) --> + <skip /> <string name="accessibility_desc_work_lock" msgid="4355620395354680575">"Laneko pantaila blokeatua"</string> <string name="accessibility_desc_close" msgid="8293708213442107755">"Itxi"</string> <string name="accessibility_quick_settings_dnd_none_on" msgid="3235552940146035383">"isiltasun osoa"</string> @@ -376,6 +377,8 @@ <string name="quick_settings_hearing_devices_dialog_title" msgid="9004774017688484981">"Entzumen-gailuak"</string> <string name="quick_settings_pair_hearing_devices" msgid="5987105102207447322">"Parekatu beste gailu bat"</string> <string name="accessibility_hearing_device_pair_new_device" msgid="8440082580186130090">"Egin klik beste gailu bat parekatzeko"</string> + <!-- no translation found for hearing_devices_presets_error (350363093458408536) --> + <skip /> <string name="sensor_privacy_start_use_mic_dialog_title" msgid="563796653825944944">"Gailuaren mikrofonoa desblokeatu nahi duzu?"</string> <string name="sensor_privacy_start_use_camera_dialog_title" msgid="8807639852654305227">"Gailuaren kamera desblokeatu nahi duzu?"</string> <string name="sensor_privacy_start_use_mic_camera_dialog_title" msgid="4316471859905020023">"Gailuaren kamera eta mikrofonoa desblokeatu nahi dituzu?"</string> @@ -441,6 +444,8 @@ <string name="keyguard_indication_charging_time_fast" msgid="8390311020603859480">"<xliff:g id="PERCENTAGE">%2$s</xliff:g> • Bizkor kargatzen • <xliff:g id="CHARGING_TIME_LEFT">%1$s</xliff:g> guztiz kargatu arte"</string> <string name="keyguard_indication_charging_time_slowly" msgid="301936949731705417">"<xliff:g id="PERCENTAGE">%2$s</xliff:g> • Mantso kargatzen • <xliff:g id="CHARGING_TIME_LEFT">%1$s</xliff:g> guztiz kargatu arte"</string> <string name="keyguard_indication_charging_time_dock" msgid="3149328898931741271">"<xliff:g id="PERCENTAGE">%2$s</xliff:g> • Kargatzen • <xliff:g id="CHARGING_TIME_LEFT">%1$s</xliff:g> guztiz kargatu arte"</string> + <!-- no translation found for accessibility_action_open_communal_hub (3081702792413787849) --> + <skip /> <string name="communal_tutorial_indicator_text" msgid="4503010353591430123">"Tutorial komuna hasteko, pasatu hatza ezkerrera"</string> <string name="cta_tile_button_to_open_widget_editor" msgid="3871562362382963878">"Pertsonalizatu"</string> <string name="cta_tile_button_to_dismiss" msgid="3377597875997861754">"Baztertu"</string> @@ -459,6 +464,10 @@ <string name="button_text_to_open_settings" msgid="1987729256950941628">"Ireki ezarpenak"</string> <string name="work_mode_off_title" msgid="5794818421357835873">"Laneko aplikazioak berraktibatu?"</string> <string name="work_mode_turn_on" msgid="907813741770247267">"Berraktibatu"</string> + <!-- no translation found for accessibility_action_label_close_communal_hub (6790396569621032333) --> + <skip /> + <!-- no translation found for accessibility_content_description_for_communal_hub (1670220840599380118) --> + <skip /> <string name="accessibility_multi_user_switch_switcher" msgid="5330448341251092660">"Aldatu erabiltzailea"</string> <string name="accessibility_multi_user_list_switcher" msgid="8574105376229857407">"zabaldu menua"</string> <string name="guest_exit_guest_dialog_message" msgid="8183450985628495709">"Saioko aplikazio eta datu guztiak ezabatuko dira."</string> diff --git a/packages/SystemUI/res/values-fa/strings.xml b/packages/SystemUI/res/values-fa/strings.xml index 8e72450809a4..d8f7f218dbd9 100644 --- a/packages/SystemUI/res/values-fa/strings.xml +++ b/packages/SystemUI/res/values-fa/strings.xml @@ -235,7 +235,8 @@ <string name="accessibility_desc_notification_shade" msgid="5355229129428759989">"مجموعه اعلان."</string> <string name="accessibility_desc_quick_settings" msgid="4374766941484719179">"تنظیمات سریع."</string> <string name="accessibility_desc_qs_notification_shade" msgid="8327226953072700376">"تنظیمات فوری و کشوی اعلانات."</string> - <string name="accessibility_desc_lock_screen" msgid="5983125095181194887">"صفحه قفل."</string> + <!-- no translation found for accessibility_desc_lock_screen (409034672704273634) --> + <skip /> <string name="accessibility_desc_work_lock" msgid="4355620395354680575">"صفحه قفل کاری"</string> <string name="accessibility_desc_close" msgid="8293708213442107755">"بستن"</string> <string name="accessibility_quick_settings_dnd_none_on" msgid="3235552940146035383">"سکوت کامل"</string> @@ -376,6 +377,8 @@ <string name="quick_settings_hearing_devices_dialog_title" msgid="9004774017688484981">"سمعک"</string> <string name="quick_settings_pair_hearing_devices" msgid="5987105102207447322">"جفت کردن دستگاه جدید"</string> <string name="accessibility_hearing_device_pair_new_device" msgid="8440082580186130090">"برای جفت کردن دستگاه جدید، کلیک کنید"</string> + <!-- no translation found for hearing_devices_presets_error (350363093458408536) --> + <skip /> <string name="sensor_privacy_start_use_mic_dialog_title" msgid="563796653825944944">"میکروفون دستگاه لغو انسداد شود؟"</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> @@ -441,6 +444,8 @@ <string name="keyguard_indication_charging_time_fast" msgid="8390311020603859480">"<xliff:g id="PERCENTAGE">%2$s</xliff:g> • درحال شارژ کردن سریع • <xliff:g id="CHARGING_TIME_LEFT">%1$s</xliff:g> تا شارژ کامل"</string> <string name="keyguard_indication_charging_time_slowly" msgid="301936949731705417">"<xliff:g id="PERCENTAGE">%2$s</xliff:g> • درحال شارژ کردن آهسته • <xliff:g id="CHARGING_TIME_LEFT">%1$s</xliff:g> تا شارژ کامل"</string> <string name="keyguard_indication_charging_time_dock" msgid="3149328898931741271">"<xliff:g id="PERCENTAGE">%2$s</xliff:g> • درحال شارژ شدن • <xliff:g id="CHARGING_TIME_LEFT">%1$s</xliff:g> تا شارژ کامل"</string> + <!-- no translation found for accessibility_action_open_communal_hub (3081702792413787849) --> + <skip /> <string name="communal_tutorial_indicator_text" msgid="4503010353591430123">"برای شروع آموزش گامبهگام عمومی، تند بهچپ بکشید"</string> <string name="cta_tile_button_to_open_widget_editor" msgid="3871562362382963878">"سفارشیسازی"</string> <string name="cta_tile_button_to_dismiss" msgid="3377597875997861754">"بستن"</string> @@ -459,6 +464,10 @@ <string name="button_text_to_open_settings" msgid="1987729256950941628">"باز کردن تنظیمات"</string> <string name="work_mode_off_title" msgid="5794818421357835873">"مکث برنامههای کاری لغو شود؟"</string> <string name="work_mode_turn_on" msgid="907813741770247267">"لغو مکث"</string> + <!-- no translation found for accessibility_action_label_close_communal_hub (6790396569621032333) --> + <skip /> + <!-- no translation found for accessibility_content_description_for_communal_hub (1670220840599380118) --> + <skip /> <string name="accessibility_multi_user_switch_switcher" msgid="5330448341251092660">"تغییر کاربر"</string> <string name="accessibility_multi_user_list_switcher" msgid="8574105376229857407">"منوی پایینپر"</string> <string name="guest_exit_guest_dialog_message" msgid="8183450985628495709">"همه برنامهها و دادههای این جلسه حذف خواهد شد."</string> diff --git a/packages/SystemUI/res/values-fi/strings.xml b/packages/SystemUI/res/values-fi/strings.xml index 2935d2e47ce9..243384fe729e 100644 --- a/packages/SystemUI/res/values-fi/strings.xml +++ b/packages/SystemUI/res/values-fi/strings.xml @@ -235,7 +235,8 @@ <string name="accessibility_desc_notification_shade" msgid="5355229129428759989">"Ilmoitusalue."</string> <string name="accessibility_desc_quick_settings" msgid="4374766941484719179">"Pika-asetukset."</string> <string name="accessibility_desc_qs_notification_shade" msgid="8327226953072700376">"Pika-asetukset ja ilmoitusalue"</string> - <string name="accessibility_desc_lock_screen" msgid="5983125095181194887">"Lukitse näyttö."</string> + <!-- no translation found for accessibility_desc_lock_screen (409034672704273634) --> + <skip /> <string name="accessibility_desc_work_lock" msgid="4355620395354680575">"Työlukitusnäyttö"</string> <string name="accessibility_desc_close" msgid="8293708213442107755">"Sulje"</string> <string name="accessibility_quick_settings_dnd_none_on" msgid="3235552940146035383">"hiljennä kaikki"</string> @@ -376,6 +377,8 @@ <string name="quick_settings_hearing_devices_dialog_title" msgid="9004774017688484981">"Kuulolaitteet"</string> <string name="quick_settings_pair_hearing_devices" msgid="5987105102207447322">"Muodosta uusi laitepari"</string> <string name="accessibility_hearing_device_pair_new_device" msgid="8440082580186130090">"Muodosta uusi laitepari klikkaamalla"</string> + <!-- no translation found for hearing_devices_presets_error (350363093458408536) --> + <skip /> <string name="sensor_privacy_start_use_mic_dialog_title" msgid="563796653825944944">"Kumotaanko laitteen mikrofonin esto?"</string> <string name="sensor_privacy_start_use_camera_dialog_title" msgid="8807639852654305227">"Kumotaanko laitteen kameran esto?"</string> <string name="sensor_privacy_start_use_mic_camera_dialog_title" msgid="4316471859905020023">"Kumotaanko laitteen kameran ja mikrofonin esto?"</string> @@ -441,6 +444,8 @@ <string name="keyguard_indication_charging_time_fast" msgid="8390311020603859480">"<xliff:g id="PERCENTAGE">%2$s</xliff:g> • Latautuu nopeasti • Täynnä <xliff:g id="CHARGING_TIME_LEFT">%1$s</xliff:g> päästä"</string> <string name="keyguard_indication_charging_time_slowly" msgid="301936949731705417">"<xliff:g id="PERCENTAGE">%2$s</xliff:g> • Latautuu hitaasti • Täynnä <xliff:g id="CHARGING_TIME_LEFT">%1$s</xliff:g> päästä"</string> <string name="keyguard_indication_charging_time_dock" msgid="3149328898931741271">"<xliff:g id="PERCENTAGE">%2$s</xliff:g> • Latautuu • Täynnä <xliff:g id="CHARGING_TIME_LEFT">%1$s</xliff:g> päästä"</string> + <!-- no translation found for accessibility_action_open_communal_hub (3081702792413787849) --> + <skip /> <string name="communal_tutorial_indicator_text" msgid="4503010353591430123">"Aloita yhteisöesittely pyyhkäisemällä vasemmalle"</string> <string name="cta_tile_button_to_open_widget_editor" msgid="3871562362382963878">"Muokkaa"</string> <string name="cta_tile_button_to_dismiss" msgid="3377597875997861754">"Hylkää"</string> @@ -459,6 +464,10 @@ <string name="button_text_to_open_settings" msgid="1987729256950941628">"Avaa asetukset"</string> <string name="work_mode_off_title" msgid="5794818421357835873">"Laita työsovellukset päälle?"</string> <string name="work_mode_turn_on" msgid="907813741770247267">"Laita päälle"</string> + <!-- no translation found for accessibility_action_label_close_communal_hub (6790396569621032333) --> + <skip /> + <!-- no translation found for accessibility_content_description_for_communal_hub (1670220840599380118) --> + <skip /> <string name="accessibility_multi_user_switch_switcher" msgid="5330448341251092660">"Vaihda käyttäjää"</string> <string name="accessibility_multi_user_list_switcher" msgid="8574105376229857407">"alasvetovalikko"</string> <string name="guest_exit_guest_dialog_message" msgid="8183450985628495709">"Kaikki sovellukset ja tämän istunnon tiedot poistetaan."</string> diff --git a/packages/SystemUI/res/values-fr-rCA/strings.xml b/packages/SystemUI/res/values-fr-rCA/strings.xml index bd53d8509b86..6bd97552811d 100644 --- a/packages/SystemUI/res/values-fr-rCA/strings.xml +++ b/packages/SystemUI/res/values-fr-rCA/strings.xml @@ -235,7 +235,8 @@ <string name="accessibility_desc_notification_shade" msgid="5355229129428759989">"Volet des notifications"</string> <string name="accessibility_desc_quick_settings" msgid="4374766941484719179">"Paramètres rapides"</string> <string name="accessibility_desc_qs_notification_shade" msgid="8327226953072700376">"Paramètres rapides et volet des notifications."</string> - <string name="accessibility_desc_lock_screen" msgid="5983125095181194887">"Écran de verrouillage"</string> + <!-- no translation found for accessibility_desc_lock_screen (409034672704273634) --> + <skip /> <string name="accessibility_desc_work_lock" msgid="4355620395354680575">"Verrouillage de l\'écran du profil professionnel"</string> <string name="accessibility_desc_close" msgid="8293708213442107755">"Fermer"</string> <string name="accessibility_quick_settings_dnd_none_on" msgid="3235552940146035383">"aucune interruption"</string> @@ -270,20 +271,15 @@ <string name="see_all_bluetooth_devices" msgid="1761596816620200433">"Tout afficher"</string> <string name="turn_on_bluetooth" msgid="5681370462180289071">"Utiliser le Bluetooth"</string> <string name="quick_settings_bluetooth_device_connected" msgid="7884777006729260996">"Connecté"</string> - <!-- no translation found for quick_settings_bluetooth_device_audio_sharing (1496358082943301670) --> - <skip /> + <string name="quick_settings_bluetooth_device_audio_sharing" msgid="1496358082943301670">"Partage audio"</string> <string name="quick_settings_bluetooth_device_saved" msgid="7549938728928069477">"Enregistré"</string> <string name="accessibility_quick_settings_bluetooth_device_tap_to_disconnect" msgid="415980329093277342">"Déconnecter"</string> <string name="accessibility_quick_settings_bluetooth_device_tap_to_activate" msgid="3724301751036877403">"Activer"</string> <string name="turn_on_bluetooth_auto_tomorrow" msgid="414836329962473906">"Activer le Bluetooth automatiquement demain"</string> - <!-- no translation found for turn_on_bluetooth_auto_info_disabled (682984290339848844) --> - <skip /> - <!-- no translation found for turn_on_bluetooth_auto_info_enabled (7440944034584560279) --> - <skip /> - <!-- no translation found for quick_settings_bluetooth_audio_sharing_button (4499275822759907822) --> - <skip /> - <!-- no translation found for quick_settings_bluetooth_audio_sharing_button_sharing (8626191139359072540) --> - <skip /> + <string name="turn_on_bluetooth_auto_info_disabled" msgid="682984290339848844">"Les fonctionnalités comme Partage rapide et Localiser mon appareil utilisent le Bluetooth"</string> + <string name="turn_on_bluetooth_auto_info_enabled" msgid="7440944034584560279">"Le Bluetooth s\'activera demain matin"</string> + <string name="quick_settings_bluetooth_audio_sharing_button" msgid="4499275822759907822">"Partage audio"</string> + <string name="quick_settings_bluetooth_audio_sharing_button_sharing" msgid="8626191139359072540">"Partage de l\'audio en cours…"</string> <string name="quick_settings_bluetooth_secondary_label_battery_level" msgid="4182034939479344093">"Pile : <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE">%s</xliff:g>"</string> <string name="quick_settings_bluetooth_secondary_label_audio" msgid="780333390310051161">"Audio"</string> <string name="quick_settings_bluetooth_secondary_label_headset" msgid="2332093067553000852">"Écouteurs"</string> @@ -376,6 +372,8 @@ <string name="quick_settings_hearing_devices_dialog_title" msgid="9004774017688484981">"Appareils auditifs"</string> <string name="quick_settings_pair_hearing_devices" msgid="5987105102207447322">"Associer un nouvel appareil"</string> <string name="accessibility_hearing_device_pair_new_device" msgid="8440082580186130090">"Cliquez ici pour associer un nouvel appareil"</string> + <!-- no translation found for hearing_devices_presets_error (350363093458408536) --> + <skip /> <string name="sensor_privacy_start_use_mic_dialog_title" msgid="563796653825944944">"Débloquer le microphone de l\'appareil?"</string> <string name="sensor_privacy_start_use_camera_dialog_title" msgid="8807639852654305227">"Débloquer l\'appareil photo de l\'appareil?"</string> <string name="sensor_privacy_start_use_mic_camera_dialog_title" msgid="4316471859905020023">"Débloquer l\'appareil photo et le microphone?"</string> @@ -441,6 +439,8 @@ <string name="keyguard_indication_charging_time_fast" msgid="8390311020603859480">"En recharge rapide : <xliff:g id="PERCENTAGE">%2$s</xliff:g> • Terminée dans <xliff:g id="CHARGING_TIME_LEFT">%1$s</xliff:g>"</string> <string name="keyguard_indication_charging_time_slowly" msgid="301936949731705417">"En recharge lente : <xliff:g id="PERCENTAGE">%2$s</xliff:g> • Terminée <xliff:g id="CHARGING_TIME_LEFT">%1$s</xliff:g>"</string> <string name="keyguard_indication_charging_time_dock" msgid="3149328898931741271">"<xliff:g id="PERCENTAGE">%2$s</xliff:g> • Recharge en cours… • Se terminera dans <xliff:g id="CHARGING_TIME_LEFT">%1$s</xliff:g>"</string> + <!-- no translation found for accessibility_action_open_communal_hub (3081702792413787849) --> + <skip /> <string name="communal_tutorial_indicator_text" msgid="4503010353591430123">"Balayer l\'écran vers la gauche pour démarrer le tutoriel communautaire"</string> <string name="cta_tile_button_to_open_widget_editor" msgid="3871562362382963878">"Personnaliser"</string> <string name="cta_tile_button_to_dismiss" msgid="3377597875997861754">"Fermer"</string> @@ -459,6 +459,10 @@ <string name="button_text_to_open_settings" msgid="1987729256950941628">"Ouvrir les paramètres"</string> <string name="work_mode_off_title" msgid="5794818421357835873">"Réactiver les applis pros?"</string> <string name="work_mode_turn_on" msgid="907813741770247267">"Réactiver"</string> + <!-- no translation found for accessibility_action_label_close_communal_hub (6790396569621032333) --> + <skip /> + <!-- no translation found for accessibility_content_description_for_communal_hub (1670220840599380118) --> + <skip /> <string name="accessibility_multi_user_switch_switcher" msgid="5330448341251092660">"Changer d\'utilisateur"</string> <string name="accessibility_multi_user_list_switcher" msgid="8574105376229857407">"menu déroulant"</string> <string name="guest_exit_guest_dialog_message" msgid="8183450985628495709">"Toutes les applications et les données de cette session seront supprimées."</string> diff --git a/packages/SystemUI/res/values-fr/strings.xml b/packages/SystemUI/res/values-fr/strings.xml index 109e76775aa5..45a11b57a02e 100644 --- a/packages/SystemUI/res/values-fr/strings.xml +++ b/packages/SystemUI/res/values-fr/strings.xml @@ -235,7 +235,8 @@ <string name="accessibility_desc_notification_shade" msgid="5355229129428759989">"Volet des notifications"</string> <string name="accessibility_desc_quick_settings" msgid="4374766941484719179">"Réglages rapides"</string> <string name="accessibility_desc_qs_notification_shade" msgid="8327226953072700376">"Réglages rapides et volet des notifications."</string> - <string name="accessibility_desc_lock_screen" msgid="5983125095181194887">"Écran de verrouillage"</string> + <!-- no translation found for accessibility_desc_lock_screen (409034672704273634) --> + <skip /> <string name="accessibility_desc_work_lock" msgid="4355620395354680575">"Écran de verrouillage du profil professionnel"</string> <string name="accessibility_desc_close" msgid="8293708213442107755">"Fermer"</string> <string name="accessibility_quick_settings_dnd_none_on" msgid="3235552940146035383">"aucune interruption"</string> @@ -270,20 +271,15 @@ <string name="see_all_bluetooth_devices" msgid="1761596816620200433">"Tout afficher"</string> <string name="turn_on_bluetooth" msgid="5681370462180289071">"Utiliser le Bluetooth"</string> <string name="quick_settings_bluetooth_device_connected" msgid="7884777006729260996">"Connecté"</string> - <!-- no translation found for quick_settings_bluetooth_device_audio_sharing (1496358082943301670) --> - <skip /> + <string name="quick_settings_bluetooth_device_audio_sharing" msgid="1496358082943301670">"Partage audio"</string> <string name="quick_settings_bluetooth_device_saved" msgid="7549938728928069477">"Enregistré"</string> <string name="accessibility_quick_settings_bluetooth_device_tap_to_disconnect" msgid="415980329093277342">"dissocier"</string> <string name="accessibility_quick_settings_bluetooth_device_tap_to_activate" msgid="3724301751036877403">"activer"</string> <string name="turn_on_bluetooth_auto_tomorrow" msgid="414836329962473906">"Réactiver automatiquement demain"</string> - <!-- no translation found for turn_on_bluetooth_auto_info_disabled (682984290339848844) --> - <skip /> - <!-- no translation found for turn_on_bluetooth_auto_info_enabled (7440944034584560279) --> - <skip /> - <!-- no translation found for quick_settings_bluetooth_audio_sharing_button (4499275822759907822) --> - <skip /> - <!-- no translation found for quick_settings_bluetooth_audio_sharing_button_sharing (8626191139359072540) --> - <skip /> + <string name="turn_on_bluetooth_auto_info_disabled" msgid="682984290339848844">"Certaines fonctionnalités, telles que Quick Share et Localiser mon appareil, utilisent le Bluetooth"</string> + <string name="turn_on_bluetooth_auto_info_enabled" msgid="7440944034584560279">"Le Bluetooth sera activé demain matin"</string> + <string name="quick_settings_bluetooth_audio_sharing_button" msgid="4499275822759907822">"Partage audio"</string> + <string name="quick_settings_bluetooth_audio_sharing_button_sharing" msgid="8626191139359072540">"Audio partagé"</string> <string name="quick_settings_bluetooth_secondary_label_battery_level" msgid="4182034939479344093">"<xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE">%s</xliff:g> de batterie"</string> <string name="quick_settings_bluetooth_secondary_label_audio" msgid="780333390310051161">"Audio"</string> <string name="quick_settings_bluetooth_secondary_label_headset" msgid="2332093067553000852">"Casque"</string> @@ -376,6 +372,8 @@ <string name="quick_settings_hearing_devices_dialog_title" msgid="9004774017688484981">"Appareils auditifs"</string> <string name="quick_settings_pair_hearing_devices" msgid="5987105102207447322">"Associer un nouvel appareil"</string> <string name="accessibility_hearing_device_pair_new_device" msgid="8440082580186130090">"Cliquer pour associer un nouvel appareil"</string> + <!-- no translation found for hearing_devices_presets_error (350363093458408536) --> + <skip /> <string name="sensor_privacy_start_use_mic_dialog_title" msgid="563796653825944944">"Débloquer le micro de l\'appareil ?"</string> <string name="sensor_privacy_start_use_camera_dialog_title" msgid="8807639852654305227">"Débloquer la caméra de l\'appareil ?"</string> <string name="sensor_privacy_start_use_mic_camera_dialog_title" msgid="4316471859905020023">"Débloquer l\'appareil photo et le micro de l\'appareil ?"</string> @@ -441,6 +439,8 @@ <string name="keyguard_indication_charging_time_fast" msgid="8390311020603859480">"<xliff:g id="PERCENTAGE">%2$s</xliff:g> • Recharge rapide • Temps restant : <xliff:g id="CHARGING_TIME_LEFT">%1$s</xliff:g>"</string> <string name="keyguard_indication_charging_time_slowly" msgid="301936949731705417">"<xliff:g id="PERCENTAGE">%2$s</xliff:g> • Recharge lente • Temps restant : <xliff:g id="CHARGING_TIME_LEFT">%1$s</xliff:g>"</string> <string name="keyguard_indication_charging_time_dock" msgid="3149328898931741271">"<xliff:g id="PERCENTAGE">%2$s</xliff:g> • Recharge • Temps restant : <xliff:g id="CHARGING_TIME_LEFT">%1$s</xliff:g>"</string> + <!-- no translation found for accessibility_action_open_communal_hub (3081702792413787849) --> + <skip /> <string name="communal_tutorial_indicator_text" msgid="4503010353591430123">"Balayer vers la gauche pour démarrer le tutoriel collectif"</string> <string name="cta_tile_button_to_open_widget_editor" msgid="3871562362382963878">"Personnaliser"</string> <string name="cta_tile_button_to_dismiss" msgid="3377597875997861754">"Fermer"</string> @@ -459,6 +459,10 @@ <string name="button_text_to_open_settings" msgid="1987729256950941628">"Ouvrir les paramètres"</string> <string name="work_mode_off_title" msgid="5794818421357835873">"Réactiver les applis pro ?"</string> <string name="work_mode_turn_on" msgid="907813741770247267">"Réactiver"</string> + <!-- no translation found for accessibility_action_label_close_communal_hub (6790396569621032333) --> + <skip /> + <!-- no translation found for accessibility_content_description_for_communal_hub (1670220840599380118) --> + <skip /> <string name="accessibility_multi_user_switch_switcher" msgid="5330448341251092660">"Changer d\'utilisateur"</string> <string name="accessibility_multi_user_list_switcher" msgid="8574105376229857407">"menu déroulant"</string> <string name="guest_exit_guest_dialog_message" msgid="8183450985628495709">"Toutes les applications et les données de cette session seront supprimées."</string> diff --git a/packages/SystemUI/res/values-gl/strings.xml b/packages/SystemUI/res/values-gl/strings.xml index 06c984a24c2a..efcd21dd54dc 100644 --- a/packages/SystemUI/res/values-gl/strings.xml +++ b/packages/SystemUI/res/values-gl/strings.xml @@ -235,7 +235,7 @@ <string name="accessibility_desc_notification_shade" msgid="5355229129428759989">"Panel despregable"</string> <string name="accessibility_desc_quick_settings" msgid="4374766941484719179">"Configuración rápida"</string> <string name="accessibility_desc_qs_notification_shade" msgid="8327226953072700376">"Configuración rápida e panel despregable."</string> - <string name="accessibility_desc_lock_screen" msgid="5983125095181194887">"Pantalla de bloqueo."</string> + <string name="accessibility_desc_lock_screen" msgid="409034672704273634">"Bloqueo de pantalla"</string> <string name="accessibility_desc_work_lock" msgid="4355620395354680575">"Pantalla de bloqueo do perfil de traballo"</string> <string name="accessibility_desc_close" msgid="8293708213442107755">"Pechar"</string> <string name="accessibility_quick_settings_dnd_none_on" msgid="3235552940146035383">"silencio total"</string> @@ -376,6 +376,8 @@ <string name="quick_settings_hearing_devices_dialog_title" msgid="9004774017688484981">"Dispositivos auditivos"</string> <string name="quick_settings_pair_hearing_devices" msgid="5987105102207447322">"Vincular un dispositivo novo"</string> <string name="accessibility_hearing_device_pair_new_device" msgid="8440082580186130090">"Fai clic para vincular un novo dispositivo"</string> + <!-- no translation found for hearing_devices_presets_error (350363093458408536) --> + <skip /> <string name="sensor_privacy_start_use_mic_dialog_title" msgid="563796653825944944">"Queres desbloquear o micrófono do dispositivo?"</string> <string name="sensor_privacy_start_use_camera_dialog_title" msgid="8807639852654305227">"Queres desbloquear a cámara do dispositivo?"</string> <string name="sensor_privacy_start_use_mic_camera_dialog_title" msgid="4316471859905020023">"Queres desbloquear a cámara e o micrófono do dispositivo?"</string> @@ -441,6 +443,7 @@ <string name="keyguard_indication_charging_time_fast" msgid="8390311020603859480">"<xliff:g id="PERCENTAGE">%2$s</xliff:g> • Cargando rapidamente • A carga completarase en <xliff:g id="CHARGING_TIME_LEFT">%1$s</xliff:g>"</string> <string name="keyguard_indication_charging_time_slowly" msgid="301936949731705417">"<xliff:g id="PERCENTAGE">%2$s</xliff:g> • Cargando lentamente • A carga completarase en <xliff:g id="CHARGING_TIME_LEFT">%1$s</xliff:g>"</string> <string name="keyguard_indication_charging_time_dock" msgid="3149328898931741271">"<xliff:g id="PERCENTAGE">%2$s</xliff:g> • Cargando • A carga completarase en <xliff:g id="CHARGING_TIME_LEFT">%1$s</xliff:g>"</string> + <string name="accessibility_action_open_communal_hub" msgid="3081702792413787849">"Widgets na pantalla de bloqueo"</string> <string name="communal_tutorial_indicator_text" msgid="4503010353591430123">"Pasa o dedo cara á esquerda para iniciar o titorial comunitario"</string> <string name="cta_tile_button_to_open_widget_editor" msgid="3871562362382963878">"Personalizar"</string> <string name="cta_tile_button_to_dismiss" msgid="3377597875997861754">"Pechar"</string> @@ -459,6 +462,8 @@ <string name="button_text_to_open_settings" msgid="1987729256950941628">"Abrir configuración"</string> <string name="work_mode_off_title" msgid="5794818421357835873">"Reactivar apps do traballo?"</string> <string name="work_mode_turn_on" msgid="907813741770247267">"Reactivar"</string> + <string name="accessibility_action_label_close_communal_hub" msgid="6790396569621032333">"Ocultar os widgets na pantalla de bloqueo"</string> + <string name="accessibility_content_description_for_communal_hub" msgid="1670220840599380118">"Widgets na pantalla de bloqueo"</string> <string name="accessibility_multi_user_switch_switcher" msgid="5330448341251092660">"Cambiar usuario"</string> <string name="accessibility_multi_user_list_switcher" msgid="8574105376229857407">"menú despregable"</string> <string name="guest_exit_guest_dialog_message" msgid="8183450985628495709">"Eliminaranse todas as aplicacións e datos desta sesión."</string> diff --git a/packages/SystemUI/res/values-gu/strings.xml b/packages/SystemUI/res/values-gu/strings.xml index c9a56627902c..b446543bc581 100644 --- a/packages/SystemUI/res/values-gu/strings.xml +++ b/packages/SystemUI/res/values-gu/strings.xml @@ -235,7 +235,7 @@ <string name="accessibility_desc_notification_shade" msgid="5355229129428759989">"નોટિફિકેશન શેડ."</string> <string name="accessibility_desc_quick_settings" msgid="4374766941484719179">"ઝડપી સેટિંગ."</string> <string name="accessibility_desc_qs_notification_shade" msgid="8327226953072700376">"ઝડપી સેટિંગ અને નોટિફિકેશન શેડ."</string> - <string name="accessibility_desc_lock_screen" msgid="5983125095181194887">"લૉક સ્ક્રીન."</string> + <string name="accessibility_desc_lock_screen" msgid="409034672704273634">"લૉક સ્ક્રીન"</string> <string name="accessibility_desc_work_lock" msgid="4355620395354680575">"કાર્ય લૉક સ્ક્રીન"</string> <string name="accessibility_desc_close" msgid="8293708213442107755">"બંધ કરો"</string> <string name="accessibility_quick_settings_dnd_none_on" msgid="3235552940146035383">"બિલકુલ અવાજ નહીં"</string> @@ -376,6 +376,8 @@ <string name="quick_settings_hearing_devices_dialog_title" msgid="9004774017688484981">"સાંભળવામાં મદદ આપતા ડિવાઇસ"</string> <string name="quick_settings_pair_hearing_devices" msgid="5987105102207447322">"નવા ડિવાઇસ સાથે જોડાણ કરો"</string> <string name="accessibility_hearing_device_pair_new_device" msgid="8440082580186130090">"નવા ડિવાઇસ સાથે જોડાણ કરવા માટે ક્લિક કરો"</string> + <!-- no translation found for hearing_devices_presets_error (350363093458408536) --> + <skip /> <string name="sensor_privacy_start_use_mic_dialog_title" msgid="563796653825944944">"ડિવાઇસના માઇક્રોફોનને અનબ્લૉક કરીએ?"</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> @@ -441,6 +443,7 @@ <string name="keyguard_indication_charging_time_fast" msgid="8390311020603859480">"<xliff:g id="PERCENTAGE">%2$s</xliff:g> • ઝડપથી ચાર્જ થઈ રહ્યું છે • <xliff:g id="CHARGING_TIME_LEFT">%1$s</xliff:g>માં ચાર્જ થઈ જશે"</string> <string name="keyguard_indication_charging_time_slowly" msgid="301936949731705417">"<xliff:g id="PERCENTAGE">%2$s</xliff:g> • ધીમેથી ચાર્જ થઈ રહ્યું છે • <xliff:g id="CHARGING_TIME_LEFT">%1$s</xliff:g>માં ચાર્જ થઈ જશે"</string> <string name="keyguard_indication_charging_time_dock" msgid="3149328898931741271">"<xliff:g id="PERCENTAGE">%2$s</xliff:g> • ચાર્જ થઈ રહ્યું છે • <xliff:g id="CHARGING_TIME_LEFT">%1$s</xliff:g>માં પૂરું ચાર્જ થઈ જશે"</string> + <string name="accessibility_action_open_communal_hub" msgid="3081702792413787849">"લૉક સ્ક્રીન પર વિજેટ"</string> <string name="communal_tutorial_indicator_text" msgid="4503010353591430123">"કૉમ્યુનલ ટ્યૂટૉરિઅલ શરૂ કરવા માટે ડાબે સ્વાઇપ કરો"</string> <string name="cta_tile_button_to_open_widget_editor" msgid="3871562362382963878">"કસ્ટમાઇઝ કરો"</string> <string name="cta_tile_button_to_dismiss" msgid="3377597875997861754">"છોડી દો"</string> @@ -459,6 +462,8 @@ <string name="button_text_to_open_settings" msgid="1987729256950941628">"સેટિંગ ખોલો"</string> <string name="work_mode_off_title" msgid="5794818421357835873">"ઑફિસની થોભાવેલી ઍપ ચાલુ કરીએ?"</string> <string name="work_mode_turn_on" msgid="907813741770247267">"ફરી ચાલુ કરો"</string> + <string name="accessibility_action_label_close_communal_hub" msgid="6790396569621032333">"લૉક સ્ક્રીન પર વિજેટ બંધ કરો"</string> + <string name="accessibility_content_description_for_communal_hub" msgid="1670220840599380118">"લૉક સ્ક્રીન પર વિજેટ"</string> <string name="accessibility_multi_user_switch_switcher" msgid="5330448341251092660">"વપરાશકર્તા સ્વિચ કરો"</string> <string name="accessibility_multi_user_list_switcher" msgid="8574105376229857407">"પુલડાઉન મેનૂ"</string> <string name="guest_exit_guest_dialog_message" msgid="8183450985628495709">"આ સત્રમાંની તમામ ઍપ અને ડેટા કાઢી નાખવામાં આવશે."</string> diff --git a/packages/SystemUI/res/values-hi/strings.xml b/packages/SystemUI/res/values-hi/strings.xml index b2b20370d50a..740629e97d13 100644 --- a/packages/SystemUI/res/values-hi/strings.xml +++ b/packages/SystemUI/res/values-hi/strings.xml @@ -235,7 +235,8 @@ <string name="accessibility_desc_notification_shade" msgid="5355229129428759989">"सूचना शेड."</string> <string name="accessibility_desc_quick_settings" msgid="4374766941484719179">"त्वरित सेटिंग."</string> <string name="accessibility_desc_qs_notification_shade" msgid="8327226953072700376">"क्विक सेटिंग और नोटिफ़िकेशन शेड."</string> - <string name="accessibility_desc_lock_screen" msgid="5983125095181194887">"लॉक स्क्रीन."</string> + <!-- no translation found for accessibility_desc_lock_screen (409034672704273634) --> + <skip /> <string name="accessibility_desc_work_lock" msgid="4355620395354680575">"वर्क लॉक स्क्रीन"</string> <string name="accessibility_desc_close" msgid="8293708213442107755">"बंद करें"</string> <string name="accessibility_quick_settings_dnd_none_on" msgid="3235552940146035383">"कोई आवाज़ सुनाई नहीं देगी"</string> @@ -376,6 +377,8 @@ <string name="quick_settings_hearing_devices_dialog_title" msgid="9004774017688484981">"कान की मशीनें"</string> <string name="quick_settings_pair_hearing_devices" msgid="5987105102207447322">"नया डिवाइस जोड़ें"</string> <string name="accessibility_hearing_device_pair_new_device" msgid="8440082580186130090">"नया डिवाइस जोड़ने के लिए क्लिक करें"</string> + <!-- no translation found for hearing_devices_presets_error (350363093458408536) --> + <skip /> <string name="sensor_privacy_start_use_mic_dialog_title" msgid="563796653825944944">"क्या आपको डिवाइस का माइक्रोफ़ोन अनब्लॉक करना है?"</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> @@ -441,6 +444,8 @@ <string name="keyguard_indication_charging_time_fast" msgid="8390311020603859480">"<xliff:g id="PERCENTAGE">%2$s</xliff:g> • तेज़ चार्ज हो रहा है • <xliff:g id="CHARGING_TIME_LEFT">%1$s</xliff:g> में पूरा चार्ज हो जाएगा"</string> <string name="keyguard_indication_charging_time_slowly" msgid="301936949731705417">"<xliff:g id="PERCENTAGE">%2$s</xliff:g> • धीरे चार्ज हो रहा है • <xliff:g id="CHARGING_TIME_LEFT">%1$s</xliff:g> में पूरा चार्ज हो जाएगा"</string> <string name="keyguard_indication_charging_time_dock" msgid="3149328898931741271">"<xliff:g id="PERCENTAGE">%2$s</xliff:g> • चार्ज हो रहा है • <xliff:g id="CHARGING_TIME_LEFT">%1$s</xliff:g> में पूरा चार्ज हो जाएगा"</string> + <!-- no translation found for accessibility_action_open_communal_hub (3081702792413787849) --> + <skip /> <string name="communal_tutorial_indicator_text" msgid="4503010353591430123">"कम्यूनिटी ट्यूटोरियल शुरू करने के लिए, बाईं ओर स्वाइप करें"</string> <string name="cta_tile_button_to_open_widget_editor" msgid="3871562362382963878">"पसंद के मुताबिक बनाएं"</string> <string name="cta_tile_button_to_dismiss" msgid="3377597875997861754">"खारिज करें"</string> @@ -459,6 +464,10 @@ <string name="button_text_to_open_settings" msgid="1987729256950941628">"सेटिंग खोलें"</string> <string name="work_mode_off_title" msgid="5794818421357835873">"वर्क ऐप्लिकेशन चालू करने हैं?"</string> <string name="work_mode_turn_on" msgid="907813741770247267">"चालू करें"</string> + <!-- no translation found for accessibility_action_label_close_communal_hub (6790396569621032333) --> + <skip /> + <!-- no translation found for accessibility_content_description_for_communal_hub (1670220840599380118) --> + <skip /> <string name="accessibility_multi_user_switch_switcher" msgid="5330448341251092660">"उपयोगकर्ता बदलें"</string> <string name="accessibility_multi_user_list_switcher" msgid="8574105376229857407">"पुलडाउन मेन्यू"</string> <string name="guest_exit_guest_dialog_message" msgid="8183450985628495709">"इस सेशन के सभी ऐप्लिकेशन और डेटा को हटा दिया जाएगा."</string> @@ -504,7 +513,7 @@ <string name="manage_notifications_text" msgid="6885645344647733116">"मैनेज करें"</string> <string name="manage_notifications_history_text" msgid="57055985396576230">"इतिहास"</string> <string name="notification_section_header_incoming" msgid="850925217908095197">"नई सूचनाएं"</string> - <string name="notification_section_header_gentle" msgid="6804099527336337197">"बिना आवाज़ किए मिलने वाली सूचनाएं"</string> + <string name="notification_section_header_gentle" msgid="6804099527336337197">"साइलेंट मोड में मिली सूचनाएं"</string> <string name="notification_section_header_alerting" msgid="5581175033680477651">"सूचनाएं"</string> <string name="notification_section_header_conversations" msgid="821834744538345661">"बातचीत"</string> <string name="accessibility_notification_section_header_gentle_clear_all" msgid="6490207897764933919">"बिना आवाज़ की सभी सूचनाएं हटाएं"</string> @@ -779,8 +788,8 @@ <string name="system_multitasking_rhs" msgid="8714224917276297810">"मौजूदा ऐप्लिकेशन को दाईं ओर दिखाने वाली स्प्लिट स्क्रीन इस्तेमाल करें"</string> <string name="system_multitasking_lhs" msgid="8402954791206308783">"मौजूदा ऐप्लिकेशन को बाईं ओर दिखाने वाली स्प्लिट स्क्रीन इस्तेमाल करें"</string> <string name="system_multitasking_full_screen" msgid="336048080383640562">"स्प्लिट स्क्रीन से फ़ुल स्क्रीन मोड पर स्विच करने के लिए"</string> - <string name="system_multitasking_splitscreen_focus_rhs" msgid="3838578650313318508">"स्प्लिट स्क्रीन इस्तेमाल करते समय दाईं ओर या नीचे के ऐप पर स्विच करें"</string> - <string name="system_multitasking_splitscreen_focus_lhs" msgid="3164261844398662518">"स्प्लिट स्क्रीन इस्तेमाल करते समय बाईं ओर या ऊपर के ऐप पर स्विच करें"</string> + <string name="system_multitasking_splitscreen_focus_rhs" msgid="3838578650313318508">"स्प्लिट स्क्रीन पर, दाईं ओर या नीचे के ऐप पर स्विच करने के लिए"</string> + <string name="system_multitasking_splitscreen_focus_lhs" msgid="3164261844398662518">"स्प्लिट स्क्रीन पर, बाईं ओर या ऊपर के ऐप पर स्विच करने के लिए"</string> <string name="system_multitasking_replace" msgid="7410071959803642125">"स्प्लिट स्क्रीन के दौरान: एक ऐप्लिकेशन को दूसरे ऐप्लिकेशन से बदलें"</string> <string name="keyboard_shortcut_group_input" msgid="6888282716546625610">"इनपुट"</string> <string name="input_switch_input_language_next" msgid="3782155659868227855">"अगली भाषा पर स्विच करने के लिए"</string> @@ -1006,7 +1015,7 @@ <string name="accessibility_floating_button_action_move_top_right" msgid="6106225581993479711">"सबसे ऊपर दाईं ओर ले जाएं"</string> <string name="accessibility_floating_button_action_move_bottom_left" msgid="8063394111137429725">"सबसे नीचे बाईं ओर ले जाएं"</string> <string name="accessibility_floating_button_action_move_bottom_right" msgid="6196904373227440500">"सबसे नीचे दाईं ओर ले जाएं"</string> - <string name="accessibility_floating_button_action_move_to_edge_and_hide_to_half" msgid="662401168245782658">"एज पर ले जाएं और छिपाएं"</string> + <string name="accessibility_floating_button_action_move_to_edge_and_hide_to_half" msgid="662401168245782658">"किनारे ले जाएं और छिपाएं"</string> <string name="accessibility_floating_button_action_move_out_edge_and_show" msgid="8354760891651663326">"एज से निकालें और दिखाएं"</string> <string name="accessibility_floating_button_action_remove_menu" msgid="6730432848162552135">"हटाएं"</string> <string name="accessibility_floating_button_action_double_tap_to_toggle" msgid="7976492639670692037">"टॉगल करें"</string> diff --git a/packages/SystemUI/res/values-hr/strings.xml b/packages/SystemUI/res/values-hr/strings.xml index 64c35b8665f7..ad590f1b0951 100644 --- a/packages/SystemUI/res/values-hr/strings.xml +++ b/packages/SystemUI/res/values-hr/strings.xml @@ -235,7 +235,8 @@ <string name="accessibility_desc_notification_shade" msgid="5355229129428759989">"Zaslon obavijesti."</string> <string name="accessibility_desc_quick_settings" msgid="4374766941484719179">"Brze postavke."</string> <string name="accessibility_desc_qs_notification_shade" msgid="8327226953072700376">"Brze postavke i zaslon obavijesti."</string> - <string name="accessibility_desc_lock_screen" msgid="5983125095181194887">"Zaključavanje zaslona."</string> + <!-- no translation found for accessibility_desc_lock_screen (409034672704273634) --> + <skip /> <string name="accessibility_desc_work_lock" msgid="4355620395354680575">"Zaključani zaslon radnog profila"</string> <string name="accessibility_desc_close" msgid="8293708213442107755">"Zatvaranje"</string> <string name="accessibility_quick_settings_dnd_none_on" msgid="3235552940146035383">"potpuna tišina"</string> @@ -376,6 +377,8 @@ <string name="quick_settings_hearing_devices_dialog_title" msgid="9004774017688484981">"Slušni uređaji"</string> <string name="quick_settings_pair_hearing_devices" msgid="5987105102207447322">"Uparivanje novog uređaja"</string> <string name="accessibility_hearing_device_pair_new_device" msgid="8440082580186130090">"Kliknite da biste uparili novi uređaj"</string> + <!-- no translation found for hearing_devices_presets_error (350363093458408536) --> + <skip /> <string name="sensor_privacy_start_use_mic_dialog_title" msgid="563796653825944944">"Želite li deblokirati mikrofon uređaja?"</string> <string name="sensor_privacy_start_use_camera_dialog_title" msgid="8807639852654305227">"Želite li deblokirati kameru uređaja?"</string> <string name="sensor_privacy_start_use_mic_camera_dialog_title" msgid="4316471859905020023">"Želite li deblokirati kameru i mikrofon uređaja?"</string> @@ -441,6 +444,8 @@ <string name="keyguard_indication_charging_time_fast" msgid="8390311020603859480">"<xliff:g id="PERCENTAGE">%2$s</xliff:g> • brzo punjenje • <xliff:g id="CHARGING_TIME_LEFT">%1$s</xliff:g> do napunjenosti"</string> <string name="keyguard_indication_charging_time_slowly" msgid="301936949731705417">"<xliff:g id="PERCENTAGE">%2$s</xliff:g> • sporo punjenje • <xliff:g id="CHARGING_TIME_LEFT">%1$s</xliff:g> do napunjenosti"</string> <string name="keyguard_indication_charging_time_dock" msgid="3149328898931741271">"<xliff:g id="PERCENTAGE">%2$s</xliff:g> • punjenje • <xliff:g id="CHARGING_TIME_LEFT">%1$s</xliff:g> do napunjenosti"</string> + <!-- no translation found for accessibility_action_open_communal_hub (3081702792413787849) --> + <skip /> <string name="communal_tutorial_indicator_text" msgid="4503010353591430123">"Prijeđite prstom ulijevo da biste pokrenuli zajednički vodič"</string> <string name="cta_tile_button_to_open_widget_editor" msgid="3871562362382963878">"Prilagodi"</string> <string name="cta_tile_button_to_dismiss" msgid="3377597875997861754">"Odbaci"</string> @@ -459,6 +464,10 @@ <string name="button_text_to_open_settings" msgid="1987729256950941628">"Otvori postavke"</string> <string name="work_mode_off_title" msgid="5794818421357835873">"Pokrenuti poslovne aplikacije?"</string> <string name="work_mode_turn_on" msgid="907813741770247267">"Ponovno pokreni"</string> + <!-- no translation found for accessibility_action_label_close_communal_hub (6790396569621032333) --> + <skip /> + <!-- no translation found for accessibility_content_description_for_communal_hub (1670220840599380118) --> + <skip /> <string name="accessibility_multi_user_switch_switcher" msgid="5330448341251092660">"Promjena korisnika"</string> <string name="accessibility_multi_user_list_switcher" msgid="8574105376229857407">"padajući izbornik"</string> <string name="guest_exit_guest_dialog_message" msgid="8183450985628495709">"Izbrisat će se sve aplikacije i podaci u ovoj sesiji."</string> @@ -779,8 +788,8 @@ <string name="system_multitasking_rhs" msgid="8714224917276297810">"Koristite podijeljeni zaslon s trenutačnom aplikacijom s desne strane"</string> <string name="system_multitasking_lhs" msgid="8402954791206308783">"Koristite podijeljeni zaslon s trenutačnom aplikacijom s lijeve strane"</string> <string name="system_multitasking_full_screen" msgid="336048080383640562">"Prelazak s podijeljenog zaslona na cijeli zaslon"</string> - <string name="system_multitasking_splitscreen_focus_rhs" msgid="3838578650313318508">"Prijeđite na aplikaciju zdesna ili ispod uz podijeljeni zaslon"</string> - <string name="system_multitasking_splitscreen_focus_lhs" msgid="3164261844398662518">"Prijeđite na aplikaciju slijeva ili iznad uz podijeljeni zaslon"</string> + <string name="system_multitasking_splitscreen_focus_rhs" msgid="3838578650313318508">"Prelazak na aplikaciju zdesna ili ispod uz podijeljeni zaslon"</string> + <string name="system_multitasking_splitscreen_focus_lhs" msgid="3164261844398662518">"Prelazak na aplikaciju slijeva ili iznad uz podijeljeni zaslon"</string> <string name="system_multitasking_replace" msgid="7410071959803642125">"Tijekom podijeljenog zaslona: zamijeni aplikaciju drugom"</string> <string name="keyboard_shortcut_group_input" msgid="6888282716546625610">"Unos"</string> <string name="input_switch_input_language_next" msgid="3782155659868227855">"Prelazak na sljedeći jezik"</string> diff --git a/packages/SystemUI/res/values-hu/strings.xml b/packages/SystemUI/res/values-hu/strings.xml index 96c3e83aaa39..9dea01e18cea 100644 --- a/packages/SystemUI/res/values-hu/strings.xml +++ b/packages/SystemUI/res/values-hu/strings.xml @@ -235,7 +235,8 @@ <string name="accessibility_desc_notification_shade" msgid="5355229129428759989">"Értesítési felület."</string> <string name="accessibility_desc_quick_settings" msgid="4374766941484719179">"Gyorsbeállítások."</string> <string name="accessibility_desc_qs_notification_shade" msgid="8327226953072700376">"Gyorsbeállítások és értesítési terület"</string> - <string name="accessibility_desc_lock_screen" msgid="5983125095181194887">"Lezárási képernyő."</string> + <!-- no translation found for accessibility_desc_lock_screen (409034672704273634) --> + <skip /> <string name="accessibility_desc_work_lock" msgid="4355620395354680575">"Munka lezárási képernyővel"</string> <string name="accessibility_desc_close" msgid="8293708213442107755">"Bezárás"</string> <string name="accessibility_quick_settings_dnd_none_on" msgid="3235552940146035383">"teljes némítás"</string> @@ -376,6 +377,8 @@ <string name="quick_settings_hearing_devices_dialog_title" msgid="9004774017688484981">"Hallókészülékek"</string> <string name="quick_settings_pair_hearing_devices" msgid="5987105102207447322">"Új eszköz párosítása"</string> <string name="accessibility_hearing_device_pair_new_device" msgid="8440082580186130090">"Kattintson új eszköz párosításához"</string> + <!-- no translation found for hearing_devices_presets_error (350363093458408536) --> + <skip /> <string name="sensor_privacy_start_use_mic_dialog_title" msgid="563796653825944944">"Feloldja az eszköz mikrofonjának letiltását?"</string> <string name="sensor_privacy_start_use_camera_dialog_title" msgid="8807639852654305227">"Feloldja az eszköz kamerájának letiltását?"</string> <string name="sensor_privacy_start_use_mic_camera_dialog_title" msgid="4316471859905020023">"Feloldja az eszköz kamerájának és mikrofonjának letiltását?"</string> @@ -441,6 +444,8 @@ <string name="keyguard_indication_charging_time_fast" msgid="8390311020603859480">"<xliff:g id="PERCENTAGE">%2$s</xliff:g> • Gyors töltés • A teljes töltöttségig: <xliff:g id="CHARGING_TIME_LEFT">%1$s</xliff:g>"</string> <string name="keyguard_indication_charging_time_slowly" msgid="301936949731705417">"<xliff:g id="PERCENTAGE">%2$s</xliff:g> • Lassú töltés • A teljes töltöttségig: <xliff:g id="CHARGING_TIME_LEFT">%1$s</xliff:g>"</string> <string name="keyguard_indication_charging_time_dock" msgid="3149328898931741271">"<xliff:g id="PERCENTAGE">%2$s</xliff:g> • Töltés • A teljes töltöttségig: <xliff:g id="CHARGING_TIME_LEFT">%1$s</xliff:g>"</string> + <!-- no translation found for accessibility_action_open_communal_hub (3081702792413787849) --> + <skip /> <string name="communal_tutorial_indicator_text" msgid="4503010353591430123">"Csúsztasson gyorsan balra a közösségi útmutató elindításához"</string> <string name="cta_tile_button_to_open_widget_editor" msgid="3871562362382963878">"Személyre szabás"</string> <string name="cta_tile_button_to_dismiss" msgid="3377597875997861754">"Elvetés"</string> @@ -459,6 +464,10 @@ <string name="button_text_to_open_settings" msgid="1987729256950941628">"Beállítások megnyitása"</string> <string name="work_mode_off_title" msgid="5794818421357835873">"Feloldja a munkahelyi appokat?"</string> <string name="work_mode_turn_on" msgid="907813741770247267">"Szüneteltetés feloldása"</string> + <!-- no translation found for accessibility_action_label_close_communal_hub (6790396569621032333) --> + <skip /> + <!-- no translation found for accessibility_content_description_for_communal_hub (1670220840599380118) --> + <skip /> <string name="accessibility_multi_user_switch_switcher" msgid="5330448341251092660">"Felhasználóváltás"</string> <string name="accessibility_multi_user_list_switcher" msgid="8574105376229857407">"lehúzható menü"</string> <string name="guest_exit_guest_dialog_message" msgid="8183450985628495709">"A munkamenetben található összes alkalmazás és adat törlődni fog."</string> @@ -1006,7 +1015,7 @@ <string name="accessibility_floating_button_action_move_top_right" msgid="6106225581993479711">"Áthelyezés fel és jobbra"</string> <string name="accessibility_floating_button_action_move_bottom_left" msgid="8063394111137429725">"Áthelyezés le és balra"</string> <string name="accessibility_floating_button_action_move_bottom_right" msgid="6196904373227440500">"Áthelyezés le és jobbra"</string> - <string name="accessibility_floating_button_action_move_to_edge_and_hide_to_half" msgid="662401168245782658">"Áthelyezés a szélen kívül és elrejtés"</string> + <string name="accessibility_floating_button_action_move_to_edge_and_hide_to_half" msgid="662401168245782658">"Áthelyezés a szélére és elrejtés"</string> <string name="accessibility_floating_button_action_move_out_edge_and_show" msgid="8354760891651663326">"Áthelyezés a szélen kívül és mutatás"</string> <string name="accessibility_floating_button_action_remove_menu" msgid="6730432848162552135">"Eltávolítás"</string> <string name="accessibility_floating_button_action_double_tap_to_toggle" msgid="7976492639670692037">"váltás"</string> diff --git a/packages/SystemUI/res/values-hy/strings.xml b/packages/SystemUI/res/values-hy/strings.xml index 00c33184591c..5ef3219c6f49 100644 --- a/packages/SystemUI/res/values-hy/strings.xml +++ b/packages/SystemUI/res/values-hy/strings.xml @@ -235,7 +235,8 @@ <string name="accessibility_desc_notification_shade" msgid="5355229129428759989">"Ծանուցումների վահանակ:"</string> <string name="accessibility_desc_quick_settings" msgid="4374766941484719179">"Արագ կարգավորումներ:"</string> <string name="accessibility_desc_qs_notification_shade" msgid="8327226953072700376">"Արագ կարգավորումներ և ծանուցումների վահանակ։"</string> - <string name="accessibility_desc_lock_screen" msgid="5983125095181194887">"Էկրանի կողպում:"</string> + <!-- no translation found for accessibility_desc_lock_screen (409034672704273634) --> + <skip /> <string name="accessibility_desc_work_lock" msgid="4355620395354680575">"Աշխատանքային պրոֆիլի կողպէկրան"</string> <string name="accessibility_desc_close" msgid="8293708213442107755">"Փակել"</string> <string name="accessibility_quick_settings_dnd_none_on" msgid="3235552940146035383">"կատարյալ լռություն"</string> @@ -376,6 +377,8 @@ <string name="quick_settings_hearing_devices_dialog_title" msgid="9004774017688484981">"Լսողական սարքեր"</string> <string name="quick_settings_pair_hearing_devices" msgid="5987105102207447322">"Նոր սարքի զուգակցում"</string> <string name="accessibility_hearing_device_pair_new_device" msgid="8440082580186130090">"Սեղմեք՝ նոր սարք զուգակցելու համար"</string> + <!-- no translation found for hearing_devices_presets_error (350363093458408536) --> + <skip /> <string name="sensor_privacy_start_use_mic_dialog_title" msgid="563796653825944944">"Արգելահանե՞լ սարքի խոսափողը"</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> @@ -441,6 +444,8 @@ <string name="keyguard_indication_charging_time_fast" msgid="8390311020603859480">"<xliff:g id="PERCENTAGE">%2$s</xliff:g> • Արագ լիցքավորում • Մնացել է <xliff:g id="CHARGING_TIME_LEFT">%1$s</xliff:g>"</string> <string name="keyguard_indication_charging_time_slowly" msgid="301936949731705417">"<xliff:g id="PERCENTAGE">%2$s</xliff:g> • Դանդաղ լիցքավորում • Մնացել է <xliff:g id="CHARGING_TIME_LEFT">%1$s</xliff:g>"</string> <string name="keyguard_indication_charging_time_dock" msgid="3149328898931741271">"<xliff:g id="PERCENTAGE">%2$s</xliff:g> • Լիցքավորում • Մնացել է <xliff:g id="CHARGING_TIME_LEFT">%1$s</xliff:g>"</string> + <!-- no translation found for accessibility_action_open_communal_hub (3081702792413787849) --> + <skip /> <string name="communal_tutorial_indicator_text" msgid="4503010353591430123">"Թերթեք ձախ՝ ուղեցույցը գործարկելու համար"</string> <string name="cta_tile_button_to_open_widget_editor" msgid="3871562362382963878">"Անհատականացնել"</string> <string name="cta_tile_button_to_dismiss" msgid="3377597875997861754">"Փակել"</string> @@ -459,6 +464,10 @@ <string name="button_text_to_open_settings" msgid="1987729256950941628">"Բացել կարգավորումները"</string> <string name="work_mode_off_title" msgid="5794818421357835873">"Վերսկսե՞լ աշխ. հավելվածները"</string> <string name="work_mode_turn_on" msgid="907813741770247267">"Վերսկսել"</string> + <!-- no translation found for accessibility_action_label_close_communal_hub (6790396569621032333) --> + <skip /> + <!-- no translation found for accessibility_content_description_for_communal_hub (1670220840599380118) --> + <skip /> <string name="accessibility_multi_user_switch_switcher" msgid="5330448341251092660">"Անջատել օգտվողին"</string> <string name="accessibility_multi_user_list_switcher" msgid="8574105376229857407">"իջնող ընտրացանկ"</string> <string name="guest_exit_guest_dialog_message" msgid="8183450985628495709">"Այս աշխատաշրջանի բոլոր հավելվածներն ու տվյալները կջնջվեն:"</string> diff --git a/packages/SystemUI/res/values-in/strings.xml b/packages/SystemUI/res/values-in/strings.xml index 826fc1a48fa3..f6ef98fe2bb2 100644 --- a/packages/SystemUI/res/values-in/strings.xml +++ b/packages/SystemUI/res/values-in/strings.xml @@ -235,7 +235,7 @@ <string name="accessibility_desc_notification_shade" msgid="5355229129428759989">"Bayangan pemberitahuan."</string> <string name="accessibility_desc_quick_settings" msgid="4374766941484719179">"Setelan cepat."</string> <string name="accessibility_desc_qs_notification_shade" msgid="8327226953072700376">"Setelan cepat dan Menu notifikasi."</string> - <string name="accessibility_desc_lock_screen" msgid="5983125095181194887">"Layar kunci."</string> + <string name="accessibility_desc_lock_screen" msgid="409034672704273634">"Kunci layar"</string> <string name="accessibility_desc_work_lock" msgid="4355620395354680575">"Layar kunci kantor"</string> <string name="accessibility_desc_close" msgid="8293708213442107755">"Tutup"</string> <string name="accessibility_quick_settings_dnd_none_on" msgid="3235552940146035383">"senyap total"</string> @@ -376,6 +376,8 @@ <string name="quick_settings_hearing_devices_dialog_title" msgid="9004774017688484981">"Alat bantu dengar"</string> <string name="quick_settings_pair_hearing_devices" msgid="5987105102207447322">"Sambungkan perangkat baru"</string> <string name="accessibility_hearing_device_pair_new_device" msgid="8440082580186130090">"Klik untuk menyambungkan perangkat baru"</string> + <!-- no translation found for hearing_devices_presets_error (350363093458408536) --> + <skip /> <string name="sensor_privacy_start_use_mic_dialog_title" msgid="563796653825944944">"Berhenti memblokir mikrofon perangkat?"</string> <string name="sensor_privacy_start_use_camera_dialog_title" msgid="8807639852654305227">"Berhenti memblokir kamera perangkat?"</string> <string name="sensor_privacy_start_use_mic_camera_dialog_title" msgid="4316471859905020023">"Berhenti memblokir kamera dan mikrofon perangkat?"</string> @@ -441,6 +443,7 @@ <string name="keyguard_indication_charging_time_fast" msgid="8390311020603859480">"<xliff:g id="PERCENTAGE">%2$s</xliff:g> • Mengisi daya dengan cepat • Penuh dalam waktu <xliff:g id="CHARGING_TIME_LEFT">%1$s</xliff:g>"</string> <string name="keyguard_indication_charging_time_slowly" msgid="301936949731705417">"<xliff:g id="PERCENTAGE">%2$s</xliff:g> • Mengisi daya dengan lambat • Penuh dalam waktu <xliff:g id="CHARGING_TIME_LEFT">%1$s</xliff:g>"</string> <string name="keyguard_indication_charging_time_dock" msgid="3149328898931741271">"<xliff:g id="PERCENTAGE">%2$s</xliff:g> • Mengisi daya • Penuh dalam waktu <xliff:g id="CHARGING_TIME_LEFT">%1$s</xliff:g>"</string> + <string name="accessibility_action_open_communal_hub" msgid="3081702792413787849">"Widget di layar kunci"</string> <string name="communal_tutorial_indicator_text" msgid="4503010353591430123">"Geser ke kiri untuk memulai tutorial komunal"</string> <string name="cta_tile_button_to_open_widget_editor" msgid="3871562362382963878">"Sesuaikan"</string> <string name="cta_tile_button_to_dismiss" msgid="3377597875997861754">"Tutup"</string> @@ -459,6 +462,8 @@ <string name="button_text_to_open_settings" msgid="1987729256950941628">"Buka setelan"</string> <string name="work_mode_off_title" msgid="5794818421357835873">"Batalkan jeda aplikasi kerja?"</string> <string name="work_mode_turn_on" msgid="907813741770247267">"Batalkan jeda"</string> + <string name="accessibility_action_label_close_communal_hub" msgid="6790396569621032333">"Tutup widget di layar kunci"</string> + <string name="accessibility_content_description_for_communal_hub" msgid="1670220840599380118">"Widget di layar kunci"</string> <string name="accessibility_multi_user_switch_switcher" msgid="5330448341251092660">"Beralih pengguna"</string> <string name="accessibility_multi_user_list_switcher" msgid="8574105376229857407">"menu pulldown"</string> <string name="guest_exit_guest_dialog_message" msgid="8183450985628495709">"Semua aplikasi dan data dalam sesi ini akan dihapus."</string> diff --git a/packages/SystemUI/res/values-is/strings.xml b/packages/SystemUI/res/values-is/strings.xml index 1a0b3f29281d..6bbfc1a9b2c7 100644 --- a/packages/SystemUI/res/values-is/strings.xml +++ b/packages/SystemUI/res/values-is/strings.xml @@ -235,7 +235,7 @@ <string name="accessibility_desc_notification_shade" msgid="5355229129428759989">"Tilkynningasvæði."</string> <string name="accessibility_desc_quick_settings" msgid="4374766941484719179">"Flýtistillingar."</string> <string name="accessibility_desc_qs_notification_shade" msgid="8327226953072700376">"Flýtistillingar og tilkynningagluggi."</string> - <string name="accessibility_desc_lock_screen" msgid="5983125095181194887">"Lásskjár."</string> + <string name="accessibility_desc_lock_screen" msgid="409034672704273634">"Lásskjár"</string> <string name="accessibility_desc_work_lock" msgid="4355620395354680575">"Vinnulásskjár"</string> <string name="accessibility_desc_close" msgid="8293708213442107755">"Loka"</string> <string name="accessibility_quick_settings_dnd_none_on" msgid="3235552940146035383">"algjör þögn"</string> @@ -376,6 +376,8 @@ <string name="quick_settings_hearing_devices_dialog_title" msgid="9004774017688484981">"Heyrnartæki"</string> <string name="quick_settings_pair_hearing_devices" msgid="5987105102207447322">"Para nýtt tæki"</string> <string name="accessibility_hearing_device_pair_new_device" msgid="8440082580186130090">"Smelltu til að para nýtt tæki"</string> + <!-- no translation found for hearing_devices_presets_error (350363093458408536) --> + <skip /> <string name="sensor_privacy_start_use_mic_dialog_title" msgid="563796653825944944">"Opna fyrir hljóðnema tækisins?"</string> <string name="sensor_privacy_start_use_camera_dialog_title" msgid="8807639852654305227">"Opna fyrir myndavél tækisins?"</string> <string name="sensor_privacy_start_use_mic_camera_dialog_title" msgid="4316471859905020023">"Opna fyrir myndavél og hljóðnema tækisins?"</string> @@ -441,6 +443,7 @@ <string name="keyguard_indication_charging_time_fast" msgid="8390311020603859480">"<xliff:g id="PERCENTAGE">%2$s</xliff:g> • Hraðhleðsla • Full hleðsla eftir <xliff:g id="CHARGING_TIME_LEFT">%1$s</xliff:g>"</string> <string name="keyguard_indication_charging_time_slowly" msgid="301936949731705417">"<xliff:g id="PERCENTAGE">%2$s</xliff:g> • Hæg hleðsla • Full hleðsla eftir <xliff:g id="CHARGING_TIME_LEFT">%1$s</xliff:g>"</string> <string name="keyguard_indication_charging_time_dock" msgid="3149328898931741271">"<xliff:g id="PERCENTAGE">%2$s</xliff:g> • Í hleðslu • Full hleðsla eftir <xliff:g id="CHARGING_TIME_LEFT">%1$s</xliff:g>"</string> + <string name="accessibility_action_open_communal_hub" msgid="3081702792413787849">"Græjur á lásskjá"</string> <string name="communal_tutorial_indicator_text" msgid="4503010353591430123">"Strjúktu til vinstri til að hefja samfélagsleiðsögnina"</string> <string name="cta_tile_button_to_open_widget_editor" msgid="3871562362382963878">"Sérsníða"</string> <string name="cta_tile_button_to_dismiss" msgid="3377597875997861754">"Hunsa"</string> @@ -459,6 +462,8 @@ <string name="button_text_to_open_settings" msgid="1987729256950941628">"Opna stillingar"</string> <string name="work_mode_off_title" msgid="5794818421357835873">"Ljúka hléi vinnuforrita?"</string> <string name="work_mode_turn_on" msgid="907813741770247267">"Ljúka hléi"</string> + <string name="accessibility_action_label_close_communal_hub" msgid="6790396569621032333">"Loka græjum á lásskjá"</string> + <string name="accessibility_content_description_for_communal_hub" msgid="1670220840599380118">"Græjur á lásskjá"</string> <string name="accessibility_multi_user_switch_switcher" msgid="5330448341251092660">"Skipta um notanda"</string> <string name="accessibility_multi_user_list_switcher" msgid="8574105376229857407">"Fellivalmynd"</string> <string name="guest_exit_guest_dialog_message" msgid="8183450985628495709">"Öllum forritum og gögnum í þessari lotu verður eytt."</string> diff --git a/packages/SystemUI/res/values-it/strings.xml b/packages/SystemUI/res/values-it/strings.xml index d7e5cdc772d6..c60b57b10643 100644 --- a/packages/SystemUI/res/values-it/strings.xml +++ b/packages/SystemUI/res/values-it/strings.xml @@ -235,7 +235,8 @@ <string name="accessibility_desc_notification_shade" msgid="5355229129428759989">"Area notifiche."</string> <string name="accessibility_desc_quick_settings" msgid="4374766941484719179">"Impostazioni rapide."</string> <string name="accessibility_desc_qs_notification_shade" msgid="8327226953072700376">"Area notifiche e Impostazioni rapide."</string> - <string name="accessibility_desc_lock_screen" msgid="5983125095181194887">"Schermata di blocco."</string> + <!-- no translation found for accessibility_desc_lock_screen (409034672704273634) --> + <skip /> <string name="accessibility_desc_work_lock" msgid="4355620395354680575">"Schermata di blocco del profilo di lavoro"</string> <string name="accessibility_desc_close" msgid="8293708213442107755">"Chiudi"</string> <string name="accessibility_quick_settings_dnd_none_on" msgid="3235552940146035383">"silenzio totale"</string> @@ -376,6 +377,8 @@ <string name="quick_settings_hearing_devices_dialog_title" msgid="9004774017688484981">"Protesi uditive"</string> <string name="quick_settings_pair_hearing_devices" msgid="5987105102207447322">"Accoppia nuovo dispositivo"</string> <string name="accessibility_hearing_device_pair_new_device" msgid="8440082580186130090">"Fai clic per accoppiare un nuovo dispositivo"</string> + <!-- no translation found for hearing_devices_presets_error (350363093458408536) --> + <skip /> <string name="sensor_privacy_start_use_mic_dialog_title" msgid="563796653825944944">"Vuoi sbloccare il microfono del dispositivo?"</string> <string name="sensor_privacy_start_use_camera_dialog_title" msgid="8807639852654305227">"Vuoi sbloccare la fotocamera del dispositivo?"</string> <string name="sensor_privacy_start_use_mic_camera_dialog_title" msgid="4316471859905020023">"Vuoi sbloccare la fotocamera e il microfono del dispositivo?"</string> @@ -441,6 +444,8 @@ <string name="keyguard_indication_charging_time_fast" msgid="8390311020603859480">"<xliff:g id="PERCENTAGE">%2$s</xliff:g> • Ricarica veloce • <xliff:g id="CHARGING_TIME_LEFT">%1$s</xliff:g> alla ricarica completa"</string> <string name="keyguard_indication_charging_time_slowly" msgid="301936949731705417">"<xliff:g id="PERCENTAGE">%2$s</xliff:g> • Ricarica lenta • <xliff:g id="CHARGING_TIME_LEFT">%1$s</xliff:g> alla ricarica completa"</string> <string name="keyguard_indication_charging_time_dock" msgid="3149328898931741271">"<xliff:g id="PERCENTAGE">%2$s</xliff:g> • In carica • <xliff:g id="CHARGING_TIME_LEFT">%1$s</xliff:g> alla ricarica completa"</string> + <!-- no translation found for accessibility_action_open_communal_hub (3081702792413787849) --> + <skip /> <string name="communal_tutorial_indicator_text" msgid="4503010353591430123">"Scorri a sinistra per iniziare il tutorial della community"</string> <string name="cta_tile_button_to_open_widget_editor" msgid="3871562362382963878">"Personalizza"</string> <string name="cta_tile_button_to_dismiss" msgid="3377597875997861754">"Chiudi"</string> @@ -459,6 +464,10 @@ <string name="button_text_to_open_settings" msgid="1987729256950941628">"Apri impostazioni"</string> <string name="work_mode_off_title" msgid="5794818421357835873">"Riattivare le app di lavoro?"</string> <string name="work_mode_turn_on" msgid="907813741770247267">"Riattiva"</string> + <!-- no translation found for accessibility_action_label_close_communal_hub (6790396569621032333) --> + <skip /> + <!-- no translation found for accessibility_content_description_for_communal_hub (1670220840599380118) --> + <skip /> <string name="accessibility_multi_user_switch_switcher" msgid="5330448341251092660">"Cambio utente"</string> <string name="accessibility_multi_user_list_switcher" msgid="8574105376229857407">"menu a discesa"</string> <string name="guest_exit_guest_dialog_message" msgid="8183450985628495709">"Tutte le app e i dati di questa sessione verranno eliminati."</string> @@ -1006,7 +1015,7 @@ <string name="accessibility_floating_button_action_move_top_right" msgid="6106225581993479711">"Sposta in alto a destra"</string> <string name="accessibility_floating_button_action_move_bottom_left" msgid="8063394111137429725">"Sposta in basso a sinistra"</string> <string name="accessibility_floating_button_action_move_bottom_right" msgid="6196904373227440500">"Sposta in basso a destra"</string> - <string name="accessibility_floating_button_action_move_to_edge_and_hide_to_half" msgid="662401168245782658">"Sposta fino a bordo e nascondi"</string> + <string name="accessibility_floating_button_action_move_to_edge_and_hide_to_half" msgid="662401168245782658">"Sposta fino al bordo e nascondi"</string> <string name="accessibility_floating_button_action_move_out_edge_and_show" msgid="8354760891651663326">"Sposta fuori da bordo e mostra"</string> <string name="accessibility_floating_button_action_remove_menu" msgid="6730432848162552135">"Rimuovi"</string> <string name="accessibility_floating_button_action_double_tap_to_toggle" msgid="7976492639670692037">"attiva/disattiva"</string> diff --git a/packages/SystemUI/res/values-iw/strings.xml b/packages/SystemUI/res/values-iw/strings.xml index bed2fc746761..b162d390a457 100644 --- a/packages/SystemUI/res/values-iw/strings.xml +++ b/packages/SystemUI/res/values-iw/strings.xml @@ -235,7 +235,7 @@ <string name="accessibility_desc_notification_shade" msgid="5355229129428759989">"לוח התראות."</string> <string name="accessibility_desc_quick_settings" msgid="4374766941484719179">"הגדרות מהירות."</string> <string name="accessibility_desc_qs_notification_shade" msgid="8327226953072700376">"הגדרות מהירות ולוח ההתראות."</string> - <string name="accessibility_desc_lock_screen" msgid="5983125095181194887">"מסך נעילה."</string> + <string name="accessibility_desc_lock_screen" msgid="409034672704273634">"מסך הנעילה"</string> <string name="accessibility_desc_work_lock" msgid="4355620395354680575">"מסך נעילה של עבודה"</string> <string name="accessibility_desc_close" msgid="8293708213442107755">"סגירה"</string> <string name="accessibility_quick_settings_dnd_none_on" msgid="3235552940146035383">"השתקה מוחלטת"</string> @@ -376,6 +376,8 @@ <string name="quick_settings_hearing_devices_dialog_title" msgid="9004774017688484981">"מכשירי שמיעה"</string> <string name="quick_settings_pair_hearing_devices" msgid="5987105102207447322">"התאמה של מכשיר חדש"</string> <string name="accessibility_hearing_device_pair_new_device" msgid="8440082580186130090">"צריך ללחוץ כדי להתאים מכשיר חדש"</string> + <!-- no translation found for hearing_devices_presets_error (350363093458408536) --> + <skip /> <string name="sensor_privacy_start_use_mic_dialog_title" msgid="563796653825944944">"לבטל את חסימת המיקרופון של המכשיר?"</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> @@ -441,6 +443,7 @@ <string name="keyguard_indication_charging_time_fast" msgid="8390311020603859480">"<xliff:g id="PERCENTAGE">%2$s</xliff:g> • בטעינה מהירה • <xliff:g id="CHARGING_TIME_LEFT">%1$s</xliff:g> עד לסיום"</string> <string name="keyguard_indication_charging_time_slowly" msgid="301936949731705417">"<xliff:g id="PERCENTAGE">%2$s</xliff:g> • בטעינה איטית • <xliff:g id="CHARGING_TIME_LEFT">%1$s</xliff:g> עד לסיום"</string> <string name="keyguard_indication_charging_time_dock" msgid="3149328898931741271">"<xliff:g id="PERCENTAGE">%2$s</xliff:g> • בטעינה • <xliff:g id="CHARGING_TIME_LEFT">%1$s</xliff:g> עד לסיום"</string> + <string name="accessibility_action_open_communal_hub" msgid="3081702792413787849">"ווידג\'טים במסך הנעילה"</string> <string name="communal_tutorial_indicator_text" msgid="4503010353591430123">"אפשר להחליק שמאלה כדי להפעיל את המדריך המשותף"</string> <string name="cta_tile_button_to_open_widget_editor" msgid="3871562362382963878">"התאמה אישית"</string> <string name="cta_tile_button_to_dismiss" msgid="3377597875997861754">"סגירה"</string> @@ -459,6 +462,8 @@ <string name="button_text_to_open_settings" msgid="1987729256950941628">"לפתיחת ההגדרות"</string> <string name="work_mode_off_title" msgid="5794818421357835873">"להפעיל את האפליקציות לעבודה?"</string> <string name="work_mode_turn_on" msgid="907813741770247267">"ביטול ההשהיה"</string> + <string name="accessibility_action_label_close_communal_hub" msgid="6790396569621032333">"סגירת ווידג\'טים במסך הנעילה"</string> + <string name="accessibility_content_description_for_communal_hub" msgid="1670220840599380118">"ווידג\'טים במסך הנעילה"</string> <string name="accessibility_multi_user_switch_switcher" msgid="5330448341251092660">"החלפת משתמש"</string> <string name="accessibility_multi_user_list_switcher" msgid="8574105376229857407">"תפריט במשיכה למטה"</string> <string name="guest_exit_guest_dialog_message" msgid="8183450985628495709">"כל האפליקציות והנתונים בסשן הזה יימחקו."</string> diff --git a/packages/SystemUI/res/values-ja/strings.xml b/packages/SystemUI/res/values-ja/strings.xml index f4033081f02a..19d6e8890d00 100644 --- a/packages/SystemUI/res/values-ja/strings.xml +++ b/packages/SystemUI/res/values-ja/strings.xml @@ -235,7 +235,7 @@ <string name="accessibility_desc_notification_shade" msgid="5355229129428759989">"通知シェード"</string> <string name="accessibility_desc_quick_settings" msgid="4374766941484719179">"クイック設定"</string> <string name="accessibility_desc_qs_notification_shade" msgid="8327226953072700376">"クイック設定と通知シェード。"</string> - <string name="accessibility_desc_lock_screen" msgid="5983125095181194887">"ロック画面"</string> + <string name="accessibility_desc_lock_screen" msgid="409034672704273634">"ロック画面"</string> <string name="accessibility_desc_work_lock" msgid="4355620395354680575">"仕事用プロファイルのロック画面"</string> <string name="accessibility_desc_close" msgid="8293708213442107755">"閉じる"</string> <string name="accessibility_quick_settings_dnd_none_on" msgid="3235552940146035383">"サイレント"</string> @@ -270,20 +270,15 @@ <string name="see_all_bluetooth_devices" msgid="1761596816620200433">"すべて表示"</string> <string name="turn_on_bluetooth" msgid="5681370462180289071">"Bluetooth を使用"</string> <string name="quick_settings_bluetooth_device_connected" msgid="7884777006729260996">"接続しました"</string> - <!-- no translation found for quick_settings_bluetooth_device_audio_sharing (1496358082943301670) --> - <skip /> + <string name="quick_settings_bluetooth_device_audio_sharing" msgid="1496358082943301670">"音声の共有"</string> <string name="quick_settings_bluetooth_device_saved" msgid="7549938728928069477">"保存しました"</string> <string name="accessibility_quick_settings_bluetooth_device_tap_to_disconnect" msgid="415980329093277342">"接続を解除"</string> <string name="accessibility_quick_settings_bluetooth_device_tap_to_activate" msgid="3724301751036877403">"有効化"</string> <string name="turn_on_bluetooth_auto_tomorrow" msgid="414836329962473906">"明日自動的に ON に戻す"</string> - <!-- no translation found for turn_on_bluetooth_auto_info_disabled (682984290339848844) --> - <skip /> - <!-- no translation found for turn_on_bluetooth_auto_info_enabled (7440944034584560279) --> - <skip /> - <!-- no translation found for quick_settings_bluetooth_audio_sharing_button (4499275822759907822) --> - <skip /> - <!-- no translation found for quick_settings_bluetooth_audio_sharing_button_sharing (8626191139359072540) --> - <skip /> + <string name="turn_on_bluetooth_auto_info_disabled" msgid="682984290339848844">"Quick Share や「デバイスを探す」などの機能は Bluetooth を使用します"</string> + <string name="turn_on_bluetooth_auto_info_enabled" msgid="7440944034584560279">"明日の朝に Bluetooth が ON になります"</string> + <string name="quick_settings_bluetooth_audio_sharing_button" msgid="4499275822759907822">"音声の共有"</string> + <string name="quick_settings_bluetooth_audio_sharing_button_sharing" msgid="8626191139359072540">"音声を共有中"</string> <string name="quick_settings_bluetooth_secondary_label_battery_level" msgid="4182034939479344093">"バッテリー <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE">%s</xliff:g>"</string> <string name="quick_settings_bluetooth_secondary_label_audio" msgid="780333390310051161">"オーディオ"</string> <string name="quick_settings_bluetooth_secondary_label_headset" msgid="2332093067553000852">"ヘッドセット"</string> @@ -376,6 +371,8 @@ <string name="quick_settings_hearing_devices_dialog_title" msgid="9004774017688484981">"補聴器"</string> <string name="quick_settings_pair_hearing_devices" msgid="5987105102207447322">"新しいデバイスとペア設定"</string> <string name="accessibility_hearing_device_pair_new_device" msgid="8440082580186130090">"クリックすると、新しいデバイスをペア設定できます"</string> + <!-- no translation found for hearing_devices_presets_error (350363093458408536) --> + <skip /> <string name="sensor_privacy_start_use_mic_dialog_title" msgid="563796653825944944">"デバイスのマイクのブロックを解除しますか?"</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> @@ -441,6 +438,7 @@ <string name="keyguard_indication_charging_time_fast" msgid="8390311020603859480">"<xliff:g id="PERCENTAGE">%2$s</xliff:g> • 急速充電中 • 完了まで <xliff:g id="CHARGING_TIME_LEFT">%1$s</xliff:g>"</string> <string name="keyguard_indication_charging_time_slowly" msgid="301936949731705417">"<xliff:g id="PERCENTAGE">%2$s</xliff:g> • 低速充電中 • 完了まで <xliff:g id="CHARGING_TIME_LEFT">%1$s</xliff:g>"</string> <string name="keyguard_indication_charging_time_dock" msgid="3149328898931741271">"<xliff:g id="PERCENTAGE">%2$s</xliff:g> • 充電中 • フル充電まで <xliff:g id="CHARGING_TIME_LEFT">%1$s</xliff:g>"</string> + <string name="accessibility_action_open_communal_hub" msgid="3081702792413787849">"ロック画面のウィジェット"</string> <string name="communal_tutorial_indicator_text" msgid="4503010353591430123">"左にスワイプすると、コミュニティ チュートリアルが開始します"</string> <string name="cta_tile_button_to_open_widget_editor" msgid="3871562362382963878">"カスタマイズ"</string> <string name="cta_tile_button_to_dismiss" msgid="3377597875997861754">"閉じる"</string> @@ -459,6 +457,8 @@ <string name="button_text_to_open_settings" msgid="1987729256950941628">"設定を開く"</string> <string name="work_mode_off_title" msgid="5794818421357835873">"仕事用アプリの停止解除"</string> <string name="work_mode_turn_on" msgid="907813741770247267">"停止解除"</string> + <string name="accessibility_action_label_close_communal_hub" msgid="6790396569621032333">"ロック画面のウィジェットを閉じる"</string> + <string name="accessibility_content_description_for_communal_hub" msgid="1670220840599380118">"ロック画面のウィジェット"</string> <string name="accessibility_multi_user_switch_switcher" msgid="5330448341251092660">"ユーザーを切り替える"</string> <string name="accessibility_multi_user_list_switcher" msgid="8574105376229857407">"プルダウン メニュー"</string> <string name="guest_exit_guest_dialog_message" msgid="8183450985628495709">"このセッションでのアプリとデータはすべて削除されます。"</string> @@ -588,7 +588,7 @@ <string name="screen_pinning_negative" msgid="6882816864569211666">"いいえ"</string> <string name="screen_pinning_start" msgid="7483998671383371313">"アプリを固定しました"</string> <string name="screen_pinning_exit" msgid="4553787518387346893">"アプリの固定を解除しました"</string> - <string name="stream_voice_call" msgid="7468348170702375660">"発信"</string> + <string name="stream_voice_call" msgid="7468348170702375660">"通話"</string> <string name="stream_system" msgid="7663148785370565134">"システム"</string> <string name="stream_ring" msgid="7550670036738697526">"着信音"</string> <string name="stream_music" msgid="2188224742361847580">"メディア"</string> diff --git a/packages/SystemUI/res/values-ka/strings.xml b/packages/SystemUI/res/values-ka/strings.xml index d9483ec9d0f5..f42d2d725275 100644 --- a/packages/SystemUI/res/values-ka/strings.xml +++ b/packages/SystemUI/res/values-ka/strings.xml @@ -235,7 +235,8 @@ <string name="accessibility_desc_notification_shade" msgid="5355229129428759989">"შეტყობინებების ფარდა"</string> <string name="accessibility_desc_quick_settings" msgid="4374766941484719179">"სწრაფი პარამეტრები"</string> <string name="accessibility_desc_qs_notification_shade" msgid="8327226953072700376">"სწრაფი პარამეტრები და შეტყობინებების ფარდა"</string> - <string name="accessibility_desc_lock_screen" msgid="5983125095181194887">"ეკრანის დაბლოკვა."</string> + <!-- no translation found for accessibility_desc_lock_screen (409034672704273634) --> + <skip /> <string name="accessibility_desc_work_lock" msgid="4355620395354680575">"სამსახურის ჩაკეტილი ეკრანი"</string> <string name="accessibility_desc_close" msgid="8293708213442107755">"დახურვა"</string> <string name="accessibility_quick_settings_dnd_none_on" msgid="3235552940146035383">"სრული სიჩუმე"</string> @@ -270,20 +271,15 @@ <string name="see_all_bluetooth_devices" msgid="1761596816620200433">"ყველას ნახვა"</string> <string name="turn_on_bluetooth" msgid="5681370462180289071">"Bluetooth-ის გამოყენება"</string> <string name="quick_settings_bluetooth_device_connected" msgid="7884777006729260996">"დაკავშირებული"</string> - <!-- no translation found for quick_settings_bluetooth_device_audio_sharing (1496358082943301670) --> - <skip /> + <string name="quick_settings_bluetooth_device_audio_sharing" msgid="1496358082943301670">"აუდიოს გაზიარება"</string> <string name="quick_settings_bluetooth_device_saved" msgid="7549938728928069477">"შენახული"</string> <string name="accessibility_quick_settings_bluetooth_device_tap_to_disconnect" msgid="415980329093277342">"კავშირის გაწყვეტა"</string> <string name="accessibility_quick_settings_bluetooth_device_tap_to_activate" msgid="3724301751036877403">"გააქტიურება"</string> <string name="turn_on_bluetooth_auto_tomorrow" msgid="414836329962473906">"ხელახლა ავტომატურად ჩართვა ხვალ"</string> - <!-- no translation found for turn_on_bluetooth_auto_info_disabled (682984290339848844) --> - <skip /> - <!-- no translation found for turn_on_bluetooth_auto_info_enabled (7440944034584560279) --> - <skip /> - <!-- no translation found for quick_settings_bluetooth_audio_sharing_button (4499275822759907822) --> - <skip /> - <!-- no translation found for quick_settings_bluetooth_audio_sharing_button_sharing (8626191139359072540) --> - <skip /> + <string name="turn_on_bluetooth_auto_info_disabled" msgid="682984290339848844">"ისეთი ფუნქციები, როგორიცაა სწრაფი გაზიარება და ჩემი მოწყობილობის პოვნა, იყენებს Bluetooth-ს"</string> + <string name="turn_on_bluetooth_auto_info_enabled" msgid="7440944034584560279">"Bluetooth ჩაირთვება ხვალ დილით"</string> + <string name="quick_settings_bluetooth_audio_sharing_button" msgid="4499275822759907822">"აუდიოს გაზიარება"</string> + <string name="quick_settings_bluetooth_audio_sharing_button_sharing" msgid="8626191139359072540">"აუდიოს გაზიარება"</string> <string name="quick_settings_bluetooth_secondary_label_battery_level" msgid="4182034939479344093">"<xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE">%s</xliff:g> ბატარეა"</string> <string name="quick_settings_bluetooth_secondary_label_audio" msgid="780333390310051161">"აუდიო"</string> <string name="quick_settings_bluetooth_secondary_label_headset" msgid="2332093067553000852">"ყურსაცვამი"</string> @@ -376,6 +372,8 @@ <string name="quick_settings_hearing_devices_dialog_title" msgid="9004774017688484981">"სმენის აპარატები"</string> <string name="quick_settings_pair_hearing_devices" msgid="5987105102207447322">"ახალი მოწყობილობის დაწყვილება"</string> <string name="accessibility_hearing_device_pair_new_device" msgid="8440082580186130090">"დააწკაპუნეთ ახალი მოწყობილობის დასაწყვილებლად"</string> + <!-- no translation found for hearing_devices_presets_error (350363093458408536) --> + <skip /> <string name="sensor_privacy_start_use_mic_dialog_title" msgid="563796653825944944">"გსურთ მოწყობილობის მიკროფონის განბლოკვა?"</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> @@ -441,6 +439,8 @@ <string name="keyguard_indication_charging_time_fast" msgid="8390311020603859480">"<xliff:g id="PERCENTAGE">%2$s</xliff:g> • სწრაფად იტენება • სრულ დატენვამდე <xliff:g id="CHARGING_TIME_LEFT">%1$s</xliff:g>"</string> <string name="keyguard_indication_charging_time_slowly" msgid="301936949731705417">"<xliff:g id="PERCENTAGE">%2$s</xliff:g> • ნელა იტენება • სრულ დატენვამდე <xliff:g id="CHARGING_TIME_LEFT">%1$s</xliff:g>"</string> <string name="keyguard_indication_charging_time_dock" msgid="3149328898931741271">"<xliff:g id="PERCENTAGE">%2$s</xliff:g> • იტენება • სრულ დატენვამდე <xliff:g id="CHARGING_TIME_LEFT">%1$s</xliff:g>"</string> + <!-- no translation found for accessibility_action_open_communal_hub (3081702792413787849) --> + <skip /> <string name="communal_tutorial_indicator_text" msgid="4503010353591430123">"გადაფურცლეთ მარცხნივ, რათა დაიწყოთ საერთო სახელმძღვანელო"</string> <string name="cta_tile_button_to_open_widget_editor" msgid="3871562362382963878">"მორგება"</string> <string name="cta_tile_button_to_dismiss" msgid="3377597875997861754">"უარყოფა"</string> @@ -459,6 +459,10 @@ <string name="button_text_to_open_settings" msgid="1987729256950941628">"პარამეტრების გახსნა"</string> <string name="work_mode_off_title" msgid="5794818421357835873">"კვლავ გააქტიურდეს სამსახურის აპები?"</string> <string name="work_mode_turn_on" msgid="907813741770247267">"გააქტიურება"</string> + <!-- no translation found for accessibility_action_label_close_communal_hub (6790396569621032333) --> + <skip /> + <!-- no translation found for accessibility_content_description_for_communal_hub (1670220840599380118) --> + <skip /> <string name="accessibility_multi_user_switch_switcher" msgid="5330448341251092660">"მომხმარებლის გადართვა"</string> <string name="accessibility_multi_user_list_switcher" msgid="8574105376229857407">"ჩამოშლადი მენიუ"</string> <string name="guest_exit_guest_dialog_message" msgid="8183450985628495709">"ამ სესიის ყველა აპი და მონაცემი წაიშლება."</string> diff --git a/packages/SystemUI/res/values-kk/strings.xml b/packages/SystemUI/res/values-kk/strings.xml index 36ae88aaf43a..0ead6f8c95a8 100644 --- a/packages/SystemUI/res/values-kk/strings.xml +++ b/packages/SystemUI/res/values-kk/strings.xml @@ -235,7 +235,8 @@ <string name="accessibility_desc_notification_shade" msgid="5355229129428759989">"Хабарландыру тақтасы"</string> <string name="accessibility_desc_quick_settings" msgid="4374766941484719179">"Жылдам параметрлер."</string> <string name="accessibility_desc_qs_notification_shade" msgid="8327226953072700376">"Жылдам параметрлер мен хабарландыру тақтасы."</string> - <string name="accessibility_desc_lock_screen" msgid="5983125095181194887">"Бекіту экраны."</string> + <!-- no translation found for accessibility_desc_lock_screen (409034672704273634) --> + <skip /> <string name="accessibility_desc_work_lock" msgid="4355620395354680575">"Әрекетті құлыптау экраны"</string> <string name="accessibility_desc_close" msgid="8293708213442107755">"Жабу"</string> <string name="accessibility_quick_settings_dnd_none_on" msgid="3235552940146035383">"үнсіз"</string> @@ -376,6 +377,8 @@ <string name="quick_settings_hearing_devices_dialog_title" msgid="9004774017688484981">"Есту құрылғылары"</string> <string name="quick_settings_pair_hearing_devices" msgid="5987105102207447322">"Жаңа құрылғыны жұптау"</string> <string name="accessibility_hearing_device_pair_new_device" msgid="8440082580186130090">"Жаңа құрылғыны жұптау үшін басыңыз."</string> + <!-- no translation found for hearing_devices_presets_error (350363093458408536) --> + <skip /> <string name="sensor_privacy_start_use_mic_dialog_title" msgid="563796653825944944">"Құрылғы микрофонын блоктан шығару керек пе?"</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> @@ -441,6 +444,8 @@ <string name="keyguard_indication_charging_time_fast" msgid="8390311020603859480">"<xliff:g id="PERCENTAGE">%2$s</xliff:g> • Жылдам зарядтау • Толуына <xliff:g id="CHARGING_TIME_LEFT">%1$s</xliff:g> қалды."</string> <string name="keyguard_indication_charging_time_slowly" msgid="301936949731705417">"<xliff:g id="PERCENTAGE">%2$s</xliff:g> • Баяу зарядталуда • Толуына <xliff:g id="CHARGING_TIME_LEFT">%1$s</xliff:g> қалды."</string> <string name="keyguard_indication_charging_time_dock" msgid="3149328898931741271">"<xliff:g id="PERCENTAGE">%2$s</xliff:g> • Зарядталып жатыр. • Толуына <xliff:g id="CHARGING_TIME_LEFT">%1$s</xliff:g> қалды."</string> + <!-- no translation found for accessibility_action_open_communal_hub (3081702792413787849) --> + <skip /> <string name="communal_tutorial_indicator_text" msgid="4503010353591430123">"Ортақ оқулықты ашу үшін солға қарай сырғытыңыз."</string> <string name="cta_tile_button_to_open_widget_editor" msgid="3871562362382963878">"Бейімдеу"</string> <string name="cta_tile_button_to_dismiss" msgid="3377597875997861754">"Жабу"</string> @@ -459,6 +464,10 @@ <string name="button_text_to_open_settings" msgid="1987729256950941628">"Параметрлерді ашу"</string> <string name="work_mode_off_title" msgid="5794818421357835873">"Жұмыс қолданбаларын қайта қосасыз ба?"</string> <string name="work_mode_turn_on" msgid="907813741770247267">"Қайта қосу"</string> + <!-- no translation found for accessibility_action_label_close_communal_hub (6790396569621032333) --> + <skip /> + <!-- no translation found for accessibility_content_description_for_communal_hub (1670220840599380118) --> + <skip /> <string name="accessibility_multi_user_switch_switcher" msgid="5330448341251092660">"Пайдаланушыны ауыстыру"</string> <string name="accessibility_multi_user_list_switcher" msgid="8574105376229857407">"ашылмалы мәзір"</string> <string name="guest_exit_guest_dialog_message" msgid="8183450985628495709">"Осы сеанстағы барлық қолданба мен дерек жойылады."</string> diff --git a/packages/SystemUI/res/values-km/strings.xml b/packages/SystemUI/res/values-km/strings.xml index c7868db655d1..0661c76b35aa 100644 --- a/packages/SystemUI/res/values-km/strings.xml +++ b/packages/SystemUI/res/values-km/strings.xml @@ -235,7 +235,8 @@ <string name="accessibility_desc_notification_shade" msgid="5355229129428759989">"ពណ៌ការជូនដំណឹង"</string> <string name="accessibility_desc_quick_settings" msgid="4374766941484719179">"ការកំណត់រហ័ស។"</string> <string name="accessibility_desc_qs_notification_shade" msgid="8327226953072700376">"ការកំណត់រហ័ស និងផ្ទាំងជូនដំណឹង។"</string> - <string name="accessibility_desc_lock_screen" msgid="5983125095181194887">"ចាក់សោអេក្រង់។"</string> + <!-- no translation found for accessibility_desc_lock_screen (409034672704273634) --> + <skip /> <string name="accessibility_desc_work_lock" msgid="4355620395354680575">"អេក្រង់ចាក់សោលក្ខណៈការងារ"</string> <string name="accessibility_desc_close" msgid="8293708213442107755">"បិទ"</string> <string name="accessibility_quick_settings_dnd_none_on" msgid="3235552940146035383">"បិទសំឡេងទាំងស្រុង"</string> @@ -270,20 +271,15 @@ <string name="see_all_bluetooth_devices" msgid="1761596816620200433">"មើលទាំងអស់"</string> <string name="turn_on_bluetooth" msgid="5681370462180289071">"ប្រើប៊្លូធូស"</string> <string name="quick_settings_bluetooth_device_connected" msgid="7884777006729260996">"បានភ្ជាប់"</string> - <!-- no translation found for quick_settings_bluetooth_device_audio_sharing (1496358082943301670) --> - <skip /> + <string name="quick_settings_bluetooth_device_audio_sharing" msgid="1496358082943301670">"ការស្ដាប់សំឡេងរួមគ្នា"</string> <string name="quick_settings_bluetooth_device_saved" msgid="7549938728928069477">"បានរក្សាទុក"</string> <string name="accessibility_quick_settings_bluetooth_device_tap_to_disconnect" msgid="415980329093277342">"ផ្ដាច់"</string> <string name="accessibility_quick_settings_bluetooth_device_tap_to_activate" msgid="3724301751036877403">"បើកដំណើរការ"</string> <string name="turn_on_bluetooth_auto_tomorrow" msgid="414836329962473906">"បើកដោយស្វ័យប្រវត្តិម្ដងទៀតនៅថ្ងៃស្អែក"</string> - <!-- no translation found for turn_on_bluetooth_auto_info_disabled (682984290339848844) --> - <skip /> - <!-- no translation found for turn_on_bluetooth_auto_info_enabled (7440944034584560279) --> - <skip /> - <!-- no translation found for quick_settings_bluetooth_audio_sharing_button (4499275822759907822) --> - <skip /> - <!-- no translation found for quick_settings_bluetooth_audio_sharing_button_sharing (8626191139359072540) --> - <skip /> + <string name="turn_on_bluetooth_auto_info_disabled" msgid="682984290339848844">"មុខងារដូចជា Quick Share និង \"រកឧបករណ៍របស់ខ្ញុំ\" ប្រើប៊្លូធូស"</string> + <string name="turn_on_bluetooth_auto_info_enabled" msgid="7440944034584560279">"ប៊្លូធូសនឹងបើកនៅព្រឹកស្អែក"</string> + <string name="quick_settings_bluetooth_audio_sharing_button" msgid="4499275822759907822">"ការស្ដាប់សំឡេងរួមគ្នា"</string> + <string name="quick_settings_bluetooth_audio_sharing_button_sharing" msgid="8626191139359072540">"កំពុងស្ដាប់សំឡេងរួមគ្នា"</string> <string name="quick_settings_bluetooth_secondary_label_battery_level" msgid="4182034939479344093">"ថ្ម <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE">%s</xliff:g>"</string> <string name="quick_settings_bluetooth_secondary_label_audio" msgid="780333390310051161">"សំឡេង"</string> <string name="quick_settings_bluetooth_secondary_label_headset" msgid="2332093067553000852">"កាស"</string> @@ -376,6 +372,8 @@ <string name="quick_settings_hearing_devices_dialog_title" msgid="9004774017688484981">"ឧបករណ៍ជំនួយការស្ដាប់"</string> <string name="quick_settings_pair_hearing_devices" msgid="5987105102207447322">"ផ្គូផ្គងឧបករណ៍ថ្មី"</string> <string name="accessibility_hearing_device_pair_new_device" msgid="8440082580186130090">"ចុច ដើម្បីផ្គូផ្គងឧបករណ៍ថ្មី"</string> + <!-- no translation found for hearing_devices_presets_error (350363093458408536) --> + <skip /> <string name="sensor_privacy_start_use_mic_dialog_title" msgid="563796653825944944">"ឈប់ទប់ស្កាត់មីក្រូហ្វូនរបស់ឧបករណ៍ឬ?"</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> @@ -441,6 +439,8 @@ <string name="keyguard_indication_charging_time_fast" msgid="8390311020603859480">"<xliff:g id="PERCENTAGE">%2$s</xliff:g> • កំពុងសាកថ្មយ៉ាងឆាប់រហ័ស • ពេញក្នុងរយៈពេល <xliff:g id="CHARGING_TIME_LEFT">%1$s</xliff:g>"</string> <string name="keyguard_indication_charging_time_slowly" msgid="301936949731705417">"<xliff:g id="PERCENTAGE">%2$s</xliff:g> • កំពុងសាកថ្មយឺត • ពេញក្នុងរយៈពេល <xliff:g id="CHARGING_TIME_LEFT">%1$s</xliff:g>"</string> <string name="keyguard_indication_charging_time_dock" msgid="3149328898931741271">"<xliff:g id="PERCENTAGE">%2$s</xliff:g> • កំពុងសាកថ្ម • ពេញក្នុងរយៈពេល <xliff:g id="CHARGING_TIME_LEFT">%1$s</xliff:g>"</string> + <!-- no translation found for accessibility_action_open_communal_hub (3081702792413787849) --> + <skip /> <string name="communal_tutorial_indicator_text" msgid="4503010353591430123">"អូសទៅឆ្វេង ដើម្បីចាប់ផ្ដើមមេរៀនសហគមន៍"</string> <string name="cta_tile_button_to_open_widget_editor" msgid="3871562362382963878">"ប្ដូរតាមបំណង"</string> <string name="cta_tile_button_to_dismiss" msgid="3377597875997861754">"ច្រានចោល"</string> @@ -459,6 +459,10 @@ <string name="button_text_to_open_settings" msgid="1987729256950941628">"បើកការកំណត់"</string> <string name="work_mode_off_title" msgid="5794818421357835873">"ឈប់ផ្អាកកម្មវិធីការងារឬ?"</string> <string name="work_mode_turn_on" msgid="907813741770247267">"ឈប់ផ្អាក"</string> + <!-- no translation found for accessibility_action_label_close_communal_hub (6790396569621032333) --> + <skip /> + <!-- no translation found for accessibility_content_description_for_communal_hub (1670220840599380118) --> + <skip /> <string name="accessibility_multi_user_switch_switcher" msgid="5330448341251092660">"ប្ដូរអ្នកប្រើ"</string> <string name="accessibility_multi_user_list_switcher" msgid="8574105376229857407">"ម៉ឺនុយទាញចុះ"</string> <string name="guest_exit_guest_dialog_message" msgid="8183450985628495709">"កម្មវិធី និងទិន្នន័យទាំងអស់ក្នុងវគ្គនេះនឹងត្រូវលុប។"</string> diff --git a/packages/SystemUI/res/values-kn/strings.xml b/packages/SystemUI/res/values-kn/strings.xml index 42d655e105df..ad43b0d8936a 100644 --- a/packages/SystemUI/res/values-kn/strings.xml +++ b/packages/SystemUI/res/values-kn/strings.xml @@ -235,7 +235,8 @@ <string name="accessibility_desc_notification_shade" msgid="5355229129428759989">"ಅಧಿಸೂಚನೆಯ ಛಾಯೆ."</string> <string name="accessibility_desc_quick_settings" msgid="4374766941484719179">"ತ್ವರಿತ ಸೆಟ್ಟಿಂಗ್ಗಳು."</string> <string name="accessibility_desc_qs_notification_shade" msgid="8327226953072700376">"ತ್ವರಿತ ಸೆಟ್ಟಿಂಗ್ಗಳು ಮತ್ತು ಅಧಿಸೂಚನೆಯ ಪರದೆ."</string> - <string name="accessibility_desc_lock_screen" msgid="5983125095181194887">"ಲಾಕ್ ಸ್ಕ್ರೀನ್."</string> + <!-- no translation found for accessibility_desc_lock_screen (409034672704273634) --> + <skip /> <string name="accessibility_desc_work_lock" msgid="4355620395354680575">"ಕೆಲಸದ ಲಾಕ್ ಪರದೆ"</string> <string name="accessibility_desc_close" msgid="8293708213442107755">"ಮುಚ್ಚಿ"</string> <string name="accessibility_quick_settings_dnd_none_on" msgid="3235552940146035383">"ಸಂಪೂರ್ಣ ನಿಶ್ಯಬ್ಧ"</string> @@ -376,6 +377,8 @@ <string name="quick_settings_hearing_devices_dialog_title" msgid="9004774017688484981">"ಹಿಯರಿಂಗ್ ಸಾಧನಗಳು"</string> <string name="quick_settings_pair_hearing_devices" msgid="5987105102207447322">"ಹೊಸ ಸಾಧನವನ್ನು ಪೇರ್ ಮಾಡಿ"</string> <string name="accessibility_hearing_device_pair_new_device" msgid="8440082580186130090">"ಹೊಸ ಸಾಧನವನ್ನು ಜೋಡಿಸಲು ಕ್ಲಿಕ್ ಮಾಡಿ"</string> + <!-- no translation found for hearing_devices_presets_error (350363093458408536) --> + <skip /> <string name="sensor_privacy_start_use_mic_dialog_title" msgid="563796653825944944">"ಸಾಧನದ ಮೈಕ್ರೋಫೋನ್ ನಿರ್ಬಂಧವನ್ನು ತೆಗೆಯಬೇಕೆ?"</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> @@ -441,6 +444,8 @@ <string name="keyguard_indication_charging_time_fast" msgid="8390311020603859480">"<xliff:g id="PERCENTAGE">%2$s</xliff:g> • ವೇಗವಾಗಿ ಚಾರ್ಜ್ ಆಗುತ್ತಿದೆ • <xliff:g id="CHARGING_TIME_LEFT">%1$s</xliff:g> ಸಮಯದಲ್ಲಿ ಪೂರ್ಣಗೊಳ್ಳುತ್ತದೆ"</string> <string name="keyguard_indication_charging_time_slowly" msgid="301936949731705417">"<xliff:g id="PERCENTAGE">%2$s</xliff:g> • ನಿಧಾನವಾಗಿ ಚಾರ್ಜ್ ಆಗುತ್ತಿದೆ • <xliff:g id="CHARGING_TIME_LEFT">%1$s</xliff:g> ಸಮಯದಲ್ಲಿ ಪೂರ್ಣಗೊಳ್ಳುತ್ತದೆ"</string> <string name="keyguard_indication_charging_time_dock" msgid="3149328898931741271">"<xliff:g id="PERCENTAGE">%2$s</xliff:g> • ಚಾರ್ಜ್ ಆಗುತ್ತಿದೆ • <xliff:g id="CHARGING_TIME_LEFT">%1$s</xliff:g> ದಲ್ಲಿ ಪೂರ್ಣಗೊಳ್ಳುತ್ತದೆ"</string> + <!-- no translation found for accessibility_action_open_communal_hub (3081702792413787849) --> + <skip /> <string name="communal_tutorial_indicator_text" msgid="4503010353591430123">"ಸಮುದಾಯದ ಟ್ಯುಟೋರಿಯಲ್ ಅನ್ನು ಪ್ರಾರಂಭಿಸಲು ಎಡಕ್ಕೆ ಸ್ವೈಪ್ ಮಾಡಿ"</string> <string name="cta_tile_button_to_open_widget_editor" msgid="3871562362382963878">"ಕಸ್ಟಮೈಸ್ ಮಾಡಿ"</string> <string name="cta_tile_button_to_dismiss" msgid="3377597875997861754">"ವಜಾಗೊಳಿಸಿ"</string> @@ -459,6 +464,10 @@ <string name="button_text_to_open_settings" msgid="1987729256950941628">"ಸೆಟ್ಟಿಂಗ್ಗಳನ್ನು ತೆರೆಯಿರಿ"</string> <string name="work_mode_off_title" msgid="5794818421357835873">"ಕೆಲಸದ ಆ್ಯಪ್ ವಿರಾಮ ರದ್ದುಮಾಡಬೇಕೇ"</string> <string name="work_mode_turn_on" msgid="907813741770247267">"ವಿರಾಮವನ್ನು ರದ್ದುಗೊಳಿಸಿ"</string> + <!-- no translation found for accessibility_action_label_close_communal_hub (6790396569621032333) --> + <skip /> + <!-- no translation found for accessibility_content_description_for_communal_hub (1670220840599380118) --> + <skip /> <string name="accessibility_multi_user_switch_switcher" msgid="5330448341251092660">"ಬಳಕೆದಾರರನ್ನು ಬದಲಿಸಿ"</string> <string name="accessibility_multi_user_list_switcher" msgid="8574105376229857407">"ಪುಲ್ಡೌನ್ ಮೆನು"</string> <string name="guest_exit_guest_dialog_message" msgid="8183450985628495709">"ಈ ಸೆಶನ್ನಲ್ಲಿನ ಎಲ್ಲಾ ಆ್ಯಪ್ಗಳು ಮತ್ತು ಡೇಟಾವನ್ನು ಅಳಿಸಲಾಗುತ್ತದೆ."</string> @@ -873,7 +882,7 @@ <string name="accessibility_quick_settings_edit" msgid="1523745183383815910">"ಸೆಟ್ಟಿಂಗ್ಗಳ ಕ್ರಮವನ್ನು ಎಡಿಟ್ ಮಾಡಿ."</string> <string name="accessibility_quick_settings_power_menu" msgid="6820426108301758412">"ಪವರ್ ಮೆನು"</string> <string name="accessibility_quick_settings_page" msgid="7506322631645550961">"<xliff:g id="ID_2">%2$d</xliff:g> ರಲ್ಲಿ <xliff:g id="ID_1">%1$d</xliff:g> ಪುಟ"</string> - <string name="tuner_lock_screen" msgid="2267383813241144544">"ಲಾಕ್ ಪರದೆ"</string> + <string name="tuner_lock_screen" msgid="2267383813241144544">"ಲಾಕ್ ಸ್ಕ್ರೀನ್"</string> <string name="finder_active" msgid="7907846989716941952">"ಪವರ್ ಆಫ್ ಆಗಿರುವಾಗಲೂ ನೀವು Find My Device ಮೂಲಕ ಈ ಫೋನ್ ಅನ್ನು ಪತ್ತೆ ಮಾಡಬಹುದು"</string> <string name="shutdown_progress" msgid="5464239146561542178">"ಶಟ್ ಡೌನ್ ಮಾಡಲಾಗುತ್ತಿದೆ…"</string> <string name="thermal_shutdown_dialog_help_text" msgid="6413474593462902901">"ಕಾಳಜಿಯ ಹಂತಗಳನ್ನು ವೀಕ್ಷಿಸಿ"</string> diff --git a/packages/SystemUI/res/values-ko/strings.xml b/packages/SystemUI/res/values-ko/strings.xml index 3c34f8d258ba..2b6551ef8bae 100644 --- a/packages/SystemUI/res/values-ko/strings.xml +++ b/packages/SystemUI/res/values-ko/strings.xml @@ -235,7 +235,8 @@ <string name="accessibility_desc_notification_shade" msgid="5355229129428759989">"알림 세부정보"</string> <string name="accessibility_desc_quick_settings" msgid="4374766941484719179">"빠른 설정"</string> <string name="accessibility_desc_qs_notification_shade" msgid="8327226953072700376">"빠른 설정 및 알림 창입니다."</string> - <string name="accessibility_desc_lock_screen" msgid="5983125095181194887">"화면을 잠급니다."</string> + <!-- no translation found for accessibility_desc_lock_screen (409034672704273634) --> + <skip /> <string name="accessibility_desc_work_lock" msgid="4355620395354680575">"업무용 잠금 화면"</string> <string name="accessibility_desc_close" msgid="8293708213442107755">"닫기"</string> <string name="accessibility_quick_settings_dnd_none_on" msgid="3235552940146035383">"모두 음소거"</string> @@ -376,6 +377,8 @@ <string name="quick_settings_hearing_devices_dialog_title" msgid="9004774017688484981">"청각 보조 기기"</string> <string name="quick_settings_pair_hearing_devices" msgid="5987105102207447322">"새 기기와 페어링"</string> <string name="accessibility_hearing_device_pair_new_device" msgid="8440082580186130090">"새 기기와 페어링하려면 클릭하세요"</string> + <!-- no translation found for hearing_devices_presets_error (350363093458408536) --> + <skip /> <string name="sensor_privacy_start_use_mic_dialog_title" msgid="563796653825944944">"기기 마이크를 차단 해제하시겠습니까?"</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> @@ -441,6 +444,8 @@ <string name="keyguard_indication_charging_time_fast" msgid="8390311020603859480">"<xliff:g id="PERCENTAGE">%2$s</xliff:g> • 고속 충전 중 • <xliff:g id="CHARGING_TIME_LEFT">%1$s</xliff:g> 후 충전 완료"</string> <string name="keyguard_indication_charging_time_slowly" msgid="301936949731705417">"<xliff:g id="PERCENTAGE">%2$s</xliff:g> • 저속 충전 중 • <xliff:g id="CHARGING_TIME_LEFT">%1$s</xliff:g> 후 충전 완료"</string> <string name="keyguard_indication_charging_time_dock" msgid="3149328898931741271">"<xliff:g id="PERCENTAGE">%2$s</xliff:g> • 충전 중 • <xliff:g id="CHARGING_TIME_LEFT">%1$s</xliff:g> 후 충전 완료"</string> + <!-- no translation found for accessibility_action_open_communal_hub (3081702792413787849) --> + <skip /> <string name="communal_tutorial_indicator_text" msgid="4503010353591430123">"공동 튜토리얼을 시작하려면 왼쪽으로 스와이프하세요"</string> <string name="cta_tile_button_to_open_widget_editor" msgid="3871562362382963878">"맞춤설정"</string> <string name="cta_tile_button_to_dismiss" msgid="3377597875997861754">"닫기"</string> @@ -459,6 +464,10 @@ <string name="button_text_to_open_settings" msgid="1987729256950941628">"설정 열기"</string> <string name="work_mode_off_title" msgid="5794818421357835873">"직장 앱 일시중지를 해제하시겠습니까?"</string> <string name="work_mode_turn_on" msgid="907813741770247267">"일시중지 해제"</string> + <!-- no translation found for accessibility_action_label_close_communal_hub (6790396569621032333) --> + <skip /> + <!-- no translation found for accessibility_content_description_for_communal_hub (1670220840599380118) --> + <skip /> <string name="accessibility_multi_user_switch_switcher" msgid="5330448341251092660">"사용자 전환"</string> <string name="accessibility_multi_user_list_switcher" msgid="8574105376229857407">"풀다운 메뉴"</string> <string name="guest_exit_guest_dialog_message" msgid="8183450985628495709">"이 세션에 있는 모든 앱과 데이터가 삭제됩니다."</string> @@ -588,7 +597,7 @@ <string name="screen_pinning_negative" msgid="6882816864569211666">"거부"</string> <string name="screen_pinning_start" msgid="7483998671383371313">"앱 고정됨"</string> <string name="screen_pinning_exit" msgid="4553787518387346893">"앱 고정 해제됨"</string> - <string name="stream_voice_call" msgid="7468348170702375660">"전화걸기"</string> + <string name="stream_voice_call" msgid="7468348170702375660">"통화"</string> <string name="stream_system" msgid="7663148785370565134">"시스템"</string> <string name="stream_ring" msgid="7550670036738697526">"벨소리"</string> <string name="stream_music" msgid="2188224742361847580">"미디어"</string> diff --git a/packages/SystemUI/res/values-ky/strings.xml b/packages/SystemUI/res/values-ky/strings.xml index ad9d2f7c811b..df94537fc211 100644 --- a/packages/SystemUI/res/values-ky/strings.xml +++ b/packages/SystemUI/res/values-ky/strings.xml @@ -235,7 +235,8 @@ <string name="accessibility_desc_notification_shade" msgid="5355229129428759989">"Билдирмелер тактасы."</string> <string name="accessibility_desc_quick_settings" msgid="4374766941484719179">"Тез тууралоолор."</string> <string name="accessibility_desc_qs_notification_shade" msgid="8327226953072700376">"Ыкчам параметрлер жана билдирмелер тактасы."</string> - <string name="accessibility_desc_lock_screen" msgid="5983125095181194887">"Кулпуланган экран."</string> + <!-- no translation found for accessibility_desc_lock_screen (409034672704273634) --> + <skip /> <string name="accessibility_desc_work_lock" msgid="4355620395354680575">"Жумуштун кулпуланган экраны"</string> <string name="accessibility_desc_close" msgid="8293708213442107755">"Жабуу"</string> <string name="accessibility_quick_settings_dnd_none_on" msgid="3235552940146035383">"тымтырс"</string> @@ -376,6 +377,8 @@ <string name="quick_settings_hearing_devices_dialog_title" msgid="9004774017688484981">"Угуу аппараттары"</string> <string name="quick_settings_pair_hearing_devices" msgid="5987105102207447322">"Жаңы түзмөк кошуу"</string> <string name="accessibility_hearing_device_pair_new_device" msgid="8440082580186130090">"Жаңы түзмөк кошуу үчүн басыңыз"</string> + <!-- no translation found for hearing_devices_presets_error (350363093458408536) --> + <skip /> <string name="sensor_privacy_start_use_mic_dialog_title" msgid="563796653825944944">"Түзмөктүн микрофонун бөгөттөн чыгарасызбы?"</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> @@ -441,6 +444,8 @@ <string name="keyguard_indication_charging_time_fast" msgid="8390311020603859480">"<xliff:g id="PERCENTAGE">%2$s</xliff:g> • Тез кубатталууда • Толгонго чейин <xliff:g id="CHARGING_TIME_LEFT">%1$s</xliff:g> калды"</string> <string name="keyguard_indication_charging_time_slowly" msgid="301936949731705417">"<xliff:g id="PERCENTAGE">%2$s</xliff:g> • Жай кубатталууда • Толгонго чейин <xliff:g id="CHARGING_TIME_LEFT">%1$s</xliff:g> калды"</string> <string name="keyguard_indication_charging_time_dock" msgid="3149328898931741271">"<xliff:g id="PERCENTAGE">%2$s</xliff:g> • Кубатталууда • Толгонго чейин <xliff:g id="CHARGING_TIME_LEFT">%1$s</xliff:g> калды"</string> + <!-- no translation found for accessibility_action_open_communal_hub (3081702792413787849) --> + <skip /> <string name="communal_tutorial_indicator_text" msgid="4503010353591430123">"Жалпы үйрөткүчтү иштетүү үчүн солго сүрүңүз"</string> <string name="cta_tile_button_to_open_widget_editor" msgid="3871562362382963878">"Ыңгайлаштыруу"</string> <string name="cta_tile_button_to_dismiss" msgid="3377597875997861754">"Жабуу"</string> @@ -459,6 +464,10 @@ <string name="button_text_to_open_settings" msgid="1987729256950941628">"Параметрлерди ачуу"</string> <string name="work_mode_off_title" msgid="5794818421357835873">"Жумуш колдонмолорун иштетесизби?"</string> <string name="work_mode_turn_on" msgid="907813741770247267">"Иштетүү"</string> + <!-- no translation found for accessibility_action_label_close_communal_hub (6790396569621032333) --> + <skip /> + <!-- no translation found for accessibility_content_description_for_communal_hub (1670220840599380118) --> + <skip /> <string name="accessibility_multi_user_switch_switcher" msgid="5330448341251092660">"Колдонуучуну которуу"</string> <string name="accessibility_multi_user_list_switcher" msgid="8574105376229857407">"ылдый түшүүчү меню"</string> <string name="guest_exit_guest_dialog_message" msgid="8183450985628495709">"Бул сеанстагы бардык колдонмолор жана аларга байланыштуу нерселер өчүрүлөт."</string> diff --git a/packages/SystemUI/res/values-lo/strings.xml b/packages/SystemUI/res/values-lo/strings.xml index eb9e1ebeda9c..e646c5711327 100644 --- a/packages/SystemUI/res/values-lo/strings.xml +++ b/packages/SystemUI/res/values-lo/strings.xml @@ -235,7 +235,7 @@ <string name="accessibility_desc_notification_shade" msgid="5355229129428759989">"ໜ້າຈໍແຈ້ງເຕືອນ."</string> <string name="accessibility_desc_quick_settings" msgid="4374766941484719179">"ການຕັ້ງຄ່າດ່ວນ."</string> <string name="accessibility_desc_qs_notification_shade" msgid="8327226953072700376">"ການຕັ້ງຄ່າດ່ວນ ແລະ ເງົາການແຈ້ງເຕືອນ."</string> - <string name="accessibility_desc_lock_screen" msgid="5983125095181194887">"ລັອກໜ້າຈໍ."</string> + <string name="accessibility_desc_lock_screen" msgid="409034672704273634">"ໜ້າຈໍລັອກ"</string> <string name="accessibility_desc_work_lock" msgid="4355620395354680575">"ໜ້າຈໍລັອກວຽກ"</string> <string name="accessibility_desc_close" msgid="8293708213442107755">"ປິດ"</string> <string name="accessibility_quick_settings_dnd_none_on" msgid="3235552940146035383">"ງຽບທັງໝົດ"</string> @@ -270,20 +270,15 @@ <string name="see_all_bluetooth_devices" msgid="1761596816620200433">"ເບິ່ງທັງໝົດ"</string> <string name="turn_on_bluetooth" msgid="5681370462180289071">"ໃຊ້ Bluetooth"</string> <string name="quick_settings_bluetooth_device_connected" msgid="7884777006729260996">"ເຊື່ອມຕໍ່ແລ້ວ"</string> - <!-- no translation found for quick_settings_bluetooth_device_audio_sharing (1496358082943301670) --> - <skip /> + <string name="quick_settings_bluetooth_device_audio_sharing" msgid="1496358082943301670">"ການແບ່ງປັນສຽງ"</string> <string name="quick_settings_bluetooth_device_saved" msgid="7549938728928069477">"ບັນທຶກແລ້ວ"</string> <string name="accessibility_quick_settings_bluetooth_device_tap_to_disconnect" msgid="415980329093277342">"ຕັດການເຊື່ອມຕໍ່"</string> <string name="accessibility_quick_settings_bluetooth_device_tap_to_activate" msgid="3724301751036877403">"ເປີດນຳໃຊ້"</string> <string name="turn_on_bluetooth_auto_tomorrow" msgid="414836329962473906">"ເປີດໃຊ້ໂດຍອັດຕະໂນມັດອີກຄັ້ງມື້ອື່ນ"</string> - <!-- no translation found for turn_on_bluetooth_auto_info_disabled (682984290339848844) --> - <skip /> - <!-- no translation found for turn_on_bluetooth_auto_info_enabled (7440944034584560279) --> - <skip /> - <!-- no translation found for quick_settings_bluetooth_audio_sharing_button (4499275822759907822) --> - <skip /> - <!-- no translation found for quick_settings_bluetooth_audio_sharing_button_sharing (8626191139359072540) --> - <skip /> + <string name="turn_on_bluetooth_auto_info_disabled" msgid="682984290339848844">"ຄຸນສົມບັດຕ່າງໆໃຊ້ Bluetooth ເຊັ່ນ: ການແຊຣ໌ດ່ວນ ແລະ ຊອກຫາອຸປະກອນຂອງຂ້ອຍ"</string> + <string name="turn_on_bluetooth_auto_info_enabled" msgid="7440944034584560279">"Bluetooth ຈະເປີດມື້ອື່ນເຊົ້າ"</string> + <string name="quick_settings_bluetooth_audio_sharing_button" msgid="4499275822759907822">"ການແບ່ງປັນສຽງ"</string> + <string name="quick_settings_bluetooth_audio_sharing_button_sharing" msgid="8626191139359072540">"ກຳລັງແບ່ງປັນສຽງ"</string> <string name="quick_settings_bluetooth_secondary_label_battery_level" msgid="4182034939479344093">"ແບັດເຕີຣີ <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE">%s</xliff:g>"</string> <string name="quick_settings_bluetooth_secondary_label_audio" msgid="780333390310051161">"ສຽງ"</string> <string name="quick_settings_bluetooth_secondary_label_headset" msgid="2332093067553000852">"ຊຸດຫູຟັງ"</string> @@ -376,6 +371,8 @@ <string name="quick_settings_hearing_devices_dialog_title" msgid="9004774017688484981">"ອຸປະກອນຊ່ວຍຟັງ"</string> <string name="quick_settings_pair_hearing_devices" msgid="5987105102207447322">"ຈັບຄູ່ອຸປະກອນໃໝ່"</string> <string name="accessibility_hearing_device_pair_new_device" msgid="8440082580186130090">"ຄລິກເພື່ອຈັບຄູ່ອຸປະກອນໃໝ່"</string> + <!-- no translation found for hearing_devices_presets_error (350363093458408536) --> + <skip /> <string name="sensor_privacy_start_use_mic_dialog_title" msgid="563796653825944944">"ປົດບລັອກໄມໂຄຣໂຟນອຸປະກອນບໍ?"</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> @@ -441,6 +438,7 @@ <string name="keyguard_indication_charging_time_fast" msgid="8390311020603859480">"<xliff:g id="PERCENTAGE">%2$s</xliff:g> • ກຳລັງສາກໄຟແບບໄວ • ຈະເຕັມໃນອີກ <xliff:g id="CHARGING_TIME_LEFT">%1$s</xliff:g>"</string> <string name="keyguard_indication_charging_time_slowly" msgid="301936949731705417">"<xliff:g id="PERCENTAGE">%2$s</xliff:g> • ກຳລັງສາກໄຟແບບຊ້າ • ຈະເຕັມໃນອີກ <xliff:g id="CHARGING_TIME_LEFT">%1$s</xliff:g>"</string> <string name="keyguard_indication_charging_time_dock" msgid="3149328898931741271">"<xliff:g id="PERCENTAGE">%2$s</xliff:g> • ກຳລັງສາກໄຟ • ຈະເຕັມໃນອີກ <xliff:g id="CHARGING_TIME_LEFT">%1$s</xliff:g>"</string> + <string name="accessibility_action_open_communal_hub" msgid="3081702792413787849">"ວິດເຈັດຢູ່ໜ້າຈໍລັອກ"</string> <string name="communal_tutorial_indicator_text" msgid="4503010353591430123">"ປັດຊ້າຍເພື່ອເລີ່ມບົດແນະນຳສ່ວນກາງ"</string> <string name="cta_tile_button_to_open_widget_editor" msgid="3871562362382963878">"ປັບແຕ່ງ"</string> <string name="cta_tile_button_to_dismiss" msgid="3377597875997861754">"ປ່ອຍໄປ"</string> @@ -459,6 +457,8 @@ <string name="button_text_to_open_settings" msgid="1987729256950941628">"ເປີດການຕັ້ງຄ່າ"</string> <string name="work_mode_off_title" msgid="5794818421357835873">"ຍົກເລີກການຢຸດຊົ່ວຄາວແອັບບ່ອນເຮັດວຽກບໍ?"</string> <string name="work_mode_turn_on" msgid="907813741770247267">"ຍົກເລີກການຢຸດຊົ່ວຄາວ"</string> + <string name="accessibility_action_label_close_communal_hub" msgid="6790396569621032333">"ປິດວິດເຈັດຢູ່ໜ້າຈໍລັອກ"</string> + <string name="accessibility_content_description_for_communal_hub" msgid="1670220840599380118">"ວິດເຈັດຢູ່ໜ້າຈໍລັອກ"</string> <string name="accessibility_multi_user_switch_switcher" msgid="5330448341251092660">"ສະຫຼັບຜູ້ໃຊ້"</string> <string name="accessibility_multi_user_list_switcher" msgid="8574105376229857407">"ເມນູແບບດຶງລົງ"</string> <string name="guest_exit_guest_dialog_message" msgid="8183450985628495709">"ແອັບຯແລະຂໍ້ມູນທັງໝົດໃນເຊດຊັນນີ້ຈະຖືກລຶບອອກ."</string> diff --git a/packages/SystemUI/res/values-lt/strings.xml b/packages/SystemUI/res/values-lt/strings.xml index 63971ab060d6..016641ed5403 100644 --- a/packages/SystemUI/res/values-lt/strings.xml +++ b/packages/SystemUI/res/values-lt/strings.xml @@ -235,7 +235,8 @@ <string name="accessibility_desc_notification_shade" msgid="5355229129428759989">"Pranešimų gaubtas."</string> <string name="accessibility_desc_quick_settings" msgid="4374766941484719179">"Spartieji nustatymai."</string> <string name="accessibility_desc_qs_notification_shade" msgid="8327226953072700376">"Spartieji nustatymai ir pranešimų skydelis."</string> - <string name="accessibility_desc_lock_screen" msgid="5983125095181194887">"Užrakinimo ekranas."</string> + <!-- no translation found for accessibility_desc_lock_screen (409034672704273634) --> + <skip /> <string name="accessibility_desc_work_lock" msgid="4355620395354680575">"Darbo profilio užrakinimo ekranas"</string> <string name="accessibility_desc_close" msgid="8293708213442107755">"Uždaryti"</string> <string name="accessibility_quick_settings_dnd_none_on" msgid="3235552940146035383">"visiška tyla"</string> @@ -376,6 +377,8 @@ <string name="quick_settings_hearing_devices_dialog_title" msgid="9004774017688484981">"Klausos įrenginiai"</string> <string name="quick_settings_pair_hearing_devices" msgid="5987105102207447322">"Susieti naują įrenginį"</string> <string name="accessibility_hearing_device_pair_new_device" msgid="8440082580186130090">"Spustelėkite, kad susietumėte naują įrenginį"</string> + <!-- no translation found for hearing_devices_presets_error (350363093458408536) --> + <skip /> <string name="sensor_privacy_start_use_mic_dialog_title" msgid="563796653825944944">"Panaikinti įrenginio mikrofono blokavimą?"</string> <string name="sensor_privacy_start_use_camera_dialog_title" msgid="8807639852654305227">"Panaikinti įrenginio fotoaparato blokavimą?"</string> <string name="sensor_privacy_start_use_mic_camera_dialog_title" msgid="4316471859905020023">"Panaikinti įrenginio fotoaparato ir mikrofono blokavimą?"</string> @@ -441,6 +444,8 @@ <string name="keyguard_indication_charging_time_fast" msgid="8390311020603859480">"<xliff:g id="PERCENTAGE">%2$s</xliff:g> • Sparčiai įkraunama • <xliff:g id="CHARGING_TIME_LEFT">%1$s</xliff:g> iki visiško įkrovimo"</string> <string name="keyguard_indication_charging_time_slowly" msgid="301936949731705417">"<xliff:g id="PERCENTAGE">%2$s</xliff:g> • Lėtai įkraunama • <xliff:g id="CHARGING_TIME_LEFT">%1$s</xliff:g> iki visiško įkrovimo"</string> <string name="keyguard_indication_charging_time_dock" msgid="3149328898931741271">"<xliff:g id="PERCENTAGE">%2$s</xliff:g> • Įkraunama • <xliff:g id="CHARGING_TIME_LEFT">%1$s</xliff:g> iki visiško įkrovimo"</string> + <!-- no translation found for accessibility_action_open_communal_hub (3081702792413787849) --> + <skip /> <string name="communal_tutorial_indicator_text" msgid="4503010353591430123">"Perbraukite kairėn, paleistumėte bendruomenės mokomąją medžiagą"</string> <string name="cta_tile_button_to_open_widget_editor" msgid="3871562362382963878">"Tinkinti"</string> <string name="cta_tile_button_to_dismiss" msgid="3377597875997861754">"Atsisakyti"</string> @@ -459,6 +464,10 @@ <string name="button_text_to_open_settings" msgid="1987729256950941628">"Atidaryti nustatymus"</string> <string name="work_mode_off_title" msgid="5794818421357835873">"Atš. darbo progr. pristabd.?"</string> <string name="work_mode_turn_on" msgid="907813741770247267">"Atšaukti pristabdymą"</string> + <!-- no translation found for accessibility_action_label_close_communal_hub (6790396569621032333) --> + <skip /> + <!-- no translation found for accessibility_content_description_for_communal_hub (1670220840599380118) --> + <skip /> <string name="accessibility_multi_user_switch_switcher" msgid="5330448341251092660">"Perjungti naudotoją"</string> <string name="accessibility_multi_user_list_switcher" msgid="8574105376229857407">"išplečiamasis meniu"</string> <string name="guest_exit_guest_dialog_message" msgid="8183450985628495709">"Bus ištrintos visos šios sesijos programos ir duomenys."</string> diff --git a/packages/SystemUI/res/values-lv/strings.xml b/packages/SystemUI/res/values-lv/strings.xml index 4b7507de43d1..a0c39da9c0f9 100644 --- a/packages/SystemUI/res/values-lv/strings.xml +++ b/packages/SystemUI/res/values-lv/strings.xml @@ -235,7 +235,8 @@ <string name="accessibility_desc_notification_shade" msgid="5355229129428759989">"Paziņojumu panelis"</string> <string name="accessibility_desc_quick_settings" msgid="4374766941484719179">"Ātrie iestatījumi"</string> <string name="accessibility_desc_qs_notification_shade" msgid="8327226953072700376">"Ātrie iestatījumi un paziņojumu panelis."</string> - <string name="accessibility_desc_lock_screen" msgid="5983125095181194887">"Bloķēšanas ekrāns."</string> + <!-- no translation found for accessibility_desc_lock_screen (409034672704273634) --> + <skip /> <string name="accessibility_desc_work_lock" msgid="4355620395354680575">"Darba profila bloķēšanas ekrāns"</string> <string name="accessibility_desc_close" msgid="8293708213442107755">"Aizvērt"</string> <string name="accessibility_quick_settings_dnd_none_on" msgid="3235552940146035383">"pilnīgs klusums"</string> @@ -376,6 +377,8 @@ <string name="quick_settings_hearing_devices_dialog_title" msgid="9004774017688484981">"Dzirdes aparāti"</string> <string name="quick_settings_pair_hearing_devices" msgid="5987105102207447322">"Savienojiet pārī jaunu ierīci"</string> <string name="accessibility_hearing_device_pair_new_device" msgid="8440082580186130090">"Noklikšķiniet, lai savienotu pārī jaunu ierīci"</string> + <!-- no translation found for hearing_devices_presets_error (350363093458408536) --> + <skip /> <string name="sensor_privacy_start_use_mic_dialog_title" msgid="563796653825944944">"Vai atbloķēt ierīces mikrofonu?"</string> <string name="sensor_privacy_start_use_camera_dialog_title" msgid="8807639852654305227">"Vai vēlaties atbloķēt ierīces kameru?"</string> <string name="sensor_privacy_start_use_mic_camera_dialog_title" msgid="4316471859905020023">"Vai atbloķēt ierīces kameru un mikrofonu?"</string> @@ -441,6 +444,8 @@ <string name="keyguard_indication_charging_time_fast" msgid="8390311020603859480">"<xliff:g id="PERCENTAGE">%2$s</xliff:g> • Ātrā uzlāde • Laiks līdz pilnai uzlādei: <xliff:g id="CHARGING_TIME_LEFT">%1$s</xliff:g>"</string> <string name="keyguard_indication_charging_time_slowly" msgid="301936949731705417">"<xliff:g id="PERCENTAGE">%2$s</xliff:g> • Lēnā uzlāde • Laiks līdz pilnai uzlādei: <xliff:g id="CHARGING_TIME_LEFT">%1$s</xliff:g>"</string> <string name="keyguard_indication_charging_time_dock" msgid="3149328898931741271">"<xliff:g id="PERCENTAGE">%2$s</xliff:g> • Notiek uzlāde • Laiks līdz pilnai uzlādei: <xliff:g id="CHARGING_TIME_LEFT">%1$s</xliff:g>"</string> + <!-- no translation found for accessibility_action_open_communal_hub (3081702792413787849) --> + <skip /> <string name="communal_tutorial_indicator_text" msgid="4503010353591430123">"Velciet pa kreisi, lai palaistu kopienas pamācību."</string> <string name="cta_tile_button_to_open_widget_editor" msgid="3871562362382963878">"Pielāgot"</string> <string name="cta_tile_button_to_dismiss" msgid="3377597875997861754">"Nerādīt"</string> @@ -459,6 +464,10 @@ <string name="button_text_to_open_settings" msgid="1987729256950941628">"Atvērt iestatījumus"</string> <string name="work_mode_off_title" msgid="5794818421357835873">"Vai aktivizēt darba lietotnes?"</string> <string name="work_mode_turn_on" msgid="907813741770247267">"Aktivizēt"</string> + <!-- no translation found for accessibility_action_label_close_communal_hub (6790396569621032333) --> + <skip /> + <!-- no translation found for accessibility_content_description_for_communal_hub (1670220840599380118) --> + <skip /> <string name="accessibility_multi_user_switch_switcher" msgid="5330448341251092660">"Mainīt lietotāju"</string> <string name="accessibility_multi_user_list_switcher" msgid="8574105376229857407">"novelkamā izvēlne"</string> <string name="guest_exit_guest_dialog_message" msgid="8183450985628495709">"Tiks dzēstas visas šīs sesijas lietotnes un dati."</string> diff --git a/packages/SystemUI/res/values-mk/strings.xml b/packages/SystemUI/res/values-mk/strings.xml index ba29ee6c89a1..9ed27e8d7eba 100644 --- a/packages/SystemUI/res/values-mk/strings.xml +++ b/packages/SystemUI/res/values-mk/strings.xml @@ -235,7 +235,8 @@ <string name="accessibility_desc_notification_shade" msgid="5355229129428759989">"Панел за известување"</string> <string name="accessibility_desc_quick_settings" msgid="4374766941484719179">"Брзи поставки."</string> <string name="accessibility_desc_qs_notification_shade" msgid="8327226953072700376">"„Брзи поставки“ и „Панел со известувања“."</string> - <string name="accessibility_desc_lock_screen" msgid="5983125095181194887">"Заклучен екран."</string> + <!-- no translation found for accessibility_desc_lock_screen (409034672704273634) --> + <skip /> <string name="accessibility_desc_work_lock" msgid="4355620395354680575">"Работен заклучен екран"</string> <string name="accessibility_desc_close" msgid="8293708213442107755">"Затвори"</string> <string name="accessibility_quick_settings_dnd_none_on" msgid="3235552940146035383">"целосна тишина"</string> @@ -376,6 +377,8 @@ <string name="quick_settings_hearing_devices_dialog_title" msgid="9004774017688484981">"Слушни апарати"</string> <string name="quick_settings_pair_hearing_devices" msgid="5987105102207447322">"Спари нов уред"</string> <string name="accessibility_hearing_device_pair_new_device" msgid="8440082580186130090">"Кликнете за да спарите нов уред"</string> + <!-- no translation found for hearing_devices_presets_error (350363093458408536) --> + <skip /> <string name="sensor_privacy_start_use_mic_dialog_title" msgid="563796653825944944">"Да се одблокира пристапот до микрофонот на уредот?"</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> @@ -441,6 +444,8 @@ <string name="keyguard_indication_charging_time_fast" msgid="8390311020603859480">"<xliff:g id="PERCENTAGE">%2$s</xliff:g> • Се полни брзо • Полна по <xliff:g id="CHARGING_TIME_LEFT">%1$s</xliff:g>"</string> <string name="keyguard_indication_charging_time_slowly" msgid="301936949731705417">"<xliff:g id="PERCENTAGE">%2$s</xliff:g> • Се полни бавно • Полна по <xliff:g id="CHARGING_TIME_LEFT">%1$s</xliff:g>"</string> <string name="keyguard_indication_charging_time_dock" msgid="3149328898931741271">"<xliff:g id="PERCENTAGE">%2$s</xliff:g> • Се полни • Полна по <xliff:g id="CHARGING_TIME_LEFT">%1$s</xliff:g>"</string> + <!-- no translation found for accessibility_action_open_communal_hub (3081702792413787849) --> + <skip /> <string name="communal_tutorial_indicator_text" msgid="4503010353591430123">"Повлечете налево за да го започнете заедничкото упатство"</string> <string name="cta_tile_button_to_open_widget_editor" msgid="3871562362382963878">"Приспособете"</string> <string name="cta_tile_button_to_dismiss" msgid="3377597875997861754">"Отфрли"</string> @@ -459,6 +464,10 @@ <string name="button_text_to_open_settings" msgid="1987729256950941628">"Отвори ги поставките"</string> <string name="work_mode_off_title" msgid="5794818421357835873">"Да се актив. работните аплик.?"</string> <string name="work_mode_turn_on" msgid="907813741770247267">"Прекини ја паузата"</string> + <!-- no translation found for accessibility_action_label_close_communal_hub (6790396569621032333) --> + <skip /> + <!-- no translation found for accessibility_content_description_for_communal_hub (1670220840599380118) --> + <skip /> <string name="accessibility_multi_user_switch_switcher" msgid="5330448341251092660">"Промени го корисникот"</string> <string name="accessibility_multi_user_list_switcher" msgid="8574105376229857407">"паѓачко мени"</string> <string name="guest_exit_guest_dialog_message" msgid="8183450985628495709">"Сите апликации и податоци во сесијава ќе се избришат."</string> @@ -1010,7 +1019,7 @@ <string name="accessibility_floating_button_action_move_out_edge_and_show" msgid="8354760891651663326">"Премести над работ и прикажи"</string> <string name="accessibility_floating_button_action_remove_menu" msgid="6730432848162552135">"Отстрани"</string> <string name="accessibility_floating_button_action_double_tap_to_toggle" msgid="7976492639670692037">"вклучување/исклучување"</string> - <string name="accessibility_floating_button_action_edit" msgid="1688227814600463987">"Изменете"</string> + <string name="accessibility_floating_button_action_edit" msgid="1688227814600463987">"Измени"</string> <string name="quick_controls_title" msgid="6839108006171302273">"Контроли за уредите"</string> <string name="controls_providers_title" msgid="6879775889857085056">"Изберете апликација за да додадете контроли"</string> <string name="controls_number_of_favorites" msgid="4481806788981836355">"{count,plural, =1{Додадена е # контрола.}one{Додадени се # контрола.}other{Додадени се # контроли.}}"</string> diff --git a/packages/SystemUI/res/values-ml/strings.xml b/packages/SystemUI/res/values-ml/strings.xml index 8e9392ce9b23..7943043cda82 100644 --- a/packages/SystemUI/res/values-ml/strings.xml +++ b/packages/SystemUI/res/values-ml/strings.xml @@ -235,7 +235,8 @@ <string name="accessibility_desc_notification_shade" msgid="5355229129428759989">"അറിയിപ്പ് ഷെയ്ഡ്."</string> <string name="accessibility_desc_quick_settings" msgid="4374766941484719179">"ദ്രുത ക്രമീകരണങ്ങൾ."</string> <string name="accessibility_desc_qs_notification_shade" msgid="8327226953072700376">"അറിയിപ്പ് ഷെയ്ഡിനുള്ള ദ്രുത ക്രമീകരണം."</string> - <string name="accessibility_desc_lock_screen" msgid="5983125095181194887">"ലോക്ക് സ്ക്രീൻ."</string> + <!-- no translation found for accessibility_desc_lock_screen (409034672704273634) --> + <skip /> <string name="accessibility_desc_work_lock" msgid="4355620395354680575">"ഔദ്യോഗിക ലോക്ക് സ്ക്രീൻ"</string> <string name="accessibility_desc_close" msgid="8293708213442107755">"അവസാനിപ്പിക്കുക"</string> <string name="accessibility_quick_settings_dnd_none_on" msgid="3235552940146035383">"പൂർണ്ണ നിശബ്ദത"</string> @@ -376,6 +377,8 @@ <string name="quick_settings_hearing_devices_dialog_title" msgid="9004774017688484981">"കേൾവിക്കുള്ള ഉപകരണങ്ങൾ"</string> <string name="quick_settings_pair_hearing_devices" msgid="5987105102207447322">"പുതിയ ഉപകരണം ജോടിയാക്കുക"</string> <string name="accessibility_hearing_device_pair_new_device" msgid="8440082580186130090">"പുതിയ ഉപകരണം ജോടിയാക്കാൻ ക്ലിക്ക് ചെയ്യുക"</string> + <!-- no translation found for hearing_devices_presets_error (350363093458408536) --> + <skip /> <string name="sensor_privacy_start_use_mic_dialog_title" msgid="563796653825944944">"ഉപകരണ മൈക്രോഫോൺ അൺബ്ലോക്ക് ചെയ്യണോ?"</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> @@ -441,6 +444,8 @@ <string name="keyguard_indication_charging_time_fast" msgid="8390311020603859480">"<xliff:g id="PERCENTAGE">%2$s</xliff:g> • വേഗത്തിൽ ചാർജ് ചെയ്യുന്നു • <xliff:g id="CHARGING_TIME_LEFT">%1$s</xliff:g>-ൽ പൂർത്തിയാകും"</string> <string name="keyguard_indication_charging_time_slowly" msgid="301936949731705417">"<xliff:g id="PERCENTAGE">%2$s</xliff:g> • പതുക്കെ ചാർജ് ചെയ്യുന്നു • <xliff:g id="CHARGING_TIME_LEFT">%1$s</xliff:g>-ൽ പൂർത്തിയാകും"</string> <string name="keyguard_indication_charging_time_dock" msgid="3149328898931741271">"<xliff:g id="PERCENTAGE">%2$s</xliff:g> • ചാർജ് ചെയ്യുന്നു • <xliff:g id="CHARGING_TIME_LEFT">%1$s</xliff:g>-ൽ പൂർത്തിയാകും"</string> + <!-- no translation found for accessibility_action_open_communal_hub (3081702792413787849) --> + <skip /> <string name="communal_tutorial_indicator_text" msgid="4503010353591430123">"കമ്മ്യൂണൽ ട്യൂട്ടോറിയൽ ആരംഭിക്കാൻ ഇടത്തോട്ട് സ്വൈപ്പ് ചെയ്യുക"</string> <string name="cta_tile_button_to_open_widget_editor" msgid="3871562362382963878">"ഇഷ്ടാനുസൃതമാക്കുക"</string> <string name="cta_tile_button_to_dismiss" msgid="3377597875997861754">"ഡിസ്മിസ് ചെയ്യുക"</string> @@ -459,6 +464,10 @@ <string name="button_text_to_open_settings" msgid="1987729256950941628">"ക്രമീകരണം തുറക്കുക"</string> <string name="work_mode_off_title" msgid="5794818421357835873">"വർക്ക് ആപ്പുകൾ പുനരാരംഭിക്കണോ?"</string> <string name="work_mode_turn_on" msgid="907813741770247267">"പുനരാരംഭിക്കുക"</string> + <!-- no translation found for accessibility_action_label_close_communal_hub (6790396569621032333) --> + <skip /> + <!-- no translation found for accessibility_content_description_for_communal_hub (1670220840599380118) --> + <skip /> <string name="accessibility_multi_user_switch_switcher" msgid="5330448341251092660">"ഉപയോക്താവ് മാറുക"</string> <string name="accessibility_multi_user_list_switcher" msgid="8574105376229857407">"പുൾഡൗൺ മെനു"</string> <string name="guest_exit_guest_dialog_message" msgid="8183450985628495709">"ഈ സെഷനിലെ എല്ലാ ആപ്പുകളും ഡാറ്റയും ഇല്ലാതാക്കും."</string> diff --git a/packages/SystemUI/res/values-mn/strings.xml b/packages/SystemUI/res/values-mn/strings.xml index aab22b3fd590..a3e1bc2ff983 100644 --- a/packages/SystemUI/res/values-mn/strings.xml +++ b/packages/SystemUI/res/values-mn/strings.xml @@ -235,7 +235,7 @@ <string name="accessibility_desc_notification_shade" msgid="5355229129428759989">"Мэдэгдлийн хураангуй самбар"</string> <string name="accessibility_desc_quick_settings" msgid="4374766941484719179">"Шуурхай тохиргоо."</string> <string name="accessibility_desc_qs_notification_shade" msgid="8327226953072700376">"Шуурхай тохиргоо болон мэдэгдлийн хураангуй самбар."</string> - <string name="accessibility_desc_lock_screen" msgid="5983125095181194887">"Дэлгэц түгжих."</string> + <string name="accessibility_desc_lock_screen" msgid="409034672704273634">"Түгжээтэй дэлгэц"</string> <string name="accessibility_desc_work_lock" msgid="4355620395354680575">"Ажлын түгжигдсэн дэлгэц"</string> <string name="accessibility_desc_close" msgid="8293708213442107755">"Хаах"</string> <string name="accessibility_quick_settings_dnd_none_on" msgid="3235552940146035383">"бүх дууг хаах"</string> @@ -376,6 +376,8 @@ <string name="quick_settings_hearing_devices_dialog_title" msgid="9004774017688484981">"Сонсголын төхөөрөмжүүд"</string> <string name="quick_settings_pair_hearing_devices" msgid="5987105102207447322">"Шинэ төхөөрөмж хослуулах"</string> <string name="accessibility_hearing_device_pair_new_device" msgid="8440082580186130090">"Шинэ төхөөрөмж хослуулахын тулд товшино уу"</string> + <!-- no translation found for hearing_devices_presets_error (350363093458408536) --> + <skip /> <string name="sensor_privacy_start_use_mic_dialog_title" msgid="563796653825944944">"Төхөөрөмжийн микрофоныг блокоос гаргах уу?"</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> @@ -441,6 +443,7 @@ <string name="keyguard_indication_charging_time_fast" msgid="8390311020603859480">"<xliff:g id="PERCENTAGE">%2$s</xliff:g> • Хурдтай цэнэглэж байна • <xliff:g id="CHARGING_TIME_LEFT">%1$s</xliff:g>-н дараа дүүрнэ"</string> <string name="keyguard_indication_charging_time_slowly" msgid="301936949731705417">"<xliff:g id="PERCENTAGE">%2$s</xliff:g> • Удаан цэнэглэж байна • <xliff:g id="CHARGING_TIME_LEFT">%1$s</xliff:g>-н дараа дүүрнэ"</string> <string name="keyguard_indication_charging_time_dock" msgid="3149328898931741271">"<xliff:g id="PERCENTAGE">%2$s</xliff:g> • Цэнэглэж байна • <xliff:g id="CHARGING_TIME_LEFT">%1$s</xliff:g>-н дараа дүүрнэ"</string> + <string name="accessibility_action_open_communal_hub" msgid="3081702792413787849">"Түгжээтэй дэлгэц дээрх виджетүүд"</string> <string name="communal_tutorial_indicator_text" msgid="4503010353591430123">"Нийтийн практик хичээлийг эхлүүлэхийн тулд зүүн тийш шударна уу"</string> <string name="cta_tile_button_to_open_widget_editor" msgid="3871562362382963878">"Өөрчлөх"</string> <string name="cta_tile_button_to_dismiss" msgid="3377597875997861754">"Хаах"</string> @@ -459,6 +462,8 @@ <string name="button_text_to_open_settings" msgid="1987729256950941628">"Тохиргоог нээх"</string> <string name="work_mode_off_title" msgid="5794818421357835873">"Ажлын аппыг үргэлжлүүлэх үү?"</string> <string name="work_mode_turn_on" msgid="907813741770247267">"Үргэлжлүүлэх"</string> + <string name="accessibility_action_label_close_communal_hub" msgid="6790396569621032333">"Түгжээтэй дэлгэц дээр виджетүүдийг хаах"</string> + <string name="accessibility_content_description_for_communal_hub" msgid="1670220840599380118">"Түгжээтэй дэлгэц дээрх виджетүүд"</string> <string name="accessibility_multi_user_switch_switcher" msgid="5330448341251092660">"Хэрэглэгчийг сэлгэх"</string> <string name="accessibility_multi_user_list_switcher" msgid="8574105376229857407">"эвхмэл цэс"</string> <string name="guest_exit_guest_dialog_message" msgid="8183450985628495709">"Энэ харилцан үйлдлийн бүх апп болон дата устах болно."</string> diff --git a/packages/SystemUI/res/values-mr/strings.xml b/packages/SystemUI/res/values-mr/strings.xml index 071935accbcd..a40af1b85d94 100644 --- a/packages/SystemUI/res/values-mr/strings.xml +++ b/packages/SystemUI/res/values-mr/strings.xml @@ -235,7 +235,8 @@ <string name="accessibility_desc_notification_shade" msgid="5355229129428759989">"सूचना शेड."</string> <string name="accessibility_desc_quick_settings" msgid="4374766941484719179">"क्विक सेटिंग्ज."</string> <string name="accessibility_desc_qs_notification_shade" msgid="8327226953072700376">"क्विक सेटिंग्ज आणि सूचना शेड."</string> - <string name="accessibility_desc_lock_screen" msgid="5983125095181194887">"लॉक स्क्रीन."</string> + <!-- no translation found for accessibility_desc_lock_screen (409034672704273634) --> + <skip /> <string name="accessibility_desc_work_lock" msgid="4355620395354680575">"कार्य लॉक स्क्रीन"</string> <string name="accessibility_desc_close" msgid="8293708213442107755">"बंद करा"</string> <string name="accessibility_quick_settings_dnd_none_on" msgid="3235552940146035383">"संपूर्ण शांतता"</string> @@ -376,6 +377,8 @@ <string name="quick_settings_hearing_devices_dialog_title" msgid="9004774017688484981">"श्रवणयंत्रे"</string> <string name="quick_settings_pair_hearing_devices" msgid="5987105102207447322">"नवीन डिव्हाइस पेअर करा"</string> <string name="accessibility_hearing_device_pair_new_device" msgid="8440082580186130090">"नवीन डिव्हाइस पेअर करण्यासाठी क्लिक करा"</string> + <!-- no translation found for hearing_devices_presets_error (350363093458408536) --> + <skip /> <string name="sensor_privacy_start_use_mic_dialog_title" msgid="563796653825944944">"डिव्हाइसचा मायक्रोफोन अनब्लॉक करायचा आहे का?"</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> @@ -441,6 +444,8 @@ <string name="keyguard_indication_charging_time_fast" msgid="8390311020603859480">"<xliff:g id="PERCENTAGE">%2$s</xliff:g> • वेगाने चार्ज होत आहे • <xliff:g id="CHARGING_TIME_LEFT">%1$s</xliff:g> मध्ये पूर्ण होईल"</string> <string name="keyguard_indication_charging_time_slowly" msgid="301936949731705417">"<xliff:g id="PERCENTAGE">%2$s</xliff:g> • हळू चार्ज होत आहे • <xliff:g id="CHARGING_TIME_LEFT">%1$s</xliff:g> मध्ये पूर्ण होईल"</string> <string name="keyguard_indication_charging_time_dock" msgid="3149328898931741271">"<xliff:g id="PERCENTAGE">%2$s</xliff:g> • चार्ज होत आहे • <xliff:g id="CHARGING_TIME_LEFT">%1$s</xliff:g> मध्ये पूर्ण होईल"</string> + <!-- no translation found for accessibility_action_open_communal_hub (3081702792413787849) --> + <skip /> <string name="communal_tutorial_indicator_text" msgid="4503010353591430123">"सामुदायिक ट्यूटोरियल सुरू करण्यासाठी डावीकडे स्वाइप करा"</string> <string name="cta_tile_button_to_open_widget_editor" msgid="3871562362382963878">"कस्टमाइझ करा"</string> <string name="cta_tile_button_to_dismiss" msgid="3377597875997861754">"डिसमिस करा"</string> @@ -459,6 +464,10 @@ <string name="button_text_to_open_settings" msgid="1987729256950941628">"सेटिंग्ज उघडा"</string> <string name="work_mode_off_title" msgid="5794818421357835873">"वर्क ॲप्स पुन्हा सुरू करायची?"</string> <string name="work_mode_turn_on" msgid="907813741770247267">"पुन्हा सुरू करा"</string> + <!-- no translation found for accessibility_action_label_close_communal_hub (6790396569621032333) --> + <skip /> + <!-- no translation found for accessibility_content_description_for_communal_hub (1670220840599380118) --> + <skip /> <string name="accessibility_multi_user_switch_switcher" msgid="5330448341251092660">"वापरकर्ता स्विच करा"</string> <string name="accessibility_multi_user_list_switcher" msgid="8574105376229857407">"पुलडाउन मेनू"</string> <string name="guest_exit_guest_dialog_message" msgid="8183450985628495709">"या सत्रातील सर्व अॅप्स आणि डेटा हटवला जाईल."</string> diff --git a/packages/SystemUI/res/values-ms/strings.xml b/packages/SystemUI/res/values-ms/strings.xml index 95d42373dece..fb5efc861fd7 100644 --- a/packages/SystemUI/res/values-ms/strings.xml +++ b/packages/SystemUI/res/values-ms/strings.xml @@ -235,7 +235,7 @@ <string name="accessibility_desc_notification_shade" msgid="5355229129428759989">"Bidai pemberitahuan."</string> <string name="accessibility_desc_quick_settings" msgid="4374766941484719179">"Tetapan pantas."</string> <string name="accessibility_desc_qs_notification_shade" msgid="8327226953072700376">"Tetapan pantas dan Bidai pemberitahuan."</string> - <string name="accessibility_desc_lock_screen" msgid="5983125095181194887">"Kunci skrin."</string> + <string name="accessibility_desc_lock_screen" msgid="409034672704273634">"Kunci skrin"</string> <string name="accessibility_desc_work_lock" msgid="4355620395354680575">"Skrin kunci kerja"</string> <string name="accessibility_desc_close" msgid="8293708213442107755">"Tutup"</string> <string name="accessibility_quick_settings_dnd_none_on" msgid="3235552940146035383">"senyap sepenuhnya"</string> @@ -270,20 +270,15 @@ <string name="see_all_bluetooth_devices" msgid="1761596816620200433">"Lihat semua"</string> <string name="turn_on_bluetooth" msgid="5681370462180289071">"Gunakan Bluetooth"</string> <string name="quick_settings_bluetooth_device_connected" msgid="7884777006729260996">"Disambungkan"</string> - <!-- no translation found for quick_settings_bluetooth_device_audio_sharing (1496358082943301670) --> - <skip /> + <string name="quick_settings_bluetooth_device_audio_sharing" msgid="1496358082943301670">"Perkongsian Audio"</string> <string name="quick_settings_bluetooth_device_saved" msgid="7549938728928069477">"Disimpan"</string> <string name="accessibility_quick_settings_bluetooth_device_tap_to_disconnect" msgid="415980329093277342">"putuskan sambungan"</string> <string name="accessibility_quick_settings_bluetooth_device_tap_to_activate" msgid="3724301751036877403">"aktifkan"</string> <string name="turn_on_bluetooth_auto_tomorrow" msgid="414836329962473906">"Dihidupkan sekali lagi esok secara automatik"</string> - <!-- no translation found for turn_on_bluetooth_auto_info_disabled (682984290339848844) --> - <skip /> - <!-- no translation found for turn_on_bluetooth_auto_info_enabled (7440944034584560279) --> - <skip /> - <!-- no translation found for quick_settings_bluetooth_audio_sharing_button (4499275822759907822) --> - <skip /> - <!-- no translation found for quick_settings_bluetooth_audio_sharing_button_sharing (8626191139359072540) --> - <skip /> + <string name="turn_on_bluetooth_auto_info_disabled" msgid="682984290339848844">"Ciri seperti Quick Share dan Find My Device menggunakan Bluetooth"</string> + <string name="turn_on_bluetooth_auto_info_enabled" msgid="7440944034584560279">"Bluetooth akan dihidupkan esok pagi"</string> + <string name="quick_settings_bluetooth_audio_sharing_button" msgid="4499275822759907822">"Perkongsian Audio"</string> + <string name="quick_settings_bluetooth_audio_sharing_button_sharing" msgid="8626191139359072540">"Berkongsi Audio"</string> <string name="quick_settings_bluetooth_secondary_label_battery_level" msgid="4182034939479344093">"<xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE">%s</xliff:g> bateri"</string> <string name="quick_settings_bluetooth_secondary_label_audio" msgid="780333390310051161">"Audio"</string> <string name="quick_settings_bluetooth_secondary_label_headset" msgid="2332093067553000852">"Set Kepala"</string> @@ -376,6 +371,8 @@ <string name="quick_settings_hearing_devices_dialog_title" msgid="9004774017688484981">"Peranti pendengaran"</string> <string name="quick_settings_pair_hearing_devices" msgid="5987105102207447322">"Gandingkan peranti baharu"</string> <string name="accessibility_hearing_device_pair_new_device" msgid="8440082580186130090">"Klik untuk menggandingkan peranti baharu"</string> + <!-- no translation found for hearing_devices_presets_error (350363093458408536) --> + <skip /> <string name="sensor_privacy_start_use_mic_dialog_title" msgid="563796653825944944">"Nyahsekat mikrofon peranti?"</string> <string name="sensor_privacy_start_use_camera_dialog_title" msgid="8807639852654305227">"Nyahsekat kamera peranti?"</string> <string name="sensor_privacy_start_use_mic_camera_dialog_title" msgid="4316471859905020023">"Nyahsekat kamera dan mikrofon peranti?"</string> @@ -441,6 +438,7 @@ <string name="keyguard_indication_charging_time_fast" msgid="8390311020603859480">"<xliff:g id="PERCENTAGE">%2$s</xliff:g> • Mengecas dengan cepat • Penuh dalam masa <xliff:g id="CHARGING_TIME_LEFT">%1$s</xliff:g>"</string> <string name="keyguard_indication_charging_time_slowly" msgid="301936949731705417">"<xliff:g id="PERCENTAGE">%2$s</xliff:g> • Mengecas dengan perlahan • Penuh dalam masa <xliff:g id="CHARGING_TIME_LEFT">%1$s</xliff:g>"</string> <string name="keyguard_indication_charging_time_dock" msgid="3149328898931741271">"<xliff:g id="PERCENTAGE">%2$s</xliff:g> • Mengecas • Penuh dalam masa <xliff:g id="CHARGING_TIME_LEFT">%1$s</xliff:g>"</string> + <string name="accessibility_action_open_communal_hub" msgid="3081702792413787849">"Widget pada skrin kunci"</string> <string name="communal_tutorial_indicator_text" msgid="4503010353591430123">"Leret ke kiri untuk memulakan tutorial umum"</string> <string name="cta_tile_button_to_open_widget_editor" msgid="3871562362382963878">"Sesuaikan"</string> <string name="cta_tile_button_to_dismiss" msgid="3377597875997861754">"Ketepikan"</string> @@ -459,6 +457,8 @@ <string name="button_text_to_open_settings" msgid="1987729256950941628">"Buka tetapan"</string> <string name="work_mode_off_title" msgid="5794818421357835873">"Nyahjeda apl kerja?"</string> <string name="work_mode_turn_on" msgid="907813741770247267">"Nyahjeda"</string> + <string name="accessibility_action_label_close_communal_hub" msgid="6790396569621032333">"Tutup widget pada skrin kunci"</string> + <string name="accessibility_content_description_for_communal_hub" msgid="1670220840599380118">"Widget pada skrin kunci"</string> <string name="accessibility_multi_user_switch_switcher" msgid="5330448341251092660">"Tukar pengguna"</string> <string name="accessibility_multi_user_list_switcher" msgid="8574105376229857407">"menu tarik turun"</string> <string name="guest_exit_guest_dialog_message" msgid="8183450985628495709">"Semua apl dan data dalam sesi ini akan dipadam."</string> diff --git a/packages/SystemUI/res/values-my/strings.xml b/packages/SystemUI/res/values-my/strings.xml index 7941935a7b53..42bcfa6e3623 100644 --- a/packages/SystemUI/res/values-my/strings.xml +++ b/packages/SystemUI/res/values-my/strings.xml @@ -235,7 +235,7 @@ <string name="accessibility_desc_notification_shade" msgid="5355229129428759989">"အကြောင်းကြားစာအကွက်"</string> <string name="accessibility_desc_quick_settings" msgid="4374766941484719179">"အမြန်လုပ် အပြင်အဆင်"</string> <string name="accessibility_desc_qs_notification_shade" msgid="8327226953072700376">"‘အမြန်ဆက်တင်များ’ နှင့် ‘အကြောင်းကြားစာအကွက်’။"</string> - <string name="accessibility_desc_lock_screen" msgid="5983125095181194887">"လော့ခ်မျက်နှာပြင်"</string> + <string name="accessibility_desc_lock_screen" msgid="409034672704273634">"လော့ခ်မျက်နှာပြင်"</string> <string name="accessibility_desc_work_lock" msgid="4355620395354680575">"အလုပ်သုံး လော့ခ်မျက်နှာပြင်"</string> <string name="accessibility_desc_close" msgid="8293708213442107755">"ပိတ်ရန်"</string> <string name="accessibility_quick_settings_dnd_none_on" msgid="3235552940146035383">"လုံးဝ အသံပိတ်ထားရန်"</string> @@ -376,6 +376,8 @@ <string name="quick_settings_hearing_devices_dialog_title" msgid="9004774017688484981">"နားကြားကိရိယာ"</string> <string name="quick_settings_pair_hearing_devices" msgid="5987105102207447322">"စက်အသစ်တွဲချိတ်ရန်"</string> <string name="accessibility_hearing_device_pair_new_device" msgid="8440082580186130090">"စက်အသစ် တွဲချိတ်ရန် နှိပ်ပါ"</string> + <!-- no translation found for hearing_devices_presets_error (350363093458408536) --> + <skip /> <string name="sensor_privacy_start_use_mic_dialog_title" msgid="563796653825944944">"စက်၏မိုက်ခရိုဖုန်းကို ပြန်ဖွင့်မလား။"</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> @@ -441,6 +443,7 @@ <string name="keyguard_indication_charging_time_fast" msgid="8390311020603859480">"<xliff:g id="PERCENTAGE">%2$s</xliff:g> • အမြန်အားသွင်းနေသည် • အားပြည့်ရန် <xliff:g id="CHARGING_TIME_LEFT">%1$s</xliff:g> လိုသည်"</string> <string name="keyguard_indication_charging_time_slowly" msgid="301936949731705417">"<xliff:g id="PERCENTAGE">%2$s</xliff:g> • နှေးကွေးစွာ အားသွင်းနေသည် • အားပြည့်ရန် <xliff:g id="CHARGING_TIME_LEFT">%1$s</xliff:g> လိုသည်"</string> <string name="keyguard_indication_charging_time_dock" msgid="3149328898931741271">"<xliff:g id="PERCENTAGE">%2$s</xliff:g> • အားသွင်းနေသည် • အားပြည့်ရန် <xliff:g id="CHARGING_TIME_LEFT">%1$s</xliff:g> လိုသည်"</string> + <string name="accessibility_action_open_communal_hub" msgid="3081702792413787849">"လော့ခ်မျက်နှာပြင်ရှိ ဝိဂျက်များ"</string> <string name="communal_tutorial_indicator_text" msgid="4503010353591430123">"အများသုံးရှင်းလင်းပို့ချချက် စတင်ရန် ဘယ်သို့ပွတ်ဆွဲပါ"</string> <string name="cta_tile_button_to_open_widget_editor" msgid="3871562362382963878">"စိတ်ကြိုက်လုပ်ရန်"</string> <string name="cta_tile_button_to_dismiss" msgid="3377597875997861754">"ပယ်ရန်"</string> @@ -459,6 +462,8 @@ <string name="button_text_to_open_settings" msgid="1987729256950941628">"ဆက်တင်များ ဖွင့်ရန်"</string> <string name="work_mode_off_title" msgid="5794818421357835873">"အလုပ်သုံးအက်ပ် ပြန်ဖွင့်မလား။"</string> <string name="work_mode_turn_on" msgid="907813741770247267">"ပြန်ဖွင့်ရန်"</string> + <string name="accessibility_action_label_close_communal_hub" msgid="6790396569621032333">"လော့ခ်မျက်နှာပြင်ရှိ ဝိဂျက်များကို ပိတ်ရန်"</string> + <string name="accessibility_content_description_for_communal_hub" msgid="1670220840599380118">"လော့ခ်မျက်နှာပြင်ရှိ ဝိဂျက်များ"</string> <string name="accessibility_multi_user_switch_switcher" msgid="5330448341251092660">"အသုံးပြုသူကို ပြောင်းလဲရန်"</string> <string name="accessibility_multi_user_list_switcher" msgid="8574105376229857407">"ဆွဲချမီနူး"</string> <string name="guest_exit_guest_dialog_message" msgid="8183450985628495709">"ဒီချိတ်ဆက်မှု ထဲက အက်ပ်များ အားလုံး နှင့် ဒေတာကို ဖျက်ပစ်မည်။"</string> diff --git a/packages/SystemUI/res/values-nb/strings.xml b/packages/SystemUI/res/values-nb/strings.xml index 59afb3e52a47..6dbad083560a 100644 --- a/packages/SystemUI/res/values-nb/strings.xml +++ b/packages/SystemUI/res/values-nb/strings.xml @@ -235,7 +235,8 @@ <string name="accessibility_desc_notification_shade" msgid="5355229129428759989">"Varselskygge."</string> <string name="accessibility_desc_quick_settings" msgid="4374766941484719179">"Hurtiginnstillinger."</string> <string name="accessibility_desc_qs_notification_shade" msgid="8327226953072700376">"Hurtiginnstillinger og varselpanelet"</string> - <string name="accessibility_desc_lock_screen" msgid="5983125095181194887">"Låseskjerm."</string> + <!-- no translation found for accessibility_desc_lock_screen (409034672704273634) --> + <skip /> <string name="accessibility_desc_work_lock" msgid="4355620395354680575">"Låseskjerm for arbeid"</string> <string name="accessibility_desc_close" msgid="8293708213442107755">"Lukk"</string> <string name="accessibility_quick_settings_dnd_none_on" msgid="3235552940146035383">"total stillhet"</string> @@ -376,6 +377,8 @@ <string name="quick_settings_hearing_devices_dialog_title" msgid="9004774017688484981">"Høreapparater"</string> <string name="quick_settings_pair_hearing_devices" msgid="5987105102207447322">"Koble til en ny enhet"</string> <string name="accessibility_hearing_device_pair_new_device" msgid="8440082580186130090">"Klikk for å koble til en ny enhet"</string> + <!-- no translation found for hearing_devices_presets_error (350363093458408536) --> + <skip /> <string name="sensor_privacy_start_use_mic_dialog_title" msgid="563796653825944944">"Vil du oppheve blokkeringen av enhetsmikrofonen?"</string> <string name="sensor_privacy_start_use_camera_dialog_title" msgid="8807639852654305227">"Vil du oppheve blokkeringen av enhetskameraet?"</string> <string name="sensor_privacy_start_use_mic_camera_dialog_title" msgid="4316471859905020023">"Vil du oppheve blokkeringen av enhetskameraet og -mikrofonen?"</string> @@ -441,6 +444,8 @@ <string name="keyguard_indication_charging_time_fast" msgid="8390311020603859480">"<xliff:g id="PERCENTAGE">%2$s</xliff:g> • Lader raskt • Fulladet om <xliff:g id="CHARGING_TIME_LEFT">%1$s</xliff:g>"</string> <string name="keyguard_indication_charging_time_slowly" msgid="301936949731705417">"<xliff:g id="PERCENTAGE">%2$s</xliff:g> • Lader sakte • Fulladet om <xliff:g id="CHARGING_TIME_LEFT">%1$s</xliff:g>"</string> <string name="keyguard_indication_charging_time_dock" msgid="3149328898931741271">"<xliff:g id="PERCENTAGE">%2$s</xliff:g> • Lader • Fulladet om <xliff:g id="CHARGING_TIME_LEFT">%1$s</xliff:g>"</string> + <!-- no translation found for accessibility_action_open_communal_hub (3081702792413787849) --> + <skip /> <string name="communal_tutorial_indicator_text" msgid="4503010353591430123">"Sveip til venstre for å starte fellesveiledningen"</string> <string name="cta_tile_button_to_open_widget_editor" msgid="3871562362382963878">"Tilpass"</string> <string name="cta_tile_button_to_dismiss" msgid="3377597875997861754">"Lukk"</string> @@ -459,6 +464,10 @@ <string name="button_text_to_open_settings" msgid="1987729256950941628">"Åpne innstillingene"</string> <string name="work_mode_off_title" msgid="5794818421357835873">"Vil du slå på jobbapper igjen?"</string> <string name="work_mode_turn_on" msgid="907813741770247267">"Slå på"</string> + <!-- no translation found for accessibility_action_label_close_communal_hub (6790396569621032333) --> + <skip /> + <!-- no translation found for accessibility_content_description_for_communal_hub (1670220840599380118) --> + <skip /> <string name="accessibility_multi_user_switch_switcher" msgid="5330448341251092660">"Bytt bruker"</string> <string name="accessibility_multi_user_list_switcher" msgid="8574105376229857407">"rullegardinmeny"</string> <string name="guest_exit_guest_dialog_message" msgid="8183450985628495709">"Alle apper og data i denne økten blir slettet."</string> diff --git a/packages/SystemUI/res/values-ne/strings.xml b/packages/SystemUI/res/values-ne/strings.xml index 3ab647fa3745..a17c395cf1b1 100644 --- a/packages/SystemUI/res/values-ne/strings.xml +++ b/packages/SystemUI/res/values-ne/strings.xml @@ -235,7 +235,8 @@ <string name="accessibility_desc_notification_shade" msgid="5355229129428759989">"सूचना कक्ष।"</string> <string name="accessibility_desc_quick_settings" msgid="4374766941484719179">"द्रुत सेटिङहरू"</string> <string name="accessibility_desc_qs_notification_shade" msgid="8327226953072700376">"द्रुत सेटिङ तथा सूचना कक्ष।"</string> - <string name="accessibility_desc_lock_screen" msgid="5983125095181194887">"स्क्रीन बन्द गर्नुहोस्।"</string> + <!-- no translation found for accessibility_desc_lock_screen (409034672704273634) --> + <skip /> <string name="accessibility_desc_work_lock" msgid="4355620395354680575">"कार्य प्रोफाइलको लक स्क्रिन"</string> <string name="accessibility_desc_close" msgid="8293708213442107755">"बन्द गर्नुहोस्"</string> <string name="accessibility_quick_settings_dnd_none_on" msgid="3235552940146035383">"पूर्ण मौनता"</string> @@ -270,20 +271,15 @@ <string name="see_all_bluetooth_devices" msgid="1761596816620200433">"सबै डिभाइसहरू हेर्नुहोस्"</string> <string name="turn_on_bluetooth" msgid="5681370462180289071">"ब्लुटुथ प्रयोग गर्नुहोस्"</string> <string name="quick_settings_bluetooth_device_connected" msgid="7884777006729260996">"कनेक्ट गरिएको छ"</string> - <!-- no translation found for quick_settings_bluetooth_device_audio_sharing (1496358082943301670) --> - <skip /> + <string name="quick_settings_bluetooth_device_audio_sharing" msgid="1496358082943301670">"अडियो सेयरिङ"</string> <string name="quick_settings_bluetooth_device_saved" msgid="7549938728928069477">"सेभ गरिएको छ"</string> <string name="accessibility_quick_settings_bluetooth_device_tap_to_disconnect" msgid="415980329093277342">"डिस्कनेक्ट गर्नुहोस्"</string> <string name="accessibility_quick_settings_bluetooth_device_tap_to_activate" msgid="3724301751036877403">"एक्टिभेट गर्नुहोस्"</string> <string name="turn_on_bluetooth_auto_tomorrow" msgid="414836329962473906">"भोलि फेरि स्वतः अन गर्नुहोस्"</string> - <!-- no translation found for turn_on_bluetooth_auto_info_disabled (682984290339848844) --> - <skip /> - <!-- no translation found for turn_on_bluetooth_auto_info_enabled (7440944034584560279) --> - <skip /> - <!-- no translation found for quick_settings_bluetooth_audio_sharing_button (4499275822759907822) --> - <skip /> - <!-- no translation found for quick_settings_bluetooth_audio_sharing_button_sharing (8626191139359072540) --> - <skip /> + <string name="turn_on_bluetooth_auto_info_disabled" msgid="682984290339848844">"क्विक सेयर र Find My Device जस्ता सुविधाहरू प्रयोग गर्न ब्लुटुथ चाहिन्छ"</string> + <string name="turn_on_bluetooth_auto_info_enabled" msgid="7440944034584560279">"ब्लुटुथ भोलि बिहान अन हुने छ"</string> + <string name="quick_settings_bluetooth_audio_sharing_button" msgid="4499275822759907822">"अडियो सेयरिङ"</string> + <string name="quick_settings_bluetooth_audio_sharing_button_sharing" msgid="8626191139359072540">"अडियो सेयर गरिँदै छ"</string> <string name="quick_settings_bluetooth_secondary_label_battery_level" msgid="4182034939479344093">"<xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE">%s</xliff:g> ब्याट्री"</string> <string name="quick_settings_bluetooth_secondary_label_audio" msgid="780333390310051161">"अडियो"</string> <string name="quick_settings_bluetooth_secondary_label_headset" msgid="2332093067553000852">"हेडसेट"</string> @@ -376,6 +372,8 @@ <string name="quick_settings_hearing_devices_dialog_title" msgid="9004774017688484981">"हियरिङ डिभाइसहरू"</string> <string name="quick_settings_pair_hearing_devices" msgid="5987105102207447322">"नयाँ डिभाइस कनेक्ट गर्नुहोस्"</string> <string name="accessibility_hearing_device_pair_new_device" msgid="8440082580186130090">"नयाँ डिभाइसमा कनेक्ट गर्न क्लिक गर्नुहोस्"</string> + <!-- no translation found for hearing_devices_presets_error (350363093458408536) --> + <skip /> <string name="sensor_privacy_start_use_mic_dialog_title" msgid="563796653825944944">"डिभाइसको माइक्रोफोन अनब्लक गर्ने हो?"</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> @@ -441,6 +439,8 @@ <string name="keyguard_indication_charging_time_fast" msgid="8390311020603859480">"<xliff:g id="PERCENTAGE">%2$s</xliff:g> • छिटो चार्ज हुँदै छ • <xliff:g id="CHARGING_TIME_LEFT">%1$s</xliff:g> मा पूरै चार्ज हुन्छ"</string> <string name="keyguard_indication_charging_time_slowly" msgid="301936949731705417">"<xliff:g id="PERCENTAGE">%2$s</xliff:g> • बिस्तारै चार्ज हुँदै छ • <xliff:g id="CHARGING_TIME_LEFT">%1$s</xliff:g> मा पूरै चार्ज हुन्छ"</string> <string name="keyguard_indication_charging_time_dock" msgid="3149328898931741271">"<xliff:g id="PERCENTAGE">%2$s</xliff:g> • चार्ज हुँदै छ • <xliff:g id="CHARGING_TIME_LEFT">%1$s</xliff:g> मा फुल चार्ज हुने छ"</string> + <!-- no translation found for accessibility_action_open_communal_hub (3081702792413787849) --> + <skip /> <string name="communal_tutorial_indicator_text" msgid="4503010353591430123">"कम्युनल ट्युटोरियल सुरु गर्न बायाँतिर स्वाइप गर्नुहोस्"</string> <string name="cta_tile_button_to_open_widget_editor" msgid="3871562362382963878">"कस्टमाइज गर्नुहोस्"</string> <string name="cta_tile_button_to_dismiss" msgid="3377597875997861754">"खारेज गर्नुहोस्"</string> @@ -459,6 +459,10 @@ <string name="button_text_to_open_settings" msgid="1987729256950941628">"सेटिङ खोल्नुहोस्"</string> <string name="work_mode_off_title" msgid="5794818421357835873">"कामसम्बन्धी एपहरू अनपज गर्ने हो?"</string> <string name="work_mode_turn_on" msgid="907813741770247267">"अनपज गर्नुहोस्"</string> + <!-- no translation found for accessibility_action_label_close_communal_hub (6790396569621032333) --> + <skip /> + <!-- no translation found for accessibility_content_description_for_communal_hub (1670220840599380118) --> + <skip /> <string name="accessibility_multi_user_switch_switcher" msgid="5330448341251092660">"प्रयोगकर्ता फेर्नुहोस्"</string> <string name="accessibility_multi_user_list_switcher" msgid="8574105376229857407">"पुलडाउन मेनु"</string> <string name="guest_exit_guest_dialog_message" msgid="8183450985628495709">"यो सत्रमा भएका सबै एपहरू र डेटा मेटाइने छ।"</string> @@ -1006,7 +1010,7 @@ <string name="accessibility_floating_button_action_move_top_right" msgid="6106225581993479711">"सिरानको दायाँतिर सार्नुहोस्"</string> <string name="accessibility_floating_button_action_move_bottom_left" msgid="8063394111137429725">"पुछारको बायाँतिर सार्नुहोस्"</string> <string name="accessibility_floating_button_action_move_bottom_right" msgid="6196904373227440500">"पुछारको दायाँतिर सार्नुहोस्"</string> - <string name="accessibility_floating_button_action_move_to_edge_and_hide_to_half" msgid="662401168245782658">"किनारामा सार्नुहोस् र नदेखिने पार्नु…"</string> + <string name="accessibility_floating_button_action_move_to_edge_and_hide_to_half" msgid="662401168245782658">"किनारामा सार्नुहोस् र लुकाउनुहोस्"</string> <string name="accessibility_floating_button_action_move_out_edge_and_show" msgid="8354760891651663326">"किनाराबाट सार्नुहोस् र देखिने पार्नु…"</string> <string name="accessibility_floating_button_action_remove_menu" msgid="6730432848162552135">"हटाउनुहोस्"</string> <string name="accessibility_floating_button_action_double_tap_to_toggle" msgid="7976492639670692037">"टगल गर्नुहोस्"</string> diff --git a/packages/SystemUI/res/values-nl/strings.xml b/packages/SystemUI/res/values-nl/strings.xml index e85a1da3f1e6..6f722252b44a 100644 --- a/packages/SystemUI/res/values-nl/strings.xml +++ b/packages/SystemUI/res/values-nl/strings.xml @@ -235,7 +235,8 @@ <string name="accessibility_desc_notification_shade" msgid="5355229129428759989">"Meldingenpaneel."</string> <string name="accessibility_desc_quick_settings" msgid="4374766941484719179">"Snelle instellingen."</string> <string name="accessibility_desc_qs_notification_shade" msgid="8327226953072700376">"Snelle instellingen en meldingenpaneel."</string> - <string name="accessibility_desc_lock_screen" msgid="5983125095181194887">"Vergrendelscherm."</string> + <!-- no translation found for accessibility_desc_lock_screen (409034672704273634) --> + <skip /> <string name="accessibility_desc_work_lock" msgid="4355620395354680575">"Vergrendelscherm voor werk"</string> <string name="accessibility_desc_close" msgid="8293708213442107755">"Sluiten"</string> <string name="accessibility_quick_settings_dnd_none_on" msgid="3235552940146035383">"totale stilte"</string> @@ -376,6 +377,8 @@ <string name="quick_settings_hearing_devices_dialog_title" msgid="9004774017688484981">"Hoortoestellen"</string> <string name="quick_settings_pair_hearing_devices" msgid="5987105102207447322">"Nieuw apparaat koppelen"</string> <string name="accessibility_hearing_device_pair_new_device" msgid="8440082580186130090">"Klik om nieuw apparaat te koppelen"</string> + <!-- no translation found for hearing_devices_presets_error (350363093458408536) --> + <skip /> <string name="sensor_privacy_start_use_mic_dialog_title" msgid="563796653825944944">"Microfoon van apparaat niet meer blokkeren?"</string> <string name="sensor_privacy_start_use_camera_dialog_title" msgid="8807639852654305227">"Apparaatcamera niet meer blokkeren?"</string> <string name="sensor_privacy_start_use_mic_camera_dialog_title" msgid="4316471859905020023">"Blokkeren van apparaatcamera en -microfoon opheffen?"</string> @@ -441,6 +444,8 @@ <string name="keyguard_indication_charging_time_fast" msgid="8390311020603859480">"<xliff:g id="PERCENTAGE">%2$s</xliff:g> • Snel opladen • Vol over <xliff:g id="CHARGING_TIME_LEFT">%1$s</xliff:g>"</string> <string name="keyguard_indication_charging_time_slowly" msgid="301936949731705417">"<xliff:g id="PERCENTAGE">%2$s</xliff:g> • Langzaam opladen • Vol over <xliff:g id="CHARGING_TIME_LEFT">%1$s</xliff:g>"</string> <string name="keyguard_indication_charging_time_dock" msgid="3149328898931741271">"<xliff:g id="PERCENTAGE">%2$s</xliff:g> • Opladen • Vol over <xliff:g id="CHARGING_TIME_LEFT">%1$s</xliff:g>"</string> + <!-- no translation found for accessibility_action_open_communal_hub (3081702792413787849) --> + <skip /> <string name="communal_tutorial_indicator_text" msgid="4503010353591430123">"Swipe naar links om de communitytutorial te starten"</string> <string name="cta_tile_button_to_open_widget_editor" msgid="3871562362382963878">"Aanpassen"</string> <string name="cta_tile_button_to_dismiss" msgid="3377597875997861754">"Sluiten"</string> @@ -459,6 +464,10 @@ <string name="button_text_to_open_settings" msgid="1987729256950941628">"Instellingen openen"</string> <string name="work_mode_off_title" msgid="5794818421357835873">"Werk-apps hervatten?"</string> <string name="work_mode_turn_on" msgid="907813741770247267">"Hervatten"</string> + <!-- no translation found for accessibility_action_label_close_communal_hub (6790396569621032333) --> + <skip /> + <!-- no translation found for accessibility_content_description_for_communal_hub (1670220840599380118) --> + <skip /> <string name="accessibility_multi_user_switch_switcher" msgid="5330448341251092660">"Gebruiker wijzigen"</string> <string name="accessibility_multi_user_list_switcher" msgid="8574105376229857407">"pull-downmenu"</string> <string name="guest_exit_guest_dialog_message" msgid="8183450985628495709">"Alle apps en gegevens in deze sessie worden verwijderd."</string> diff --git a/packages/SystemUI/res/values-or/strings.xml b/packages/SystemUI/res/values-or/strings.xml index 77ed062a17fd..753d32edc278 100644 --- a/packages/SystemUI/res/values-or/strings.xml +++ b/packages/SystemUI/res/values-or/strings.xml @@ -235,7 +235,8 @@ <string name="accessibility_desc_notification_shade" msgid="5355229129428759989">"ବିଜ୍ଞପ୍ତି ଶେଡ୍।"</string> <string name="accessibility_desc_quick_settings" msgid="4374766941484719179">"କ୍ୱିକ୍ ସେଟିଂସ୍।"</string> <string name="accessibility_desc_qs_notification_shade" msgid="8327226953072700376">"କୁଇକ ସେଟିଂସ ଏବଂ ବିଜ୍ଞପ୍ତି ସେଡ।"</string> - <string name="accessibility_desc_lock_screen" msgid="5983125095181194887">"ଲକ ସ୍କ୍ରିନ।"</string> + <!-- no translation found for accessibility_desc_lock_screen (409034672704273634) --> + <skip /> <string name="accessibility_desc_work_lock" msgid="4355620395354680575">"ୱର୍କ ଲକ୍ ସ୍କ୍ରୀନ୍"</string> <string name="accessibility_desc_close" msgid="8293708213442107755">"ବନ୍ଦ କରନ୍ତୁ"</string> <string name="accessibility_quick_settings_dnd_none_on" msgid="3235552940146035383">"ସମ୍ପୂର୍ଣ୍ଣ ନୀରବତା"</string> @@ -376,6 +377,8 @@ <string name="quick_settings_hearing_devices_dialog_title" msgid="9004774017688484981">"ହିଅରିଂ ଡିଭାଇସଗୁଡ଼ିକ"</string> <string name="quick_settings_pair_hearing_devices" msgid="5987105102207447322">"ନୂଆ ଡିଭାଇସ ପେୟାର କର"</string> <string name="accessibility_hearing_device_pair_new_device" msgid="8440082580186130090">"ନୂଆ ଡିଭାଇସ ପେୟାର କରିବାକୁ କ୍ଲିକ କରନ୍ତୁ"</string> + <!-- no translation found for hearing_devices_presets_error (350363093458408536) --> + <skip /> <string name="sensor_privacy_start_use_mic_dialog_title" msgid="563796653825944944">"ଡିଭାଇସର ମାଇକ୍ରୋଫୋନକୁ ଅନବ୍ଲକ କରିବେ?"</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> @@ -441,6 +444,8 @@ <string name="keyguard_indication_charging_time_fast" msgid="8390311020603859480">"<xliff:g id="PERCENTAGE">%2$s</xliff:g> • ଶୀଘ୍ର ଚାର୍ଜ ହେଉଛି • <xliff:g id="CHARGING_TIME_LEFT">%1$s</xliff:g>ରେ ସମ୍ପୂର୍ଣ୍ଣ ହେବ"</string> <string name="keyguard_indication_charging_time_slowly" msgid="301936949731705417">"<xliff:g id="PERCENTAGE">%2$s</xliff:g> • ଧୀରେ ଚାର୍ଜ ହେଉଛି • <xliff:g id="CHARGING_TIME_LEFT">%1$s</xliff:g>ରେ ସମ୍ପୂର୍ଣ୍ଣ ହେବ"</string> <string name="keyguard_indication_charging_time_dock" msgid="3149328898931741271">"<xliff:g id="PERCENTAGE">%2$s</xliff:g> • ଚାର୍ଜ ହେଉଛି • <xliff:g id="CHARGING_TIME_LEFT">%1$s</xliff:g>ରେ ସମ୍ପୂର୍ଣ୍ଣ ହେବ"</string> + <!-- no translation found for accessibility_action_open_communal_hub (3081702792413787849) --> + <skip /> <string name="communal_tutorial_indicator_text" msgid="4503010353591430123">"କମ୍ୟୁନାଲ ଟ୍ୟୁଟୋରିଆଲ ଆରମ୍ଭ କରିବା ପାଇଁ ବାମକୁ ସ୍ୱାଇପ କରନ୍ତୁ"</string> <string name="cta_tile_button_to_open_widget_editor" msgid="3871562362382963878">"କଷ୍ଟମାଇଜ କରନ୍ତୁ"</string> <string name="cta_tile_button_to_dismiss" msgid="3377597875997861754">"ଖାରଜ କରନ୍ତୁ"</string> @@ -459,6 +464,10 @@ <string name="button_text_to_open_settings" msgid="1987729256950941628">"ସେଟିଂସ ଖୋଲନ୍ତୁ"</string> <string name="work_mode_off_title" msgid="5794818421357835873">"ୱାର୍କ ଆପ୍ସକୁ ପୁଣି ଚାଲୁ କରିବେ?"</string> <string name="work_mode_turn_on" msgid="907813741770247267">"ପୁଣି ଚାଲୁ କରନ୍ତୁ"</string> + <!-- no translation found for accessibility_action_label_close_communal_hub (6790396569621032333) --> + <skip /> + <!-- no translation found for accessibility_content_description_for_communal_hub (1670220840599380118) --> + <skip /> <string name="accessibility_multi_user_switch_switcher" msgid="5330448341251092660">"ୟୁଜର୍ ବଦଳାନ୍ତୁ"</string> <string name="accessibility_multi_user_list_switcher" msgid="8574105376229857407">"ପୁଲଡାଉନ ମେନୁ"</string> <string name="guest_exit_guest_dialog_message" msgid="8183450985628495709">"ଏହି ସେସନର ସମସ୍ତ ଆପ୍ ଓ ଡାଟା ଡିଲିଟ୍ ହୋଇଯିବ।"</string> @@ -1002,7 +1011,7 @@ <string name="accessibility_floating_button_hidden_notification_text" msgid="1457021647040915658">"ଆକ୍ସେସିବିଲିଟୀ ବଟନ ଦେଖାଇବାକୁ ଟାପ କରନ୍ତୁ"</string> <string name="accessibility_floating_button_undo_message_label_text" msgid="9017658016426242640">"<xliff:g id="FEATURE_NAME">%s</xliff:g> ସର୍ଟକଟକୁ କାଢ଼ି ଦିଆଯାଇଛି"</string> <string name="accessibility_floating_button_undo_message_number_text" msgid="4909270290725226075">"{count,plural, =1{#ଟି ସର୍ଟକଟକୁ କାଢ଼ି ଦିଆଯାଇଛି}other{#ଟି ସର୍ଟକଟକୁ କାଢ଼ି ଦିଆଯାଇଛି}}"</string> - <string name="accessibility_floating_button_action_move_top_left" msgid="6253520703618545705">"ଶୀର୍ଷ ବାମକୁ ମୁଭ୍ କରନ୍ତୁ"</string> + <string name="accessibility_floating_button_action_move_top_left" msgid="6253520703618545705">"ଶୀର୍ଷ ବାମକୁ ମୁଭ କରନ୍ତୁ"</string> <string name="accessibility_floating_button_action_move_top_right" msgid="6106225581993479711">"ଶୀର୍ଷ ଡାହାଣକୁ ମୁଭ୍ କରନ୍ତୁ"</string> <string name="accessibility_floating_button_action_move_bottom_left" msgid="8063394111137429725">"ନିମ୍ନ ବାମକୁ ମୁଭ୍ କରନ୍ତୁ"</string> <string name="accessibility_floating_button_action_move_bottom_right" msgid="6196904373227440500">"ନିମ୍ନ ଡାହାଣକୁ ମୁଭ୍ କରନ୍ତୁ"</string> diff --git a/packages/SystemUI/res/values-pa/strings.xml b/packages/SystemUI/res/values-pa/strings.xml index 0cc753b49456..3efb8a0c6417 100644 --- a/packages/SystemUI/res/values-pa/strings.xml +++ b/packages/SystemUI/res/values-pa/strings.xml @@ -235,7 +235,8 @@ <string name="accessibility_desc_notification_shade" msgid="5355229129428759989">"ਸੂਚਨਾ ਸ਼ੇਡ।"</string> <string name="accessibility_desc_quick_settings" msgid="4374766941484719179">"ਤਤਕਾਲ ਸੈਟਿੰਗਾਂ।"</string> <string name="accessibility_desc_qs_notification_shade" msgid="8327226953072700376">"ਤਤਕਾਲ ਸੈਟਿੰਗਾਂ ਅਤੇ ਸੂਚਨਾ ਸ਼ੇਡ।"</string> - <string name="accessibility_desc_lock_screen" msgid="5983125095181194887">" ਲਾਕ ਸਕ੍ਰੀਨ।"</string> + <!-- no translation found for accessibility_desc_lock_screen (409034672704273634) --> + <skip /> <string name="accessibility_desc_work_lock" msgid="4355620395354680575">"ਕਾਰਜ-ਸਥਾਨ ਲਾਕ ਸਕ੍ਰੀਨ"</string> <string name="accessibility_desc_close" msgid="8293708213442107755">"ਬੰਦ ਕਰੋ"</string> <string name="accessibility_quick_settings_dnd_none_on" msgid="3235552940146035383">"ਪੂਰਾ ਸ਼ਾਂਤ"</string> @@ -376,6 +377,8 @@ <string name="quick_settings_hearing_devices_dialog_title" msgid="9004774017688484981">"ਸੁਣਨ ਵਾਲੇ ਡੀਵਾਈਸ"</string> <string name="quick_settings_pair_hearing_devices" msgid="5987105102207447322">"ਨਵਾਂ ਡੀਵਾਈਸ ਜੋੜਾਬੱਧ ਕਰੋ"</string> <string name="accessibility_hearing_device_pair_new_device" msgid="8440082580186130090">"\'ਨਵਾਂ ਡੀਵਾਈਸ ਜੋੜਾਬੱਧ ਕਰੋ\' \'ਤੇ ਕਲਿੱਕ ਕਰੋ"</string> + <!-- no translation found for hearing_devices_presets_error (350363093458408536) --> + <skip /> <string name="sensor_privacy_start_use_mic_dialog_title" msgid="563796653825944944">"ਕੀ ਡੀਵਾਈਸ ਦੇ ਮਾਈਕ੍ਰੋਫ਼ੋਨ ਨੂੰ ਅਣਬਲਾਕ ਕਰਨਾ ਹੈ?"</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> @@ -441,6 +444,8 @@ <string name="keyguard_indication_charging_time_fast" msgid="8390311020603859480">"<xliff:g id="PERCENTAGE">%2$s</xliff:g> • ਤੇਜ਼ ਚਾਰਜ ਹੋ ਰਿਹਾ ਹੈ • <xliff:g id="CHARGING_TIME_LEFT">%1$s</xliff:g> ਵਿੱਚ ਪੂਰਾ ਚਾਰਜ ਹੋਵੇਗਾ"</string> <string name="keyguard_indication_charging_time_slowly" msgid="301936949731705417">"<xliff:g id="PERCENTAGE">%2$s</xliff:g> • ਹੌਲੀ ਚਾਰਜ ਹੋ ਰਿਹਾ ਹੈ • <xliff:g id="CHARGING_TIME_LEFT">%1$s</xliff:g> ਵਿੱਚ ਪੂਰਾ ਚਾਰਜ ਹੋਵੇਗਾ"</string> <string name="keyguard_indication_charging_time_dock" msgid="3149328898931741271">"<xliff:g id="PERCENTAGE">%2$s</xliff:g> • ਚਾਰਜ ਹੋ ਰਿਹਾ ਹੈ • <xliff:g id="CHARGING_TIME_LEFT">%1$s</xliff:g> ਵਿੱਚ ਪੂਰਾ ਚਾਰਜ ਹੋਵੇਗਾ"</string> + <!-- no translation found for accessibility_action_open_communal_hub (3081702792413787849) --> + <skip /> <string name="communal_tutorial_indicator_text" msgid="4503010353591430123">"ਭਾਈਚਾਰਕ ਟਿਊਟੋਰੀਅਲ ਸ਼ੁਰੂ ਕਰਨ ਲਈ ਖੱਬੇ ਪਾਸੇ ਵੱਲ ਸਵਾਈਪ ਕਰੋ"</string> <string name="cta_tile_button_to_open_widget_editor" msgid="3871562362382963878">"ਵਿਉਂਤਬੱਧ ਕਰੋ"</string> <string name="cta_tile_button_to_dismiss" msgid="3377597875997861754">"ਖਾਰਜ ਕਰੋ"</string> @@ -459,6 +464,10 @@ <string name="button_text_to_open_settings" msgid="1987729256950941628">"ਸੈਟਿੰਗਾਂ ਖੋਲ੍ਹੋ"</string> <string name="work_mode_off_title" msgid="5794818421357835873">"ਕੰਮ ਸੰਬੰਧੀ ਐਪਾਂ ਤੋਂ ਰੋਕ ਹਟਾਈਏ?"</string> <string name="work_mode_turn_on" msgid="907813741770247267">"ਰੋਕ ਹਟਾਓ"</string> + <!-- no translation found for accessibility_action_label_close_communal_hub (6790396569621032333) --> + <skip /> + <!-- no translation found for accessibility_content_description_for_communal_hub (1670220840599380118) --> + <skip /> <string name="accessibility_multi_user_switch_switcher" msgid="5330448341251092660">"ਵਰਤੋਂਕਾਰ ਸਵਿੱਚ ਕਰੋ"</string> <string name="accessibility_multi_user_list_switcher" msgid="8574105376229857407">"ਪੁੱਲਡਾਊਨ ਮੀਨੂ"</string> <string name="guest_exit_guest_dialog_message" msgid="8183450985628495709">"ਇਸ ਸੈਸ਼ਨ ਵਿਚਲੀਆਂ ਸਾਰੀਆਂ ਐਪਾਂ ਅਤੇ ਡਾਟੇ ਨੂੰ ਮਿਟਾ ਦਿੱਤਾ ਜਾਵੇਗਾ।"</string> @@ -588,9 +597,9 @@ <string name="screen_pinning_negative" msgid="6882816864569211666">"ਨਹੀਂ ਧੰਨਵਾਦ"</string> <string name="screen_pinning_start" msgid="7483998671383371313">"ਐਪ ਨੂੰ ਪਿੰਨ ਕੀਤਾ ਗਿਆ"</string> <string name="screen_pinning_exit" msgid="4553787518387346893">"ਐਪ ਨੂੰ ਅਨਪਿੰਨ ਕੀਤਾ ਗਿਆ"</string> - <string name="stream_voice_call" msgid="7468348170702375660">"ਕਾਲ ਕਰੋ"</string> + <string name="stream_voice_call" msgid="7468348170702375660">"ਕਾਲ"</string> <string name="stream_system" msgid="7663148785370565134">"ਸਿਸਟਮ"</string> - <string name="stream_ring" msgid="7550670036738697526">"ਘੰਟੀ ਵਜਾਓ"</string> + <string name="stream_ring" msgid="7550670036738697526">"ਘੰਟੀ"</string> <string name="stream_music" msgid="2188224742361847580">"ਮੀਡੀਆ"</string> <string name="stream_alarm" msgid="16058075093011694">"ਅਲਾਰਮ"</string> <string name="stream_notification" msgid="7930294049046243939">"ਸੂਚਨਾ"</string> diff --git a/packages/SystemUI/res/values-pl/strings.xml b/packages/SystemUI/res/values-pl/strings.xml index 814d321b145d..c82f77730c9f 100644 --- a/packages/SystemUI/res/values-pl/strings.xml +++ b/packages/SystemUI/res/values-pl/strings.xml @@ -235,7 +235,8 @@ <string name="accessibility_desc_notification_shade" msgid="5355229129428759989">"Obszar powiadomień."</string> <string name="accessibility_desc_quick_settings" msgid="4374766941484719179">"Szybkie ustawienia."</string> <string name="accessibility_desc_qs_notification_shade" msgid="8327226953072700376">"Szybkie ustawienia i obszar powiadomień."</string> - <string name="accessibility_desc_lock_screen" msgid="5983125095181194887">"Ekran blokady."</string> + <!-- no translation found for accessibility_desc_lock_screen (409034672704273634) --> + <skip /> <string name="accessibility_desc_work_lock" msgid="4355620395354680575">"Ekran blokady wyświetlany podczas działania"</string> <string name="accessibility_desc_close" msgid="8293708213442107755">"Zamknij"</string> <string name="accessibility_quick_settings_dnd_none_on" msgid="3235552940146035383">"całkowita cisza"</string> @@ -371,6 +372,8 @@ <string name="quick_settings_hearing_devices_dialog_title" msgid="9004774017688484981">"Urządzenia słuchowe"</string> <string name="quick_settings_pair_hearing_devices" msgid="5987105102207447322">"Sparuj nowe urządzenie"</string> <string name="accessibility_hearing_device_pair_new_device" msgid="8440082580186130090">"Kliknij, aby sparować nowe urządzenie"</string> + <!-- no translation found for hearing_devices_presets_error (350363093458408536) --> + <skip /> <string name="sensor_privacy_start_use_mic_dialog_title" msgid="563796653825944944">"Odblokować mikrofon urządzenia?"</string> <string name="sensor_privacy_start_use_camera_dialog_title" msgid="8807639852654305227">"Odblokować aparat urządzenia?"</string> <string name="sensor_privacy_start_use_mic_camera_dialog_title" msgid="4316471859905020023">"Odblokować aparat i mikrofon urządzenia?"</string> @@ -436,6 +439,8 @@ <string name="keyguard_indication_charging_time_fast" msgid="8390311020603859480">"<xliff:g id="PERCENTAGE">%2$s</xliff:g> • Szybkie ładowanie • Pełne naładowanie za <xliff:g id="CHARGING_TIME_LEFT">%1$s</xliff:g>"</string> <string name="keyguard_indication_charging_time_slowly" msgid="301936949731705417">"<xliff:g id="PERCENTAGE">%2$s</xliff:g> • Wolne ładowanie • Pełne naładowanie za <xliff:g id="CHARGING_TIME_LEFT">%1$s</xliff:g>"</string> <string name="keyguard_indication_charging_time_dock" msgid="3149328898931741271">"<xliff:g id="PERCENTAGE">%2$s</xliff:g> • Ładowanie • Pełne naładowanie za <xliff:g id="CHARGING_TIME_LEFT">%1$s</xliff:g>"</string> + <!-- no translation found for accessibility_action_open_communal_hub (3081702792413787849) --> + <skip /> <string name="communal_tutorial_indicator_text" msgid="4503010353591430123">"Aby uruchomić wspólny samouczek, przeciągnij palcem w lewo"</string> <string name="cta_tile_button_to_open_widget_editor" msgid="3871562362382963878">"Dostosuj"</string> <string name="cta_tile_button_to_dismiss" msgid="3377597875997861754">"Zamknij"</string> @@ -454,6 +459,10 @@ <string name="button_text_to_open_settings" msgid="1987729256950941628">"Otwórz ustawienia"</string> <string name="work_mode_off_title" msgid="5794818421357835873">"Cofnąć wstrzymanie aplikacji służbowych?"</string> <string name="work_mode_turn_on" msgid="907813741770247267">"Cofnij wstrzymanie"</string> + <!-- no translation found for accessibility_action_label_close_communal_hub (6790396569621032333) --> + <skip /> + <!-- no translation found for accessibility_content_description_for_communal_hub (1670220840599380118) --> + <skip /> <string name="accessibility_multi_user_switch_switcher" msgid="5330448341251092660">"Przełącz użytkownika"</string> <string name="accessibility_multi_user_list_switcher" msgid="8574105376229857407">"menu"</string> <string name="guest_exit_guest_dialog_message" msgid="8183450985628495709">"Wszystkie aplikacje i dane w tej sesji zostaną usunięte."</string> diff --git a/packages/SystemUI/res/values-pt-rBR/strings.xml b/packages/SystemUI/res/values-pt-rBR/strings.xml index 17fde25e7606..f4d99e97a1f5 100644 --- a/packages/SystemUI/res/values-pt-rBR/strings.xml +++ b/packages/SystemUI/res/values-pt-rBR/strings.xml @@ -235,7 +235,8 @@ <string name="accessibility_desc_notification_shade" msgid="5355229129428759989">"Aba de notificações."</string> <string name="accessibility_desc_quick_settings" msgid="4374766941484719179">"Configurações rápidas."</string> <string name="accessibility_desc_qs_notification_shade" msgid="8327226953072700376">"Configurações rápidas e aba de notificações."</string> - <string name="accessibility_desc_lock_screen" msgid="5983125095181194887">"Tela de bloqueio."</string> + <!-- no translation found for accessibility_desc_lock_screen (409034672704273634) --> + <skip /> <string name="accessibility_desc_work_lock" msgid="4355620395354680575">"Tela de bloqueio de trabalho"</string> <string name="accessibility_desc_close" msgid="8293708213442107755">"Fechar"</string> <string name="accessibility_quick_settings_dnd_none_on" msgid="3235552940146035383">"silêncio total"</string> @@ -376,6 +377,8 @@ <string name="quick_settings_hearing_devices_dialog_title" msgid="9004774017688484981">"Aparelhos auditivos"</string> <string name="quick_settings_pair_hearing_devices" msgid="5987105102207447322">"Parear novo dispositivo"</string> <string name="accessibility_hearing_device_pair_new_device" msgid="8440082580186130090">"Clique para parear o novo dispositivo"</string> + <!-- no translation found for hearing_devices_presets_error (350363093458408536) --> + <skip /> <string name="sensor_privacy_start_use_mic_dialog_title" msgid="563796653825944944">"Desbloquear o microfone do dispositivo?"</string> <string name="sensor_privacy_start_use_camera_dialog_title" msgid="8807639852654305227">"Desbloquear a câmera do dispositivo?"</string> <string name="sensor_privacy_start_use_mic_camera_dialog_title" msgid="4316471859905020023">"Desbloquear a câmera e o microfone do dispositivo?"</string> @@ -441,6 +444,8 @@ <string name="keyguard_indication_charging_time_fast" msgid="8390311020603859480">"<xliff:g id="PERCENTAGE">%2$s</xliff:g> • Carregamento rápido • Conclusão em <xliff:g id="CHARGING_TIME_LEFT">%1$s</xliff:g>"</string> <string name="keyguard_indication_charging_time_slowly" msgid="301936949731705417">"<xliff:g id="PERCENTAGE">%2$s</xliff:g> • Carga lenta • Conclusão em <xliff:g id="CHARGING_TIME_LEFT">%1$s</xliff:g>"</string> <string name="keyguard_indication_charging_time_dock" msgid="3149328898931741271">"<xliff:g id="PERCENTAGE">%2$s</xliff:g> • Carregando • Conclusão em <xliff:g id="CHARGING_TIME_LEFT">%1$s</xliff:g>"</string> + <!-- no translation found for accessibility_action_open_communal_hub (3081702792413787849) --> + <skip /> <string name="communal_tutorial_indicator_text" msgid="4503010353591430123">"Deslize para a esquerda para iniciar o tutorial compartilhado"</string> <string name="cta_tile_button_to_open_widget_editor" msgid="3871562362382963878">"Personalizar"</string> <string name="cta_tile_button_to_dismiss" msgid="3377597875997861754">"Dispensar"</string> @@ -459,6 +464,10 @@ <string name="button_text_to_open_settings" msgid="1987729256950941628">"Abrir as configurações"</string> <string name="work_mode_off_title" msgid="5794818421357835873">"Reativar apps de trabalho?"</string> <string name="work_mode_turn_on" msgid="907813741770247267">"Reativar"</string> + <!-- no translation found for accessibility_action_label_close_communal_hub (6790396569621032333) --> + <skip /> + <!-- no translation found for accessibility_content_description_for_communal_hub (1670220840599380118) --> + <skip /> <string name="accessibility_multi_user_switch_switcher" msgid="5330448341251092660">"Trocar usuário"</string> <string name="accessibility_multi_user_list_switcher" msgid="8574105376229857407">"menu suspenso"</string> <string name="guest_exit_guest_dialog_message" msgid="8183450985628495709">"Todos os apps e dados nesta sessão serão excluídos."</string> @@ -602,8 +611,8 @@ <string name="volume_ringer_status_silent" msgid="3691324657849880883">"Desativar som"</string> <string name="media_device_cast" msgid="4786241789687569892">"Transmitir"</string> <string name="stream_notification_unavailable" msgid="4313854556205836435">"Indisponível com o toque silenciado"</string> - <string name="stream_alarm_unavailable" msgid="4059817189292197839">"Indisponível porque o Não perturbe está ativado"</string> - <string name="stream_media_unavailable" msgid="6823020894438959853">"Indisponível porque o Não perturbe está ativado"</string> + <string name="stream_alarm_unavailable" msgid="4059817189292197839">"Indisponível com o Não perturbe ativado"</string> + <string name="stream_media_unavailable" msgid="6823020894438959853">"Indisponível com o Não perturbe ativado"</string> <string name="volume_stream_content_description_unmute" msgid="7729576371406792977">"%1$s. Toque para ativar o som."</string> <string name="volume_stream_content_description_vibrate" msgid="4858111994183089761">"%1$s. Toque para configurar para vibrar. É possível que os serviços de acessibilidade sejam silenciados."</string> <string name="volume_stream_content_description_mute" msgid="4079046784917920984">"%1$s. Toque para silenciar. É possível que os serviços de acessibilidade sejam silenciados."</string> diff --git a/packages/SystemUI/res/values-pt-rPT/strings.xml b/packages/SystemUI/res/values-pt-rPT/strings.xml index dfb7695072de..9a7f7f8d39ba 100644 --- a/packages/SystemUI/res/values-pt-rPT/strings.xml +++ b/packages/SystemUI/res/values-pt-rPT/strings.xml @@ -235,7 +235,7 @@ <string name="accessibility_desc_notification_shade" msgid="5355229129428759989">"Painel de notificações."</string> <string name="accessibility_desc_quick_settings" msgid="4374766941484719179">"Definições rápidas."</string> <string name="accessibility_desc_qs_notification_shade" msgid="8327226953072700376">"Definições rápidas e painel de notificações."</string> - <string name="accessibility_desc_lock_screen" msgid="5983125095181194887">"Ecrã de bloqueio."</string> + <string name="accessibility_desc_lock_screen" msgid="409034672704273634">"Ecrã de bloqueio"</string> <string name="accessibility_desc_work_lock" msgid="4355620395354680575">"Ecrã de bloqueio de trabalho"</string> <string name="accessibility_desc_close" msgid="8293708213442107755">"Fechar"</string> <string name="accessibility_quick_settings_dnd_none_on" msgid="3235552940146035383">"silêncio total"</string> @@ -270,20 +270,15 @@ <string name="see_all_bluetooth_devices" msgid="1761596816620200433">"Ver tudo"</string> <string name="turn_on_bluetooth" msgid="5681370462180289071">"Usar Bluetooth"</string> <string name="quick_settings_bluetooth_device_connected" msgid="7884777006729260996">"Ligado"</string> - <!-- no translation found for quick_settings_bluetooth_device_audio_sharing (1496358082943301670) --> - <skip /> + <string name="quick_settings_bluetooth_device_audio_sharing" msgid="1496358082943301670">"Partilha de áudio"</string> <string name="quick_settings_bluetooth_device_saved" msgid="7549938728928069477">"Guardado"</string> <string name="accessibility_quick_settings_bluetooth_device_tap_to_disconnect" msgid="415980329093277342">"desassociar"</string> <string name="accessibility_quick_settings_bluetooth_device_tap_to_activate" msgid="3724301751036877403">"ativar"</string> <string name="turn_on_bluetooth_auto_tomorrow" msgid="414836329962473906">"Reativar amanhã automaticamente"</string> - <!-- no translation found for turn_on_bluetooth_auto_info_disabled (682984290339848844) --> - <skip /> - <!-- no translation found for turn_on_bluetooth_auto_info_enabled (7440944034584560279) --> - <skip /> - <!-- no translation found for quick_settings_bluetooth_audio_sharing_button (4499275822759907822) --> - <skip /> - <!-- no translation found for quick_settings_bluetooth_audio_sharing_button_sharing (8626191139359072540) --> - <skip /> + <string name="turn_on_bluetooth_auto_info_disabled" msgid="682984290339848844">"As funcionalidades como a Partilha rápida e o serviço Localizar o meu dispositivo usam o Bluetooth"</string> + <string name="turn_on_bluetooth_auto_info_enabled" msgid="7440944034584560279">"O Bluetooth vai ser ativado amanhã de manhã"</string> + <string name="quick_settings_bluetooth_audio_sharing_button" msgid="4499275822759907822">"Partilha de áudio"</string> + <string name="quick_settings_bluetooth_audio_sharing_button_sharing" msgid="8626191139359072540">"A partilhar áudio"</string> <string name="quick_settings_bluetooth_secondary_label_battery_level" msgid="4182034939479344093">"<xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE">%s</xliff:g> de bateria"</string> <string name="quick_settings_bluetooth_secondary_label_audio" msgid="780333390310051161">"Áudio"</string> <string name="quick_settings_bluetooth_secondary_label_headset" msgid="2332093067553000852">"Ausc. c/ mic. integ."</string> @@ -376,6 +371,8 @@ <string name="quick_settings_hearing_devices_dialog_title" msgid="9004774017688484981">"Dispositivos auditivos"</string> <string name="quick_settings_pair_hearing_devices" msgid="5987105102207447322">"Sincronizar novo dispositivo"</string> <string name="accessibility_hearing_device_pair_new_device" msgid="8440082580186130090">"Clique para sincronizar um novo dispositivo"</string> + <!-- no translation found for hearing_devices_presets_error (350363093458408536) --> + <skip /> <string name="sensor_privacy_start_use_mic_dialog_title" msgid="563796653825944944">"Desbloquear o microfone do dispositivo?"</string> <string name="sensor_privacy_start_use_camera_dialog_title" msgid="8807639852654305227">"Desbloquear a câmara do dispositivo?"</string> <string name="sensor_privacy_start_use_mic_camera_dialog_title" msgid="4316471859905020023">"Quer desbloquear a câmara e o microfone?"</string> @@ -441,6 +438,7 @@ <string name="keyguard_indication_charging_time_fast" msgid="8390311020603859480">"<xliff:g id="PERCENTAGE">%2$s</xliff:g> • A carregar rapidamente • Carga completa em <xliff:g id="CHARGING_TIME_LEFT">%1$s</xliff:g>"</string> <string name="keyguard_indication_charging_time_slowly" msgid="301936949731705417">"<xliff:g id="PERCENTAGE">%2$s</xliff:g> • A carregar lentamente • Carga completa em <xliff:g id="CHARGING_TIME_LEFT">%1$s</xliff:g>"</string> <string name="keyguard_indication_charging_time_dock" msgid="3149328898931741271">"<xliff:g id="PERCENTAGE">%2$s</xliff:g> • A carregar • Carga completa em <xliff:g id="CHARGING_TIME_LEFT">%1$s</xliff:g>"</string> + <string name="accessibility_action_open_communal_hub" msgid="3081702792413787849">"Widgets no ecrã de bloqueio"</string> <string name="communal_tutorial_indicator_text" msgid="4503010353591430123">"Deslize rapidamente para a esquerda para iniciar o tutorial coletivo"</string> <string name="cta_tile_button_to_open_widget_editor" msgid="3871562362382963878">"Personalizar"</string> <string name="cta_tile_button_to_dismiss" msgid="3377597875997861754">"Ignorar"</string> @@ -459,6 +457,8 @@ <string name="button_text_to_open_settings" msgid="1987729256950941628">"Abrir definições"</string> <string name="work_mode_off_title" msgid="5794818421357835873">"Retomar apps de trabalho?"</string> <string name="work_mode_turn_on" msgid="907813741770247267">"Retomar"</string> + <string name="accessibility_action_label_close_communal_hub" msgid="6790396569621032333">"Fechar widgets no ecrã de bloqueio"</string> + <string name="accessibility_content_description_for_communal_hub" msgid="1670220840599380118">"Widgets no ecrã de bloqueio"</string> <string name="accessibility_multi_user_switch_switcher" msgid="5330448341251092660">"Mudar utilizador"</string> <string name="accessibility_multi_user_list_switcher" msgid="8574105376229857407">"menu pendente"</string> <string name="guest_exit_guest_dialog_message" msgid="8183450985628495709">"Todas as apps e dados desta sessão serão eliminados."</string> @@ -1005,7 +1005,7 @@ <string name="accessibility_floating_button_action_move_top_left" msgid="6253520703618545705">"Mover p/ parte sup. esquerda"</string> <string name="accessibility_floating_button_action_move_top_right" msgid="6106225581993479711">"Mover parte superior direita"</string> <string name="accessibility_floating_button_action_move_bottom_left" msgid="8063394111137429725">"Mover p/ parte infer. esquerda"</string> - <string name="accessibility_floating_button_action_move_bottom_right" msgid="6196904373227440500">"Mover parte inferior direita"</string> + <string name="accessibility_floating_button_action_move_bottom_right" msgid="6196904373227440500">"Mover p/ parte infer. direita"</string> <string name="accessibility_floating_button_action_move_to_edge_and_hide_to_half" msgid="662401168245782658">"Mover p/ extremidade e ocultar"</string> <string name="accessibility_floating_button_action_move_out_edge_and_show" msgid="8354760891651663326">"Retirar extremidade e mostrar"</string> <string name="accessibility_floating_button_action_remove_menu" msgid="6730432848162552135">"Remover"</string> diff --git a/packages/SystemUI/res/values-pt/strings.xml b/packages/SystemUI/res/values-pt/strings.xml index 17fde25e7606..f4d99e97a1f5 100644 --- a/packages/SystemUI/res/values-pt/strings.xml +++ b/packages/SystemUI/res/values-pt/strings.xml @@ -235,7 +235,8 @@ <string name="accessibility_desc_notification_shade" msgid="5355229129428759989">"Aba de notificações."</string> <string name="accessibility_desc_quick_settings" msgid="4374766941484719179">"Configurações rápidas."</string> <string name="accessibility_desc_qs_notification_shade" msgid="8327226953072700376">"Configurações rápidas e aba de notificações."</string> - <string name="accessibility_desc_lock_screen" msgid="5983125095181194887">"Tela de bloqueio."</string> + <!-- no translation found for accessibility_desc_lock_screen (409034672704273634) --> + <skip /> <string name="accessibility_desc_work_lock" msgid="4355620395354680575">"Tela de bloqueio de trabalho"</string> <string name="accessibility_desc_close" msgid="8293708213442107755">"Fechar"</string> <string name="accessibility_quick_settings_dnd_none_on" msgid="3235552940146035383">"silêncio total"</string> @@ -376,6 +377,8 @@ <string name="quick_settings_hearing_devices_dialog_title" msgid="9004774017688484981">"Aparelhos auditivos"</string> <string name="quick_settings_pair_hearing_devices" msgid="5987105102207447322">"Parear novo dispositivo"</string> <string name="accessibility_hearing_device_pair_new_device" msgid="8440082580186130090">"Clique para parear o novo dispositivo"</string> + <!-- no translation found for hearing_devices_presets_error (350363093458408536) --> + <skip /> <string name="sensor_privacy_start_use_mic_dialog_title" msgid="563796653825944944">"Desbloquear o microfone do dispositivo?"</string> <string name="sensor_privacy_start_use_camera_dialog_title" msgid="8807639852654305227">"Desbloquear a câmera do dispositivo?"</string> <string name="sensor_privacy_start_use_mic_camera_dialog_title" msgid="4316471859905020023">"Desbloquear a câmera e o microfone do dispositivo?"</string> @@ -441,6 +444,8 @@ <string name="keyguard_indication_charging_time_fast" msgid="8390311020603859480">"<xliff:g id="PERCENTAGE">%2$s</xliff:g> • Carregamento rápido • Conclusão em <xliff:g id="CHARGING_TIME_LEFT">%1$s</xliff:g>"</string> <string name="keyguard_indication_charging_time_slowly" msgid="301936949731705417">"<xliff:g id="PERCENTAGE">%2$s</xliff:g> • Carga lenta • Conclusão em <xliff:g id="CHARGING_TIME_LEFT">%1$s</xliff:g>"</string> <string name="keyguard_indication_charging_time_dock" msgid="3149328898931741271">"<xliff:g id="PERCENTAGE">%2$s</xliff:g> • Carregando • Conclusão em <xliff:g id="CHARGING_TIME_LEFT">%1$s</xliff:g>"</string> + <!-- no translation found for accessibility_action_open_communal_hub (3081702792413787849) --> + <skip /> <string name="communal_tutorial_indicator_text" msgid="4503010353591430123">"Deslize para a esquerda para iniciar o tutorial compartilhado"</string> <string name="cta_tile_button_to_open_widget_editor" msgid="3871562362382963878">"Personalizar"</string> <string name="cta_tile_button_to_dismiss" msgid="3377597875997861754">"Dispensar"</string> @@ -459,6 +464,10 @@ <string name="button_text_to_open_settings" msgid="1987729256950941628">"Abrir as configurações"</string> <string name="work_mode_off_title" msgid="5794818421357835873">"Reativar apps de trabalho?"</string> <string name="work_mode_turn_on" msgid="907813741770247267">"Reativar"</string> + <!-- no translation found for accessibility_action_label_close_communal_hub (6790396569621032333) --> + <skip /> + <!-- no translation found for accessibility_content_description_for_communal_hub (1670220840599380118) --> + <skip /> <string name="accessibility_multi_user_switch_switcher" msgid="5330448341251092660">"Trocar usuário"</string> <string name="accessibility_multi_user_list_switcher" msgid="8574105376229857407">"menu suspenso"</string> <string name="guest_exit_guest_dialog_message" msgid="8183450985628495709">"Todos os apps e dados nesta sessão serão excluídos."</string> @@ -602,8 +611,8 @@ <string name="volume_ringer_status_silent" msgid="3691324657849880883">"Desativar som"</string> <string name="media_device_cast" msgid="4786241789687569892">"Transmitir"</string> <string name="stream_notification_unavailable" msgid="4313854556205836435">"Indisponível com o toque silenciado"</string> - <string name="stream_alarm_unavailable" msgid="4059817189292197839">"Indisponível porque o Não perturbe está ativado"</string> - <string name="stream_media_unavailable" msgid="6823020894438959853">"Indisponível porque o Não perturbe está ativado"</string> + <string name="stream_alarm_unavailable" msgid="4059817189292197839">"Indisponível com o Não perturbe ativado"</string> + <string name="stream_media_unavailable" msgid="6823020894438959853">"Indisponível com o Não perturbe ativado"</string> <string name="volume_stream_content_description_unmute" msgid="7729576371406792977">"%1$s. Toque para ativar o som."</string> <string name="volume_stream_content_description_vibrate" msgid="4858111994183089761">"%1$s. Toque para configurar para vibrar. É possível que os serviços de acessibilidade sejam silenciados."</string> <string name="volume_stream_content_description_mute" msgid="4079046784917920984">"%1$s. Toque para silenciar. É possível que os serviços de acessibilidade sejam silenciados."</string> diff --git a/packages/SystemUI/res/values-ro/strings.xml b/packages/SystemUI/res/values-ro/strings.xml index 2af8013fe85c..e397afb41d74 100644 --- a/packages/SystemUI/res/values-ro/strings.xml +++ b/packages/SystemUI/res/values-ro/strings.xml @@ -235,7 +235,8 @@ <string name="accessibility_desc_notification_shade" msgid="5355229129428759989">"Fereastră pentru notificări."</string> <string name="accessibility_desc_quick_settings" msgid="4374766941484719179">"Setări rapide."</string> <string name="accessibility_desc_qs_notification_shade" msgid="8327226953072700376">"Fereastră de Setări rapide și notificări."</string> - <string name="accessibility_desc_lock_screen" msgid="5983125095181194887">"Ecranul de blocare."</string> + <!-- no translation found for accessibility_desc_lock_screen (409034672704273634) --> + <skip /> <string name="accessibility_desc_work_lock" msgid="4355620395354680575">"Ecran de blocare pentru serviciu"</string> <string name="accessibility_desc_close" msgid="8293708213442107755">"Închide"</string> <string name="accessibility_quick_settings_dnd_none_on" msgid="3235552940146035383">"niciun sunet"</string> @@ -376,6 +377,8 @@ <string name="quick_settings_hearing_devices_dialog_title" msgid="9004774017688484981">"Aparate auditive"</string> <string name="quick_settings_pair_hearing_devices" msgid="5987105102207447322">"Asociază un nou dispozitiv"</string> <string name="accessibility_hearing_device_pair_new_device" msgid="8440082580186130090">"Dă clic pentru a asocia un nou dispozitiv"</string> + <!-- no translation found for hearing_devices_presets_error (350363093458408536) --> + <skip /> <string name="sensor_privacy_start_use_mic_dialog_title" msgid="563796653825944944">"Deblochezi microfonul dispozitivului?"</string> <string name="sensor_privacy_start_use_camera_dialog_title" msgid="8807639852654305227">"Deblochezi camera dispozitivului?"</string> <string name="sensor_privacy_start_use_mic_camera_dialog_title" msgid="4316471859905020023">"Deblochezi camera și microfonul dispozitivului?"</string> @@ -441,6 +444,8 @@ <string name="keyguard_indication_charging_time_fast" msgid="8390311020603859480">"<xliff:g id="PERCENTAGE">%2$s</xliff:g> • Se încarcă rapid • <xliff:g id="CHARGING_TIME_LEFT">%1$s</xliff:g> până la încărcarea completă"</string> <string name="keyguard_indication_charging_time_slowly" msgid="301936949731705417">"<xliff:g id="PERCENTAGE">%2$s</xliff:g> • Se încarcă lent • <xliff:g id="CHARGING_TIME_LEFT">%1$s</xliff:g> până la încărcarea completă"</string> <string name="keyguard_indication_charging_time_dock" msgid="3149328898931741271">"<xliff:g id="PERCENTAGE">%2$s</xliff:g> • Se încarcă • <xliff:g id="CHARGING_TIME_LEFT">%1$s</xliff:g> până la încărcarea completă"</string> + <!-- no translation found for accessibility_action_open_communal_hub (3081702792413787849) --> + <skip /> <string name="communal_tutorial_indicator_text" msgid="4503010353591430123">"Glisează spre stânga pentru a începe tutorialul pentru comunitate"</string> <string name="cta_tile_button_to_open_widget_editor" msgid="3871562362382963878">"Personalizează"</string> <string name="cta_tile_button_to_dismiss" msgid="3377597875997861754">"Respinge"</string> @@ -459,6 +464,10 @@ <string name="button_text_to_open_settings" msgid="1987729256950941628">"Deschide setările"</string> <string name="work_mode_off_title" msgid="5794818421357835873">"Reactivezi aplicații de lucru?"</string> <string name="work_mode_turn_on" msgid="907813741770247267">"Reactivează"</string> + <!-- no translation found for accessibility_action_label_close_communal_hub (6790396569621032333) --> + <skip /> + <!-- no translation found for accessibility_content_description_for_communal_hub (1670220840599380118) --> + <skip /> <string name="accessibility_multi_user_switch_switcher" msgid="5330448341251092660">"Schimbă utilizatorul"</string> <string name="accessibility_multi_user_list_switcher" msgid="8574105376229857407">"meniu vertical"</string> <string name="guest_exit_guest_dialog_message" msgid="8183450985628495709">"Toate aplicațiile și datele din această sesiune vor fi șterse."</string> diff --git a/packages/SystemUI/res/values-ru/strings.xml b/packages/SystemUI/res/values-ru/strings.xml index 16fe33162330..6d19ed086c57 100644 --- a/packages/SystemUI/res/values-ru/strings.xml +++ b/packages/SystemUI/res/values-ru/strings.xml @@ -235,7 +235,8 @@ <string name="accessibility_desc_notification_shade" msgid="5355229129428759989">"Панель уведомлений"</string> <string name="accessibility_desc_quick_settings" msgid="4374766941484719179">"Быстрые настройки"</string> <string name="accessibility_desc_qs_notification_shade" msgid="8327226953072700376">"Быстрые настройки и панель уведомлений."</string> - <string name="accessibility_desc_lock_screen" msgid="5983125095181194887">"Экран блокировки."</string> + <!-- no translation found for accessibility_desc_lock_screen (409034672704273634) --> + <skip /> <string name="accessibility_desc_work_lock" msgid="4355620395354680575">"Заблокировано"</string> <string name="accessibility_desc_close" msgid="8293708213442107755">"Закрыть"</string> <string name="accessibility_quick_settings_dnd_none_on" msgid="3235552940146035383">"полная тишина"</string> @@ -376,6 +377,8 @@ <string name="quick_settings_hearing_devices_dialog_title" msgid="9004774017688484981">"Слуховые аппараты"</string> <string name="quick_settings_pair_hearing_devices" msgid="5987105102207447322">"Подключить новое устройство"</string> <string name="accessibility_hearing_device_pair_new_device" msgid="8440082580186130090">"Нажмите, чтобы подключить новое устройство"</string> + <!-- no translation found for hearing_devices_presets_error (350363093458408536) --> + <skip /> <string name="sensor_privacy_start_use_mic_dialog_title" msgid="563796653825944944">"Разблокировать микрофон устройства?"</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> @@ -441,6 +444,8 @@ <string name="keyguard_indication_charging_time_fast" msgid="8390311020603859480">"<xliff:g id="PERCENTAGE">%2$s</xliff:g> • Быстрая зарядка • Осталось <xliff:g id="CHARGING_TIME_LEFT">%1$s</xliff:g>"</string> <string name="keyguard_indication_charging_time_slowly" msgid="301936949731705417">"<xliff:g id="PERCENTAGE">%2$s</xliff:g> • Медленная зарядка • Осталось <xliff:g id="CHARGING_TIME_LEFT">%1$s</xliff:g>"</string> <string name="keyguard_indication_charging_time_dock" msgid="3149328898931741271">"<xliff:g id="PERCENTAGE">%2$s</xliff:g> • Зарядка • Осталось <xliff:g id="CHARGING_TIME_LEFT">%1$s</xliff:g>"</string> + <!-- no translation found for accessibility_action_open_communal_hub (3081702792413787849) --> + <skip /> <string name="communal_tutorial_indicator_text" msgid="4503010353591430123">"Чтобы ознакомиться с руководством, проведите по экрану влево"</string> <string name="cta_tile_button_to_open_widget_editor" msgid="3871562362382963878">"Настроить"</string> <string name="cta_tile_button_to_dismiss" msgid="3377597875997861754">"Закрыть"</string> @@ -459,6 +464,10 @@ <string name="button_text_to_open_settings" msgid="1987729256950941628">"Открыть настройки"</string> <string name="work_mode_off_title" msgid="5794818421357835873">"Включить рабочие приложения?"</string> <string name="work_mode_turn_on" msgid="907813741770247267">"Включить"</string> + <!-- no translation found for accessibility_action_label_close_communal_hub (6790396569621032333) --> + <skip /> + <!-- no translation found for accessibility_content_description_for_communal_hub (1670220840599380118) --> + <skip /> <string name="accessibility_multi_user_switch_switcher" msgid="5330448341251092660">"Сменить пользователя."</string> <string name="accessibility_multi_user_list_switcher" msgid="8574105376229857407">"раскрывающееся меню"</string> <string name="guest_exit_guest_dialog_message" msgid="8183450985628495709">"Все приложения и данные этого профиля будут удалены."</string> @@ -612,8 +621,8 @@ <string name="volume_panel_noise_control_title" msgid="7413949943872304474">"Контроль уровня шума"</string> <string name="volume_panel_spatial_audio_title" msgid="3367048857932040660">"Пространственное звучание"</string> <string name="volume_panel_spatial_audio_off" msgid="4177490084606772989">"Отключено"</string> - <string name="volume_panel_spatial_audio_fixed" msgid="3136080137827746046">"Без отслеживания"</string> - <string name="volume_panel_spatial_audio_tracking" msgid="5711115234001762974">"С отслеживанием"</string> + <string name="volume_panel_spatial_audio_fixed" msgid="3136080137827746046">"Без отслеживания"</string> + <string name="volume_panel_spatial_audio_tracking" msgid="5711115234001762974">"С отслеживанием"</string> <string name="volume_ringer_change" msgid="3574969197796055532">"Нажмите, чтобы изменить режим звонка."</string> <string name="volume_ringer_hint_mute" msgid="4263821214125126614">"отключить звук"</string> <string name="volume_ringer_hint_unmute" msgid="6119086890306456976">"включить звук"</string> @@ -1002,11 +1011,11 @@ <string name="accessibility_floating_button_hidden_notification_text" msgid="1457021647040915658">"Чтобы вернуть ее, нажмите на уведомление."</string> <string name="accessibility_floating_button_undo_message_label_text" msgid="9017658016426242640">"<xliff:g id="FEATURE_NAME">%s</xliff:g>: сочетание клавиш удалено."</string> <string name="accessibility_floating_button_undo_message_number_text" msgid="4909270290725226075">"{count,plural, =1{# сочетание клавиш удалено}one{# сочетание клавиш удалено}few{# сочетания клавиш удалено}many{# сочетаний клавиш удалено}other{# сочетания клавиш удалено}}"</string> - <string name="accessibility_floating_button_action_move_top_left" msgid="6253520703618545705">"Перенести в левый верхний угол"</string> - <string name="accessibility_floating_button_action_move_top_right" msgid="6106225581993479711">"Перенести в правый верхний угол"</string> - <string name="accessibility_floating_button_action_move_bottom_left" msgid="8063394111137429725">"Перенести в левый нижний угол"</string> - <string name="accessibility_floating_button_action_move_bottom_right" msgid="6196904373227440500">"Перенести в правый нижний угол"</string> - <string name="accessibility_floating_button_action_move_to_edge_and_hide_to_half" msgid="662401168245782658">"Перенести к краю и скрыть"</string> + <string name="accessibility_floating_button_action_move_top_left" msgid="6253520703618545705">"Переместить в левый верхний угол"</string> + <string name="accessibility_floating_button_action_move_top_right" msgid="6106225581993479711">"Переместить в правый верхний угол"</string> + <string name="accessibility_floating_button_action_move_bottom_left" msgid="8063394111137429725">"Переместить в левый нижний угол"</string> + <string name="accessibility_floating_button_action_move_bottom_right" msgid="6196904373227440500">"Переместить в правый нижний угол"</string> + <string name="accessibility_floating_button_action_move_to_edge_and_hide_to_half" msgid="662401168245782658">"Переместить к краю и скрыть"</string> <string name="accessibility_floating_button_action_move_out_edge_and_show" msgid="8354760891651663326">"Вернуть из-за края и показать"</string> <string name="accessibility_floating_button_action_remove_menu" msgid="6730432848162552135">"Убрать"</string> <string name="accessibility_floating_button_action_double_tap_to_toggle" msgid="7976492639670692037">"включить или отключить"</string> diff --git a/packages/SystemUI/res/values-si/strings.xml b/packages/SystemUI/res/values-si/strings.xml index 458d9eeaad62..8c9d51bc2387 100644 --- a/packages/SystemUI/res/values-si/strings.xml +++ b/packages/SystemUI/res/values-si/strings.xml @@ -235,7 +235,8 @@ <string name="accessibility_desc_notification_shade" msgid="5355229129428759989">"දැනුම්දීම් ආවරණය."</string> <string name="accessibility_desc_quick_settings" msgid="4374766941484719179">"ක්ෂණික සැකසීම්."</string> <string name="accessibility_desc_qs_notification_shade" msgid="8327226953072700376">"ඉක්මන් සැකසීම් සහ දැනුම්දීම් ඡායිතය."</string> - <string name="accessibility_desc_lock_screen" msgid="5983125095181194887">"අගුළු තිරය."</string> + <!-- no translation found for accessibility_desc_lock_screen (409034672704273634) --> + <skip /> <string name="accessibility_desc_work_lock" msgid="4355620395354680575">"කාර්යාල අගුලු තිරය"</string> <string name="accessibility_desc_close" msgid="8293708213442107755">"වසන්න"</string> <string name="accessibility_quick_settings_dnd_none_on" msgid="3235552940146035383">"සම්පූර්ණ නිහඬතාව"</string> @@ -270,20 +271,15 @@ <string name="see_all_bluetooth_devices" msgid="1761596816620200433">"සියල්ල බලන්න"</string> <string name="turn_on_bluetooth" msgid="5681370462180289071">"බ්ලූටූත් භාවිතා කරන්න"</string> <string name="quick_settings_bluetooth_device_connected" msgid="7884777006729260996">"සම්බන්ධිතයි"</string> - <!-- no translation found for quick_settings_bluetooth_device_audio_sharing (1496358082943301670) --> - <skip /> + <string name="quick_settings_bluetooth_device_audio_sharing" msgid="1496358082943301670">"ශ්රව්ය බෙදා ගැනීම"</string> <string name="quick_settings_bluetooth_device_saved" msgid="7549938728928069477">"සුරැකිණි"</string> <string name="accessibility_quick_settings_bluetooth_device_tap_to_disconnect" msgid="415980329093277342">"විසන්ධි කරන්න"</string> <string name="accessibility_quick_settings_bluetooth_device_tap_to_activate" msgid="3724301751036877403">"සක්රිය කරන්න"</string> <string name="turn_on_bluetooth_auto_tomorrow" msgid="414836329962473906">"හෙට ස්වයංක්රීයව නැවත ක්රියාත්මක කරන්න"</string> - <!-- no translation found for turn_on_bluetooth_auto_info_disabled (682984290339848844) --> - <skip /> - <!-- no translation found for turn_on_bluetooth_auto_info_enabled (7440944034584560279) --> - <skip /> - <!-- no translation found for quick_settings_bluetooth_audio_sharing_button (4499275822759907822) --> - <skip /> - <!-- no translation found for quick_settings_bluetooth_audio_sharing_button_sharing (8626191139359072540) --> - <skip /> + <string name="turn_on_bluetooth_auto_info_disabled" msgid="682984290339848844">"ඉක්මන් බෙදා ගැනීම සහ මගේ උපාංගය සෙවීම වැනි විශේෂාංග බ්ලූටූත් භාවිත කරයි"</string> + <string name="turn_on_bluetooth_auto_info_enabled" msgid="7440944034584560279">"බ්ලූටූත් හෙට උදේ සක්රීය වෙයි"</string> + <string name="quick_settings_bluetooth_audio_sharing_button" msgid="4499275822759907822">"ශ්රව්ය බෙදා ගැනීම"</string> + <string name="quick_settings_bluetooth_audio_sharing_button_sharing" msgid="8626191139359072540">"ශ්රව්යය බෙදා ගැනීම"</string> <string name="quick_settings_bluetooth_secondary_label_battery_level" msgid="4182034939479344093">"බැටරිය <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE">%s</xliff:g>"</string> <string name="quick_settings_bluetooth_secondary_label_audio" msgid="780333390310051161">"ශ්රව්ය"</string> <string name="quick_settings_bluetooth_secondary_label_headset" msgid="2332093067553000852">"හෙඩ්සෙටය"</string> @@ -376,6 +372,8 @@ <string name="quick_settings_hearing_devices_dialog_title" msgid="9004774017688484981">"ශ්රවණ උපාංග"</string> <string name="quick_settings_pair_hearing_devices" msgid="5987105102207447322">"නව උපාංගය යුගල කරන්න"</string> <string name="accessibility_hearing_device_pair_new_device" msgid="8440082580186130090">"නව උපාංගය යුගල කිරීමට ක්ලික් කරන්න"</string> + <!-- no translation found for hearing_devices_presets_error (350363093458408536) --> + <skip /> <string name="sensor_privacy_start_use_mic_dialog_title" msgid="563796653825944944">"උපාංග මයික්රෆෝනය අවහිර කිරීම ඉවත් කරන්නද?"</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> @@ -441,6 +439,8 @@ <string name="keyguard_indication_charging_time_fast" msgid="8390311020603859480">"<xliff:g id="PERCENTAGE">%2$s</xliff:g> • වේගයෙන් ආරෝපණය වෙමින් • <xliff:g id="CHARGING_TIME_LEFT">%1$s</xliff:g>කින් සම්පූර්ණ වේ"</string> <string name="keyguard_indication_charging_time_slowly" msgid="301936949731705417">"<xliff:g id="PERCENTAGE">%2$s</xliff:g> • සෙමින් ආරෝපණය වෙමින් • <xliff:g id="CHARGING_TIME_LEFT">%1$s</xliff:g>කින් සම්පූර්ණ වේ"</string> <string name="keyguard_indication_charging_time_dock" msgid="3149328898931741271">"<xliff:g id="PERCENTAGE">%2$s</xliff:g> • ආරෝපණය වෙමින් • <xliff:g id="CHARGING_TIME_LEFT">%1$s</xliff:g>කින් සම්පූර්ණ වේ"</string> + <!-- no translation found for accessibility_action_open_communal_hub (3081702792413787849) --> + <skip /> <string name="communal_tutorial_indicator_text" msgid="4503010353591430123">"පොදු නිබන්ධනය ආරම්භ කිරීමට වමට ස්වයිප් කරන්න"</string> <string name="cta_tile_button_to_open_widget_editor" msgid="3871562362382963878">"අභිරුචිකරණය කරන්න"</string> <string name="cta_tile_button_to_dismiss" msgid="3377597875997861754">"අස් කරන්න"</string> @@ -459,6 +459,10 @@ <string name="button_text_to_open_settings" msgid="1987729256950941628">"සැකසීම් විවෘත කරන්න"</string> <string name="work_mode_off_title" msgid="5794818421357835873">"කාර්ය යෙදුම් විරාම නොකරන්න ද?"</string> <string name="work_mode_turn_on" msgid="907813741770247267">"විරාම නොකරන්න"</string> + <!-- no translation found for accessibility_action_label_close_communal_hub (6790396569621032333) --> + <skip /> + <!-- no translation found for accessibility_content_description_for_communal_hub (1670220840599380118) --> + <skip /> <string name="accessibility_multi_user_switch_switcher" msgid="5330448341251092660">"පරිශීලක මාරුව"</string> <string name="accessibility_multi_user_list_switcher" msgid="8574105376229857407">"නිපතන මෙනුව"</string> <string name="guest_exit_guest_dialog_message" msgid="8183450985628495709">"මෙම සැසියේ සියළුම යෙදුම් සහ දත්ත මකාවී."</string> diff --git a/packages/SystemUI/res/values-sk/strings.xml b/packages/SystemUI/res/values-sk/strings.xml index c8c2ee5d073f..091936c672a9 100644 --- a/packages/SystemUI/res/values-sk/strings.xml +++ b/packages/SystemUI/res/values-sk/strings.xml @@ -235,7 +235,8 @@ <string name="accessibility_desc_notification_shade" msgid="5355229129428759989">"Panel upozornení."</string> <string name="accessibility_desc_quick_settings" msgid="4374766941484719179">"Rýchle nastavenia."</string> <string name="accessibility_desc_qs_notification_shade" msgid="8327226953072700376">"Rýchle nastavenia a panel upozornení"</string> - <string name="accessibility_desc_lock_screen" msgid="5983125095181194887">"Uzamknutá obrazovka"</string> + <!-- no translation found for accessibility_desc_lock_screen (409034672704273634) --> + <skip /> <string name="accessibility_desc_work_lock" msgid="4355620395354680575">"Uzamknutá obrazovka pracovného profilu"</string> <string name="accessibility_desc_close" msgid="8293708213442107755">"Zavrieť"</string> <string name="accessibility_quick_settings_dnd_none_on" msgid="3235552940146035383">"úplné ticho"</string> @@ -376,6 +377,8 @@ <string name="quick_settings_hearing_devices_dialog_title" msgid="9004774017688484981">"Načúvacie zariadenia"</string> <string name="quick_settings_pair_hearing_devices" msgid="5987105102207447322">"Párovanie nového zariadenia"</string> <string name="accessibility_hearing_device_pair_new_device" msgid="8440082580186130090">"Kliknutím spárujete nové zariadenie"</string> + <!-- no translation found for hearing_devices_presets_error (350363093458408536) --> + <skip /> <string name="sensor_privacy_start_use_mic_dialog_title" msgid="563796653825944944">"Chcete odblokovať mikrofón zariadenia?"</string> <string name="sensor_privacy_start_use_camera_dialog_title" msgid="8807639852654305227">"Chcete odblokovať kameru zariadenia?"</string> <string name="sensor_privacy_start_use_mic_camera_dialog_title" msgid="4316471859905020023">"Chcete odblokovať fotoaparát a mikrofón zariadenia?"</string> @@ -441,6 +444,8 @@ <string name="keyguard_indication_charging_time_fast" msgid="8390311020603859480">"<xliff:g id="PERCENTAGE">%2$s</xliff:g> • Nabíja sa rýchlo • Do úplného nabitia zostáva <xliff:g id="CHARGING_TIME_LEFT">%1$s</xliff:g>"</string> <string name="keyguard_indication_charging_time_slowly" msgid="301936949731705417">"<xliff:g id="PERCENTAGE">%2$s</xliff:g> • Nabíja sa pomaly • Do úplného nabitia zostáva <xliff:g id="CHARGING_TIME_LEFT">%1$s</xliff:g>"</string> <string name="keyguard_indication_charging_time_dock" msgid="3149328898931741271">"<xliff:g id="PERCENTAGE">%2$s</xliff:g> • Nabíja sa • Do úplného nabitia zostáva <xliff:g id="CHARGING_TIME_LEFT">%1$s</xliff:g>"</string> + <!-- no translation found for accessibility_action_open_communal_hub (3081702792413787849) --> + <skip /> <string name="communal_tutorial_indicator_text" msgid="4503010353591430123">"Potiahnutím doľava spustite komunitný návod"</string> <string name="cta_tile_button_to_open_widget_editor" msgid="3871562362382963878">"Prispôsobiť"</string> <string name="cta_tile_button_to_dismiss" msgid="3377597875997861754">"Zavrieť"</string> @@ -459,6 +464,10 @@ <string name="button_text_to_open_settings" msgid="1987729256950941628">"Otvoriť nastavenia"</string> <string name="work_mode_off_title" msgid="5794818421357835873">"Zrušiť pozast. prac. aplikácií?"</string> <string name="work_mode_turn_on" msgid="907813741770247267">"Zrušiť pozastavenie"</string> + <!-- no translation found for accessibility_action_label_close_communal_hub (6790396569621032333) --> + <skip /> + <!-- no translation found for accessibility_content_description_for_communal_hub (1670220840599380118) --> + <skip /> <string name="accessibility_multi_user_switch_switcher" msgid="5330448341251092660">"Prepnutie používateľa"</string> <string name="accessibility_multi_user_list_switcher" msgid="8574105376229857407">"rozbaľovacia ponuka"</string> <string name="guest_exit_guest_dialog_message" msgid="8183450985628495709">"Všetky aplikácie a údaje v tejto relácii budú odstránené."</string> diff --git a/packages/SystemUI/res/values-sl/strings.xml b/packages/SystemUI/res/values-sl/strings.xml index 03021991593e..26ccd1b3285d 100644 --- a/packages/SystemUI/res/values-sl/strings.xml +++ b/packages/SystemUI/res/values-sl/strings.xml @@ -235,7 +235,8 @@ <string name="accessibility_desc_notification_shade" msgid="5355229129428759989">"Zaslon z obvestili."</string> <string name="accessibility_desc_quick_settings" msgid="4374766941484719179">"Hitre nastavitve."</string> <string name="accessibility_desc_qs_notification_shade" msgid="8327226953072700376">"Hitre nastavitve in zaslon z obvestili"</string> - <string name="accessibility_desc_lock_screen" msgid="5983125095181194887">"Zaklenjen zaslon"</string> + <!-- no translation found for accessibility_desc_lock_screen (409034672704273634) --> + <skip /> <string name="accessibility_desc_work_lock" msgid="4355620395354680575">"Zaklenjen zaslon delovnega profila"</string> <string name="accessibility_desc_close" msgid="8293708213442107755">"Zapri"</string> <string name="accessibility_quick_settings_dnd_none_on" msgid="3235552940146035383">"popolna tišina"</string> @@ -376,6 +377,8 @@ <string name="quick_settings_hearing_devices_dialog_title" msgid="9004774017688484981">"Slušni pripomočki"</string> <string name="quick_settings_pair_hearing_devices" msgid="5987105102207447322">"Seznanitev nove naprave"</string> <string name="accessibility_hearing_device_pair_new_device" msgid="8440082580186130090">"Kliknite za seznanitev nove naprave"</string> + <!-- no translation found for hearing_devices_presets_error (350363093458408536) --> + <skip /> <string name="sensor_privacy_start_use_mic_dialog_title" msgid="563796653825944944">"Želite odblokirati mikrofon v napravi?"</string> <string name="sensor_privacy_start_use_camera_dialog_title" msgid="8807639852654305227">"Želite odblokirati fotoaparat v napravi?"</string> <string name="sensor_privacy_start_use_mic_camera_dialog_title" msgid="4316471859905020023">"Želite odblokirati fotoaparat in mikrofon v napravi?"</string> @@ -441,6 +444,8 @@ <string name="keyguard_indication_charging_time_fast" msgid="8390311020603859480">"<xliff:g id="PERCENTAGE">%2$s</xliff:g> • Hitro polnjenje • Napolnjeno čez <xliff:g id="CHARGING_TIME_LEFT">%1$s</xliff:g>"</string> <string name="keyguard_indication_charging_time_slowly" msgid="301936949731705417">"<xliff:g id="PERCENTAGE">%2$s</xliff:g> • Počasno polnjenje • Napolnjeno čez <xliff:g id="CHARGING_TIME_LEFT">%1$s</xliff:g>"</string> <string name="keyguard_indication_charging_time_dock" msgid="3149328898931741271">"<xliff:g id="PERCENTAGE">%2$s</xliff:g> • Polnjenje • Napolnjeno čez <xliff:g id="CHARGING_TIME_LEFT">%1$s</xliff:g>"</string> + <!-- no translation found for accessibility_action_open_communal_hub (3081702792413787849) --> + <skip /> <string name="communal_tutorial_indicator_text" msgid="4503010353591430123">"Povlecite levo, da zaženete vadnico za skupnost"</string> <string name="cta_tile_button_to_open_widget_editor" msgid="3871562362382963878">"Prilagodi"</string> <string name="cta_tile_button_to_dismiss" msgid="3377597875997861754">"Opusti"</string> @@ -459,6 +464,10 @@ <string name="button_text_to_open_settings" msgid="1987729256950941628">"Odpri nastavitve"</string> <string name="work_mode_off_title" msgid="5794818421357835873">"Želite znova aktivirati delovne aplikacije?"</string> <string name="work_mode_turn_on" msgid="907813741770247267">"Znova aktiviraj"</string> + <!-- no translation found for accessibility_action_label_close_communal_hub (6790396569621032333) --> + <skip /> + <!-- no translation found for accessibility_content_description_for_communal_hub (1670220840599380118) --> + <skip /> <string name="accessibility_multi_user_switch_switcher" msgid="5330448341251092660">"Preklop med uporabniki"</string> <string name="accessibility_multi_user_list_switcher" msgid="8574105376229857407">"spustni meni"</string> <string name="guest_exit_guest_dialog_message" msgid="8183450985628495709">"Vse aplikacije in podatki v tej seji bodo izbrisani."</string> diff --git a/packages/SystemUI/res/values-sq/strings.xml b/packages/SystemUI/res/values-sq/strings.xml index 8e621ce9fd88..644b815e3a42 100644 --- a/packages/SystemUI/res/values-sq/strings.xml +++ b/packages/SystemUI/res/values-sq/strings.xml @@ -235,7 +235,8 @@ <string name="accessibility_desc_notification_shade" msgid="5355229129428759989">"Streha e njoftimeve."</string> <string name="accessibility_desc_quick_settings" msgid="4374766941484719179">"Cilësimet e shpejta."</string> <string name="accessibility_desc_qs_notification_shade" msgid="8327226953072700376">"\"Cilësimet e shpejta\" dhe \"Streha e njoftimeve\"."</string> - <string name="accessibility_desc_lock_screen" msgid="5983125095181194887">"Ekrani i kyçjes."</string> + <!-- no translation found for accessibility_desc_lock_screen (409034672704273634) --> + <skip /> <string name="accessibility_desc_work_lock" msgid="4355620395354680575">"Ekrani i kyçjes së punës"</string> <string name="accessibility_desc_close" msgid="8293708213442107755">"Mbylle"</string> <string name="accessibility_quick_settings_dnd_none_on" msgid="3235552940146035383">"heshtje e plotë"</string> @@ -376,6 +377,8 @@ <string name="quick_settings_hearing_devices_dialog_title" msgid="9004774017688484981">"Pajisjet e dëgjimit"</string> <string name="quick_settings_pair_hearing_devices" msgid="5987105102207447322">"Çifto pajisje të re"</string> <string name="accessibility_hearing_device_pair_new_device" msgid="8440082580186130090">"Kliko për të çiftuar një pajisje të re"</string> + <!-- no translation found for hearing_devices_presets_error (350363093458408536) --> + <skip /> <string name="sensor_privacy_start_use_mic_dialog_title" msgid="563796653825944944">"Të zhbllokohet mikrofoni i pajisjes?"</string> <string name="sensor_privacy_start_use_camera_dialog_title" msgid="8807639852654305227">"Të zhbllokohet kamera e pajisjes?"</string> <string name="sensor_privacy_start_use_mic_camera_dialog_title" msgid="4316471859905020023">"Të zhbllokohen kamera dhe mikrofoni i pajisjes?"</string> @@ -441,6 +444,8 @@ <string name="keyguard_indication_charging_time_fast" msgid="8390311020603859480">"<xliff:g id="PERCENTAGE">%2$s</xliff:g> • Po karikohet shpejt • Plot për <xliff:g id="CHARGING_TIME_LEFT">%1$s</xliff:g>"</string> <string name="keyguard_indication_charging_time_slowly" msgid="301936949731705417">"<xliff:g id="PERCENTAGE">%2$s</xliff:g> • Po karikohet ngadalë • Plot për <xliff:g id="CHARGING_TIME_LEFT">%1$s</xliff:g>"</string> <string name="keyguard_indication_charging_time_dock" msgid="3149328898931741271">"<xliff:g id="PERCENTAGE">%2$s</xliff:g> • Po karikohet • Plot për <xliff:g id="CHARGING_TIME_LEFT">%1$s</xliff:g>"</string> + <!-- no translation found for accessibility_action_open_communal_hub (3081702792413787849) --> + <skip /> <string name="communal_tutorial_indicator_text" msgid="4503010353591430123">"Rrëshqit shpejt majtas për të filluar udhëzuesin e përbashkët"</string> <string name="cta_tile_button_to_open_widget_editor" msgid="3871562362382963878">"Personalizo"</string> <string name="cta_tile_button_to_dismiss" msgid="3377597875997861754">"Hiq"</string> @@ -459,6 +464,10 @@ <string name="button_text_to_open_settings" msgid="1987729256950941628">"Hap cilësimet"</string> <string name="work_mode_off_title" msgid="5794818421357835873">"Hiq nga pauza apl. e punës?"</string> <string name="work_mode_turn_on" msgid="907813741770247267">"Hiq nga pauza"</string> + <!-- no translation found for accessibility_action_label_close_communal_hub (6790396569621032333) --> + <skip /> + <!-- no translation found for accessibility_content_description_for_communal_hub (1670220840599380118) --> + <skip /> <string name="accessibility_multi_user_switch_switcher" msgid="5330448341251092660">"Ndërro përdorues"</string> <string name="accessibility_multi_user_list_switcher" msgid="8574105376229857407">"menyja me tërheqje poshtë"</string> <string name="guest_exit_guest_dialog_message" msgid="8183450985628495709">"Të gjitha aplikacionet dhe të dhënat në këtë sesion do të fshihen."</string> diff --git a/packages/SystemUI/res/values-sr/strings.xml b/packages/SystemUI/res/values-sr/strings.xml index a1825bfecc5f..d92331f7da6f 100644 --- a/packages/SystemUI/res/values-sr/strings.xml +++ b/packages/SystemUI/res/values-sr/strings.xml @@ -235,7 +235,8 @@ <string name="accessibility_desc_notification_shade" msgid="5355229129428759989">"Прозор са обавештењима."</string> <string name="accessibility_desc_quick_settings" msgid="4374766941484719179">"Брза подешавања."</string> <string name="accessibility_desc_qs_notification_shade" msgid="8327226953072700376">"Брза подешавања и трака са обавештењима."</string> - <string name="accessibility_desc_lock_screen" msgid="5983125095181194887">"Закључан екран"</string> + <!-- no translation found for accessibility_desc_lock_screen (409034672704273634) --> + <skip /> <string name="accessibility_desc_work_lock" msgid="4355620395354680575">"Закључан екран за посао"</string> <string name="accessibility_desc_close" msgid="8293708213442107755">"Затвори"</string> <string name="accessibility_quick_settings_dnd_none_on" msgid="3235552940146035383">"потпуна тишина"</string> @@ -270,20 +271,15 @@ <string name="see_all_bluetooth_devices" msgid="1761596816620200433">"Прикажи све"</string> <string name="turn_on_bluetooth" msgid="5681370462180289071">"Користи Bluetooth"</string> <string name="quick_settings_bluetooth_device_connected" msgid="7884777006729260996">"Повезано"</string> - <!-- no translation found for quick_settings_bluetooth_device_audio_sharing (1496358082943301670) --> - <skip /> + <string name="quick_settings_bluetooth_device_audio_sharing" msgid="1496358082943301670">"Дељење звука"</string> <string name="quick_settings_bluetooth_device_saved" msgid="7549938728928069477">"Сачувано"</string> <string name="accessibility_quick_settings_bluetooth_device_tap_to_disconnect" msgid="415980329093277342">"прекините везу"</string> <string name="accessibility_quick_settings_bluetooth_device_tap_to_activate" msgid="3724301751036877403">"активирајте"</string> <string name="turn_on_bluetooth_auto_tomorrow" msgid="414836329962473906">"Аутоматски поново укључи сутра"</string> - <!-- no translation found for turn_on_bluetooth_auto_info_disabled (682984290339848844) --> - <skip /> - <!-- no translation found for turn_on_bluetooth_auto_info_enabled (7440944034584560279) --> - <skip /> - <!-- no translation found for quick_settings_bluetooth_audio_sharing_button (4499275822759907822) --> - <skip /> - <!-- no translation found for quick_settings_bluetooth_audio_sharing_button_sharing (8626191139359072540) --> - <skip /> + <string name="turn_on_bluetooth_auto_info_disabled" msgid="682984290339848844">"Функције као што су Quick Share и Пронађи мој уређај користе Bluetooth"</string> + <string name="turn_on_bluetooth_auto_info_enabled" msgid="7440944034584560279">"Bluetooth ће се укључити сутра ујутру"</string> + <string name="quick_settings_bluetooth_audio_sharing_button" msgid="4499275822759907822">"Дељење звука"</string> + <string name="quick_settings_bluetooth_audio_sharing_button_sharing" msgid="8626191139359072540">"Дели се звук"</string> <string name="quick_settings_bluetooth_secondary_label_battery_level" msgid="4182034939479344093">"Ниво батерије је <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE">%s</xliff:g>"</string> <string name="quick_settings_bluetooth_secondary_label_audio" msgid="780333390310051161">"Аудио"</string> <string name="quick_settings_bluetooth_secondary_label_headset" msgid="2332093067553000852">"Слушалице"</string> @@ -376,6 +372,8 @@ <string name="quick_settings_hearing_devices_dialog_title" msgid="9004774017688484981">"Слушни апарати"</string> <string name="quick_settings_pair_hearing_devices" msgid="5987105102207447322">"Упари нови уређај"</string> <string name="accessibility_hearing_device_pair_new_device" msgid="8440082580186130090">"Кликните да бисте упарили нов уређај"</string> + <!-- no translation found for hearing_devices_presets_error (350363093458408536) --> + <skip /> <string name="sensor_privacy_start_use_mic_dialog_title" msgid="563796653825944944">"Желите да одблокирате микрофон уређаја?"</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> @@ -441,6 +439,8 @@ <string name="keyguard_indication_charging_time_fast" msgid="8390311020603859480">"<xliff:g id="PERCENTAGE">%2$s</xliff:g> • Брзо се пуни • <xliff:g id="CHARGING_TIME_LEFT">%1$s</xliff:g> до краја пуњења"</string> <string name="keyguard_indication_charging_time_slowly" msgid="301936949731705417">"<xliff:g id="PERCENTAGE">%2$s</xliff:g> • Споро се пуни • <xliff:g id="CHARGING_TIME_LEFT">%1$s</xliff:g> до краја пуњења"</string> <string name="keyguard_indication_charging_time_dock" msgid="3149328898931741271">"<xliff:g id="PERCENTAGE">%2$s</xliff:g> • Пуни се • <xliff:g id="CHARGING_TIME_LEFT">%1$s</xliff:g> до краја пуњења"</string> + <!-- no translation found for accessibility_action_open_communal_hub (3081702792413787849) --> + <skip /> <string name="communal_tutorial_indicator_text" msgid="4503010353591430123">"Превуците улево да бисте започели заједнички водич"</string> <string name="cta_tile_button_to_open_widget_editor" msgid="3871562362382963878">"Прилагодите"</string> <string name="cta_tile_button_to_dismiss" msgid="3377597875997861754">"Одбаци"</string> @@ -459,6 +459,10 @@ <string name="button_text_to_open_settings" msgid="1987729256950941628">"Отвори подешавања"</string> <string name="work_mode_off_title" msgid="5794818421357835873">"Укључити пословне апликације?"</string> <string name="work_mode_turn_on" msgid="907813741770247267">"Поново активирај"</string> + <!-- no translation found for accessibility_action_label_close_communal_hub (6790396569621032333) --> + <skip /> + <!-- no translation found for accessibility_content_description_for_communal_hub (1670220840599380118) --> + <skip /> <string name="accessibility_multi_user_switch_switcher" msgid="5330448341251092660">"Замени корисника"</string> <string name="accessibility_multi_user_list_switcher" msgid="8574105376229857407">"падајући мени"</string> <string name="guest_exit_guest_dialog_message" msgid="8183450985628495709">"Све апликације и подаци у овој сесији ће бити избрисани."</string> @@ -772,7 +776,7 @@ <string name="group_system_cycle_back" msgid="8194102916946802902">"Прегледај недавно коришћене апликације уназад"</string> <string name="group_system_access_all_apps_search" msgid="1553588630154197469">"Отвори листу апликација"</string> <string name="group_system_access_system_settings" msgid="8731721963449070017">"Отвори подешавања"</string> - <string name="group_system_access_google_assistant" msgid="7210074957915968110">"Отвори помоћника"</string> + <string name="group_system_access_google_assistant" msgid="7210074957915968110">"Отвори Помоћник"</string> <string name="group_system_lock_screen" msgid="7391191300363416543">"Закључавање екрана"</string> <string name="group_system_quick_memo" msgid="3764560265935722903">"Направи белешку"</string> <string name="keyboard_shortcut_group_system_multitasking" msgid="6967816258924795558">"Обављање више задатака истовремено"</string> diff --git a/packages/SystemUI/res/values-sv/strings.xml b/packages/SystemUI/res/values-sv/strings.xml index abb5d098f7d4..39ac9f9e2c98 100644 --- a/packages/SystemUI/res/values-sv/strings.xml +++ b/packages/SystemUI/res/values-sv/strings.xml @@ -235,7 +235,8 @@ <string name="accessibility_desc_notification_shade" msgid="5355229129428759989">"Meddelandepanel."</string> <string name="accessibility_desc_quick_settings" msgid="4374766941484719179">"Snabbinställningar."</string> <string name="accessibility_desc_qs_notification_shade" msgid="8327226953072700376">"Snabbinställningar och meddelandepanel."</string> - <string name="accessibility_desc_lock_screen" msgid="5983125095181194887">"Låsskärm."</string> + <!-- no translation found for accessibility_desc_lock_screen (409034672704273634) --> + <skip /> <string name="accessibility_desc_work_lock" msgid="4355620395354680575">"Låsskärm för arbete"</string> <string name="accessibility_desc_close" msgid="8293708213442107755">"Stäng"</string> <string name="accessibility_quick_settings_dnd_none_on" msgid="3235552940146035383">"helt tyst"</string> @@ -376,6 +377,8 @@ <string name="quick_settings_hearing_devices_dialog_title" msgid="9004774017688484981">"Hörhjälpmedel"</string> <string name="quick_settings_pair_hearing_devices" msgid="5987105102207447322">"Parkoppla en ny enhet"</string> <string name="accessibility_hearing_device_pair_new_device" msgid="8440082580186130090">"Klicka för att parkoppla en ny enhet"</string> + <!-- no translation found for hearing_devices_presets_error (350363093458408536) --> + <skip /> <string name="sensor_privacy_start_use_mic_dialog_title" msgid="563796653825944944">"Vill du återaktivera enhetens mikrofon?"</string> <string name="sensor_privacy_start_use_camera_dialog_title" msgid="8807639852654305227">"Vill du återaktivera enhetens kamera?"</string> <string name="sensor_privacy_start_use_mic_camera_dialog_title" msgid="4316471859905020023">"Vill du återaktivera enhetens kamera och mikrofon?"</string> @@ -441,6 +444,8 @@ <string name="keyguard_indication_charging_time_fast" msgid="8390311020603859480">"<xliff:g id="PERCENTAGE">%2$s</xliff:g> • Laddas snabbt • Fulladdat om <xliff:g id="CHARGING_TIME_LEFT">%1$s</xliff:g>"</string> <string name="keyguard_indication_charging_time_slowly" msgid="301936949731705417">"<xliff:g id="PERCENTAGE">%2$s</xliff:g> • Laddas långsamt • Fulladdat om <xliff:g id="CHARGING_TIME_LEFT">%1$s</xliff:g>"</string> <string name="keyguard_indication_charging_time_dock" msgid="3149328898931741271">"<xliff:g id="PERCENTAGE">%2$s</xliff:g> • Laddas • Fulladdat om <xliff:g id="CHARGING_TIME_LEFT">%1$s</xliff:g>"</string> + <!-- no translation found for accessibility_action_open_communal_hub (3081702792413787849) --> + <skip /> <string name="communal_tutorial_indicator_text" msgid="4503010353591430123">"Svep åt vänster för att börja med gruppguiden"</string> <string name="cta_tile_button_to_open_widget_editor" msgid="3871562362382963878">"Anpassa"</string> <string name="cta_tile_button_to_dismiss" msgid="3377597875997861754">"Ignorera"</string> @@ -459,6 +464,10 @@ <string name="button_text_to_open_settings" msgid="1987729256950941628">"Öppna inställningarna"</string> <string name="work_mode_off_title" msgid="5794818421357835873">"Vill du återuppta jobbappar?"</string> <string name="work_mode_turn_on" msgid="907813741770247267">"Återuppta"</string> + <!-- no translation found for accessibility_action_label_close_communal_hub (6790396569621032333) --> + <skip /> + <!-- no translation found for accessibility_content_description_for_communal_hub (1670220840599380118) --> + <skip /> <string name="accessibility_multi_user_switch_switcher" msgid="5330448341251092660">"Byt användare"</string> <string name="accessibility_multi_user_list_switcher" msgid="8574105376229857407">"rullgardinsmeny"</string> <string name="guest_exit_guest_dialog_message" msgid="8183450985628495709">"Alla appar och data i denna session kommer att raderas."</string> diff --git a/packages/SystemUI/res/values-sw/strings.xml b/packages/SystemUI/res/values-sw/strings.xml index 392a74d97450..f5f27720731f 100644 --- a/packages/SystemUI/res/values-sw/strings.xml +++ b/packages/SystemUI/res/values-sw/strings.xml @@ -235,7 +235,7 @@ <string name="accessibility_desc_notification_shade" msgid="5355229129428759989">"Kivuli cha arifa."</string> <string name="accessibility_desc_quick_settings" msgid="4374766941484719179">"Mipangilio ya haraka."</string> <string name="accessibility_desc_qs_notification_shade" msgid="8327226953072700376">"Mipangilio ya haraka na Sehemu ya arifa."</string> - <string name="accessibility_desc_lock_screen" msgid="5983125095181194887">"Skrini iliyofungwa."</string> + <string name="accessibility_desc_lock_screen" msgid="409034672704273634">"skrini iliyofungwa"</string> <string name="accessibility_desc_work_lock" msgid="4355620395354680575">"Skrini iliyofungwa ya kazini"</string> <string name="accessibility_desc_close" msgid="8293708213442107755">"Funga"</string> <string name="accessibility_quick_settings_dnd_none_on" msgid="3235552940146035383">"kimya kabisa"</string> @@ -270,20 +270,15 @@ <string name="see_all_bluetooth_devices" msgid="1761596816620200433">"Angalia vyote"</string> <string name="turn_on_bluetooth" msgid="5681370462180289071">"Tumia Bluetooth"</string> <string name="quick_settings_bluetooth_device_connected" msgid="7884777006729260996">"Imeunganishwa"</string> - <!-- no translation found for quick_settings_bluetooth_device_audio_sharing (1496358082943301670) --> - <skip /> + <string name="quick_settings_bluetooth_device_audio_sharing" msgid="1496358082943301670">"Kusikiliza Pamoja"</string> <string name="quick_settings_bluetooth_device_saved" msgid="7549938728928069477">"Imehifadhiwa"</string> <string name="accessibility_quick_settings_bluetooth_device_tap_to_disconnect" msgid="415980329093277342">"ondoa"</string> <string name="accessibility_quick_settings_bluetooth_device_tap_to_activate" msgid="3724301751036877403">"anza kutumia"</string> <string name="turn_on_bluetooth_auto_tomorrow" msgid="414836329962473906">"Iwashe tena kesho kiotomatiki"</string> - <!-- no translation found for turn_on_bluetooth_auto_info_disabled (682984290339848844) --> - <skip /> - <!-- no translation found for turn_on_bluetooth_auto_info_enabled (7440944034584560279) --> - <skip /> - <!-- no translation found for quick_settings_bluetooth_audio_sharing_button (4499275822759907822) --> - <skip /> - <!-- no translation found for quick_settings_bluetooth_audio_sharing_button_sharing (8626191139359072540) --> - <skip /> + <string name="turn_on_bluetooth_auto_info_disabled" msgid="682984290339848844">"Vipengele kama vile Kutuma Haraka na Tafuta Kifaa Changu hutumia Bluetooth"</string> + <string name="turn_on_bluetooth_auto_info_enabled" msgid="7440944034584560279">"Bluetooth itawaka kesho asubuhi"</string> + <string name="quick_settings_bluetooth_audio_sharing_button" msgid="4499275822759907822">"Kusikiliza Pamoja"</string> + <string name="quick_settings_bluetooth_audio_sharing_button_sharing" msgid="8626191139359072540">"Mnasikiliza Pamoja"</string> <string name="quick_settings_bluetooth_secondary_label_battery_level" msgid="4182034939479344093">"Chaji ya betri ni <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE">%s</xliff:g>"</string> <string name="quick_settings_bluetooth_secondary_label_audio" msgid="780333390310051161">"Sauti"</string> <string name="quick_settings_bluetooth_secondary_label_headset" msgid="2332093067553000852">"Vifaa vya sauti"</string> @@ -376,6 +371,8 @@ <string name="quick_settings_hearing_devices_dialog_title" msgid="9004774017688484981">"Vifaa vya kusikilizia"</string> <string name="quick_settings_pair_hearing_devices" msgid="5987105102207447322">"Unganisha kifaa kipya"</string> <string name="accessibility_hearing_device_pair_new_device" msgid="8440082580186130090">"Bofya ili uunganishe kifaa kipya"</string> + <!-- no translation found for hearing_devices_presets_error (350363093458408536) --> + <skip /> <string name="sensor_privacy_start_use_mic_dialog_title" msgid="563796653825944944">"Ungependa kuwacha kuzuia maikrofoni ya kifaa?"</string> <string name="sensor_privacy_start_use_camera_dialog_title" msgid="8807639852654305227">"Ungependa kuacha kuzuia kamera ya kifaa?"</string> <string name="sensor_privacy_start_use_mic_camera_dialog_title" msgid="4316471859905020023">"Ungependa kuwacha kuzuia kamera na maikrofoni ya kifaa?"</string> @@ -441,6 +438,7 @@ <string name="keyguard_indication_charging_time_fast" msgid="8390311020603859480">"<xliff:g id="PERCENTAGE">%2$s</xliff:g> • Inachaji kwa kasi • Itajaa baada ya <xliff:g id="CHARGING_TIME_LEFT">%1$s</xliff:g>"</string> <string name="keyguard_indication_charging_time_slowly" msgid="301936949731705417">"<xliff:g id="PERCENTAGE">%2$s</xliff:g> • Inachaji polepole • Itajaa baada ya <xliff:g id="CHARGING_TIME_LEFT">%1$s</xliff:g>"</string> <string name="keyguard_indication_charging_time_dock" msgid="3149328898931741271">"<xliff:g id="PERCENTAGE">%2$s</xliff:g> • Inachaji • Itajaa baada ya <xliff:g id="CHARGING_TIME_LEFT">%1$s</xliff:g>"</string> + <string name="accessibility_action_open_communal_hub" msgid="3081702792413787849">"Wijeti kwenye skrini iliyofungwa"</string> <string name="communal_tutorial_indicator_text" msgid="4503010353591430123">"Telezesha kidole kushoto ili uanze mafunzo ya pamoja"</string> <string name="cta_tile_button_to_open_widget_editor" msgid="3871562362382963878">"Weka mapendeleo"</string> <string name="cta_tile_button_to_dismiss" msgid="3377597875997861754">"Funga"</string> @@ -459,6 +457,8 @@ <string name="button_text_to_open_settings" msgid="1987729256950941628">"Fungua mipangilio"</string> <string name="work_mode_off_title" msgid="5794818421357835873">"Je, ungependa kuacha kusitisha programu za kazini?"</string> <string name="work_mode_turn_on" msgid="907813741770247267">"Acha kusitisha"</string> + <string name="accessibility_action_label_close_communal_hub" msgid="6790396569621032333">"Funga wijeti kwenye skrini iliyofungwa"</string> + <string name="accessibility_content_description_for_communal_hub" msgid="1670220840599380118">"Wijeti kwenye skrini iliyofungwa"</string> <string name="accessibility_multi_user_switch_switcher" msgid="5330448341251092660">"Badili mtumiaji"</string> <string name="accessibility_multi_user_list_switcher" msgid="8574105376229857407">"menyu ya kuvuta chini"</string> <string name="guest_exit_guest_dialog_message" msgid="8183450985628495709">"Data na programu zote katika kipindi hiki zitafutwa."</string> diff --git a/packages/SystemUI/res/values-ta/strings.xml b/packages/SystemUI/res/values-ta/strings.xml index dfc00df3f9d3..61fb06499c8b 100644 --- a/packages/SystemUI/res/values-ta/strings.xml +++ b/packages/SystemUI/res/values-ta/strings.xml @@ -235,7 +235,8 @@ <string name="accessibility_desc_notification_shade" msgid="5355229129428759989">"அறிவிப்பு விவரம்."</string> <string name="accessibility_desc_quick_settings" msgid="4374766941484719179">"உடனடி அமைப்பு."</string> <string name="accessibility_desc_qs_notification_shade" msgid="8327226953072700376">"விரைவு அமைப்புகளும் அறிவிப்பு விவரமும்."</string> - <string name="accessibility_desc_lock_screen" msgid="5983125095181194887">"லாக் ஸ்கிரீன்."</string> + <!-- no translation found for accessibility_desc_lock_screen (409034672704273634) --> + <skip /> <string name="accessibility_desc_work_lock" msgid="4355620395354680575">"பணி லாக் ஸ்கிரீன்"</string> <string name="accessibility_desc_close" msgid="8293708213442107755">"மூடு"</string> <string name="accessibility_quick_settings_dnd_none_on" msgid="3235552940146035383">"முழு அமைதி"</string> @@ -376,6 +377,8 @@ <string name="quick_settings_hearing_devices_dialog_title" msgid="9004774017688484981">"செவித்துணைக் கருவிகள்"</string> <string name="quick_settings_pair_hearing_devices" msgid="5987105102207447322">"புதிய சாதனத்தை இணை"</string> <string name="accessibility_hearing_device_pair_new_device" msgid="8440082580186130090">"புதிய சாதனத்தை இணைக்க கிளிக் செய்யலாம்"</string> + <!-- no translation found for hearing_devices_presets_error (350363093458408536) --> + <skip /> <string name="sensor_privacy_start_use_mic_dialog_title" msgid="563796653825944944">"சாதனத்தின் மைக்ரோஃபோனுக்கான தடுப்பை நீக்கவா?"</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> @@ -441,6 +444,8 @@ <string name="keyguard_indication_charging_time_fast" msgid="8390311020603859480">"<xliff:g id="PERCENTAGE">%2$s</xliff:g> • வேகமாகச் சார்ஜாகிறது • <xliff:g id="CHARGING_TIME_LEFT">%1$s</xliff:g> இல் முழுதும் சார்ஜாகும்"</string> <string name="keyguard_indication_charging_time_slowly" msgid="301936949731705417">"<xliff:g id="PERCENTAGE">%2$s</xliff:g> • மெதுவாக சார்ஜாகிறது • <xliff:g id="CHARGING_TIME_LEFT">%1$s</xliff:g> இல் முழுதும் சார்ஜாகும்"</string> <string name="keyguard_indication_charging_time_dock" msgid="3149328898931741271">"<xliff:g id="PERCENTAGE">%2$s</xliff:g> • சார்ஜாகிறது • <xliff:g id="CHARGING_TIME_LEFT">%1$s</xliff:g> இல் முழுவதும் சார்ஜாகும்"</string> + <!-- no translation found for accessibility_action_open_communal_hub (3081702792413787849) --> + <skip /> <string name="communal_tutorial_indicator_text" msgid="4503010353591430123">"சமூகப் பயிற்சியைத் தொடங்க இடதுபுறம் ஸ்வைப் செய்யுங்கள்"</string> <string name="cta_tile_button_to_open_widget_editor" msgid="3871562362382963878">"பிரத்தியேகமாக்குங்கள்"</string> <string name="cta_tile_button_to_dismiss" msgid="3377597875997861754">"மூடுக"</string> @@ -459,6 +464,10 @@ <string name="button_text_to_open_settings" msgid="1987729256950941628">"அமைப்புகளைத் திற"</string> <string name="work_mode_off_title" msgid="5794818421357835873">"பணி ஆப்ஸை மீண்டும் இயக்கவா?"</string> <string name="work_mode_turn_on" msgid="907813741770247267">"மீண்டும் இயக்கு"</string> + <!-- no translation found for accessibility_action_label_close_communal_hub (6790396569621032333) --> + <skip /> + <!-- no translation found for accessibility_content_description_for_communal_hub (1670220840599380118) --> + <skip /> <string name="accessibility_multi_user_switch_switcher" msgid="5330448341251092660">"பயனரை மாற்று"</string> <string name="accessibility_multi_user_list_switcher" msgid="8574105376229857407">"கீழ் இழுக்கும் மெனு"</string> <string name="guest_exit_guest_dialog_message" msgid="8183450985628495709">"இந்த அமர்வின் எல்லா ஆப்ஸும் தரவும் நீக்கப்படும்."</string> @@ -779,8 +788,8 @@ <string name="system_multitasking_rhs" msgid="8714224917276297810">"தற்போது உள்ள ஆப்ஸுடன் வலதுபுறத்தில் திரைப் பிரிப்பைப் பயன்படுத்துதல்"</string> <string name="system_multitasking_lhs" msgid="8402954791206308783">"தற்போது உள்ள ஆப்ஸுடன் இடதுபுறத்தில் திரைப் பிரிப்பைப் பயன்படுத்துதல்"</string> <string name="system_multitasking_full_screen" msgid="336048080383640562">"திரைப் பிரிப்பு பயன்முறையிலிருந்து முழுத்திரைக்கு மாற்றுதல்"</string> - <string name="system_multitasking_splitscreen_focus_rhs" msgid="3838578650313318508">"திரைப் பிரிப்பைப் பயன்படுத்தும்போது வலது/கீழ் உள்ள ஆப்ஸுக்கு மாறுங்கள்"</string> - <string name="system_multitasking_splitscreen_focus_lhs" msgid="3164261844398662518">"திரைப் பிரிப்பைப் பயன்படுத்தும்போது இடது/மேலே உள்ள ஆப்ஸுக்கு மாறுங்கள்"</string> + <string name="system_multitasking_splitscreen_focus_rhs" msgid="3838578650313318508">"திரைப் பிரிப்பைப் பயன்படுத்தும்போது வலது/கீழ் உள்ள ஆப்ஸுக்கு மாறுதல்"</string> + <string name="system_multitasking_splitscreen_focus_lhs" msgid="3164261844398662518">"திரைப் பிரிப்பைப் பயன்படுத்தும்போது இடது/மேலே உள்ள ஆப்ஸுக்கு மாறுதல்"</string> <string name="system_multitasking_replace" msgid="7410071959803642125">"திரைப் பிரிப்பின்போது: ஓர் ஆப்ஸுக்குப் பதிலாக மற்றொன்றை மாற்றுதல்"</string> <string name="keyboard_shortcut_group_input" msgid="6888282716546625610">"உள்ளீடு"</string> <string name="input_switch_input_language_next" msgid="3782155659868227855">"அடுத்த மொழிக்கு மாற்றுதல்"</string> diff --git a/packages/SystemUI/res/values-te/strings.xml b/packages/SystemUI/res/values-te/strings.xml index 518883fea543..de0ac1838a20 100644 --- a/packages/SystemUI/res/values-te/strings.xml +++ b/packages/SystemUI/res/values-te/strings.xml @@ -235,7 +235,8 @@ <string name="accessibility_desc_notification_shade" msgid="5355229129428759989">"నోటిఫికేషన్ షేడ్."</string> <string name="accessibility_desc_quick_settings" msgid="4374766941484719179">"శీఘ్ర సెట్టింగ్లు."</string> <string name="accessibility_desc_qs_notification_shade" msgid="8327226953072700376">"క్విక్ సెట్టింగ్లు, నోటిఫికేషన్ తెర."</string> - <string name="accessibility_desc_lock_screen" msgid="5983125095181194887">"లాక్ స్క్రీన్."</string> + <!-- no translation found for accessibility_desc_lock_screen (409034672704273634) --> + <skip /> <string name="accessibility_desc_work_lock" msgid="4355620395354680575">"కార్యాలయ లాక్ స్క్రీన్"</string> <string name="accessibility_desc_close" msgid="8293708213442107755">"మూసివేస్తుంది"</string> <string name="accessibility_quick_settings_dnd_none_on" msgid="3235552940146035383">"మొత్తం నిశ్శబ్దం"</string> @@ -270,20 +271,15 @@ <string name="see_all_bluetooth_devices" msgid="1761596816620200433">"అన్నింటినీ చూడండి"</string> <string name="turn_on_bluetooth" msgid="5681370462180289071">"బ్లూటూత్ వాడండి"</string> <string name="quick_settings_bluetooth_device_connected" msgid="7884777006729260996">"కనెక్ట్ అయింది"</string> - <!-- no translation found for quick_settings_bluetooth_device_audio_sharing (1496358082943301670) --> - <skip /> + <string name="quick_settings_bluetooth_device_audio_sharing" msgid="1496358082943301670">"ఆడియో షేరింగ్"</string> <string name="quick_settings_bluetooth_device_saved" msgid="7549938728928069477">"సేవ్ చేయబడింది"</string> <string name="accessibility_quick_settings_bluetooth_device_tap_to_disconnect" msgid="415980329093277342">"డిస్కనెక్ట్ చేయండి"</string> <string name="accessibility_quick_settings_bluetooth_device_tap_to_activate" msgid="3724301751036877403">"యాక్టివేట్ చేయండి"</string> <string name="turn_on_bluetooth_auto_tomorrow" msgid="414836329962473906">"రేపు మళ్లీ ఆటోమేటిక్గా ఆన్ చేస్తుంది"</string> - <!-- no translation found for turn_on_bluetooth_auto_info_disabled (682984290339848844) --> - <skip /> - <!-- no translation found for turn_on_bluetooth_auto_info_enabled (7440944034584560279) --> - <skip /> - <!-- no translation found for quick_settings_bluetooth_audio_sharing_button (4499275822759907822) --> - <skip /> - <!-- no translation found for quick_settings_bluetooth_audio_sharing_button_sharing (8626191139359072540) --> - <skip /> + <string name="turn_on_bluetooth_auto_info_disabled" msgid="682984290339848844">"క్విక్ షేర్, Find My Device వంటి ఫీచర్లు బ్లూటూత్ను ఉపయోగిస్తాయి"</string> + <string name="turn_on_bluetooth_auto_info_enabled" msgid="7440944034584560279">"బ్లూటూత్ రేపు ఉదయం ఆన్ అవుతుంది"</string> + <string name="quick_settings_bluetooth_audio_sharing_button" msgid="4499275822759907822">"ఆడియో షేరింగ్"</string> + <string name="quick_settings_bluetooth_audio_sharing_button_sharing" msgid="8626191139359072540">"ఆడియోను షేర్ చేస్తున్నారు"</string> <string name="quick_settings_bluetooth_secondary_label_battery_level" msgid="4182034939479344093">"<xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE">%s</xliff:g> బ్యాటరీ"</string> <string name="quick_settings_bluetooth_secondary_label_audio" msgid="780333390310051161">"ఆడియో"</string> <string name="quick_settings_bluetooth_secondary_label_headset" msgid="2332093067553000852">"హెడ్సెట్"</string> @@ -376,6 +372,8 @@ <string name="quick_settings_hearing_devices_dialog_title" msgid="9004774017688484981">"వినికిడి పరికరం"</string> <string name="quick_settings_pair_hearing_devices" msgid="5987105102207447322">"కొత్త పరికరాన్ని పెయిర్ చేయండి"</string> <string name="accessibility_hearing_device_pair_new_device" msgid="8440082580186130090">"కొత్త పరికరాన్ని పెయిర్ చేయడానికి క్లిక్ చేయండి"</string> + <!-- no translation found for hearing_devices_presets_error (350363093458408536) --> + <skip /> <string name="sensor_privacy_start_use_mic_dialog_title" msgid="563796653825944944">"పరికరం మైక్రోఫోన్ను అన్బ్లాక్ చేయమంటారా?"</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> @@ -441,6 +439,8 @@ <string name="keyguard_indication_charging_time_fast" msgid="8390311020603859480">"<xliff:g id="PERCENTAGE">%2$s</xliff:g> • వేగంగా ఛార్జ్ అవుతోంది • <xliff:g id="CHARGING_TIME_LEFT">%1$s</xliff:g>లో పూర్తి ఛార్జ్"</string> <string name="keyguard_indication_charging_time_slowly" msgid="301936949731705417">"<xliff:g id="PERCENTAGE">%2$s</xliff:g> • నెమ్మదిగా ఛార్జ్ అవుతోంది • <xliff:g id="CHARGING_TIME_LEFT">%1$s</xliff:g>లో పూర్తి ఛార్జ్"</string> <string name="keyguard_indication_charging_time_dock" msgid="3149328898931741271">"<xliff:g id="PERCENTAGE">%2$s</xliff:g> • ఛార్జ్ అవుతోంది • <xliff:g id="CHARGING_TIME_LEFT">%1$s</xliff:g>లో పూర్తిగా ఛార్జ్ అవుతుంది"</string> + <!-- no translation found for accessibility_action_open_communal_hub (3081702792413787849) --> + <skip /> <string name="communal_tutorial_indicator_text" msgid="4503010353591430123">"కమ్యూనల్ ట్యుటోరియల్ను ప్రారంభించడానికి ఎడమ వైపునకు స్వైప్ చేయండి"</string> <string name="cta_tile_button_to_open_widget_editor" msgid="3871562362382963878">"అనుకూలంగా మార్చండి"</string> <string name="cta_tile_button_to_dismiss" msgid="3377597875997861754">"విస్మరించండి"</string> @@ -459,6 +459,10 @@ <string name="button_text_to_open_settings" msgid="1987729256950941628">"సెట్టింగ్లను తెరవండి"</string> <string name="work_mode_off_title" msgid="5794818421357835873">"వర్క్ యాప్స్ అన్పాజ్ చేయాలా?"</string> <string name="work_mode_turn_on" msgid="907813741770247267">"అన్పాజ్ చేయండి"</string> + <!-- no translation found for accessibility_action_label_close_communal_hub (6790396569621032333) --> + <skip /> + <!-- no translation found for accessibility_content_description_for_communal_hub (1670220840599380118) --> + <skip /> <string name="accessibility_multi_user_switch_switcher" msgid="5330448341251092660">"వినియోగదారుని మార్చు"</string> <string name="accessibility_multi_user_list_switcher" msgid="8574105376229857407">"పుల్డౌన్ మెనూ"</string> <string name="guest_exit_guest_dialog_message" msgid="8183450985628495709">"ఈ సెషన్లోని అన్ని యాప్లు మరియు డేటా తొలగించబడతాయి."</string> @@ -1002,10 +1006,10 @@ <string name="accessibility_floating_button_hidden_notification_text" msgid="1457021647040915658">"యాక్సెసిబిలిటీ బటన్ను చూడటానికి ట్యాప్ చేయండి"</string> <string name="accessibility_floating_button_undo_message_label_text" msgid="9017658016426242640">"<xliff:g id="FEATURE_NAME">%s</xliff:g> షార్ట్కట్ తీసివేయబడింది"</string> <string name="accessibility_floating_button_undo_message_number_text" msgid="4909270290725226075">"{count,plural, =1{# షార్ట్కట్ తీసివేయబడింది}other{# షార్ట్కట్లు తీసివేయబడ్డాయి}}"</string> - <string name="accessibility_floating_button_action_move_top_left" msgid="6253520703618545705">"ఎగువ ఎడమ వైపునకు తరలించు"</string> - <string name="accessibility_floating_button_action_move_top_right" msgid="6106225581993479711">"ఎగువ కుడి వైపునకు తరలించు"</string> - <string name="accessibility_floating_button_action_move_bottom_left" msgid="8063394111137429725">"దిగువ ఎడమ వైపునకు తరలించు"</string> - <string name="accessibility_floating_button_action_move_bottom_right" msgid="6196904373227440500">"దిగువ కుడి వైపునకు తరలించు"</string> + <string name="accessibility_floating_button_action_move_top_left" msgid="6253520703618545705">"ఎగువున ఎడమ వైపునకు వెళ్లండి"</string> + <string name="accessibility_floating_button_action_move_top_right" msgid="6106225581993479711">"ఎగువున కుడి వైపునకు వెళ్లండి"</string> + <string name="accessibility_floating_button_action_move_bottom_left" msgid="8063394111137429725">"దిగువున ఎడమ వైపునకు వెళ్లండి"</string> + <string name="accessibility_floating_button_action_move_bottom_right" msgid="6196904373227440500">"దిగువున కుడి వైపునకు వెళ్లండి"</string> <string name="accessibility_floating_button_action_move_to_edge_and_hide_to_half" msgid="662401168245782658">"అంచుకు తరలించి దాచండి"</string> <string name="accessibility_floating_button_action_move_out_edge_and_show" msgid="8354760891651663326">"అంచుని తరలించి చూపించు"</string> <string name="accessibility_floating_button_action_remove_menu" msgid="6730432848162552135">"తీసివేయండి"</string> diff --git a/packages/SystemUI/res/values-th/strings.xml b/packages/SystemUI/res/values-th/strings.xml index 77f506cc16ec..73ba8b4e7aa1 100644 --- a/packages/SystemUI/res/values-th/strings.xml +++ b/packages/SystemUI/res/values-th/strings.xml @@ -145,7 +145,7 @@ <string name="accessibility_phone_button" msgid="4256353121703100427">"โทรศัพท์"</string> <string name="accessibility_voice_assist_button" msgid="6497706615649754510">"ตัวช่วยเสียง"</string> <string name="accessibility_wallet_button" msgid="1458258783460555507">"Wallet"</string> - <string name="accessibility_qr_code_scanner_button" msgid="7521277927692910795">"แอปสแกนคิวอาร์โค้ด"</string> + <string name="accessibility_qr_code_scanner_button" msgid="7521277927692910795">"ตัวสแกนคิวอาร์โค้ด"</string> <string name="accessibility_unlock_button" msgid="3613812140816244310">"ปลดล็อกแล้ว"</string> <string name="accessibility_lock_icon" msgid="661492842417875775">"อุปกรณ์ถูกล็อก"</string> <string name="accessibility_scanning_face" msgid="3093828357921541387">"กำลังสแกนใบหน้า"</string> @@ -235,7 +235,7 @@ <string name="accessibility_desc_notification_shade" msgid="5355229129428759989">"หน้าต่างแจ้งเตือน"</string> <string name="accessibility_desc_quick_settings" msgid="4374766941484719179">"การตั้งค่าด่วน"</string> <string name="accessibility_desc_qs_notification_shade" msgid="8327226953072700376">"การตั้งค่าด่วนและหน้าต่างแจ้งเตือน"</string> - <string name="accessibility_desc_lock_screen" msgid="5983125095181194887">"ล็อกหน้าจอ"</string> + <string name="accessibility_desc_lock_screen" msgid="409034672704273634">"หน้าจอล็อก"</string> <string name="accessibility_desc_work_lock" msgid="4355620395354680575">"หน้าจอล็อกของโปรไฟล์งาน"</string> <string name="accessibility_desc_close" msgid="8293708213442107755">"ปิด"</string> <string name="accessibility_quick_settings_dnd_none_on" msgid="3235552940146035383">"ปิดเสียงทั้งหมด"</string> @@ -270,20 +270,15 @@ <string name="see_all_bluetooth_devices" msgid="1761596816620200433">"ดูทั้งหมด"</string> <string name="turn_on_bluetooth" msgid="5681370462180289071">"ใช้บลูทูธ"</string> <string name="quick_settings_bluetooth_device_connected" msgid="7884777006729260996">"เชื่อมต่อแล้ว"</string> - <!-- no translation found for quick_settings_bluetooth_device_audio_sharing (1496358082943301670) --> - <skip /> + <string name="quick_settings_bluetooth_device_audio_sharing" msgid="1496358082943301670">"การแชร์เสียง"</string> <string name="quick_settings_bluetooth_device_saved" msgid="7549938728928069477">"บันทึกแล้ว"</string> <string name="accessibility_quick_settings_bluetooth_device_tap_to_disconnect" msgid="415980329093277342">"ยกเลิกการเชื่อมต่อ"</string> <string name="accessibility_quick_settings_bluetooth_device_tap_to_activate" msgid="3724301751036877403">"เปิดใช้งาน"</string> <string name="turn_on_bluetooth_auto_tomorrow" msgid="414836329962473906">"เปิดอีกครั้งโดยอัตโนมัติในวันพรุ่งนี้"</string> - <!-- no translation found for turn_on_bluetooth_auto_info_disabled (682984290339848844) --> - <skip /> - <!-- no translation found for turn_on_bluetooth_auto_info_enabled (7440944034584560279) --> - <skip /> - <!-- no translation found for quick_settings_bluetooth_audio_sharing_button (4499275822759907822) --> - <skip /> - <!-- no translation found for quick_settings_bluetooth_audio_sharing_button_sharing (8626191139359072540) --> - <skip /> + <string name="turn_on_bluetooth_auto_info_disabled" msgid="682984290339848844">"ฟีเจอร์ต่างๆ เช่น Quick Share และหาอุปกรณ์ของฉัน ใช้บลูทูธ"</string> + <string name="turn_on_bluetooth_auto_info_enabled" msgid="7440944034584560279">"บลูทูธจะเปิดพรุ่งนี้เช้า"</string> + <string name="quick_settings_bluetooth_audio_sharing_button" msgid="4499275822759907822">"การแชร์เสียง"</string> + <string name="quick_settings_bluetooth_audio_sharing_button_sharing" msgid="8626191139359072540">"กำลังแชร์เสียง"</string> <string name="quick_settings_bluetooth_secondary_label_battery_level" msgid="4182034939479344093">"แบตเตอรี่ <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE">%s</xliff:g>"</string> <string name="quick_settings_bluetooth_secondary_label_audio" msgid="780333390310051161">"เสียง"</string> <string name="quick_settings_bluetooth_secondary_label_headset" msgid="2332093067553000852">"ชุดหูฟัง"</string> @@ -376,6 +371,8 @@ <string name="quick_settings_hearing_devices_dialog_title" msgid="9004774017688484981">"เครื่องช่วยฟัง"</string> <string name="quick_settings_pair_hearing_devices" msgid="5987105102207447322">"จับคู่อุปกรณ์ใหม่"</string> <string name="accessibility_hearing_device_pair_new_device" msgid="8440082580186130090">"คลิกเพื่อจับคู่อุปกรณ์ใหม่"</string> + <!-- no translation found for hearing_devices_presets_error (350363093458408536) --> + <skip /> <string name="sensor_privacy_start_use_mic_dialog_title" msgid="563796653825944944">"เลิกบล็อกไมโครโฟนของอุปกรณ์ใช่ไหม"</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> @@ -441,6 +438,7 @@ <string name="keyguard_indication_charging_time_fast" msgid="8390311020603859480">"<xliff:g id="PERCENTAGE">%2$s</xliff:g> • กำลังชาร์จอย่างเร็ว • จะเต็มในอีก <xliff:g id="CHARGING_TIME_LEFT">%1$s</xliff:g>"</string> <string name="keyguard_indication_charging_time_slowly" msgid="301936949731705417">"<xliff:g id="PERCENTAGE">%2$s</xliff:g> • กำลังชาร์จอย่างช้าๆ • จะเต็มในอีก <xliff:g id="CHARGING_TIME_LEFT">%1$s</xliff:g>"</string> <string name="keyguard_indication_charging_time_dock" msgid="3149328898931741271">"<xliff:g id="PERCENTAGE">%2$s</xliff:g> • กำลังชาร์จ • จะเต็มในอีก <xliff:g id="CHARGING_TIME_LEFT">%1$s</xliff:g>"</string> + <string name="accessibility_action_open_communal_hub" msgid="3081702792413787849">"วิดเจ็ตในหน้าจอล็อก"</string> <string name="communal_tutorial_indicator_text" msgid="4503010353591430123">"ปัดไปทางซ้ายเพื่อเริ่มบทแนะนำส่วนกลาง"</string> <string name="cta_tile_button_to_open_widget_editor" msgid="3871562362382963878">"ปรับแต่ง"</string> <string name="cta_tile_button_to_dismiss" msgid="3377597875997861754">"ปิด"</string> @@ -459,6 +457,8 @@ <string name="button_text_to_open_settings" msgid="1987729256950941628">"เปิดการตั้งค่า"</string> <string name="work_mode_off_title" msgid="5794818421357835873">"ยกเลิกการหยุดแอปงานชั่วคราวไหม"</string> <string name="work_mode_turn_on" msgid="907813741770247267">"ยกเลิกการหยุดชั่วคราว"</string> + <string name="accessibility_action_label_close_communal_hub" msgid="6790396569621032333">"ปิดวิดเจ็ตในหน้าจอล็อก"</string> + <string name="accessibility_content_description_for_communal_hub" msgid="1670220840599380118">"วิดเจ็ตในหน้าจอล็อก"</string> <string name="accessibility_multi_user_switch_switcher" msgid="5330448341251092660">"สลับผู้ใช้"</string> <string name="accessibility_multi_user_list_switcher" msgid="8574105376229857407">"เมนูแบบเลื่อนลง"</string> <string name="guest_exit_guest_dialog_message" msgid="8183450985628495709">"ระบบจะลบแอปและข้อมูลทั้งหมดในเซสชันนี้"</string> @@ -642,7 +642,7 @@ <string name="wallet_secondary_label_device_locked" msgid="5175862019125370506">"ปลดล็อกเพื่อใช้"</string> <string name="wallet_error_generic" msgid="257704570182963611">"เกิดปัญหาในการดึงข้อมูลบัตรของคุณ โปรดลองอีกครั้งในภายหลัง"</string> <string name="wallet_lockscreen_settings_label" msgid="3539105300870383570">"การตั้งค่าหน้าจอล็อก"</string> - <string name="qr_code_scanner_title" msgid="1938155688725760702">"แอปสแกนคิวอาร์โค้ด"</string> + <string name="qr_code_scanner_title" msgid="1938155688725760702">"ตัวสแกนคิวอาร์โค้ด"</string> <string name="qr_code_scanner_updating_secondary_label" msgid="8344598017007876352">"กำลังอัปเดต"</string> <string name="status_bar_work" msgid="5238641949837091056">"โปรไฟล์งาน"</string> <string name="status_bar_airplane" msgid="4848702508684541009">"โหมดบนเครื่องบิน"</string> @@ -1005,7 +1005,7 @@ <string name="accessibility_floating_button_action_move_top_left" msgid="6253520703618545705">"ย้ายไปด้านซ้ายบน"</string> <string name="accessibility_floating_button_action_move_top_right" msgid="6106225581993479711">"ย้ายไปด้านขวาบน"</string> <string name="accessibility_floating_button_action_move_bottom_left" msgid="8063394111137429725">"ย้ายไปด้านซ้ายล่าง"</string> - <string name="accessibility_floating_button_action_move_bottom_right" msgid="6196904373227440500">"ย้ายไปด้านขาวล่าง"</string> + <string name="accessibility_floating_button_action_move_bottom_right" msgid="6196904373227440500">"ย้ายไปด้านขวาล่าง"</string> <string name="accessibility_floating_button_action_move_to_edge_and_hide_to_half" msgid="662401168245782658">"ย้ายไปที่ขอบและซ่อน"</string> <string name="accessibility_floating_button_action_move_out_edge_and_show" msgid="8354760891651663326">"ย้ายออกจากขอบและแสดง"</string> <string name="accessibility_floating_button_action_remove_menu" msgid="6730432848162552135">"นำออก"</string> diff --git a/packages/SystemUI/res/values-tl/strings.xml b/packages/SystemUI/res/values-tl/strings.xml index 922bf880e48b..69e16e579d65 100644 --- a/packages/SystemUI/res/values-tl/strings.xml +++ b/packages/SystemUI/res/values-tl/strings.xml @@ -235,7 +235,7 @@ <string name="accessibility_desc_notification_shade" msgid="5355229129428759989">"Notification shade."</string> <string name="accessibility_desc_quick_settings" msgid="4374766941484719179">"Mga mabilisang setting."</string> <string name="accessibility_desc_qs_notification_shade" msgid="8327226953072700376">"Mga mabilisang setting at Notification shade."</string> - <string name="accessibility_desc_lock_screen" msgid="5983125095181194887">"Lock screen."</string> + <string name="accessibility_desc_lock_screen" msgid="409034672704273634">"Lock screen"</string> <string name="accessibility_desc_work_lock" msgid="4355620395354680575">"Lock screen sa trabaho"</string> <string name="accessibility_desc_close" msgid="8293708213442107755">"Isara"</string> <string name="accessibility_quick_settings_dnd_none_on" msgid="3235552940146035383">"ganap na katahimikan"</string> @@ -376,6 +376,8 @@ <string name="quick_settings_hearing_devices_dialog_title" msgid="9004774017688484981">"Mga hearing device"</string> <string name="quick_settings_pair_hearing_devices" msgid="5987105102207447322">"Magpares ng bagong device"</string> <string name="accessibility_hearing_device_pair_new_device" msgid="8440082580186130090">"I-click para magpares ng bagong device"</string> + <!-- no translation found for hearing_devices_presets_error (350363093458408536) --> + <skip /> <string name="sensor_privacy_start_use_mic_dialog_title" msgid="563796653825944944">"I-unblock ang mikropono ng device?"</string> <string name="sensor_privacy_start_use_camera_dialog_title" msgid="8807639852654305227">"I-unblock ang camera ng device?"</string> <string name="sensor_privacy_start_use_mic_camera_dialog_title" msgid="4316471859905020023">"I-unblock ang camera at mikropono ng device?"</string> @@ -441,6 +443,7 @@ <string name="keyguard_indication_charging_time_fast" msgid="8390311020603859480">"<xliff:g id="PERCENTAGE">%2$s</xliff:g> • Mabilis na nagcha-charge • <xliff:g id="CHARGING_TIME_LEFT">%1$s</xliff:g> na lang para mapuno"</string> <string name="keyguard_indication_charging_time_slowly" msgid="301936949731705417">"<xliff:g id="PERCENTAGE">%2$s</xliff:g> • Mabagal na nagcha-charge • <xliff:g id="CHARGING_TIME_LEFT">%1$s</xliff:g> na lang para mapuno"</string> <string name="keyguard_indication_charging_time_dock" msgid="3149328898931741271">"<xliff:g id="PERCENTAGE">%2$s</xliff:g> • Nagcha-charge • <xliff:g id="CHARGING_TIME_LEFT">%1$s</xliff:g> na lang para mapuno"</string> + <string name="accessibility_action_open_communal_hub" msgid="3081702792413787849">"Mga widget sa lock screen"</string> <string name="communal_tutorial_indicator_text" msgid="4503010353591430123">"Mag-swipe pakaliwa para simulan ang communal na tutorial"</string> <string name="cta_tile_button_to_open_widget_editor" msgid="3871562362382963878">"I-customize"</string> <string name="cta_tile_button_to_dismiss" msgid="3377597875997861754">"I-dismiss"</string> @@ -459,6 +462,8 @@ <string name="button_text_to_open_settings" msgid="1987729256950941628">"Buksan ang mga setting"</string> <string name="work_mode_off_title" msgid="5794818421357835873">"I-unpause ang mga work app?"</string> <string name="work_mode_turn_on" msgid="907813741770247267">"I-unpause"</string> + <string name="accessibility_action_label_close_communal_hub" msgid="6790396569621032333">"Isara ang mga widget sa lock screen"</string> + <string name="accessibility_content_description_for_communal_hub" msgid="1670220840599380118">"Mga widget sa lock screen"</string> <string name="accessibility_multi_user_switch_switcher" msgid="5330448341251092660">"Magpalit ng user"</string> <string name="accessibility_multi_user_list_switcher" msgid="8574105376229857407">"pulldown menu"</string> <string name="guest_exit_guest_dialog_message" msgid="8183450985628495709">"Ide-delete ang lahat ng app at data sa session na ito."</string> diff --git a/packages/SystemUI/res/values-tr/strings.xml b/packages/SystemUI/res/values-tr/strings.xml index 35f13dece0f9..b3a86ac8d2a3 100644 --- a/packages/SystemUI/res/values-tr/strings.xml +++ b/packages/SystemUI/res/values-tr/strings.xml @@ -235,7 +235,8 @@ <string name="accessibility_desc_notification_shade" msgid="5355229129428759989">"Bildirim gölgesi."</string> <string name="accessibility_desc_quick_settings" msgid="4374766941484719179">"Hızlı ayarlar."</string> <string name="accessibility_desc_qs_notification_shade" msgid="8327226953072700376">"Hızlı ayarlar ve Bildirim gölgesi."</string> - <string name="accessibility_desc_lock_screen" msgid="5983125095181194887">"Kilit ekranı"</string> + <!-- no translation found for accessibility_desc_lock_screen (409034672704273634) --> + <skip /> <string name="accessibility_desc_work_lock" msgid="4355620395354680575">"İş profili kilit ekranı"</string> <string name="accessibility_desc_close" msgid="8293708213442107755">"Kapat"</string> <string name="accessibility_quick_settings_dnd_none_on" msgid="3235552940146035383">"tamamen sessiz"</string> @@ -376,6 +377,8 @@ <string name="quick_settings_hearing_devices_dialog_title" msgid="9004774017688484981">"İşitme cihazları"</string> <string name="quick_settings_pair_hearing_devices" msgid="5987105102207447322">"Yeni cihaz eşle"</string> <string name="accessibility_hearing_device_pair_new_device" msgid="8440082580186130090">"Yeni cihaz eşlemek için tıklayın"</string> + <!-- no translation found for hearing_devices_presets_error (350363093458408536) --> + <skip /> <string name="sensor_privacy_start_use_mic_dialog_title" msgid="563796653825944944">"Cihaz mikrofonunun engellemesi kaldırılsın mı?"</string> <string name="sensor_privacy_start_use_camera_dialog_title" msgid="8807639852654305227">"Cihaz kamerasının engellemesi kaldırılsın mı?"</string> <string name="sensor_privacy_start_use_mic_camera_dialog_title" msgid="4316471859905020023">"Cihaz kamerası ile mikrofonunun engellemesi kaldırılsın mı?"</string> @@ -441,6 +444,8 @@ <string name="keyguard_indication_charging_time_fast" msgid="8390311020603859480">"<xliff:g id="PERCENTAGE">%2$s</xliff:g> • Hızlı şarj oluyor • Dolmasına <xliff:g id="CHARGING_TIME_LEFT">%1$s</xliff:g> kaldı"</string> <string name="keyguard_indication_charging_time_slowly" msgid="301936949731705417">"<xliff:g id="PERCENTAGE">%2$s</xliff:g> • Yavaş şarj oluyor • Dolmasına <xliff:g id="CHARGING_TIME_LEFT">%1$s</xliff:g> kaldı"</string> <string name="keyguard_indication_charging_time_dock" msgid="3149328898931741271">"<xliff:g id="PERCENTAGE">%2$s</xliff:g> • Şarj oluyor • Dolmasına <xliff:g id="CHARGING_TIME_LEFT">%1$s</xliff:g> kaldı"</string> + <!-- no translation found for accessibility_action_open_communal_hub (3081702792413787849) --> + <skip /> <string name="communal_tutorial_indicator_text" msgid="4503010353591430123">"Ortak eğitimi başlatmak için sola kaydırın"</string> <string name="cta_tile_button_to_open_widget_editor" msgid="3871562362382963878">"Özelleştir"</string> <string name="cta_tile_button_to_dismiss" msgid="3377597875997861754">"Kapat"</string> @@ -459,6 +464,10 @@ <string name="button_text_to_open_settings" msgid="1987729256950941628">"Ayarları açın"</string> <string name="work_mode_off_title" msgid="5794818421357835873">"İş uygulamaları devam ettirilsin mi?"</string> <string name="work_mode_turn_on" msgid="907813741770247267">"Devam ettir"</string> + <!-- no translation found for accessibility_action_label_close_communal_hub (6790396569621032333) --> + <skip /> + <!-- no translation found for accessibility_content_description_for_communal_hub (1670220840599380118) --> + <skip /> <string name="accessibility_multi_user_switch_switcher" msgid="5330448341251092660">"Kullanıcı değiştirme"</string> <string name="accessibility_multi_user_list_switcher" msgid="8574105376229857407">"açılır menü"</string> <string name="guest_exit_guest_dialog_message" msgid="8183450985628495709">"Bu oturumdaki tüm uygulamalar ve veriler silinecek."</string> diff --git a/packages/SystemUI/res/values-uk/strings.xml b/packages/SystemUI/res/values-uk/strings.xml index 0d97121636b3..cd8d92f77cc8 100644 --- a/packages/SystemUI/res/values-uk/strings.xml +++ b/packages/SystemUI/res/values-uk/strings.xml @@ -235,7 +235,8 @@ <string name="accessibility_desc_notification_shade" msgid="5355229129428759989">"Панель сповіщень."</string> <string name="accessibility_desc_quick_settings" msgid="4374766941484719179">"Швидке налаштування."</string> <string name="accessibility_desc_qs_notification_shade" msgid="8327226953072700376">"Швидкі налаштування й панель сповіщень."</string> - <string name="accessibility_desc_lock_screen" msgid="5983125095181194887">"Заблокований екран."</string> + <!-- no translation found for accessibility_desc_lock_screen (409034672704273634) --> + <skip /> <string name="accessibility_desc_work_lock" msgid="4355620395354680575">"Екран блокування завдання"</string> <string name="accessibility_desc_close" msgid="8293708213442107755">"Закрити"</string> <string name="accessibility_quick_settings_dnd_none_on" msgid="3235552940146035383">"без сигналів"</string> @@ -376,6 +377,8 @@ <string name="quick_settings_hearing_devices_dialog_title" msgid="9004774017688484981">"Слухові апарати"</string> <string name="quick_settings_pair_hearing_devices" msgid="5987105102207447322">"Підключити новий пристрій"</string> <string name="accessibility_hearing_device_pair_new_device" msgid="8440082580186130090">"Натисніть, щоб підключити новий пристрій"</string> + <!-- no translation found for hearing_devices_presets_error (350363093458408536) --> + <skip /> <string name="sensor_privacy_start_use_mic_dialog_title" msgid="563796653825944944">"Надати доступ до мікрофона?"</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> @@ -441,6 +444,8 @@ <string name="keyguard_indication_charging_time_fast" msgid="8390311020603859480">"<xliff:g id="PERCENTAGE">%2$s</xliff:g> • Швидке заряджання • <xliff:g id="CHARGING_TIME_LEFT">%1$s</xliff:g> до повного заряду"</string> <string name="keyguard_indication_charging_time_slowly" msgid="301936949731705417">"<xliff:g id="PERCENTAGE">%2$s</xliff:g> • Повільне заряджання • <xliff:g id="CHARGING_TIME_LEFT">%1$s</xliff:g> до повного заряду"</string> <string name="keyguard_indication_charging_time_dock" msgid="3149328898931741271">"<xliff:g id="PERCENTAGE">%2$s</xliff:g> • Заряджання • <xliff:g id="CHARGING_TIME_LEFT">%1$s</xliff:g> до повного заряду"</string> + <!-- no translation found for accessibility_action_open_communal_hub (3081702792413787849) --> + <skip /> <string name="communal_tutorial_indicator_text" msgid="4503010353591430123">"Проведіть пальцем уліво, щоб відкрити спільний навчальний посібник"</string> <string name="cta_tile_button_to_open_widget_editor" msgid="3871562362382963878">"Налаштувати"</string> <string name="cta_tile_button_to_dismiss" msgid="3377597875997861754">"Закрити"</string> @@ -459,6 +464,10 @@ <string name="button_text_to_open_settings" msgid="1987729256950941628">"Відкрити налаштування"</string> <string name="work_mode_off_title" msgid="5794818421357835873">"Увімкнути робочі додатки?"</string> <string name="work_mode_turn_on" msgid="907813741770247267">"Увімкнути"</string> + <!-- no translation found for accessibility_action_label_close_communal_hub (6790396569621032333) --> + <skip /> + <!-- no translation found for accessibility_content_description_for_communal_hub (1670220840599380118) --> + <skip /> <string name="accessibility_multi_user_switch_switcher" msgid="5330448341251092660">"Змінити користувача"</string> <string name="accessibility_multi_user_list_switcher" msgid="8574105376229857407">"спадне меню"</string> <string name="guest_exit_guest_dialog_message" msgid="8183450985628495709">"Усі додатки й дані з цього сеансу буде видалено."</string> diff --git a/packages/SystemUI/res/values-ur/strings.xml b/packages/SystemUI/res/values-ur/strings.xml index 888be9c28dc5..81ac8543fb1b 100644 --- a/packages/SystemUI/res/values-ur/strings.xml +++ b/packages/SystemUI/res/values-ur/strings.xml @@ -235,7 +235,8 @@ <string name="accessibility_desc_notification_shade" msgid="5355229129428759989">"اطلاعاتی شیڈ۔"</string> <string name="accessibility_desc_quick_settings" msgid="4374766941484719179">"فوری ترتیبات۔"</string> <string name="accessibility_desc_qs_notification_shade" msgid="8327226953072700376">"فوری ترتیبات اور اطلاعاتی شیڈ۔"</string> - <string name="accessibility_desc_lock_screen" msgid="5983125095181194887">"مقفل اسکرین۔"</string> + <!-- no translation found for accessibility_desc_lock_screen (409034672704273634) --> + <skip /> <string name="accessibility_desc_work_lock" msgid="4355620395354680575">"دفتری مقفل اسکرین"</string> <string name="accessibility_desc_close" msgid="8293708213442107755">"بند کریں"</string> <string name="accessibility_quick_settings_dnd_none_on" msgid="3235552940146035383">"مکمل خاموشی"</string> @@ -376,6 +377,8 @@ <string name="quick_settings_hearing_devices_dialog_title" msgid="9004774017688484981">"سماعت کے آلات"</string> <string name="quick_settings_pair_hearing_devices" msgid="5987105102207447322">"نئے آلے کا جوڑا بنائیں"</string> <string name="accessibility_hearing_device_pair_new_device" msgid="8440082580186130090">"نئے آلے کا جوڑا بنانے کے لیے کلک کریں"</string> + <!-- no translation found for hearing_devices_presets_error (350363093458408536) --> + <skip /> <string name="sensor_privacy_start_use_mic_dialog_title" msgid="563796653825944944">"آلے کا مائیکروفون غیر مسدود کریں؟"</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> @@ -441,6 +444,8 @@ <string name="keyguard_indication_charging_time_fast" msgid="8390311020603859480">"<xliff:g id="PERCENTAGE">%2$s</xliff:g> • تیزی سے چارج ہو رہا ہے • <xliff:g id="CHARGING_TIME_LEFT">%1$s</xliff:g> میں مکمل"</string> <string name="keyguard_indication_charging_time_slowly" msgid="301936949731705417">"<xliff:g id="PERCENTAGE">%2$s</xliff:g> • آہستہ چارج ہو رہا ہے • <xliff:g id="CHARGING_TIME_LEFT">%1$s</xliff:g> میں مکمل"</string> <string name="keyguard_indication_charging_time_dock" msgid="3149328898931741271">"<xliff:g id="PERCENTAGE">%2$s</xliff:g> • چارج ہو رہا ہے • <xliff:g id="CHARGING_TIME_LEFT">%1$s</xliff:g> میں مکمل"</string> + <!-- no translation found for accessibility_action_open_communal_hub (3081702792413787849) --> + <skip /> <string name="communal_tutorial_indicator_text" msgid="4503010353591430123">"کمیونل ٹیوٹوریل شروع کرنے کے لیے بائیں سوائپ کریں"</string> <string name="cta_tile_button_to_open_widget_editor" msgid="3871562362382963878">"حسب ضرورت بنائیں"</string> <string name="cta_tile_button_to_dismiss" msgid="3377597875997861754">"برخاست کریں"</string> @@ -459,6 +464,10 @@ <string name="button_text_to_open_settings" msgid="1987729256950941628">"ترتیبات کھولیں"</string> <string name="work_mode_off_title" msgid="5794818421357835873">"ورک ایپس کو غیر موقوف کریں؟"</string> <string name="work_mode_turn_on" msgid="907813741770247267">"غیر موقوف کریں"</string> + <!-- no translation found for accessibility_action_label_close_communal_hub (6790396569621032333) --> + <skip /> + <!-- no translation found for accessibility_content_description_for_communal_hub (1670220840599380118) --> + <skip /> <string name="accessibility_multi_user_switch_switcher" msgid="5330448341251092660">"صارف سوئچ کریں"</string> <string name="accessibility_multi_user_list_switcher" msgid="8574105376229857407">"پل ڈاؤن مینیو"</string> <string name="guest_exit_guest_dialog_message" msgid="8183450985628495709">"اس سیشن میں موجود سبھی ایپس اور ڈیٹا کو حذف کر دیا جائے گا۔"</string> diff --git a/packages/SystemUI/res/values-uz/strings.xml b/packages/SystemUI/res/values-uz/strings.xml index 6581db528afe..a3c7f9d7d2c1 100644 --- a/packages/SystemUI/res/values-uz/strings.xml +++ b/packages/SystemUI/res/values-uz/strings.xml @@ -235,7 +235,8 @@ <string name="accessibility_desc_notification_shade" msgid="5355229129428759989">"Xabarnoma soyasi."</string> <string name="accessibility_desc_quick_settings" msgid="4374766941484719179">"Tezkor sozlamalar."</string> <string name="accessibility_desc_qs_notification_shade" msgid="8327226953072700376">"Tezkor sozlamalar va eslatma soyasi."</string> - <string name="accessibility_desc_lock_screen" msgid="5983125095181194887">"Qulflash ekrani."</string> + <!-- no translation found for accessibility_desc_lock_screen (409034672704273634) --> + <skip /> <string name="accessibility_desc_work_lock" msgid="4355620395354680575">"Ishchi ekran qulfi"</string> <string name="accessibility_desc_close" msgid="8293708213442107755">"Yopish"</string> <string name="accessibility_quick_settings_dnd_none_on" msgid="3235552940146035383">"jimjitlik"</string> @@ -376,6 +377,8 @@ <string name="quick_settings_hearing_devices_dialog_title" msgid="9004774017688484981">"Eshitish qurilmalari"</string> <string name="quick_settings_pair_hearing_devices" msgid="5987105102207447322">"Yangi qurilmani ulash"</string> <string name="accessibility_hearing_device_pair_new_device" msgid="8440082580186130090">"Yangi qurilmani ulash uchun bosing"</string> + <!-- no translation found for hearing_devices_presets_error (350363093458408536) --> + <skip /> <string name="sensor_privacy_start_use_mic_dialog_title" msgid="563796653825944944">"Qurilma mikrofoni blokdan chiqarilsinmi?"</string> <string name="sensor_privacy_start_use_camera_dialog_title" msgid="8807639852654305227">"Qurilma kamerasi blokdan chiqarilsinmi?"</string> <string name="sensor_privacy_start_use_mic_camera_dialog_title" msgid="4316471859905020023">"Qurilma kamerasi va mikrofoni blokdan chiqarilsinmi?"</string> @@ -441,6 +444,8 @@ <string name="keyguard_indication_charging_time_fast" msgid="8390311020603859480">"<xliff:g id="PERCENTAGE">%2$s</xliff:g> • Tez quvvat olmoqda • <xliff:g id="CHARGING_TIME_LEFT">%1$s</xliff:g> qoldi"</string> <string name="keyguard_indication_charging_time_slowly" msgid="301936949731705417">"<xliff:g id="PERCENTAGE">%2$s</xliff:g> • Sekin quvvat olmoqda • <xliff:g id="CHARGING_TIME_LEFT">%1$s</xliff:g> qoldi"</string> <string name="keyguard_indication_charging_time_dock" msgid="3149328898931741271">"<xliff:g id="PERCENTAGE">%2$s</xliff:g> • Quvvat olmoqda • <xliff:g id="CHARGING_TIME_LEFT">%1$s</xliff:g> qoldi"</string> + <!-- no translation found for accessibility_action_open_communal_hub (3081702792413787849) --> + <skip /> <string name="communal_tutorial_indicator_text" msgid="4503010353591430123">"Qoʻllanma bilan tanishish uchun chapga suring"</string> <string name="cta_tile_button_to_open_widget_editor" msgid="3871562362382963878">"Moslash"</string> <string name="cta_tile_button_to_dismiss" msgid="3377597875997861754">"Yopish"</string> @@ -459,6 +464,10 @@ <string name="button_text_to_open_settings" msgid="1987729256950941628">"Sozlamalarni ochish"</string> <string name="work_mode_off_title" msgid="5794818421357835873">"Ishga oid ilovalar qaytarilsinmi?"</string> <string name="work_mode_turn_on" msgid="907813741770247267">"Davom ettirish"</string> + <!-- no translation found for accessibility_action_label_close_communal_hub (6790396569621032333) --> + <skip /> + <!-- no translation found for accessibility_content_description_for_communal_hub (1670220840599380118) --> + <skip /> <string name="accessibility_multi_user_switch_switcher" msgid="5330448341251092660">"Foydalanuvchini almashtirish"</string> <string name="accessibility_multi_user_list_switcher" msgid="8574105376229857407">"tortib tushiriladigan menyu"</string> <string name="guest_exit_guest_dialog_message" msgid="8183450985628495709">"Ushbu seansdagi barcha ilovalar va ma’lumotlar o‘chirib tashlanadi."</string> diff --git a/packages/SystemUI/res/values-vi/strings.xml b/packages/SystemUI/res/values-vi/strings.xml index cce810e7002d..d00390e94a2f 100644 --- a/packages/SystemUI/res/values-vi/strings.xml +++ b/packages/SystemUI/res/values-vi/strings.xml @@ -235,7 +235,8 @@ <string name="accessibility_desc_notification_shade" msgid="5355229129428759989">"Bóng thông báo."</string> <string name="accessibility_desc_quick_settings" msgid="4374766941484719179">"Cài đặt nhanh."</string> <string name="accessibility_desc_qs_notification_shade" msgid="8327226953072700376">"Cài đặt nhanh và ngăn thông báo."</string> - <string name="accessibility_desc_lock_screen" msgid="5983125095181194887">"Màn hình khóa."</string> + <!-- no translation found for accessibility_desc_lock_screen (409034672704273634) --> + <skip /> <string name="accessibility_desc_work_lock" msgid="4355620395354680575">"Màn hình khóa công việc"</string> <string name="accessibility_desc_close" msgid="8293708213442107755">"Đóng"</string> <string name="accessibility_quick_settings_dnd_none_on" msgid="3235552940146035383">"hoàn toàn tắt tiếng"</string> @@ -376,6 +377,8 @@ <string name="quick_settings_hearing_devices_dialog_title" msgid="9004774017688484981">"Thiết bị trợ thính"</string> <string name="quick_settings_pair_hearing_devices" msgid="5987105102207447322">"Ghép nối thiết bị mới"</string> <string name="accessibility_hearing_device_pair_new_device" msgid="8440082580186130090">"Nhấp để ghép nối thiết bị mới"</string> + <!-- no translation found for hearing_devices_presets_error (350363093458408536) --> + <skip /> <string name="sensor_privacy_start_use_mic_dialog_title" msgid="563796653825944944">"Bỏ chặn micrô của thiết bị?"</string> <string name="sensor_privacy_start_use_camera_dialog_title" msgid="8807639852654305227">"Bỏ chặn camera của thiết bị?"</string> <string name="sensor_privacy_start_use_mic_camera_dialog_title" msgid="4316471859905020023">"Bỏ chặn máy ảnh và micrô của thiết bị?"</string> @@ -441,6 +444,8 @@ <string name="keyguard_indication_charging_time_fast" msgid="8390311020603859480">"<xliff:g id="PERCENTAGE">%2$s</xliff:g> • Đang sạc nhanh • Sẽ đầy sau <xliff:g id="CHARGING_TIME_LEFT">%1$s</xliff:g>"</string> <string name="keyguard_indication_charging_time_slowly" msgid="301936949731705417">"<xliff:g id="PERCENTAGE">%2$s</xliff:g> • Đang sạc chậm • Sẽ đầy sau <xliff:g id="CHARGING_TIME_LEFT">%1$s</xliff:g>"</string> <string name="keyguard_indication_charging_time_dock" msgid="3149328898931741271">"<xliff:g id="PERCENTAGE">%2$s</xliff:g> • Đang sạc • Sẽ đầy sau <xliff:g id="CHARGING_TIME_LEFT">%1$s</xliff:g>"</string> + <!-- no translation found for accessibility_action_open_communal_hub (3081702792413787849) --> + <skip /> <string name="communal_tutorial_indicator_text" msgid="4503010353591430123">"Vuốt sang trái để bắt đầu xem hướng dẫn chung"</string> <string name="cta_tile_button_to_open_widget_editor" msgid="3871562362382963878">"Tuỳ chỉnh"</string> <string name="cta_tile_button_to_dismiss" msgid="3377597875997861754">"Đóng"</string> @@ -459,6 +464,10 @@ <string name="button_text_to_open_settings" msgid="1987729256950941628">"Mở phần Cài đặt"</string> <string name="work_mode_off_title" msgid="5794818421357835873">"Tiếp tục dùng ứng dụng công việc?"</string> <string name="work_mode_turn_on" msgid="907813741770247267">"Tiếp tục dùng"</string> + <!-- no translation found for accessibility_action_label_close_communal_hub (6790396569621032333) --> + <skip /> + <!-- no translation found for accessibility_content_description_for_communal_hub (1670220840599380118) --> + <skip /> <string name="accessibility_multi_user_switch_switcher" msgid="5330448341251092660">"Chuyển đổi người dùng"</string> <string name="accessibility_multi_user_list_switcher" msgid="8574105376229857407">"trình đơn kéo xuống"</string> <string name="guest_exit_guest_dialog_message" msgid="8183450985628495709">"Tất cả ứng dụng và dữ liệu trong phiên này sẽ bị xóa."</string> diff --git a/packages/SystemUI/res/values-zh-rCN/strings.xml b/packages/SystemUI/res/values-zh-rCN/strings.xml index f683133c0942..acaf5495ef3e 100644 --- a/packages/SystemUI/res/values-zh-rCN/strings.xml +++ b/packages/SystemUI/res/values-zh-rCN/strings.xml @@ -235,7 +235,8 @@ <string name="accessibility_desc_notification_shade" msgid="5355229129428759989">"通知栏。"</string> <string name="accessibility_desc_quick_settings" msgid="4374766941484719179">"快捷设置。"</string> <string name="accessibility_desc_qs_notification_shade" msgid="8327226953072700376">"快捷设置和通知栏。"</string> - <string name="accessibility_desc_lock_screen" msgid="5983125095181194887">"锁定屏幕。"</string> + <!-- no translation found for accessibility_desc_lock_screen (409034672704273634) --> + <skip /> <string name="accessibility_desc_work_lock" msgid="4355620395354680575">"工作锁定屏幕"</string> <string name="accessibility_desc_close" msgid="8293708213442107755">"关闭"</string> <string name="accessibility_quick_settings_dnd_none_on" msgid="3235552940146035383">"完全静音"</string> @@ -376,6 +377,8 @@ <string name="quick_settings_hearing_devices_dialog_title" msgid="9004774017688484981">"助听装置"</string> <string name="quick_settings_pair_hearing_devices" msgid="5987105102207447322">"与新设备配对"</string> <string name="accessibility_hearing_device_pair_new_device" msgid="8440082580186130090">"点击即可与新设备配对"</string> + <!-- no translation found for hearing_devices_presets_error (350363093458408536) --> + <skip /> <string name="sensor_privacy_start_use_mic_dialog_title" msgid="563796653825944944">"要解锁设备麦克风吗?"</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> @@ -441,6 +444,8 @@ <string name="keyguard_indication_charging_time_fast" msgid="8390311020603859480">"<xliff:g id="PERCENTAGE">%2$s</xliff:g> • 正在快速充电 • 将于 <xliff:g id="CHARGING_TIME_LEFT">%1$s</xliff:g>后充满"</string> <string name="keyguard_indication_charging_time_slowly" msgid="301936949731705417">"<xliff:g id="PERCENTAGE">%2$s</xliff:g> • 正在慢速充电 • 将于 <xliff:g id="CHARGING_TIME_LEFT">%1$s</xliff:g>后充满"</string> <string name="keyguard_indication_charging_time_dock" msgid="3149328898931741271">"<xliff:g id="PERCENTAGE">%2$s</xliff:g> • 正在充电 • 将于 <xliff:g id="CHARGING_TIME_LEFT">%1$s</xliff:g>后充满"</string> + <!-- no translation found for accessibility_action_open_communal_hub (3081702792413787849) --> + <skip /> <string name="communal_tutorial_indicator_text" msgid="4503010353591430123">"向左滑动即可启动公共教程"</string> <string name="cta_tile_button_to_open_widget_editor" msgid="3871562362382963878">"自定义"</string> <string name="cta_tile_button_to_dismiss" msgid="3377597875997861754">"关闭"</string> @@ -459,6 +464,10 @@ <string name="button_text_to_open_settings" msgid="1987729256950941628">"打开设置"</string> <string name="work_mode_off_title" msgid="5794818421357835873">"是否为工作应用解除暂停状态?"</string> <string name="work_mode_turn_on" msgid="907813741770247267">"解除暂停"</string> + <!-- no translation found for accessibility_action_label_close_communal_hub (6790396569621032333) --> + <skip /> + <!-- no translation found for accessibility_content_description_for_communal_hub (1670220840599380118) --> + <skip /> <string name="accessibility_multi_user_switch_switcher" msgid="5330448341251092660">"切换用户"</string> <string name="accessibility_multi_user_list_switcher" msgid="8574105376229857407">"下拉菜单"</string> <string name="guest_exit_guest_dialog_message" msgid="8183450985628495709">"此会话中的所有应用和数据都将被删除。"</string> diff --git a/packages/SystemUI/res/values-zh-rHK/strings.xml b/packages/SystemUI/res/values-zh-rHK/strings.xml index e6fcb7fd6589..8275699ca136 100644 --- a/packages/SystemUI/res/values-zh-rHK/strings.xml +++ b/packages/SystemUI/res/values-zh-rHK/strings.xml @@ -235,7 +235,8 @@ <string name="accessibility_desc_notification_shade" msgid="5355229129428759989">"通知欄。"</string> <string name="accessibility_desc_quick_settings" msgid="4374766941484719179">"快速設定。"</string> <string name="accessibility_desc_qs_notification_shade" msgid="8327226953072700376">"快速設定和通知欄。"</string> - <string name="accessibility_desc_lock_screen" msgid="5983125095181194887">"上鎖畫面。"</string> + <!-- no translation found for accessibility_desc_lock_screen (409034672704273634) --> + <skip /> <string name="accessibility_desc_work_lock" msgid="4355620395354680575">"工作螢幕鎖定"</string> <string name="accessibility_desc_close" msgid="8293708213442107755">"關閉"</string> <string name="accessibility_quick_settings_dnd_none_on" msgid="3235552940146035383">"完全靜音"</string> @@ -270,20 +271,15 @@ <string name="see_all_bluetooth_devices" msgid="1761596816620200433">"查看全部"</string> <string name="turn_on_bluetooth" msgid="5681370462180289071">"使用藍牙"</string> <string name="quick_settings_bluetooth_device_connected" msgid="7884777006729260996">"已連接"</string> - <!-- no translation found for quick_settings_bluetooth_device_audio_sharing (1496358082943301670) --> - <skip /> + <string name="quick_settings_bluetooth_device_audio_sharing" msgid="1496358082943301670">"音訊分享"</string> <string name="quick_settings_bluetooth_device_saved" msgid="7549938728928069477">"已儲存"</string> <string name="accessibility_quick_settings_bluetooth_device_tap_to_disconnect" msgid="415980329093277342">"解除連結"</string> <string name="accessibility_quick_settings_bluetooth_device_tap_to_activate" msgid="3724301751036877403">"啟動"</string> <string name="turn_on_bluetooth_auto_tomorrow" msgid="414836329962473906">"明天自動重新開啟"</string> - <!-- no translation found for turn_on_bluetooth_auto_info_disabled (682984290339848844) --> - <skip /> - <!-- no translation found for turn_on_bluetooth_auto_info_enabled (7440944034584560279) --> - <skip /> - <!-- no translation found for quick_settings_bluetooth_audio_sharing_button (4499275822759907822) --> - <skip /> - <!-- no translation found for quick_settings_bluetooth_audio_sharing_button_sharing (8626191139359072540) --> - <skip /> + <string name="turn_on_bluetooth_auto_info_disabled" msgid="682984290339848844">"「快速分享」和「尋找我的裝置」等功能需要藍牙"</string> + <string name="turn_on_bluetooth_auto_info_enabled" msgid="7440944034584560279">"藍牙會在明天早上開啟"</string> + <string name="quick_settings_bluetooth_audio_sharing_button" msgid="4499275822759907822">"音訊分享"</string> + <string name="quick_settings_bluetooth_audio_sharing_button_sharing" msgid="8626191139359072540">"正在分享音訊"</string> <string name="quick_settings_bluetooth_secondary_label_battery_level" msgid="4182034939479344093">"電量:<xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE">%s</xliff:g>"</string> <string name="quick_settings_bluetooth_secondary_label_audio" msgid="780333390310051161">"音訊"</string> <string name="quick_settings_bluetooth_secondary_label_headset" msgid="2332093067553000852">"耳機"</string> @@ -376,6 +372,8 @@ <string name="quick_settings_hearing_devices_dialog_title" msgid="9004774017688484981">"助聽器"</string> <string name="quick_settings_pair_hearing_devices" msgid="5987105102207447322">"配對新裝置"</string> <string name="accessibility_hearing_device_pair_new_device" msgid="8440082580186130090">"㩒一下就可以配對新裝置"</string> + <!-- no translation found for hearing_devices_presets_error (350363093458408536) --> + <skip /> <string name="sensor_privacy_start_use_mic_dialog_title" msgid="563796653825944944">"要解除封鎖裝置麥克風嗎?"</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> @@ -441,6 +439,8 @@ <string name="keyguard_indication_charging_time_fast" msgid="8390311020603859480">"<xliff:g id="PERCENTAGE">%2$s</xliff:g> • 快速充電中 • <xliff:g id="CHARGING_TIME_LEFT">%1$s</xliff:g>後充滿電"</string> <string name="keyguard_indication_charging_time_slowly" msgid="301936949731705417">"<xliff:g id="PERCENTAGE">%2$s</xliff:g> • 慢速充電中 • <xliff:g id="CHARGING_TIME_LEFT">%1$s</xliff:g>後充滿電"</string> <string name="keyguard_indication_charging_time_dock" msgid="3149328898931741271">"<xliff:g id="PERCENTAGE">%2$s</xliff:g> • 充電中 • <xliff:g id="CHARGING_TIME_LEFT">%1$s</xliff:g>後充滿電"</string> + <!-- no translation found for accessibility_action_open_communal_hub (3081702792413787849) --> + <skip /> <string name="communal_tutorial_indicator_text" msgid="4503010353591430123">"向左滑動即可開始共用教學課程"</string> <string name="cta_tile_button_to_open_widget_editor" msgid="3871562362382963878">"自訂"</string> <string name="cta_tile_button_to_dismiss" msgid="3377597875997861754">"關閉"</string> @@ -459,6 +459,10 @@ <string name="button_text_to_open_settings" msgid="1987729256950941628">"開啟設定"</string> <string name="work_mode_off_title" msgid="5794818421357835873">"要取消暫停工作應用程式嗎?"</string> <string name="work_mode_turn_on" msgid="907813741770247267">"取消暫停"</string> + <!-- no translation found for accessibility_action_label_close_communal_hub (6790396569621032333) --> + <skip /> + <!-- no translation found for accessibility_content_description_for_communal_hub (1670220840599380118) --> + <skip /> <string name="accessibility_multi_user_switch_switcher" msgid="5330448341251092660">"切換使用者"</string> <string name="accessibility_multi_user_list_switcher" msgid="8574105376229857407">"下拉式選單"</string> <string name="guest_exit_guest_dialog_message" msgid="8183450985628495709">"這個工作階段中的所有應用程式和資料都會被刪除。"</string> diff --git a/packages/SystemUI/res/values-zh-rTW/strings.xml b/packages/SystemUI/res/values-zh-rTW/strings.xml index b02bf81fd883..393b24222e33 100644 --- a/packages/SystemUI/res/values-zh-rTW/strings.xml +++ b/packages/SystemUI/res/values-zh-rTW/strings.xml @@ -235,7 +235,8 @@ <string name="accessibility_desc_notification_shade" msgid="5355229129428759989">"通知欄。"</string> <string name="accessibility_desc_quick_settings" msgid="4374766941484719179">"快捷設定。"</string> <string name="accessibility_desc_qs_notification_shade" msgid="8327226953072700376">"快速設定和通知欄。"</string> - <string name="accessibility_desc_lock_screen" msgid="5983125095181194887">"螢幕鎖定。"</string> + <!-- no translation found for accessibility_desc_lock_screen (409034672704273634) --> + <skip /> <string name="accessibility_desc_work_lock" msgid="4355620395354680575">"Work 螢幕鎖定"</string> <string name="accessibility_desc_close" msgid="8293708213442107755">"關閉"</string> <string name="accessibility_quick_settings_dnd_none_on" msgid="3235552940146035383">"完全靜音"</string> @@ -270,20 +271,15 @@ <string name="see_all_bluetooth_devices" msgid="1761596816620200433">"查看全部"</string> <string name="turn_on_bluetooth" msgid="5681370462180289071">"使用藍牙"</string> <string name="quick_settings_bluetooth_device_connected" msgid="7884777006729260996">"已連線"</string> - <!-- no translation found for quick_settings_bluetooth_device_audio_sharing (1496358082943301670) --> - <skip /> + <string name="quick_settings_bluetooth_device_audio_sharing" msgid="1496358082943301670">"音訊分享"</string> <string name="quick_settings_bluetooth_device_saved" msgid="7549938728928069477">"已儲存"</string> <string name="accessibility_quick_settings_bluetooth_device_tap_to_disconnect" msgid="415980329093277342">"取消連結"</string> <string name="accessibility_quick_settings_bluetooth_device_tap_to_activate" msgid="3724301751036877403">"啟用"</string> <string name="turn_on_bluetooth_auto_tomorrow" msgid="414836329962473906">"明天自動重新開啟"</string> - <!-- no translation found for turn_on_bluetooth_auto_info_disabled (682984290339848844) --> - <skip /> - <!-- no translation found for turn_on_bluetooth_auto_info_enabled (7440944034584560279) --> - <skip /> - <!-- no translation found for quick_settings_bluetooth_audio_sharing_button (4499275822759907822) --> - <skip /> - <!-- no translation found for quick_settings_bluetooth_audio_sharing_button_sharing (8626191139359072540) --> - <skip /> + <string name="turn_on_bluetooth_auto_info_disabled" msgid="682984290339848844">"「快速分享」和「尋找我的裝置」等功能需要藍牙"</string> + <string name="turn_on_bluetooth_auto_info_enabled" msgid="7440944034584560279">"藍牙會在明天早上開啟"</string> + <string name="quick_settings_bluetooth_audio_sharing_button" msgid="4499275822759907822">"音訊分享"</string> + <string name="quick_settings_bluetooth_audio_sharing_button_sharing" msgid="8626191139359072540">"正在分享音訊"</string> <string name="quick_settings_bluetooth_secondary_label_battery_level" msgid="4182034939479344093">"電量:<xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE">%s</xliff:g>"</string> <string name="quick_settings_bluetooth_secondary_label_audio" msgid="780333390310051161">"音訊"</string> <string name="quick_settings_bluetooth_secondary_label_headset" msgid="2332093067553000852">"耳機"</string> @@ -376,6 +372,8 @@ <string name="quick_settings_hearing_devices_dialog_title" msgid="9004774017688484981">"助聽器"</string> <string name="quick_settings_pair_hearing_devices" msgid="5987105102207447322">"配對新裝置"</string> <string name="accessibility_hearing_device_pair_new_device" msgid="8440082580186130090">"按一下即可配對新裝置"</string> + <!-- no translation found for hearing_devices_presets_error (350363093458408536) --> + <skip /> <string name="sensor_privacy_start_use_mic_dialog_title" msgid="563796653825944944">"要解除封鎖裝置麥克風嗎?"</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> @@ -441,6 +439,8 @@ <string name="keyguard_indication_charging_time_fast" msgid="8390311020603859480">"<xliff:g id="PERCENTAGE">%2$s</xliff:g> • 快速充電中 • 將於 <xliff:g id="CHARGING_TIME_LEFT">%1$s</xliff:g>後充飽"</string> <string name="keyguard_indication_charging_time_slowly" msgid="301936949731705417">"<xliff:g id="PERCENTAGE">%2$s</xliff:g> • 慢速充電中 • 將於 <xliff:g id="CHARGING_TIME_LEFT">%1$s</xliff:g>後充飽"</string> <string name="keyguard_indication_charging_time_dock" msgid="3149328898931741271">"<xliff:g id="PERCENTAGE">%2$s</xliff:g> • 充電中 • 將於 <xliff:g id="CHARGING_TIME_LEFT">%1$s</xliff:g>後充飽"</string> + <!-- no translation found for accessibility_action_open_communal_hub (3081702792413787849) --> + <skip /> <string name="communal_tutorial_indicator_text" msgid="4503010353591430123">"向左滑動即可啟動通用教學課程"</string> <string name="cta_tile_button_to_open_widget_editor" msgid="3871562362382963878">"自訂"</string> <string name="cta_tile_button_to_dismiss" msgid="3377597875997861754">"關閉"</string> @@ -459,6 +459,10 @@ <string name="button_text_to_open_settings" msgid="1987729256950941628">"開啟設定"</string> <string name="work_mode_off_title" msgid="5794818421357835873">"要解除工作應用程式的暫停狀態嗎?"</string> <string name="work_mode_turn_on" msgid="907813741770247267">"取消暫停"</string> + <!-- no translation found for accessibility_action_label_close_communal_hub (6790396569621032333) --> + <skip /> + <!-- no translation found for accessibility_content_description_for_communal_hub (1670220840599380118) --> + <skip /> <string name="accessibility_multi_user_switch_switcher" msgid="5330448341251092660">"切換使用者"</string> <string name="accessibility_multi_user_list_switcher" msgid="8574105376229857407">"下拉式選單"</string> <string name="guest_exit_guest_dialog_message" msgid="8183450985628495709">"這個工作階段中的所有應用程式和資料都會刪除。"</string> diff --git a/packages/SystemUI/res/values-zu/strings.xml b/packages/SystemUI/res/values-zu/strings.xml index a4d66a4e3595..4fc0134b5114 100644 --- a/packages/SystemUI/res/values-zu/strings.xml +++ b/packages/SystemUI/res/values-zu/strings.xml @@ -235,7 +235,7 @@ <string name="accessibility_desc_notification_shade" msgid="5355229129428759989">"Umthunzi wesaziso."</string> <string name="accessibility_desc_quick_settings" msgid="4374766941484719179">"Izilingiselelo ezisheshayo."</string> <string name="accessibility_desc_qs_notification_shade" msgid="8327226953072700376">"Amasethingi asheshayo Nomthunzi wezaziso."</string> - <string name="accessibility_desc_lock_screen" msgid="5983125095181194887">"Khiya isikrini."</string> + <string name="accessibility_desc_lock_screen" msgid="409034672704273634">"Khiya isikrini"</string> <string name="accessibility_desc_work_lock" msgid="4355620395354680575">"Ukukhiya isikrini somsebenzi"</string> <string name="accessibility_desc_close" msgid="8293708213442107755">"Vala"</string> <string name="accessibility_quick_settings_dnd_none_on" msgid="3235552940146035383">"ukuthula okuphelele"</string> @@ -376,6 +376,8 @@ <string name="quick_settings_hearing_devices_dialog_title" msgid="9004774017688484981">"Izinsizakuzwa"</string> <string name="quick_settings_pair_hearing_devices" msgid="5987105102207447322">"Bhangqa idivayisi entsha"</string> <string name="accessibility_hearing_device_pair_new_device" msgid="8440082580186130090">"Chofoza ukuze ubhangqe idivayisi entsha"</string> + <!-- no translation found for hearing_devices_presets_error (350363093458408536) --> + <skip /> <string name="sensor_privacy_start_use_mic_dialog_title" msgid="563796653825944944">"Vulela imakrofoni yedivayisi?"</string> <string name="sensor_privacy_start_use_camera_dialog_title" msgid="8807639852654305227">"Vulela ikhamera yedivayisi?"</string> <string name="sensor_privacy_start_use_mic_camera_dialog_title" msgid="4316471859905020023">"Vulela ikhamera yedivayisi nemakrofoni?"</string> @@ -441,6 +443,7 @@ <string name="keyguard_indication_charging_time_fast" msgid="8390311020603859480">"<xliff:g id="PERCENTAGE">%2$s</xliff:g> • Ishaja ngokushesha • Izogcwala ngo-<xliff:g id="CHARGING_TIME_LEFT">%1$s</xliff:g>"</string> <string name="keyguard_indication_charging_time_slowly" msgid="301936949731705417">"<xliff:g id="PERCENTAGE">%2$s</xliff:g> • Ishaja kancane • Izogcwala ngo-<xliff:g id="CHARGING_TIME_LEFT">%1$s</xliff:g>"</string> <string name="keyguard_indication_charging_time_dock" msgid="3149328898931741271">"<xliff:g id="PERCENTAGE">%2$s</xliff:g> • Iyashaja • Izogcwala ngo-<xliff:g id="CHARGING_TIME_LEFT">%1$s</xliff:g>"</string> + <string name="accessibility_action_open_communal_hub" msgid="3081702792413787849">"Amawijethi ekukhiyeni isikrini"</string> <string name="communal_tutorial_indicator_text" msgid="4503010353591430123">"Swayiphela kwesokunxele ukuze uqale okokufundisa komphakathi"</string> <string name="cta_tile_button_to_open_widget_editor" msgid="3871562362382963878">"Enza ngendlela oyifisayo"</string> <string name="cta_tile_button_to_dismiss" msgid="3377597875997861754">"Chitha"</string> @@ -459,6 +462,8 @@ <string name="button_text_to_open_settings" msgid="1987729256950941628">"Vula amasethingi"</string> <string name="work_mode_off_title" msgid="5794818421357835873">"Susa ukumisa ama-app omsebenzi?"</string> <string name="work_mode_turn_on" msgid="907813741770247267">"Qhubekisa"</string> + <string name="accessibility_action_label_close_communal_hub" msgid="6790396569621032333">"Vala amawijethi ekukhiyeni isikrini"</string> + <string name="accessibility_content_description_for_communal_hub" msgid="1670220840599380118">"Amawijethi ekukhiyeni isikrini"</string> <string name="accessibility_multi_user_switch_switcher" msgid="5330448341251092660">"Shintsha umsebenzisi"</string> <string name="accessibility_multi_user_list_switcher" msgid="8574105376229857407">"imenyu yokudonsela phansi"</string> <string name="guest_exit_guest_dialog_message" msgid="8183450985628495709">"Wonke ama-app nedatha kulesi sikhathi azosuswa."</string> @@ -1002,11 +1007,11 @@ <string name="accessibility_floating_button_hidden_notification_text" msgid="1457021647040915658">"Thepha ukuze ubonise inkinobho yokufinyeleleka."</string> <string name="accessibility_floating_button_undo_message_label_text" msgid="9017658016426242640">"Isinqamuleli se-<xliff:g id="FEATURE_NAME">%s</xliff:g> sisusiwe"</string> <string name="accessibility_floating_button_undo_message_number_text" msgid="4909270290725226075">"{count,plural, =1{Isinqamuleli esingu-# sisusiwe}one{Izinqamuleli ezingu-# zisusiwe}other{Izinqamuleli ezingu-# zisusiwe}}"</string> - <string name="accessibility_floating_button_action_move_top_left" msgid="6253520703618545705">"Hamba phezulu kwesokunxele"</string> + <string name="accessibility_floating_button_action_move_top_left" msgid="6253520703618545705">"Hambisa phezulu kwesokunxele"</string> <string name="accessibility_floating_button_action_move_top_right" msgid="6106225581993479711">"Hamba phezulu ngakwesokudla"</string> - <string name="accessibility_floating_button_action_move_bottom_left" msgid="8063394111137429725">"Hamba phansi ngakwesokunxele"</string> - <string name="accessibility_floating_button_action_move_bottom_right" msgid="6196904373227440500">"Hamba phansi ngakwesokudla"</string> - <string name="accessibility_floating_button_action_move_to_edge_and_hide_to_half" msgid="662401168245782658">"Hamba onqenqemeni ufihle"</string> + <string name="accessibility_floating_button_action_move_bottom_left" msgid="8063394111137429725">"Hambisa phansi ngakwesokunxele"</string> + <string name="accessibility_floating_button_action_move_bottom_right" msgid="6196904373227440500">"Hambisa phansi ngakwesokudla"</string> + <string name="accessibility_floating_button_action_move_to_edge_and_hide_to_half" msgid="662401168245782658">"Hambisa onqenqemeni ufihle"</string> <string name="accessibility_floating_button_action_move_out_edge_and_show" msgid="8354760891651663326">"Phuma onqenqemeni ubonise"</string> <string name="accessibility_floating_button_action_remove_menu" msgid="6730432848162552135">"Susa"</string> <string name="accessibility_floating_button_action_double_tap_to_toggle" msgid="7976492639670692037">"guqula"</string> diff --git a/packages/SystemUI/res/values/dimens.xml b/packages/SystemUI/res/values/dimens.xml index 82395e48de20..df57f2a27761 100644 --- a/packages/SystemUI/res/values/dimens.xml +++ b/packages/SystemUI/res/values/dimens.xml @@ -310,6 +310,9 @@ <!-- Radius for notifications corners without adjacent notifications --> <dimen name="notification_corner_radius">28dp</dimen> + <!-- Stroke width for notifications focus state overlay, see id/notification_focus_outline --> + <dimen name="notification_focus_stroke_width">3dp</dimen> + <!-- Distance over which notification corner animations run, near the shelf while scrolling. --> <dimen name="notification_corner_animation_distance">48dp</dimen> diff --git a/packages/SystemUI/src/com/android/keyguard/KeyguardClockSwitchController.java b/packages/SystemUI/src/com/android/keyguard/KeyguardClockSwitchController.java index 790a8434c229..47e4b49e519d 100644 --- a/packages/SystemUI/src/com/android/keyguard/KeyguardClockSwitchController.java +++ b/packages/SystemUI/src/com/android/keyguard/KeyguardClockSwitchController.java @@ -68,6 +68,8 @@ import com.android.systemui.util.ViewController; import com.android.systemui.util.concurrency.DelayableExecutor; import com.android.systemui.util.settings.SecureSettings; +import kotlinx.coroutines.DisposableHandle; + import java.io.PrintWriter; import java.util.Locale; import java.util.concurrent.Executor; @@ -75,8 +77,6 @@ import java.util.function.Consumer; import javax.inject.Inject; -import kotlinx.coroutines.DisposableHandle; - /** * Injectable controller for {@link KeyguardClockSwitch}. */ @@ -593,7 +593,7 @@ public class KeyguardClockSwitchController extends ViewController<KeyguardClockS boolean isClockTopAligned() { if (MigrateClocksToBlueprint.isEnabled()) { - return mKeyguardClockInteractor.getClockSize().getValue() == LARGE; + return mKeyguardClockInteractor.getClockSize().getValue().getLegacyValue() == LARGE; } return mLargeClockFrame.getVisibility() != View.VISIBLE; } diff --git a/packages/SystemUI/src/com/android/systemui/SystemUIApplication.java b/packages/SystemUI/src/com/android/systemui/SystemUIApplication.java index fb88f0e4e093..ba869bd56f31 100644 --- a/packages/SystemUI/src/com/android/systemui/SystemUIApplication.java +++ b/packages/SystemUI/src/com/android/systemui/SystemUIApplication.java @@ -204,7 +204,7 @@ public class SystemUIApplication extends Application implements */ public void startSystemUserServicesIfNeeded() { - if (!mProcessWrapper.isSystemUser()) { + if (!shouldStartSystemUserServices()) { Log.wtf(TAG, "Tried starting SystemUser services on non-SystemUser"); return; // Per-user startables are handled in #startSystemUserServicesIfNeeded. } @@ -227,7 +227,7 @@ public class SystemUIApplication extends Application implements * <p>This method must only be called from the main thread.</p> */ void startSecondaryUserServicesIfNeeded() { - if (mProcessWrapper.isSystemUser()) { + if (!shouldStartSecondaryUserServices()) { return; // Per-user startables are handled in #startSystemUserServicesIfNeeded. } // Sort the startables so that we get a deterministic ordering. @@ -238,6 +238,14 @@ public class SystemUIApplication extends Application implements sortedStartables, "StartSecondaryServices", null); } + protected boolean shouldStartSystemUserServices() { + return mProcessWrapper.isSystemUser(); + } + + protected boolean shouldStartSecondaryUserServices() { + return !mProcessWrapper.isSystemUser(); + } + private void startServicesIfNeeded( Map<Class<?>, Provider<CoreStartable>> startables, String metricsPrefix, diff --git a/packages/SystemUI/src/com/android/systemui/bouncer/domain/interactor/BouncerInteractor.kt b/packages/SystemUI/src/com/android/systemui/bouncer/domain/interactor/BouncerInteractor.kt index dd71bc782c1c..cb458efbdf69 100644 --- a/packages/SystemUI/src/com/android/systemui/bouncer/domain/interactor/BouncerInteractor.kt +++ b/packages/SystemUI/src/com/android/systemui/bouncer/domain/interactor/BouncerInteractor.kt @@ -95,7 +95,7 @@ constructor( /** The scene to show when bouncer is dismissed. */ val dismissDestination: Flow<SceneKey> = - sceneInteractor.previousScene.map { it ?: Scenes.Lockscreen } + sceneInteractor.previousScene(Scenes.Bouncer).map { it ?: Scenes.Lockscreen } /** Notifies that the user has places down a pointer, not necessarily dragging just yet. */ fun onDown() { diff --git a/packages/SystemUI/src/com/android/systemui/communal/ui/viewmodel/BaseCommunalViewModel.kt b/packages/SystemUI/src/com/android/systemui/communal/ui/viewmodel/BaseCommunalViewModel.kt index 71d719df45ff..4ac43bcc4abd 100644 --- a/packages/SystemUI/src/com/android/systemui/communal/ui/viewmodel/BaseCommunalViewModel.kt +++ b/packages/SystemUI/src/com/android/systemui/communal/ui/viewmodel/BaseCommunalViewModel.kt @@ -20,6 +20,7 @@ import android.content.ComponentName import android.os.UserHandle import com.android.compose.animation.scene.ObservableTransitionState import com.android.compose.animation.scene.SceneKey +import com.android.compose.animation.scene.TransitionKey import com.android.systemui.communal.domain.interactor.CommunalInteractor import com.android.systemui.communal.domain.model.CommunalContentModel import com.android.systemui.communal.widgets.WidgetConfigurator @@ -52,8 +53,8 @@ abstract class BaseCommunalViewModel( communalInteractor.signalUserInteraction() } - fun changeScene(scene: SceneKey) { - communalInteractor.changeScene(scene) + fun changeScene(scene: SceneKey, transitionKey: TransitionKey? = null) { + communalInteractor.changeScene(scene, transitionKey) } /** diff --git a/packages/SystemUI/src/com/android/systemui/communal/widgets/EditWidgetsActivity.kt b/packages/SystemUI/src/com/android/systemui/communal/widgets/EditWidgetsActivity.kt index 5f4b394a05b9..f20fafccfd19 100644 --- a/packages/SystemUI/src/com/android/systemui/communal/widgets/EditWidgetsActivity.kt +++ b/packages/SystemUI/src/com/android/systemui/communal/widgets/EditWidgetsActivity.kt @@ -36,6 +36,7 @@ import com.android.compose.theme.PlatformTheme import com.android.internal.logging.UiEventLogger import com.android.systemui.communal.shared.log.CommunalUiEvent import com.android.systemui.communal.shared.model.CommunalScenes +import com.android.systemui.communal.shared.model.CommunalTransitionKeys import com.android.systemui.communal.ui.compose.CommunalHub import com.android.systemui.communal.ui.viewmodel.CommunalEditModeViewModel import com.android.systemui.communal.util.WidgetPickerIntentUtils.getWidgetExtraFromIntent @@ -149,7 +150,10 @@ constructor( private fun onEditDone() { try { - communalViewModel.changeScene(CommunalScenes.Communal) + communalViewModel.changeScene( + CommunalScenes.Communal, + CommunalTransitionKeys.SimpleFade + ) checkNotNull(windowManagerService).lockNow(/* options */ null) finish() } catch (e: RemoteException) { diff --git a/packages/SystemUI/src/com/android/systemui/deviceentry/domain/interactor/DeviceEntryInteractor.kt b/packages/SystemUI/src/com/android/systemui/deviceentry/domain/interactor/DeviceEntryInteractor.kt index 5c1ca646529e..662974dd2c91 100644 --- a/packages/SystemUI/src/com/android/systemui/deviceentry/domain/interactor/DeviceEntryInteractor.kt +++ b/packages/SystemUI/src/com/android/systemui/deviceentry/domain/interactor/DeviceEntryInteractor.kt @@ -19,6 +19,7 @@ package com.android.systemui.deviceentry.domain.interactor import androidx.annotation.VisibleForTesting import com.android.systemui.authentication.domain.interactor.AuthenticationInteractor import com.android.systemui.authentication.shared.model.AuthenticationMethodModel +import com.android.systemui.bouncer.domain.interactor.AlternateBouncerInteractor import com.android.systemui.dagger.SysUISingleton import com.android.systemui.dagger.qualifiers.Application import com.android.systemui.deviceentry.data.repository.DeviceEntryRepository @@ -63,6 +64,7 @@ constructor( private val trustInteractor: TrustInteractor, private val deviceUnlockedInteractor: DeviceUnlockedInteractor, private val systemPropertiesHelper: SystemPropertiesHelper, + private val alternateBouncerInteractor: AlternateBouncerInteractor, ) { /** * Whether the device is unlocked. @@ -211,10 +213,14 @@ constructor( // 4. Transition to bouncer scene applicationScope.launch { if (isAuthenticationRequired()) { - sceneInteractor.changeScene( - toScene = Scenes.Bouncer, - loggingReason = "request to unlock device while authentication required", - ) + if (alternateBouncerInteractor.canShowAlternateBouncer.value) { + alternateBouncerInteractor.forceShow() + } else { + sceneInteractor.changeScene( + toScene = Scenes.Bouncer, + loggingReason = "request to unlock device while authentication required", + ) + } } else { sceneInteractor.changeScene( toScene = Scenes.Gone, diff --git a/packages/SystemUI/src/com/android/systemui/keyguard/data/repository/KeyguardClockRepository.kt b/packages/SystemUI/src/com/android/systemui/keyguard/data/repository/KeyguardClockRepository.kt index 6c29bce616bc..708775221a00 100644 --- a/packages/SystemUI/src/com/android/systemui/keyguard/data/repository/KeyguardClockRepository.kt +++ b/packages/SystemUI/src/com/android/systemui/keyguard/data/repository/KeyguardClockRepository.kt @@ -20,17 +20,17 @@ import android.content.Context import android.os.UserHandle import android.provider.Settings import com.android.keyguard.ClockEventController -import com.android.keyguard.KeyguardClockSwitch.ClockSize -import com.android.keyguard.KeyguardClockSwitch.LARGE import com.android.systemui.dagger.SysUISingleton import com.android.systemui.dagger.qualifiers.Application import com.android.systemui.dagger.qualifiers.Background import com.android.systemui.flags.FeatureFlagsClassic import com.android.systemui.flags.Flags -import com.android.systemui.keyguard.shared.model.SettingsClockSize +import com.android.systemui.keyguard.shared.model.ClockSize +import com.android.systemui.keyguard.shared.model.ClockSizeSetting import com.android.systemui.plugins.clocks.ClockController import com.android.systemui.plugins.clocks.ClockId import com.android.systemui.res.R +import com.android.systemui.scene.shared.flag.SceneContainerFlag import com.android.systemui.shared.clocks.ClockRegistry import com.android.systemui.util.settings.SecureSettings import com.android.systemui.util.settings.SettingsProxyExt.observerFlow @@ -56,10 +56,10 @@ interface KeyguardClockRepository { * * @deprecated When scene container flag is on use clockSize from domain level. */ - val clockSize: StateFlow<Int> + val clockSize: StateFlow<ClockSize> /** clock size selected in picker, DYNAMIC or SMALL */ - val selectedClockSize: StateFlow<SettingsClockSize> + val selectedClockSize: StateFlow<ClockSizeSetting> /** clock id, selected from clock carousel in wallpaper picker */ val currentClockId: Flow<ClockId> @@ -72,7 +72,7 @@ interface KeyguardClockRepository { val shouldForceSmallClock: Boolean - fun setClockSize(@ClockSize size: Int) + fun setClockSize(size: ClockSize) } @SysUISingleton @@ -89,14 +89,15 @@ constructor( ) : KeyguardClockRepository { /** Receive SMALL or LARGE clock should be displayed on keyguard. */ - private val _clockSize: MutableStateFlow<Int> = MutableStateFlow(LARGE) - override val clockSize: StateFlow<Int> = _clockSize.asStateFlow() + private val _clockSize: MutableStateFlow<ClockSize> = MutableStateFlow(ClockSize.LARGE) + override val clockSize: StateFlow<ClockSize> = _clockSize.asStateFlow() - override fun setClockSize(size: Int) { + override fun setClockSize(size: ClockSize) { + SceneContainerFlag.assertInLegacyMode() _clockSize.value = size } - override val selectedClockSize: StateFlow<SettingsClockSize> = + override val selectedClockSize: StateFlow<ClockSizeSetting> = secureSettings .observerFlow( names = arrayOf(Settings.Secure.LOCKSCREEN_USE_DOUBLE_LINE_CLOCK), @@ -154,17 +155,13 @@ constructor( // True on small landscape screens applicationContext.resources.getBoolean(R.bool.force_small_clock_on_lockscreen) - private fun getClockSize(): SettingsClockSize { - return if ( + private fun getClockSize(): ClockSizeSetting { + return ClockSizeSetting.fromSettingValue( secureSettings.getIntForUser( Settings.Secure.LOCKSCREEN_USE_DOUBLE_LINE_CLOCK, - 1, + /* defaultValue= */ 1, UserHandle.USER_CURRENT - ) == 1 - ) { - SettingsClockSize.DYNAMIC - } else { - SettingsClockSize.SMALL - } + ) + ) } } diff --git a/packages/SystemUI/src/com/android/systemui/keyguard/domain/interactor/FromDreamingTransitionInteractor.kt b/packages/SystemUI/src/com/android/systemui/keyguard/domain/interactor/FromDreamingTransitionInteractor.kt index b8ceab3f0a38..2c869bf8255e 100644 --- a/packages/SystemUI/src/com/android/systemui/keyguard/domain/interactor/FromDreamingTransitionInteractor.kt +++ b/packages/SystemUI/src/com/android/systemui/keyguard/domain/interactor/FromDreamingTransitionInteractor.kt @@ -65,6 +65,7 @@ constructor( ) { override fun start() { + listenForDreamingToAlternateBouncer() listenForDreamingToOccluded() listenForDreamingToGoneWhenDismissable() listenForDreamingToGoneFromBiometricUnlock() @@ -75,6 +76,16 @@ constructor( listenForDreamingToPrimaryBouncer() } + private fun listenForDreamingToAlternateBouncer() { + scope.launch("$TAG#listenForDreamingToAlternateBouncer") { + keyguardInteractor.alternateBouncerShowing + .filterRelevantKeyguardStateAnd { isAlternateBouncerShowing -> + isAlternateBouncerShowing + } + .collect { startTransitionTo(KeyguardState.ALTERNATE_BOUNCER) } + } + } + private fun listenForDreamingToGlanceableHub() { if (!communalHub()) return scope.launch("$TAG#listenForDreamingToGlanceableHub", mainDispatcher) { diff --git a/packages/SystemUI/src/com/android/systemui/keyguard/domain/interactor/KeyguardBlueprintInteractor.kt b/packages/SystemUI/src/com/android/systemui/keyguard/domain/interactor/KeyguardBlueprintInteractor.kt index 720baec54190..da4f85e0dd2f 100644 --- a/packages/SystemUI/src/com/android/systemui/keyguard/domain/interactor/KeyguardBlueprintInteractor.kt +++ b/packages/SystemUI/src/com/android/systemui/keyguard/domain/interactor/KeyguardBlueprintInteractor.kt @@ -31,15 +31,14 @@ import com.android.systemui.keyguard.ui.view.layout.blueprints.DefaultKeyguardBl import com.android.systemui.keyguard.ui.view.layout.blueprints.SplitShadeKeyguardBlueprint import com.android.systemui.keyguard.ui.view.layout.blueprints.transitions.IntraBlueprintTransition.Config import com.android.systemui.keyguard.ui.view.layout.blueprints.transitions.IntraBlueprintTransition.Type -import com.android.systemui.statusbar.policy.SplitShadeStateController +import com.android.systemui.shade.domain.interactor.ShadeInteractor +import com.android.systemui.shade.shared.model.ShadeMode import javax.inject.Inject import kotlinx.coroutines.CoroutineScope import kotlinx.coroutines.ExperimentalCoroutinesApi -import kotlinx.coroutines.flow.Flow +import kotlinx.coroutines.flow.StateFlow +import kotlinx.coroutines.flow.combine import kotlinx.coroutines.flow.filter -import kotlinx.coroutines.flow.map -import kotlinx.coroutines.flow.merge -import kotlinx.coroutines.flow.onStart import kotlinx.coroutines.launch @SysUISingleton @@ -49,14 +48,13 @@ constructor( private val keyguardBlueprintRepository: KeyguardBlueprintRepository, @Application private val applicationScope: CoroutineScope, private val context: Context, - private val splitShadeStateController: SplitShadeStateController, + private val shadeInteractor: ShadeInteractor, private val clockInteractor: KeyguardClockInteractor, configurationInteractor: ConfigurationInteractor, fingerprintPropertyInteractor: FingerprintPropertyInteractor, ) { - /** The current blueprint for the lockscreen. */ - val blueprint: Flow<KeyguardBlueprint> = keyguardBlueprintRepository.blueprint + val blueprint: StateFlow<KeyguardBlueprint> = keyguardBlueprintRepository.blueprint /** * Triggered when the blueprint isn't changed, but the ConstraintSet should be rebuilt and @@ -64,32 +62,23 @@ constructor( */ val refreshTransition = keyguardBlueprintRepository.refreshTransition - private val configOrPropertyChange = - merge( + /** Current BlueprintId */ + val blueprintId = + combine( configurationInteractor.onAnyConfigurationChange, - fingerprintPropertyInteractor.propertiesInitialized.filter { it }.map {}, // map to Unit - ) - init { - applicationScope.launch { - configOrPropertyChange.onStart { emit(Unit) }.collect { updateBlueprint() } - } - applicationScope.launch { clockInteractor.currentClock.collect { updateBlueprint() } } - } - - /** - * Detects when a new blueprint should be applied and calls [transitionToBlueprint]. This may - * end up reapplying the same blueprint, which is fine as configuration may have changed. - */ - private fun updateBlueprint() { - val useSplitShade = - splitShadeStateController.shouldUseSplitNotificationShade(context.resources) - - val blueprintId = + fingerprintPropertyInteractor.propertiesInitialized.filter { it }, + clockInteractor.currentClock, + shadeInteractor.shadeMode, + ) { _, _, _, shadeMode -> + val useSplitShade = shadeMode == ShadeMode.Split && !ComposeLockscreen.isEnabled when { - useSplitShade && !ComposeLockscreen.isEnabled -> SplitShadeKeyguardBlueprint.ID + useSplitShade -> SplitShadeKeyguardBlueprint.ID else -> DefaultKeyguardBlueprint.DEFAULT } - transitionToBlueprint(blueprintId) + } + + init { + applicationScope.launch { blueprintId.collect { transitionToBlueprint(it) } } } /** diff --git a/packages/SystemUI/src/com/android/systemui/keyguard/domain/interactor/KeyguardClockInteractor.kt b/packages/SystemUI/src/com/android/systemui/keyguard/domain/interactor/KeyguardClockInteractor.kt index f7f60a5a72a4..142b1a031277 100644 --- a/packages/SystemUI/src/com/android/systemui/keyguard/domain/interactor/KeyguardClockInteractor.kt +++ b/packages/SystemUI/src/com/android/systemui/keyguard/domain/interactor/KeyguardClockInteractor.kt @@ -20,14 +20,12 @@ package com.android.systemui.keyguard.domain.interactor import android.util.Log import com.android.keyguard.ClockEventController import com.android.keyguard.KeyguardClockSwitch -import com.android.keyguard.KeyguardClockSwitch.ClockSize -import com.android.keyguard.KeyguardClockSwitch.LARGE -import com.android.keyguard.KeyguardClockSwitch.SMALL import com.android.systemui.dagger.SysUISingleton import com.android.systemui.dagger.qualifiers.Application import com.android.systemui.keyguard.data.repository.KeyguardClockRepository +import com.android.systemui.keyguard.shared.model.ClockSize +import com.android.systemui.keyguard.shared.model.ClockSizeSetting import com.android.systemui.keyguard.shared.model.KeyguardState -import com.android.systemui.keyguard.shared.model.SettingsClockSize import com.android.systemui.media.controls.domain.pipeline.interactor.MediaCarouselInteractor import com.android.systemui.plugins.clocks.ClockController import com.android.systemui.plugins.clocks.ClockId @@ -59,12 +57,12 @@ constructor( keyguardTransitionInteractor: KeyguardTransitionInteractor, headsUpNotificationInteractor: HeadsUpNotificationInteractor, @Application private val applicationScope: CoroutineScope, - private val keyguardClockRepository: KeyguardClockRepository, + val keyguardClockRepository: KeyguardClockRepository, ) { private val isOnAod: Flow<Boolean> = keyguardTransitionInteractor.currentKeyguardState.map { it == KeyguardState.AOD } - val selectedClockSize: StateFlow<SettingsClockSize> = keyguardClockRepository.selectedClockSize + val selectedClockSize: StateFlow<ClockSizeSetting> = keyguardClockRepository.selectedClockSize val currentClockId: Flow<ClockId> = keyguardClockRepository.currentClockId @@ -76,8 +74,7 @@ constructor( var clock: ClockController? by keyguardClockRepository.clockEventController::clock - // TODO (b/333389512): Convert this into a more readable enum. - val clockSize: StateFlow<Int> = + val clockSize: StateFlow<ClockSize> = if (SceneContainerFlag.isEnabled) { combine( shadeInteractor.shadeMode, @@ -87,20 +84,19 @@ constructor( isOnAod, ) { shadeMode, hasNotifs, hasMedia, isDozing, isOnAod -> return@combine when { - keyguardClockRepository.shouldForceSmallClock && !isOnAod -> SMALL - shadeMode == ShadeMode.Single && (hasNotifs || hasMedia) -> SMALL - shadeMode == ShadeMode.Single -> LARGE - hasMedia && !isDozing -> SMALL - else -> LARGE + keyguardClockRepository.shouldForceSmallClock && !isOnAod -> ClockSize.SMALL + shadeMode == ShadeMode.Single && (hasNotifs || hasMedia) -> ClockSize.SMALL + shadeMode == ShadeMode.Single -> ClockSize.LARGE + hasMedia && !isDozing -> ClockSize.SMALL + else -> ClockSize.LARGE } } .stateIn( scope = applicationScope, started = SharingStarted.WhileSubscribed(), - initialValue = LARGE + initialValue = ClockSize.LARGE ) } else { - SceneContainerFlag.assertInLegacyMode() keyguardClockRepository.clockSize } @@ -130,11 +126,14 @@ constructor( } } } else { - SceneContainerFlag.assertInLegacyMode() keyguardInteractor.clockShouldBeCentered } - fun setClockSize(@ClockSize size: Int) { + fun setClockSize(@KeyguardClockSwitch.ClockSize size: Int) = + setClockSize(ClockSize.fromLegacy(size)) + + fun setClockSize(size: ClockSize) { + SceneContainerFlag.assertInLegacyMode() keyguardClockRepository.setClockSize(size) } diff --git a/packages/SystemUI/src/com/android/systemui/keyguard/domain/interactor/KeyguardSmartspaceInteractor.kt b/packages/SystemUI/src/com/android/systemui/keyguard/domain/interactor/KeyguardSmartspaceInteractor.kt index 67b57456a5c6..bb633b5169db 100644 --- a/packages/SystemUI/src/com/android/systemui/keyguard/domain/interactor/KeyguardSmartspaceInteractor.kt +++ b/packages/SystemUI/src/com/android/systemui/keyguard/domain/interactor/KeyguardSmartspaceInteractor.kt @@ -24,8 +24,10 @@ import kotlinx.coroutines.flow.StateFlow @SysUISingleton class KeyguardSmartspaceInteractor @Inject -constructor(private val keyguardSmartspaceRepository: KeyguardSmartspaceRepository) { - var bcSmartspaceVisibility: StateFlow<Int> = keyguardSmartspaceRepository.bcSmartspaceVisibility +constructor( + private val keyguardSmartspaceRepository: KeyguardSmartspaceRepository, +) { + val bcSmartspaceVisibility: StateFlow<Int> = keyguardSmartspaceRepository.bcSmartspaceVisibility fun setBcSmartspaceVisibility(visibility: Int) { keyguardSmartspaceRepository.setBcSmartspaceVisibility(visibility) diff --git a/packages/SystemUI/src/com/android/systemui/keyguard/domain/interactor/TransitionInteractor.kt b/packages/SystemUI/src/com/android/systemui/keyguard/domain/interactor/TransitionInteractor.kt index e456a550cad7..2850165b0d1a 100644 --- a/packages/SystemUI/src/com/android/systemui/keyguard/domain/interactor/TransitionInteractor.kt +++ b/packages/SystemUI/src/com/android/systemui/keyguard/domain/interactor/TransitionInteractor.kt @@ -224,20 +224,12 @@ sealed class TransitionInteractor( ) { if (!KeyguardWmStateRefactor.isEnabled) { scope.launch { - keyguardInteractor.onCameraLaunchDetected - .sample(transitionInteractor.finishedKeyguardState) - .collect { finishedKeyguardState -> - // Other keyguard state transitions may trigger on the first power button - // push, - // so use the last finishedKeyguardState to determine the overriding FROM - // state - if (finishedKeyguardState == fromState) { - startTransitionTo( - toState = KeyguardState.OCCLUDED, - modeOnCanceled = TransitionModeOnCanceled.RESET, - ) - } - } + keyguardInteractor.onCameraLaunchDetected.filterRelevantKeyguardState().collect { + startTransitionTo( + toState = KeyguardState.OCCLUDED, + modeOnCanceled = TransitionModeOnCanceled.RESET, + ) + } } } } diff --git a/packages/SystemUI/src/com/android/systemui/keyguard/shared/model/ClockSize.kt b/packages/SystemUI/src/com/android/systemui/keyguard/shared/model/ClockSize.kt new file mode 100644 index 000000000000..b66129794477 --- /dev/null +++ b/packages/SystemUI/src/com/android/systemui/keyguard/shared/model/ClockSize.kt @@ -0,0 +1,63 @@ +/* + * Copyright (C) 2023 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.keyguard.shared.model + +import android.util.Log +import com.android.keyguard.KeyguardClockSwitch + +enum class ClockSize( + @KeyguardClockSwitch.ClockSize val legacyValue: Int, +) { + SMALL(KeyguardClockSwitch.SMALL), + LARGE(KeyguardClockSwitch.LARGE); + + companion object { + private val TAG = ClockSize::class.simpleName!! + fun fromLegacy(@KeyguardClockSwitch.ClockSize value: Int): ClockSize { + for (enumVal in enumValues<ClockSize>()) { + if (enumVal.legacyValue == value) { + return enumVal + } + } + + Log.e(TAG, "Unrecognized legacy clock size value: $value") + return LARGE + } + } +} + +enum class ClockSizeSetting( + val settingValue: Int, +) { + DYNAMIC(1), + SMALL(0); + + companion object { + private val TAG = ClockSizeSetting::class.simpleName!! + fun fromSettingValue(value: Int): ClockSizeSetting { + for (enumVal in enumValues<ClockSizeSetting>()) { + if (enumVal.settingValue == value) { + return enumVal + } + } + + Log.e(TAG, "Unrecognized clock setting value: $value") + return DYNAMIC + } + } +} diff --git a/packages/SystemUI/src/com/android/systemui/keyguard/shared/model/KeyguardBlueprint.kt b/packages/SystemUI/src/com/android/systemui/keyguard/shared/model/KeyguardBlueprint.kt index 344044019c0d..7ca2ebaeab20 100644 --- a/packages/SystemUI/src/com/android/systemui/keyguard/shared/model/KeyguardBlueprint.kt +++ b/packages/SystemUI/src/com/android/systemui/keyguard/shared/model/KeyguardBlueprint.kt @@ -35,16 +35,18 @@ interface KeyguardBlueprint { * @param bindData: Whether to bind the data or not. */ fun replaceViews( - previousBlueprint: KeyguardBlueprint?, constraintLayout: ConstraintLayout, + previousBlueprint: KeyguardBlueprint? = null, bindData: Boolean = true ) { - previousBlueprint?.let { previousBlueprint -> - previousBlueprint.sections.subtract(sections).forEach { - it.removeViews(constraintLayout) + val prevSections = + previousBlueprint?.let { prev -> + prev.sections.subtract(sections).forEach { it.removeViews(constraintLayout) } + prev.sections } - } - sections.subtract((previousBlueprint?.sections ?: setOf()).toSet()).forEach { + ?: listOf() + + sections.subtract(prevSections).forEach { it.addViews(constraintLayout) if (bindData) { it.bindData(constraintLayout) diff --git a/packages/SystemUI/src/com/android/systemui/keyguard/ui/binder/KeyguardBlueprintViewBinder.kt b/packages/SystemUI/src/com/android/systemui/keyguard/ui/binder/KeyguardBlueprintViewBinder.kt index 6b8e896c937d..52d7519c2e3c 100644 --- a/packages/SystemUI/src/com/android/systemui/keyguard/ui/binder/KeyguardBlueprintViewBinder.kt +++ b/packages/SystemUI/src/com/android/systemui/keyguard/ui/binder/KeyguardBlueprintViewBinder.kt @@ -18,7 +18,6 @@ package com.android.systemui.keyguard.ui.binder import android.os.Handler -import android.os.Trace import android.transition.Transition import android.transition.TransitionManager import android.util.Log @@ -30,6 +29,7 @@ import com.android.app.tracing.coroutines.launch import com.android.systemui.dagger.SysUISingleton import com.android.systemui.dagger.qualifiers.Main import com.android.systemui.keyguard.KeyguardBottomAreaRefactor +import com.android.systemui.keyguard.shared.model.KeyguardBlueprint import com.android.systemui.keyguard.ui.view.layout.blueprints.transitions.BaseBlueprintTransition import com.android.systemui.keyguard.ui.view.layout.blueprints.transitions.IntraBlueprintTransition import com.android.systemui.keyguard.ui.view.layout.blueprints.transitions.IntraBlueprintTransition.Config @@ -39,12 +39,10 @@ import com.android.systemui.keyguard.ui.viewmodel.KeyguardSmartspaceViewModel import com.android.systemui.lifecycle.repeatWhenAttached import com.android.systemui.res.R import com.android.systemui.shared.R as sharedR +import com.android.systemui.util.kotlin.pairwise import javax.inject.Inject import kotlin.math.max -private const val TAG = "KeyguardBlueprintViewBinder" -private const val DEBUG = false - @SysUISingleton class KeyguardBlueprintViewBinder @Inject @@ -92,59 +90,59 @@ constructor( constraintLayout.repeatWhenAttached { repeatOnLifecycle(Lifecycle.State.CREATED) { launch("$TAG#viewModel.blueprint") { - viewModel.blueprint.collect { blueprint -> - Trace.beginSection("KeyguardBlueprintViewBinder#applyBlueprint") - val prevBluePrint = viewModel.currentBluePrint - - val cs = - ConstraintSet().apply { - clone(constraintLayout) - val emptyLayout = ConstraintSet.Layout() - knownIds.forEach { getConstraint(it).layout.copyFrom(emptyLayout) } - blueprint.applyConstraints(this) - } - - var transition = - if ( - !KeyguardBottomAreaRefactor.isEnabled && - prevBluePrint != null && - prevBluePrint != blueprint - ) { - BaseBlueprintTransition(clockViewModel) - .addTransition( - IntraBlueprintTransition( - Config.DEFAULT, - clockViewModel, - smartspaceViewModel + viewModel.blueprint + .pairwise( + null as KeyguardBlueprint?, + ) + .collect { (prevBlueprint, blueprint) -> + val cs = + ConstraintSet().apply { + clone(constraintLayout) + val emptyLayout = ConstraintSet.Layout() + knownIds.forEach { + getConstraint(it).layout.copyFrom(emptyLayout) + } + blueprint.applyConstraints(this) + } + + var transition = + if ( + !KeyguardBottomAreaRefactor.isEnabled && + prevBlueprint != null && + prevBlueprint != blueprint + ) { + BaseBlueprintTransition(clockViewModel) + .addTransition( + IntraBlueprintTransition( + Config.DEFAULT, + clockViewModel, + smartspaceViewModel + ) ) + } else { + IntraBlueprintTransition( + Config.DEFAULT, + clockViewModel, + smartspaceViewModel ) - } else { - IntraBlueprintTransition( - Config.DEFAULT, - clockViewModel, - smartspaceViewModel - ) + } + + runTransition(constraintLayout, transition, Config.DEFAULT) { + // Add and remove views of sections that are not contained by the + // other. + blueprint.replaceViews(constraintLayout, prevBlueprint) + logAlphaVisibilityOfAppliedConstraintSet(cs, clockViewModel) + cs.applyTo(constraintLayout) } - - runTransition(constraintLayout, transition, Config.DEFAULT) { - // Add and remove views of sections that are not contained by the other. - blueprint.replaceViews(prevBluePrint, constraintLayout) - logAlphaVisibilityOfAppliedConstraintSet(cs, clockViewModel) - cs.applyTo(constraintLayout) } - - viewModel.currentBluePrint = blueprint - Trace.endSection() - } } launch("$TAG#viewModel.refreshTransition") { viewModel.refreshTransition.collect { transition -> - Trace.beginSection("KeyguardBlueprintViewBinder#refreshTransition") val cs = ConstraintSet().apply { clone(constraintLayout) - viewModel.currentBluePrint?.applyConstraints(this) + viewModel.blueprint.value.applyConstraints(this) } runTransition( @@ -159,7 +157,6 @@ constructor( logAlphaVisibilityOfAppliedConstraintSet(cs, clockViewModel) cs.applyTo(constraintLayout) } - Trace.endSection() } } } @@ -235,4 +232,9 @@ constructor( "alpha=${cs.getConstraint(smartspaceDateId).propertySet.alpha}" ) } + + companion object { + private const val TAG = "KeyguardBlueprintViewBinder" + private const val DEBUG = false + } } diff --git a/packages/SystemUI/src/com/android/systemui/keyguard/ui/binder/KeyguardClockViewBinder.kt b/packages/SystemUI/src/com/android/systemui/keyguard/ui/binder/KeyguardClockViewBinder.kt index 7178e1bd9357..ed5d53cc9371 100644 --- a/packages/SystemUI/src/com/android/systemui/keyguard/ui/binder/KeyguardClockViewBinder.kt +++ b/packages/SystemUI/src/com/android/systemui/keyguard/ui/binder/KeyguardClockViewBinder.kt @@ -26,11 +26,10 @@ import androidx.constraintlayout.widget.ConstraintLayout import androidx.constraintlayout.widget.ConstraintSet import androidx.lifecycle.Lifecycle import androidx.lifecycle.repeatOnLifecycle -import com.android.keyguard.KeyguardClockSwitch.LARGE -import com.android.keyguard.KeyguardClockSwitch.SMALL import com.android.systemui.keyguard.MigrateClocksToBlueprint import com.android.systemui.keyguard.domain.interactor.KeyguardBlueprintInteractor import com.android.systemui.keyguard.domain.interactor.KeyguardClockInteractor +import com.android.systemui.keyguard.shared.model.ClockSize import com.android.systemui.keyguard.ui.view.layout.blueprints.transitions.IntraBlueprintTransition.Type import com.android.systemui.keyguard.ui.view.layout.sections.ClockSection import com.android.systemui.keyguard.ui.viewmodel.KeyguardClockViewModel @@ -55,6 +54,7 @@ object KeyguardClockViewBinder { keyguardClockInteractor.clockEventController.registerListeners(keyguardRootView) } } + keyguardRootView.repeatWhenAttached { repeatOnLifecycle(Lifecycle.State.CREATED) { launch { @@ -62,17 +62,19 @@ object KeyguardClockViewBinder { viewModel.currentClock.collect { currentClock -> cleanupClockViews(currentClock, keyguardRootView, viewModel.burnInLayer) addClockViews(currentClock, keyguardRootView) - updateBurnInLayer(keyguardRootView, viewModel) + updateBurnInLayer(keyguardRootView, viewModel, viewModel.clockSize.value) applyConstraints(clockSection, keyguardRootView, true) } } + launch { if (!MigrateClocksToBlueprint.isEnabled) return@launch - viewModel.clockSize.collect { - updateBurnInLayer(keyguardRootView, viewModel) + viewModel.clockSize.collect { clockSize -> + updateBurnInLayer(keyguardRootView, viewModel, clockSize) blueprintInteractor.refreshBlueprint(Type.ClockSize) } } + launch { if (!MigrateClocksToBlueprint.isEnabled) return@launch viewModel.clockShouldBeCentered.collect { @@ -90,11 +92,14 @@ object KeyguardClockViewBinder { } } } + launch { if (!MigrateClocksToBlueprint.isEnabled) return@launch viewModel.isAodIconsVisible.collect { viewModel.currentClock.value?.let { - if (viewModel.useLargeClock && it.config.useCustomClockScene) { + if ( + viewModel.isLargeClockVisible.value && it.config.useCustomClockScene + ) { blueprintInteractor.refreshBlueprint(Type.DefaultTransition) } } @@ -108,18 +113,19 @@ object KeyguardClockViewBinder { fun updateBurnInLayer( keyguardRootView: ConstraintLayout, viewModel: KeyguardClockViewModel, + clockSize: ClockSize, ) { val burnInLayer = viewModel.burnInLayer val clockController = viewModel.currentClock.value clockController?.let { clock -> - when (viewModel.clockSize.value) { - LARGE -> { + when (clockSize) { + ClockSize.LARGE -> { clock.smallClock.layout.views.forEach { burnInLayer?.removeView(it) } if (clock.config.useAlternateSmartspaceAODTransition) { clock.largeClock.layout.views.forEach { burnInLayer?.addView(it) } } } - SMALL -> { + ClockSize.SMALL -> { clock.smallClock.layout.views.forEach { burnInLayer?.addView(it) } clock.largeClock.layout.views.forEach { burnInLayer?.removeView(it) } } @@ -136,15 +142,16 @@ object KeyguardClockViewBinder { if (lastClock == currentClock) { return } + lastClock?.let { clock -> clock.smallClock.layout.views.forEach { burnInLayer?.removeView(it) rootView.removeView(it) } + // add large clock to burn in layer only when it will have same transition with other - // components in AOD - // otherwise, it will have a separate scale transition while other components only have - // translate transition + // components in AOD otherwise, it will have a separate scale transition while other + // components only have translate transition if (clock.config.useAlternateSmartspaceAODTransition) { clock.largeClock.layout.views.forEach { burnInLayer?.removeView(it) } } diff --git a/packages/SystemUI/src/com/android/systemui/keyguard/ui/binder/KeyguardPreviewClockViewBinder.kt b/packages/SystemUI/src/com/android/systemui/keyguard/ui/binder/KeyguardPreviewClockViewBinder.kt index 3ff32bfcfd46..8386628f4c83 100644 --- a/packages/SystemUI/src/com/android/systemui/keyguard/ui/binder/KeyguardPreviewClockViewBinder.kt +++ b/packages/SystemUI/src/com/android/systemui/keyguard/ui/binder/KeyguardPreviewClockViewBinder.kt @@ -36,7 +36,7 @@ import androidx.lifecycle.repeatOnLifecycle import com.android.app.tracing.coroutines.launch import com.android.internal.policy.SystemBarUtils import com.android.systemui.customization.R as customizationR -import com.android.systemui.keyguard.shared.model.SettingsClockSize +import com.android.systemui.keyguard.shared.model.ClockSizeSetting import com.android.systemui.keyguard.ui.preview.KeyguardPreviewRenderer import com.android.systemui.keyguard.ui.view.layout.sections.ClockSection.Companion.getDimen import com.android.systemui.keyguard.ui.view.layout.sections.setVisibility @@ -199,14 +199,14 @@ object KeyguardPreviewClockViewBinder { // flickering val largeClockVisibility = when (viewModel.selectedClockSize.value) { - SettingsClockSize.DYNAMIC -> VISIBLE - SettingsClockSize.SMALL -> INVISIBLE + ClockSizeSetting.DYNAMIC -> VISIBLE + ClockSizeSetting.SMALL -> INVISIBLE null -> INVISIBLE } val smallClockVisibility = when (viewModel.selectedClockSize.value) { - SettingsClockSize.DYNAMIC -> INVISIBLE - SettingsClockSize.SMALL -> VISIBLE + ClockSizeSetting.DYNAMIC -> INVISIBLE + ClockSizeSetting.SMALL -> VISIBLE null -> INVISIBLE } cs.apply { diff --git a/packages/SystemUI/src/com/android/systemui/keyguard/ui/binder/KeyguardPreviewSmartspaceViewBinder.kt b/packages/SystemUI/src/com/android/systemui/keyguard/ui/binder/KeyguardPreviewSmartspaceViewBinder.kt index 88d907469f69..4b75b804e52b 100644 --- a/packages/SystemUI/src/com/android/systemui/keyguard/ui/binder/KeyguardPreviewSmartspaceViewBinder.kt +++ b/packages/SystemUI/src/com/android/systemui/keyguard/ui/binder/KeyguardPreviewSmartspaceViewBinder.kt @@ -23,7 +23,7 @@ import androidx.core.view.isInvisible import androidx.lifecycle.Lifecycle import androidx.lifecycle.repeatOnLifecycle import com.android.app.tracing.coroutines.launch -import com.android.systemui.keyguard.shared.model.SettingsClockSize +import com.android.systemui.keyguard.shared.model.ClockSizeSetting import com.android.systemui.keyguard.ui.viewmodel.KeyguardPreviewSmartspaceViewModel import com.android.systemui.lifecycle.repeatWhenAttached @@ -43,12 +43,12 @@ object KeyguardPreviewSmartspaceViewBinder { viewModel.selectedClockSize.collect { val topPadding = when (it) { - SettingsClockSize.DYNAMIC -> + ClockSizeSetting.DYNAMIC -> viewModel.getLargeClockSmartspaceTopPadding( splitShadePreview, previewContext, ) - SettingsClockSize.SMALL -> + ClockSizeSetting.SMALL -> viewModel.getSmallClockSmartspaceTopPadding( splitShadePreview, previewContext, diff --git a/packages/SystemUI/src/com/android/systemui/keyguard/ui/binder/KeyguardRootViewBinder.kt b/packages/SystemUI/src/com/android/systemui/keyguard/ui/binder/KeyguardRootViewBinder.kt index cc54920236da..ccc48b5ecb12 100644 --- a/packages/SystemUI/src/com/android/systemui/keyguard/ui/binder/KeyguardRootViewBinder.kt +++ b/packages/SystemUI/src/com/android/systemui/keyguard/ui/binder/KeyguardRootViewBinder.kt @@ -36,6 +36,7 @@ import androidx.activity.setViewTreeOnBackPressedDispatcherOwner import androidx.lifecycle.Lifecycle import androidx.lifecycle.repeatOnLifecycle import com.android.app.animation.Interpolators +import com.android.app.tracing.coroutines.launch import com.android.internal.jank.InteractionJankMonitor import com.android.internal.jank.InteractionJankMonitor.CUJ_SCREEN_OFF_SHOW_AOD import com.android.systemui.Flags.newAodTransition @@ -94,8 +95,8 @@ object KeyguardRootViewBinder { view: ViewGroup, viewModel: KeyguardRootViewModel, configuration: ConfigurationState, - occludingAppDeviceEntryMessageViewModel: OccludingAppDeviceEntryMessageViewModel, - chipbarCoordinator: ChipbarCoordinator, + occludingAppDeviceEntryMessageViewModel: OccludingAppDeviceEntryMessageViewModel?, + chipbarCoordinator: ChipbarCoordinator?, screenOffAnimationController: ScreenOffAnimationController, shadeInteractor: ShadeInteractor, clockInteractor: KeyguardClockInteractor, @@ -121,11 +122,7 @@ object KeyguardRootViewBinder { } val burnInParams = MutableStateFlow(BurnInParameters()) - val viewState = - ViewStateAccessor( - alpha = { view.alpha }, - ) - + val viewState = ViewStateAccessor(alpha = { view.alpha }) disposables += view.repeatWhenAttached { repeatOnLifecycle(Lifecycle.State.CREATED) { @@ -145,17 +142,17 @@ object KeyguardRootViewBinder { ) } launch { - occludingAppDeviceEntryMessageViewModel.message.collect { biometricMessage + occludingAppDeviceEntryMessageViewModel?.message?.collect { biometricMessage -> if (biometricMessage?.message != null) { - chipbarCoordinator.displayView( + chipbarCoordinator!!.displayView( createChipbarInfo( biometricMessage.message, R.drawable.ic_lock, ) ) } else { - chipbarCoordinator.removeView(ID, "occludingAppMsgNull") + chipbarCoordinator!!.removeView(ID, "occludingAppMsgNull") } } } diff --git a/packages/SystemUI/src/com/android/systemui/keyguard/ui/view/layout/sections/ClockSection.kt b/packages/SystemUI/src/com/android/systemui/keyguard/ui/view/layout/sections/ClockSection.kt index 78a1fcfe4258..ef2927096c04 100644 --- a/packages/SystemUI/src/com/android/systemui/keyguard/ui/view/layout/sections/ClockSection.kt +++ b/packages/SystemUI/src/com/android/systemui/keyguard/ui/view/layout/sections/ClockSection.kt @@ -31,7 +31,7 @@ import androidx.constraintlayout.widget.ConstraintSet.START import androidx.constraintlayout.widget.ConstraintSet.TOP import androidx.constraintlayout.widget.ConstraintSet.VISIBLE import androidx.constraintlayout.widget.ConstraintSet.WRAP_CONTENT -import com.android.systemui.customization.R as customizationR +import com.android.systemui.customization.R as custR import com.android.systemui.keyguard.MigrateClocksToBlueprint import com.android.systemui.keyguard.domain.interactor.KeyguardBlueprintInteractor import com.android.systemui.keyguard.domain.interactor.KeyguardClockInteractor @@ -56,7 +56,7 @@ internal fun ConstraintSet.setAlpha( alpha: Float, ) = views.forEach { view -> this.setAlpha(view.id, alpha) } -open class ClockSection +class ClockSection @Inject constructor( private val clockInteractor: KeyguardClockInteractor, @@ -66,7 +66,6 @@ constructor( val blueprintInteractor: Lazy<KeyguardBlueprintInteractor>, ) : KeyguardSection() { override fun addViews(constraintLayout: ConstraintLayout) {} - override fun bindData(constraintLayout: ConstraintLayout) { if (!MigrateClocksToBlueprint.isEnabled) { return @@ -106,21 +105,18 @@ constructor( setVisibility(getNonTargetClockFace(clock).views, GONE) setAlpha(getTargetClockFace(clock).views, 1F) setAlpha(getNonTargetClockFace(clock).views, 0F) - if (!keyguardClockViewModel.useLargeClock) { + if (!keyguardClockViewModel.isLargeClockVisible.value) { connect(sharedR.id.bc_smartspace_view, TOP, sharedR.id.date_smartspace_view, BOTTOM) } } } private fun getTargetClockFace(clock: ClockController): ClockFaceLayout = - if (keyguardClockViewModel.useLargeClock) getLargeClockFace(clock) - else getSmallClockFace(clock) + if (keyguardClockViewModel.isLargeClockVisible.value) clock.largeClock.layout + else clock.smallClock.layout private fun getNonTargetClockFace(clock: ClockController): ClockFaceLayout = - if (keyguardClockViewModel.useLargeClock) getSmallClockFace(clock) - else getLargeClockFace(clock) - - private fun getLargeClockFace(clock: ClockController): ClockFaceLayout = clock.largeClock.layout - private fun getSmallClockFace(clock: ClockController): ClockFaceLayout = clock.smallClock.layout + if (keyguardClockViewModel.isLargeClockVisible.value) clock.smallClock.layout + else clock.largeClock.layout fun constrainWeatherClockDateIconsBarrier(constraints: ConstraintSet) { constraints.apply { @@ -159,27 +155,27 @@ constructor( connect(R.id.lockscreen_clock_view_large, START, PARENT_ID, START) connect(R.id.lockscreen_clock_view_large, END, guideline, END) connect(R.id.lockscreen_clock_view_large, BOTTOM, R.id.device_entry_icon_view, TOP) - var largeClockTopMargin = KeyguardClockViewModel.getLargeClockTopMargin(context) - largeClockTopMargin += getDimen(DATE_WEATHER_VIEW_HEIGHT) - largeClockTopMargin += getDimen(ENHANCED_SMARTSPACE_HEIGHT) - + val largeClockTopMargin = + keyguardClockViewModel.getLargeClockTopMargin() + + getDimen(DATE_WEATHER_VIEW_HEIGHT) + + getDimen(ENHANCED_SMARTSPACE_HEIGHT) connect(R.id.lockscreen_clock_view_large, TOP, PARENT_ID, TOP, largeClockTopMargin) constrainWidth(R.id.lockscreen_clock_view_large, WRAP_CONTENT) constrainHeight(R.id.lockscreen_clock_view_large, MATCH_CONSTRAINT) constrainWidth(R.id.lockscreen_clock_view, WRAP_CONTENT) constrainHeight( R.id.lockscreen_clock_view, - context.resources.getDimensionPixelSize(customizationR.dimen.small_clock_height) + context.resources.getDimensionPixelSize(custR.dimen.small_clock_height) ) connect( R.id.lockscreen_clock_view, START, PARENT_ID, START, - context.resources.getDimensionPixelSize(customizationR.dimen.clock_padding_start) + + context.resources.getDimensionPixelSize(custR.dimen.clock_padding_start) + context.resources.getDimensionPixelSize(R.dimen.status_view_margin_horizontal) ) - val smallClockTopMargin = keyguardClockViewModel.getSmallClockTopMargin(context) + val smallClockTopMargin = keyguardClockViewModel.getSmallClockTopMargin() create(R.id.small_clock_guideline_top, ConstraintSet.HORIZONTAL_GUIDELINE) setGuidelineBegin(R.id.small_clock_guideline_top, smallClockTopMargin) connect(R.id.lockscreen_clock_view, TOP, R.id.small_clock_guideline_top, BOTTOM) diff --git a/packages/SystemUI/src/com/android/systemui/keyguard/ui/view/layout/sections/transitions/ClockSizeTransition.kt b/packages/SystemUI/src/com/android/systemui/keyguard/ui/view/layout/sections/transitions/ClockSizeTransition.kt index 91f76a4df771..0bc60c4b9543 100644 --- a/packages/SystemUI/src/com/android/systemui/keyguard/ui/view/layout/sections/transitions/ClockSizeTransition.kt +++ b/packages/SystemUI/src/com/android/systemui/keyguard/ui/view/layout/sections/transitions/ClockSizeTransition.kt @@ -223,9 +223,10 @@ class ClockSizeTransition( duration = CLOCK_IN_MILLIS startDelay = CLOCK_IN_START_DELAY_MILLIS interpolator = CLOCK_IN_INTERPOLATOR - captureSmartspace = !viewModel.useLargeClock && smartspaceViewModel.isSmartspaceEnabled + captureSmartspace = + !viewModel.isLargeClockVisible.value && smartspaceViewModel.isSmartspaceEnabled - if (viewModel.useLargeClock) { + if (viewModel.isLargeClockVisible.value) { viewModel.currentClock.value?.let { it.largeClock.layout.views.forEach { addTarget(it) } } @@ -248,7 +249,7 @@ class ClockSizeTransition( fromBounds.left = toBounds.left fromBounds.right = toBounds.right - if (viewModel.useLargeClock) { + if (viewModel.isLargeClockVisible.value) { // Large clock shouldn't move fromBounds.top = toBounds.top fromBounds.bottom = toBounds.bottom @@ -283,9 +284,10 @@ class ClockSizeTransition( init { duration = CLOCK_OUT_MILLIS interpolator = CLOCK_OUT_INTERPOLATOR - captureSmartspace = viewModel.useLargeClock && smartspaceViewModel.isSmartspaceEnabled + captureSmartspace = + viewModel.isLargeClockVisible.value && smartspaceViewModel.isSmartspaceEnabled - if (viewModel.useLargeClock) { + if (viewModel.isLargeClockVisible.value) { addTarget(R.id.lockscreen_clock_view) } else { viewModel.currentClock.value?.let { @@ -308,7 +310,7 @@ class ClockSizeTransition( toBounds.left = fromBounds.left toBounds.right = fromBounds.right - if (!viewModel.useLargeClock) { + if (!viewModel.isLargeClockVisible.value) { // Large clock shouldn't move toBounds.top = fromBounds.top toBounds.bottom = fromBounds.bottom @@ -341,7 +343,7 @@ class ClockSizeTransition( ) : VisibilityBoundsTransition() { init { duration = - if (viewModel.useLargeClock) STATUS_AREA_MOVE_UP_MILLIS + if (viewModel.isLargeClockVisible.value) STATUS_AREA_MOVE_UP_MILLIS else STATUS_AREA_MOVE_DOWN_MILLIS interpolator = Interpolators.EMPHASIZED addTarget(sharedR.id.date_smartspace_view) diff --git a/packages/SystemUI/src/com/android/systemui/keyguard/ui/viewmodel/AodBurnInViewModel.kt b/packages/SystemUI/src/com/android/systemui/keyguard/ui/viewmodel/AodBurnInViewModel.kt index d4844e2af335..644bea0b762d 100644 --- a/packages/SystemUI/src/com/android/systemui/keyguard/ui/viewmodel/AodBurnInViewModel.kt +++ b/packages/SystemUI/src/com/android/systemui/keyguard/ui/viewmodel/AodBurnInViewModel.kt @@ -21,7 +21,6 @@ package com.android.systemui.keyguard.ui.viewmodel import android.util.Log import android.util.MathUtils import com.android.app.animation.Interpolators -import com.android.keyguard.KeyguardClockSwitch import com.android.systemui.common.ui.domain.interactor.ConfigurationInteractor import com.android.systemui.dagger.SysUISingleton import com.android.systemui.keyguard.MigrateClocksToBlueprint @@ -29,6 +28,7 @@ import com.android.systemui.keyguard.domain.interactor.BurnInInteractor import com.android.systemui.keyguard.domain.interactor.KeyguardInteractor import com.android.systemui.keyguard.domain.interactor.KeyguardTransitionInteractor import com.android.systemui.keyguard.shared.model.BurnInModel +import com.android.systemui.keyguard.shared.model.ClockSize import com.android.systemui.keyguard.ui.StateToValue import com.android.systemui.res.R import javax.inject.Inject @@ -124,7 +124,7 @@ constructor( clock.config.useAlternateSmartspaceAODTransition } == true val useScaleOnly = - useAltAod && keyguardClockViewModel.clockSize.value == KeyguardClockSwitch.LARGE + useAltAod && keyguardClockViewModel.clockSize.value == ClockSize.LARGE if (useScaleOnly) { BurnInModel( diff --git a/packages/SystemUI/src/com/android/systemui/keyguard/ui/viewmodel/KeyguardBlueprintViewModel.kt b/packages/SystemUI/src/com/android/systemui/keyguard/ui/viewmodel/KeyguardBlueprintViewModel.kt index edd331882896..b1f189836903 100644 --- a/packages/SystemUI/src/com/android/systemui/keyguard/ui/viewmodel/KeyguardBlueprintViewModel.kt +++ b/packages/SystemUI/src/com/android/systemui/keyguard/ui/viewmodel/KeyguardBlueprintViewModel.kt @@ -18,7 +18,6 @@ package com.android.systemui.keyguard.ui.viewmodel import com.android.systemui.keyguard.domain.interactor.KeyguardBlueprintInteractor -import com.android.systemui.keyguard.shared.model.KeyguardBlueprint import javax.inject.Inject class KeyguardBlueprintViewModel @@ -26,7 +25,7 @@ class KeyguardBlueprintViewModel constructor( keyguardBlueprintInteractor: KeyguardBlueprintInteractor, ) { - var currentBluePrint: KeyguardBlueprint? = null val blueprint = keyguardBlueprintInteractor.blueprint + val blueprintId = keyguardBlueprintInteractor.blueprintId val refreshTransition = keyguardBlueprintInteractor.refreshTransition } diff --git a/packages/SystemUI/src/com/android/systemui/keyguard/ui/viewmodel/KeyguardClockViewModel.kt b/packages/SystemUI/src/com/android/systemui/keyguard/ui/viewmodel/KeyguardClockViewModel.kt index a6d3312fd6d2..1f544c140d2e 100644 --- a/packages/SystemUI/src/com/android/systemui/keyguard/ui/viewmodel/KeyguardClockViewModel.kt +++ b/packages/SystemUI/src/com/android/systemui/keyguard/ui/viewmodel/KeyguardClockViewModel.kt @@ -16,25 +16,26 @@ package com.android.systemui.keyguard.ui.viewmodel -import android.content.Context +import android.content.res.Resources import androidx.annotation.VisibleForTesting import androidx.constraintlayout.helper.widget.Layer -import com.android.internal.policy.SystemBarUtils -import com.android.keyguard.KeyguardClockSwitch.LARGE -import com.android.keyguard.KeyguardClockSwitch.SMALL -import com.android.systemui.customization.R as customizationR +import com.android.systemui.common.ui.domain.interactor.ConfigurationInteractor +import com.android.systemui.customization.R as customR import com.android.systemui.dagger.SysUISingleton import com.android.systemui.dagger.qualifiers.Application +import com.android.systemui.dagger.qualifiers.Main import com.android.systemui.keyguard.domain.interactor.KeyguardClockInteractor import com.android.systemui.keyguard.shared.ComposeLockscreen -import com.android.systemui.keyguard.shared.model.SettingsClockSize +import com.android.systemui.keyguard.shared.model.ClockSize +import com.android.systemui.keyguard.shared.model.ClockSizeSetting import com.android.systemui.res.R import com.android.systemui.shade.domain.interactor.ShadeInteractor import com.android.systemui.shade.shared.model.ShadeMode import com.android.systemui.statusbar.notification.domain.interactor.NotificationsKeyguardInteractor -import com.android.systemui.util.Utils +import com.android.systemui.statusbar.ui.SystemBarUtilsProxy import javax.inject.Inject import kotlinx.coroutines.CoroutineScope +import kotlinx.coroutines.flow.Flow import kotlinx.coroutines.flow.SharingStarted import kotlinx.coroutines.flow.StateFlow import kotlinx.coroutines.flow.combine @@ -49,43 +50,44 @@ constructor( @Application private val applicationScope: CoroutineScope, notifsKeyguardInteractor: NotificationsKeyguardInteractor, @get:VisibleForTesting val shadeInteractor: ShadeInteractor, + private val systemBarUtils: SystemBarUtilsProxy, + configurationInteractor: ConfigurationInteractor, + @Main private val resources: Resources, ) { var burnInLayer: Layer? = null - val useLargeClock: Boolean - get() = clockSize.value == LARGE - - val clockSize = - combine(keyguardClockInteractor.selectedClockSize, keyguardClockInteractor.clockSize) { - selectedSize, - clockSize -> - if (selectedSize == SettingsClockSize.SMALL) { - SMALL - } else { - clockSize - } + + val clockSize: StateFlow<ClockSize> = + combine( + keyguardClockInteractor.selectedClockSize, + keyguardClockInteractor.clockSize, + ) { selectedSize, clockSize -> + if (selectedSize == ClockSizeSetting.SMALL) ClockSize.SMALL else clockSize } .stateIn( scope = applicationScope, started = SharingStarted.WhileSubscribed(), - initialValue = LARGE, + initialValue = ClockSize.LARGE, ) - val isLargeClockVisible = + val isLargeClockVisible: StateFlow<Boolean> = clockSize - .map { it == LARGE } + .map { it == ClockSize.LARGE } .stateIn( scope = applicationScope, started = SharingStarted.WhileSubscribed(), - initialValue = false, + initialValue = true, ) val currentClock = keyguardClockInteractor.currentClock val hasCustomWeatherDataDisplay = - combine(clockSize, currentClock) { size, clock -> - clock?.let { - (if (size == LARGE) clock.largeClock.config.hasCustomWeatherDataDisplay - else clock.smallClock.config.hasCustomWeatherDataDisplay) + combine( + isLargeClockVisible, + currentClock, + ) { isLargeClock, clock -> + clock?.let { clock -> + val face = if (isLargeClock) clock.largeClock else clock.smallClock + face.config.hasCustomWeatherDataDisplay } ?: false } @@ -115,33 +117,28 @@ constructor( isLargeClockVisible, clockShouldBeCentered, shadeInteractor.shadeMode, - currentClock + currentClock, ) { isLargeClockVisible, clockShouldBeCentered, shadeMode, currentClock -> val shouldUseSplitShade = shadeMode == ShadeMode.Split if (currentClock?.config?.useCustomClockScene == true) { - val weatherClockLayout = - when { - shouldUseSplitShade && clockShouldBeCentered -> - ClockLayout.WEATHER_LARGE_CLOCK - shouldUseSplitShade && isLargeClockVisible -> - ClockLayout.SPLIT_SHADE_WEATHER_LARGE_CLOCK - shouldUseSplitShade -> ClockLayout.SPLIT_SHADE_SMALL_CLOCK - isLargeClockVisible -> ClockLayout.WEATHER_LARGE_CLOCK - else -> ClockLayout.SMALL_CLOCK - } - weatherClockLayout + when { + shouldUseSplitShade && clockShouldBeCentered -> + ClockLayout.WEATHER_LARGE_CLOCK + shouldUseSplitShade && isLargeClockVisible -> + ClockLayout.SPLIT_SHADE_WEATHER_LARGE_CLOCK + shouldUseSplitShade -> ClockLayout.SPLIT_SHADE_SMALL_CLOCK + isLargeClockVisible -> ClockLayout.WEATHER_LARGE_CLOCK + else -> ClockLayout.SMALL_CLOCK + } } else { - val clockLayout = - when { - shouldUseSplitShade && clockShouldBeCentered -> ClockLayout.LARGE_CLOCK - shouldUseSplitShade && isLargeClockVisible -> - ClockLayout.SPLIT_SHADE_LARGE_CLOCK - shouldUseSplitShade -> ClockLayout.SPLIT_SHADE_SMALL_CLOCK - isLargeClockVisible -> ClockLayout.LARGE_CLOCK - else -> ClockLayout.SMALL_CLOCK - } - - clockLayout + when { + shouldUseSplitShade && clockShouldBeCentered -> ClockLayout.LARGE_CLOCK + shouldUseSplitShade && isLargeClockVisible -> + ClockLayout.SPLIT_SHADE_LARGE_CLOCK + shouldUseSplitShade -> ClockLayout.SPLIT_SHADE_SMALL_CLOCK + isLargeClockVisible -> ClockLayout.LARGE_CLOCK + else -> ClockLayout.SMALL_CLOCK + } } } .stateIn( @@ -162,35 +159,35 @@ constructor( ) /** Calculates the top margin for the small clock. */ - fun getSmallClockTopMargin(context: Context): Int { - var topMargin: Int - val statusBarHeight = Utils.getStatusBarHeaderHeightKeyguard(context) - - if (shadeInteractor.shadeMode.value == ShadeMode.Split) { - topMargin = - context.resources.getDimensionPixelSize(R.dimen.keyguard_split_shade_top_margin) - if (ComposeLockscreen.isEnabled) { - topMargin -= statusBarHeight - } + fun getSmallClockTopMargin(): Int { + val statusBarHeight = systemBarUtils.getStatusBarHeaderHeightKeyguard() + return if (shadeInteractor.shadeMode.value == ShadeMode.Split) { + resources.getDimensionPixelSize(R.dimen.keyguard_split_shade_top_margin) - + if (ComposeLockscreen.isEnabled) statusBarHeight else 0 } else { - topMargin = context.resources.getDimensionPixelSize(R.dimen.keyguard_clock_top_margin) - if (!ComposeLockscreen.isEnabled) { - topMargin += statusBarHeight - } + resources.getDimensionPixelSize(R.dimen.keyguard_clock_top_margin) + + if (!ComposeLockscreen.isEnabled) statusBarHeight else 0 } - return topMargin } - companion object { - fun getLargeClockTopMargin(context: Context): Int { - return SystemBarUtils.getStatusBarHeight(context) + - context.resources.getDimensionPixelSize( - customizationR.dimen.small_clock_padding_top - ) + - context.resources.getDimensionPixelSize(R.dimen.keyguard_smartspace_top_offset) + val smallClockTopMargin = + combine( + configurationInteractor.onAnyConfigurationChange, + shadeInteractor.shadeMode, + ) { _, _ -> + getSmallClockTopMargin() } + + /** Calculates the top margin for the large clock. */ + fun getLargeClockTopMargin(): Int { + return systemBarUtils.getStatusBarHeight() + + resources.getDimensionPixelSize(customR.dimen.small_clock_padding_top) + + resources.getDimensionPixelSize(R.dimen.keyguard_smartspace_top_offset) } + val largeClockTopMargin: Flow<Int> = + configurationInteractor.onAnyConfigurationChange.map { getLargeClockTopMargin() } + enum class ClockLayout { LARGE_CLOCK, SMALL_CLOCK, diff --git a/packages/SystemUI/src/com/android/systemui/keyguard/ui/viewmodel/KeyguardPreviewClockViewModel.kt b/packages/SystemUI/src/com/android/systemui/keyguard/ui/viewmodel/KeyguardPreviewClockViewModel.kt index 730015202a21..3a825f225117 100644 --- a/packages/SystemUI/src/com/android/systemui/keyguard/ui/viewmodel/KeyguardPreviewClockViewModel.kt +++ b/packages/SystemUI/src/com/android/systemui/keyguard/ui/viewmodel/KeyguardPreviewClockViewModel.kt @@ -17,7 +17,7 @@ package com.android.systemui.keyguard.ui.viewmodel import com.android.systemui.keyguard.domain.interactor.KeyguardClockInteractor -import com.android.systemui.keyguard.shared.model.SettingsClockSize +import com.android.systemui.keyguard.shared.model.ClockSizeSetting import com.android.systemui.plugins.clocks.ClockController import javax.inject.Inject import kotlinx.coroutines.flow.Flow @@ -33,12 +33,12 @@ constructor( var shouldHighlightSelectedAffordance: Boolean = false val isLargeClockVisible: Flow<Boolean> = - interactor.selectedClockSize.map { it == SettingsClockSize.DYNAMIC } + interactor.selectedClockSize.map { it == ClockSizeSetting.DYNAMIC } val isSmallClockVisible: Flow<Boolean> = - interactor.selectedClockSize.map { it == SettingsClockSize.SMALL } + interactor.selectedClockSize.map { it == ClockSizeSetting.SMALL } val previewClock: Flow<ClockController> = interactor.previewClock - val selectedClockSize: StateFlow<SettingsClockSize?> = interactor.selectedClockSize + val selectedClockSize: StateFlow<ClockSizeSetting?> = interactor.selectedClockSize } diff --git a/packages/SystemUI/src/com/android/systemui/keyguard/ui/viewmodel/KeyguardPreviewSmartspaceViewModel.kt b/packages/SystemUI/src/com/android/systemui/keyguard/ui/viewmodel/KeyguardPreviewSmartspaceViewModel.kt index 528b14c6bbd7..0a8488624b85 100644 --- a/packages/SystemUI/src/com/android/systemui/keyguard/ui/viewmodel/KeyguardPreviewSmartspaceViewModel.kt +++ b/packages/SystemUI/src/com/android/systemui/keyguard/ui/viewmodel/KeyguardPreviewSmartspaceViewModel.kt @@ -18,7 +18,7 @@ package com.android.systemui.keyguard.ui.viewmodel import android.content.Context import com.android.systemui.keyguard.domain.interactor.KeyguardClockInteractor -import com.android.systemui.keyguard.shared.model.SettingsClockSize +import com.android.systemui.keyguard.shared.model.ClockSizeSetting import com.android.systemui.res.R import javax.inject.Inject import kotlinx.coroutines.flow.Flow @@ -35,7 +35,7 @@ constructor( val clockViewModel: KeyguardClockViewModel, ) { - val selectedClockSize: StateFlow<SettingsClockSize> = interactor.selectedClockSize + val selectedClockSize: StateFlow<ClockSizeSetting> = interactor.selectedClockSize val shouldHideSmartspace: Flow<Boolean> = combine( @@ -48,8 +48,8 @@ constructor( // TODO (b/284122375) This is temporary. We should use clockController // .largeClock.config.hasCustomWeatherDataDisplay instead, but // ClockRegistry.createCurrentClock is not reliable. - SettingsClockSize.DYNAMIC -> currentClockId == "DIGITAL_CLOCK_WEATHER" - SettingsClockSize.SMALL -> false + ClockSizeSetting.DYNAMIC -> currentClockId == "DIGITAL_CLOCK_WEATHER" + ClockSizeSetting.SMALL -> false } } diff --git a/packages/SystemUI/src/com/android/systemui/keyguard/ui/viewmodel/KeyguardSmartspaceViewModel.kt b/packages/SystemUI/src/com/android/systemui/keyguard/ui/viewmodel/KeyguardSmartspaceViewModel.kt index 9e7dbd410471..dc053aad7e2b 100644 --- a/packages/SystemUI/src/com/android/systemui/keyguard/ui/viewmodel/KeyguardSmartspaceViewModel.kt +++ b/packages/SystemUI/src/com/android/systemui/keyguard/ui/viewmodel/KeyguardSmartspaceViewModel.kt @@ -84,7 +84,7 @@ constructor( } /* trigger clock and smartspace constraints change when smartspace appears */ - var bcSmartspaceVisibility: StateFlow<Int> = smartspaceInteractor.bcSmartspaceVisibility + val bcSmartspaceVisibility: StateFlow<Int> = smartspaceInteractor.bcSmartspaceVisibility companion object { fun getSmartspaceStartMargin(context: Context): Int { diff --git a/packages/SystemUI/src/com/android/systemui/keyguard/ui/viewmodel/LockscreenContentViewModel.kt b/packages/SystemUI/src/com/android/systemui/keyguard/ui/viewmodel/LockscreenContentViewModel.kt index ecad1483ba61..c98f3b096578 100644 --- a/packages/SystemUI/src/com/android/systemui/keyguard/ui/viewmodel/LockscreenContentViewModel.kt +++ b/packages/SystemUI/src/com/android/systemui/keyguard/ui/viewmodel/LockscreenContentViewModel.kt @@ -17,13 +17,14 @@ package com.android.systemui.keyguard.ui.viewmodel import android.content.res.Resources -import com.android.keyguard.KeyguardClockSwitch +import com.android.internal.annotations.VisibleForTesting import com.android.keyguard.KeyguardClockSwitch.SMALL import com.android.systemui.biometrics.AuthController import com.android.systemui.dagger.SysUISingleton import com.android.systemui.dagger.qualifiers.Application import com.android.systemui.keyguard.domain.interactor.KeyguardBlueprintInteractor import com.android.systemui.keyguard.domain.interactor.KeyguardClockInteractor +import com.android.systemui.keyguard.shared.model.ClockSize import com.android.systemui.res.R import com.android.systemui.shade.domain.interactor.ShadeInteractor import com.android.systemui.shade.shared.model.ShadeMode @@ -49,12 +50,10 @@ constructor( @Application private val applicationScope: CoroutineScope, private val unfoldTransitionInteractor: UnfoldTransitionInteractor, ) { - private val clockSize = clockInteractor.clockSize + @VisibleForTesting val clockSize = clockInteractor.clockSize val isUdfpsVisible: Boolean get() = authController.isUdfpsSupported - val isLargeClockVisible: Boolean - get() = clockSize.value == KeyguardClockSwitch.LARGE val shouldUseSplitNotificationShade: StateFlow<Boolean> = shadeInteractor.shadeMode @@ -66,10 +65,11 @@ constructor( ) val areNotificationsVisible: StateFlow<Boolean> = - combine(clockSize, shouldUseSplitNotificationShade) { + combine( clockSize, - shouldUseSplitNotificationShade -> - clockSize == SMALL || shouldUseSplitNotificationShade + shouldUseSplitNotificationShade, + ) { clockSize, shouldUseSplitNotificationShade -> + clockSize == ClockSize.SMALL || shouldUseSplitNotificationShade } .stateIn( scope = applicationScope, @@ -95,7 +95,7 @@ constructor( ) fun getSmartSpacePaddingTop(resources: Resources): Int { - return if (isLargeClockVisible) { + return if (clockSize.value == ClockSize.LARGE) { resources.getDimensionPixelSize(R.dimen.keyguard_smartspace_top_offset) + resources.getDimensionPixelSize(R.dimen.keyguard_clock_top_margin) } else { diff --git a/packages/SystemUI/src/com/android/systemui/media/controls/data/repository/MediaFilterRepository.kt b/packages/SystemUI/src/com/android/systemui/media/controls/data/repository/MediaFilterRepository.kt index 7e57cf4af4a3..8ee3adcb46ef 100644 --- a/packages/SystemUI/src/com/android/systemui/media/controls/data/repository/MediaFilterRepository.kt +++ b/packages/SystemUI/src/com/android/systemui/media/controls/data/repository/MediaFilterRepository.kt @@ -52,16 +52,6 @@ class MediaFilterRepository @Inject constructor(private val systemClock: SystemC MutableStateFlow(LinkedHashMap()) val allUserEntries: StateFlow<Map<String, MediaData>> = _allUserEntries.asStateFlow() - private val _mediaDataLoadedStates: MutableStateFlow<List<MediaDataLoadingModel>> = - MutableStateFlow(mutableListOf()) - val mediaDataLoadedStates: StateFlow<List<MediaDataLoadingModel>> = - _mediaDataLoadedStates.asStateFlow() - - private val _recommendationsLoadingState: MutableStateFlow<SmartspaceMediaLoadingModel> = - MutableStateFlow(SmartspaceMediaLoadingModel.Unknown) - val recommendationsLoadingState: StateFlow<SmartspaceMediaLoadingModel> = - _recommendationsLoadingState.asStateFlow() - private val comparator = compareByDescending<MediaSortKeyModel> { it.isPlaying == true && it.playbackLocation == MediaData.PLAYBACK_LOCAL @@ -148,46 +138,15 @@ class MediaFilterRepository @Inject constructor(private val systemClock: SystemC } fun addMediaDataLoadingState(mediaDataLoadingModel: MediaDataLoadingModel) { - // Filter out previous loading state that has same [InstanceId]. - val loadedStates = - _mediaDataLoadedStates.value.filter { loadedModel -> - loadedModel !is MediaDataLoadingModel.Loaded || - !loadedModel.equalInstanceIds(mediaDataLoadingModel) - } - - _mediaDataLoadedStates.value = - loadedStates + - if (mediaDataLoadingModel is MediaDataLoadingModel.Loaded) { - listOf(mediaDataLoadingModel) - } else { - emptyList() - } - - addMediaLoadingToSortedMap(mediaDataLoadingModel) - } - - fun setRecommendationsLoadingState(smartspaceMediaLoadingModel: SmartspaceMediaLoadingModel) { - _recommendationsLoadingState.value = smartspaceMediaLoadingModel - - addRecsLoadingToSortedMap(smartspaceMediaLoadingModel) - } - - private fun addMediaLoadingToSortedMap(mediaDataLoadingModel: MediaDataLoadingModel) { - val instanceId = - when (mediaDataLoadingModel) { - is MediaDataLoadingModel.Loaded -> mediaDataLoadingModel.instanceId - is MediaDataLoadingModel.Removed -> mediaDataLoadingModel.instanceId - MediaDataLoadingModel.Unknown -> null - } val sortedMap = TreeMap<MediaSortKeyModel, MediaCommonModel>(comparator) sortedMap.putAll( _sortedMedia.value.filter { (_, commonModel) -> commonModel !is MediaCommonModel.MediaControl || - commonModel.instanceId != instanceId + commonModel.mediaLoadedModel.instanceId != mediaDataLoadingModel.instanceId } ) - _selectedUserEntries.value[instanceId]?.let { + _selectedUserEntries.value[mediaDataLoadingModel.instanceId]?.let { val sortKey = MediaSortKeyModel( isPrioritizedRec = false, @@ -202,51 +161,41 @@ class MediaFilterRepository @Inject constructor(private val systemClock: SystemC ) if (mediaDataLoadingModel is MediaDataLoadingModel.Loaded) { - sortedMap[sortKey] = MediaCommonModel.MediaControl(it.instanceId) + sortedMap[sortKey] = + MediaCommonModel.MediaControl(mediaDataLoadingModel, canBeRemoved(it)) } } _sortedMedia.value = sortedMap } - private fun addRecsLoadingToSortedMap( - smartspaceMediaLoadingModel: SmartspaceMediaLoadingModel - ) { - val isPrioritized: Boolean - val key: String? - when (smartspaceMediaLoadingModel) { - is SmartspaceMediaLoadingModel.Loaded -> { - isPrioritized = smartspaceMediaLoadingModel.isPrioritized - key = smartspaceMediaLoadingModel.key - } - is SmartspaceMediaLoadingModel.Removed -> { - isPrioritized = false - key = smartspaceMediaLoadingModel.key - } - SmartspaceMediaLoadingModel.Unknown -> { - isPrioritized = false - key = null + fun setRecommendationsLoadingState(smartspaceMediaLoadingModel: SmartspaceMediaLoadingModel) { + val isPrioritized = + when (smartspaceMediaLoadingModel) { + is SmartspaceMediaLoadingModel.Loaded -> smartspaceMediaLoadingModel.isPrioritized + else -> false } - } val sortedMap = TreeMap<MediaSortKeyModel, MediaCommonModel>(comparator) sortedMap.putAll( _sortedMedia.value.filter { (_, commonModel) -> - commonModel !is MediaCommonModel.MediaRecommendations || commonModel.key != key + commonModel !is MediaCommonModel.MediaRecommendations } ) - key?.let { - val sortKey = - MediaSortKeyModel( - isPrioritizedRec = isPrioritized, - isPlaying = false, - active = _smartspaceMediaData.value.isActive, - ) - if (smartspaceMediaLoadingModel is SmartspaceMediaLoadingModel.Loaded) { - sortedMap[sortKey] = MediaCommonModel.MediaRecommendations(key) - } + val sortKey = + MediaSortKeyModel( + isPrioritizedRec = isPrioritized, + isPlaying = false, + active = _smartspaceMediaData.value.isActive, + ) + if (smartspaceMediaLoadingModel is SmartspaceMediaLoadingModel.Loaded) { + sortedMap[sortKey] = MediaCommonModel.MediaRecommendations(smartspaceMediaLoadingModel) } _sortedMedia.value = sortedMap } + + private fun canBeRemoved(data: MediaData): Boolean { + return data.isPlaying?.let { !it } ?: data.isClearable && !data.active + } } diff --git a/packages/SystemUI/src/com/android/systemui/media/controls/domain/pipeline/interactor/MediaCarouselInteractor.kt b/packages/SystemUI/src/com/android/systemui/media/controls/domain/pipeline/interactor/MediaCarouselInteractor.kt index b04e93835418..dc2c6512deda 100644 --- a/packages/SystemUI/src/com/android/systemui/media/controls/domain/pipeline/interactor/MediaCarouselInteractor.kt +++ b/packages/SystemUI/src/com/android/systemui/media/controls/domain/pipeline/interactor/MediaCarouselInteractor.kt @@ -21,6 +21,7 @@ import android.media.MediaDescription import android.media.session.MediaSession import android.media.session.PlaybackState import android.service.notification.StatusBarNotification +import com.android.internal.logging.InstanceId import com.android.systemui.CoreStartable import com.android.systemui.dagger.SysUISingleton import com.android.systemui.dagger.qualifiers.Application @@ -35,20 +36,15 @@ import com.android.systemui.media.controls.domain.pipeline.MediaSessionBasedFilt import com.android.systemui.media.controls.domain.pipeline.MediaTimeoutListener import com.android.systemui.media.controls.domain.resume.MediaResumeListener import com.android.systemui.media.controls.shared.model.MediaCommonModel -import com.android.systemui.media.controls.shared.model.MediaDataLoadingModel -import com.android.systemui.media.controls.shared.model.SmartspaceMediaLoadingModel import com.android.systemui.media.controls.util.MediaControlsRefactorFlag import com.android.systemui.media.controls.util.MediaFlags import java.io.PrintWriter import javax.inject.Inject import kotlinx.coroutines.CoroutineScope import kotlinx.coroutines.ExperimentalCoroutinesApi -import kotlinx.coroutines.flow.Flow import kotlinx.coroutines.flow.SharingStarted import kotlinx.coroutines.flow.StateFlow import kotlinx.coroutines.flow.combine -import kotlinx.coroutines.flow.distinctUntilChanged -import kotlinx.coroutines.flow.map import kotlinx.coroutines.flow.mapLatest import kotlinx.coroutines.flow.stateIn @@ -82,8 +78,11 @@ constructor( (smartspaceMediaData.isActive && (smartspaceMediaData.isValid() || reactivatedKey != null)) } - .distinctUntilChanged() - .stateIn(applicationScope, SharingStarted.WhileSubscribed(), false) + .stateIn( + scope = applicationScope, + started = SharingStarted.WhileSubscribed(), + initialValue = false, + ) /** Are there any media entries we should display, including the recommendations? */ val hasAnyMediaOrRecommendation: StateFlow<Boolean> = @@ -98,34 +97,41 @@ constructor( smartspaceMediaData.isActive && smartspaceMediaData.isValid() }) } - .distinctUntilChanged() - .stateIn(applicationScope, SharingStarted.WhileSubscribed(), false) + .stateIn( + scope = applicationScope, + started = SharingStarted.WhileSubscribed(), + initialValue = false, + ) /** Are there any media notifications active, excluding the recommendations? */ val hasActiveMedia: StateFlow<Boolean> = mediaFilterRepository.selectedUserEntries .mapLatest { entries -> entries.any { it.value.active } } - .distinctUntilChanged() - .stateIn(applicationScope, SharingStarted.WhileSubscribed(), false) + .stateIn( + scope = applicationScope, + started = SharingStarted.WhileSubscribed(), + initialValue = false, + ) /** Are there any media notifications, excluding the recommendations? */ val hasAnyMedia: StateFlow<Boolean> = mediaFilterRepository.selectedUserEntries .mapLatest { entries -> entries.isNotEmpty() } - .distinctUntilChanged() - .stateIn(applicationScope, SharingStarted.WhileSubscribed(), false) - - /** The most recent list of loaded media controls. */ - val mediaDataLoadedStates: Flow<List<MediaDataLoadingModel>> = - mediaFilterRepository.mediaDataLoadedStates - - /** The most recent change to loaded media recommendations. */ - val recommendationsLoadingState: Flow<SmartspaceMediaLoadingModel> = - mediaFilterRepository.recommendationsLoadingState + .stateIn( + scope = applicationScope, + started = SharingStarted.WhileSubscribed(), + initialValue = false, + ) /** The most recent sorted set for user media instances */ - val sortedMedia: Flow<List<MediaCommonModel>> = - mediaFilterRepository.sortedMedia.map { it.values.toList() } + val sortedMedia: StateFlow<List<MediaCommonModel>> = + mediaFilterRepository.sortedMedia + .mapLatest { it.values.toList() } + .stateIn( + scope = applicationScope, + started = SharingStarted.WhileSubscribed(), + initialValue = emptyList(), + ) override fun start() { if (!mediaFlags.isMediaControlsRefactorEnabled()) { @@ -210,6 +216,10 @@ constructor( return mediaDataProcessor.dismissMediaData(key, delay) } + fun removeMediaControl(instanceId: InstanceId, delay: Long) { + mediaDataProcessor.dismissMediaData(instanceId, delay) + } + override fun dismissSmartspaceRecommendation(key: String, delay: Long) { return mediaDataProcessor.dismissSmartspaceRecommendation(key, delay) } diff --git a/packages/SystemUI/src/com/android/systemui/media/controls/domain/pipeline/interactor/MediaControlInteractor.kt b/packages/SystemUI/src/com/android/systemui/media/controls/domain/pipeline/interactor/MediaControlInteractor.kt index 74cd2fee94ec..c0bb628b23b8 100644 --- a/packages/SystemUI/src/com/android/systemui/media/controls/domain/pipeline/interactor/MediaControlInteractor.kt +++ b/packages/SystemUI/src/com/android/systemui/media/controls/domain/pipeline/interactor/MediaControlInteractor.kt @@ -43,14 +43,18 @@ import com.android.systemui.plugins.ActivityStarter import com.android.systemui.statusbar.NotificationLockscreenUserManager import com.android.systemui.statusbar.policy.KeyguardStateController import com.android.systemui.util.kotlin.pairwiseBy +import dagger.assisted.Assisted +import dagger.assisted.AssistedInject import kotlinx.coroutines.flow.Flow import kotlinx.coroutines.flow.distinctUntilChanged import kotlinx.coroutines.flow.map /** Encapsulates business logic for single media control. */ -class MediaControlInteractor( +class MediaControlInteractor +@AssistedInject +constructor( @Application applicationContext: Context, - private val instanceId: InstanceId, + @Assisted private val instanceId: InstanceId, repository: MediaFilterRepository, private val mediaDataProcessor: MediaDataProcessor, private val keyguardStateController: KeyguardStateController, diff --git a/packages/SystemUI/src/com/android/systemui/media/controls/domain/pipeline/interactor/factory/MediaControlInteractorFactory.kt b/packages/SystemUI/src/com/android/systemui/media/controls/domain/pipeline/interactor/factory/MediaControlInteractorFactory.kt new file mode 100644 index 000000000000..d5686008911d --- /dev/null +++ b/packages/SystemUI/src/com/android/systemui/media/controls/domain/pipeline/interactor/factory/MediaControlInteractorFactory.kt @@ -0,0 +1,30 @@ +/* + * Copyright (C) 2024 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.media.controls.domain.pipeline.interactor.factory + +import com.android.internal.logging.InstanceId +import com.android.systemui.dagger.SysUISingleton +import com.android.systemui.media.controls.domain.pipeline.interactor.MediaControlInteractor +import dagger.assisted.AssistedFactory + +/** Factory to create [MediaControlInteractor] for each media control. */ +@SysUISingleton +@AssistedFactory +interface MediaControlInteractorFactory { + + fun create(instanceId: InstanceId): MediaControlInteractor +} diff --git a/packages/SystemUI/src/com/android/systemui/media/controls/shared/model/MediaCommonModel.kt b/packages/SystemUI/src/com/android/systemui/media/controls/shared/model/MediaCommonModel.kt index 83e2765bc832..562fe7a9ca67 100644 --- a/packages/SystemUI/src/com/android/systemui/media/controls/shared/model/MediaCommonModel.kt +++ b/packages/SystemUI/src/com/android/systemui/media/controls/shared/model/MediaCommonModel.kt @@ -16,11 +16,13 @@ package com.android.systemui.media.controls.shared.model -import com.android.internal.logging.InstanceId - /** Models any type of media. */ sealed class MediaCommonModel { - data class MediaControl(val instanceId: InstanceId) : MediaCommonModel() + data class MediaControl( + val mediaLoadedModel: MediaDataLoadingModel.Loaded, + val canBeRemoved: Boolean = false + ) : MediaCommonModel() - data class MediaRecommendations(val key: String) : MediaCommonModel() + data class MediaRecommendations(val recsLoadingModel: SmartspaceMediaLoadingModel) : + MediaCommonModel() } diff --git a/packages/SystemUI/src/com/android/systemui/media/controls/shared/model/MediaDataLoadingModel.kt b/packages/SystemUI/src/com/android/systemui/media/controls/shared/model/MediaDataLoadingModel.kt index bd42a4df7262..170f1f78a5a6 100644 --- a/packages/SystemUI/src/com/android/systemui/media/controls/shared/model/MediaDataLoadingModel.kt +++ b/packages/SystemUI/src/com/android/systemui/media/controls/shared/model/MediaDataLoadingModel.kt @@ -20,27 +20,17 @@ import com.android.internal.logging.InstanceId /** Models media data loading state. */ sealed class MediaDataLoadingModel { - /** The initial loading state when no media data has yet loaded. */ - data object Unknown : MediaDataLoadingModel() + + abstract val instanceId: InstanceId /** Media data has been loaded. */ data class Loaded( - val instanceId: InstanceId, + override val instanceId: InstanceId, val immediatelyUpdateUi: Boolean = true, - ) : MediaDataLoadingModel() { - - /** Returns true if [other] has the same instance id, false otherwise. */ - fun equalInstanceIds(other: MediaDataLoadingModel): Boolean { - return when (other) { - is Loaded -> other.instanceId == instanceId - is Removed -> other.instanceId == instanceId - Unknown -> false - } - } - } + ) : MediaDataLoadingModel() /** Media data has been removed. */ data class Removed( - val instanceId: InstanceId, + override val instanceId: InstanceId, ) : MediaDataLoadingModel() } diff --git a/packages/SystemUI/src/com/android/systemui/media/controls/shared/model/SmartspaceMediaLoadingModel.kt b/packages/SystemUI/src/com/android/systemui/media/controls/shared/model/SmartspaceMediaLoadingModel.kt index 6c1e536f8c02..90ddadf09d1d 100644 --- a/packages/SystemUI/src/com/android/systemui/media/controls/shared/model/SmartspaceMediaLoadingModel.kt +++ b/packages/SystemUI/src/com/android/systemui/media/controls/shared/model/SmartspaceMediaLoadingModel.kt @@ -18,18 +18,18 @@ package com.android.systemui.media.controls.shared.model /** Models smartspace media loading state. */ sealed class SmartspaceMediaLoadingModel { - /** The initial loading state when no smartspace media has yet loaded. */ - data object Unknown : SmartspaceMediaLoadingModel() + + abstract val key: String /** Smartspace media has been loaded. */ data class Loaded( - val key: String, + override val key: String, val isPrioritized: Boolean = false, ) : SmartspaceMediaLoadingModel() /** Smartspace media has been removed. */ data class Removed( - val key: String, + override val key: String, val immediatelyUpdateUi: Boolean = true, ) : SmartspaceMediaLoadingModel() } diff --git a/packages/SystemUI/src/com/android/systemui/media/controls/ui/controller/MediaCarouselController.kt b/packages/SystemUI/src/com/android/systemui/media/controls/ui/controller/MediaCarouselController.kt index d15d45a477d7..eb716d4c6eef 100644 --- a/packages/SystemUI/src/com/android/systemui/media/controls/ui/controller/MediaCarouselController.kt +++ b/packages/SystemUI/src/com/android/systemui/media/controls/ui/controller/MediaCarouselController.kt @@ -656,8 +656,14 @@ constructor( if (width == widthInSceneContainerPx && height == heightInSceneContainerPx) { return } + if (width <= 0 || height <= 0) { + // reject as invalid + return + } widthInSceneContainerPx = width heightInSceneContainerPx = height + mediaCarouselScrollHandler.playerWidthPlusPadding = + width + context.resources.getDimensionPixelSize(R.dimen.qs_media_padding) updatePlayers(recreateMedia = true) } diff --git a/packages/SystemUI/src/com/android/systemui/media/controls/ui/util/MediaViewModelCallback.kt b/packages/SystemUI/src/com/android/systemui/media/controls/ui/util/MediaViewModelCallback.kt new file mode 100644 index 000000000000..952b134c5e16 --- /dev/null +++ b/packages/SystemUI/src/com/android/systemui/media/controls/ui/util/MediaViewModelCallback.kt @@ -0,0 +1,67 @@ +/* + * Copyright (C) 2024 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.media.controls.ui.util + +import androidx.recyclerview.widget.DiffUtil +import com.android.systemui.media.controls.ui.viewmodel.MediaCommonViewModel + +/** A [DiffUtil.Callback] to calculate difference between old and new media view-model list. */ +class MediaViewModelCallback( + private val old: List<MediaCommonViewModel>, + private val new: List<MediaCommonViewModel>, +) : DiffUtil.Callback() { + + override fun getOldListSize(): Int { + return old.size + } + + override fun getNewListSize(): Int { + return new.size + } + + override fun areItemsTheSame(oldIndex: Int, newIndex: Int): Boolean { + val oldItem = old[oldIndex] + val newItem = new[newIndex] + return if ( + oldItem is MediaCommonViewModel.MediaControl && + newItem is MediaCommonViewModel.MediaControl + ) { + oldItem.instanceId == newItem.instanceId + } else { + oldItem is MediaCommonViewModel.MediaRecommendations && + newItem is MediaCommonViewModel.MediaRecommendations + } + } + + override fun areContentsTheSame(oldIndex: Int, newIndex: Int): Boolean { + val oldItem = old[oldIndex] + val newItem = new[newIndex] + return if ( + oldItem is MediaCommonViewModel.MediaControl && + newItem is MediaCommonViewModel.MediaControl + ) { + oldItem.immediatelyUpdateUi == newItem.immediatelyUpdateUi + } else if ( + oldItem is MediaCommonViewModel.MediaRecommendations && + newItem is MediaCommonViewModel.MediaRecommendations + ) { + oldItem.key == newItem.key && oldItem.loadingEnabled == newItem.loadingEnabled + } else { + false + } + } +} diff --git a/packages/SystemUI/src/com/android/systemui/media/controls/ui/util/MediaViewModelListUpdateCallback.kt b/packages/SystemUI/src/com/android/systemui/media/controls/ui/util/MediaViewModelListUpdateCallback.kt new file mode 100644 index 000000000000..c356ae2ae2b0 --- /dev/null +++ b/packages/SystemUI/src/com/android/systemui/media/controls/ui/util/MediaViewModelListUpdateCallback.kt @@ -0,0 +1,53 @@ +/* + * Copyright (C) 2024 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.media.controls.ui.util + +import androidx.recyclerview.widget.ListUpdateCallback +import com.android.systemui.media.controls.ui.viewmodel.MediaCommonViewModel + +/** A [ListUpdateCallback] to apply media events needed to reach the new state. */ +class MediaViewModelListUpdateCallback( + private val old: List<MediaCommonViewModel>, + private val new: List<MediaCommonViewModel>, + private val onAdded: (MediaCommonViewModel) -> Unit, + private val onUpdated: (MediaCommonViewModel) -> Unit, + private val onRemoved: (MediaCommonViewModel) -> Unit, + private val onMoved: (MediaCommonViewModel, Int, Int) -> Unit, +) : ListUpdateCallback { + + override fun onInserted(position: Int, count: Int) { + for (i in position until position + count) { + onAdded(new[i]) + } + } + + override fun onRemoved(position: Int, count: Int) { + for (i in position until position + count) { + onRemoved(old[i]) + } + } + + override fun onMoved(fromPosition: Int, toPosition: Int) { + onMoved(old[fromPosition], fromPosition, toPosition) + } + + override fun onChanged(position: Int, count: Int, payload: Any?) { + for (i in position until position + count) { + onUpdated(new[i]) + } + } +} diff --git a/packages/SystemUI/src/com/android/systemui/media/controls/ui/viewmodel/MediaCarouselViewModel.kt b/packages/SystemUI/src/com/android/systemui/media/controls/ui/viewmodel/MediaCarouselViewModel.kt new file mode 100644 index 000000000000..303a5e9f0fef --- /dev/null +++ b/packages/SystemUI/src/com/android/systemui/media/controls/ui/viewmodel/MediaCarouselViewModel.kt @@ -0,0 +1,207 @@ +/* + * Copyright (C) 2024 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.media.controls.ui.viewmodel + +import android.content.Context +import com.android.internal.logging.InstanceId +import com.android.systemui.dagger.SysUISingleton +import com.android.systemui.dagger.qualifiers.Application +import com.android.systemui.dagger.qualifiers.Background +import com.android.systemui.media.controls.domain.pipeline.interactor.MediaCarouselInteractor +import com.android.systemui.media.controls.domain.pipeline.interactor.factory.MediaControlInteractorFactory +import com.android.systemui.media.controls.shared.model.MediaCommonModel +import com.android.systemui.media.controls.util.MediaFlags +import com.android.systemui.media.controls.util.MediaUiEventLogger +import com.android.systemui.statusbar.notification.collection.provider.OnReorderingAllowedListener +import com.android.systemui.statusbar.notification.collection.provider.VisualStabilityProvider +import com.android.systemui.util.Utils +import com.android.systemui.utils.coroutines.flow.conflatedCallbackFlow +import javax.inject.Inject +import kotlinx.coroutines.CoroutineDispatcher +import kotlinx.coroutines.CoroutineScope +import kotlinx.coroutines.ExperimentalCoroutinesApi +import kotlinx.coroutines.channels.awaitClose +import kotlinx.coroutines.flow.SharingStarted +import kotlinx.coroutines.flow.StateFlow +import kotlinx.coroutines.flow.flatMapLatest +import kotlinx.coroutines.flow.map +import kotlinx.coroutines.flow.stateIn + +/** Models UI state and handles user inputs for media carousel */ +@SysUISingleton +class MediaCarouselViewModel +@Inject +constructor( + @Application private val applicationScope: CoroutineScope, + @Application private val applicationContext: Context, + @Background private val backgroundDispatcher: CoroutineDispatcher, + private val visualStabilityProvider: VisualStabilityProvider, + private val interactor: MediaCarouselInteractor, + private val controlInteractorFactory: MediaControlInteractorFactory, + private val recommendationsViewModel: MediaRecommendationsViewModel, + private val logger: MediaUiEventLogger, + private val mediaFlags: MediaFlags, +) { + + @OptIn(ExperimentalCoroutinesApi::class) + val mediaItems: StateFlow<List<MediaCommonViewModel>> = + conflatedCallbackFlow { + val listener = OnReorderingAllowedListener { trySend(Unit) } + visualStabilityProvider.addPersistentReorderingAllowedListener(listener) + trySend(Unit) + awaitClose { visualStabilityProvider.removeReorderingAllowedListener(listener) } + } + .flatMapLatest { + interactor.sortedMedia.map { sortedItems -> + buildList { + val reorderAllowed = isReorderingAllowed() + sortedItems.forEach { commonModel -> + if (!reorderAllowed || !modelsPendingRemoval.contains(commonModel)) { + when (commonModel) { + is MediaCommonModel.MediaControl -> + add(toViewModel(commonModel)) + is MediaCommonModel.MediaRecommendations -> + add(toViewModel(commonModel)) + } + } + } + if (reorderAllowed) { + modelsPendingRemoval.clear() + } + } + } + } + .stateIn( + scope = applicationScope, + started = SharingStarted.WhileSubscribed(), + initialValue = emptyList(), + ) + + private val mediaControlByInstanceId = + mutableMapOf<InstanceId, MediaCommonViewModel.MediaControl>() + + private var mediaRecs: MediaCommonViewModel.MediaRecommendations? = null + + private var modelsPendingRemoval: MutableSet<MediaCommonModel> = mutableSetOf() + + fun onSwipeToDismiss() { + logger.logSwipeDismiss() + interactor.onSwipeToDismiss() + } + + private fun toViewModel( + commonModel: MediaCommonModel.MediaControl + ): MediaCommonViewModel.MediaControl { + val instanceId = commonModel.mediaLoadedModel.instanceId + return mediaControlByInstanceId[instanceId]?.copy( + immediatelyUpdateUi = commonModel.mediaLoadedModel.immediatelyUpdateUi + ) + ?: MediaCommonViewModel.MediaControl( + instanceId = instanceId, + immediatelyUpdateUi = commonModel.mediaLoadedModel.immediatelyUpdateUi, + controlViewModel = createMediaControlViewModel(instanceId), + onAdded = { onMediaControlAddedOrUpdated(it, commonModel) }, + onRemoved = { _, _ -> + interactor.removeMediaControl(instanceId, delay = 0L) + mediaControlByInstanceId.remove(instanceId) + }, + onUpdated = { onMediaControlAddedOrUpdated(it, commonModel) }, + ) + .also { mediaControlByInstanceId[instanceId] = it } + } + + private fun createMediaControlViewModel(instanceId: InstanceId): MediaControlViewModel { + return MediaControlViewModel( + applicationScope = applicationScope, + applicationContext = applicationContext, + backgroundDispatcher = backgroundDispatcher, + interactor = controlInteractorFactory.create(instanceId), + logger = logger, + ) + } + + private fun toViewModel( + commonModel: MediaCommonModel.MediaRecommendations + ): MediaCommonViewModel.MediaRecommendations { + return mediaRecs?.copy( + key = commonModel.recsLoadingModel.key, + loadingEnabled = + interactor.isRecommendationActive() || mediaFlags.isPersistentSsCardEnabled() + ) + ?: MediaCommonViewModel.MediaRecommendations( + key = commonModel.recsLoadingModel.key, + loadingEnabled = + interactor.isRecommendationActive() || + mediaFlags.isPersistentSsCardEnabled(), + recsViewModel = recommendationsViewModel, + onAdded = { commonViewModel -> + onMediaRecommendationAddedOrUpdated(commonViewModel) + }, + onRemoved = { _, immediatelyRemove -> + onMediaRecommendationRemoved(commonModel, immediatelyRemove) + }, + onUpdated = { commonViewModel -> + onMediaRecommendationAddedOrUpdated(commonViewModel) + }, + ) + .also { mediaRecs = it } + } + + private fun onMediaControlAddedOrUpdated( + commonViewModel: MediaCommonViewModel, + commonModel: MediaCommonModel.MediaControl + ) { + // TODO (b/330897926) log smartspace card reported (SMARTSPACE_CARD_RECEIVED) + if (commonModel.canBeRemoved && !Utils.useMediaResumption(applicationContext)) { + // This media control is due for removal as it is now paused + timed out, and resumption + // setting is off. + if (isReorderingAllowed()) { + commonViewModel.onRemoved(commonViewModel, true) + } else { + modelsPendingRemoval.add(commonModel) + } + } else { + modelsPendingRemoval.remove(commonModel) + } + } + + private fun onMediaRecommendationAddedOrUpdated(commonViewModel: MediaCommonViewModel) { + if (!interactor.isRecommendationActive()) { + if (!mediaFlags.isPersistentSsCardEnabled()) { + commonViewModel.onRemoved(commonViewModel, true) + } + } else { + // TODO (b/330897926) log smartspace card reported (SMARTSPACE_CARD_RECEIVED) + } + } + + private fun onMediaRecommendationRemoved( + commonModel: MediaCommonModel.MediaRecommendations, + immediatelyRemove: Boolean + ) { + if (immediatelyRemove || isReorderingAllowed()) { + interactor.dismissSmartspaceRecommendation(commonModel.recsLoadingModel.key, 0L) + // TODO if not immediate remove update host visibility + } else { + modelsPendingRemoval.add(commonModel) + } + } + + private fun isReorderingAllowed(): Boolean { + return visualStabilityProvider.isReorderingAllowed + } +} diff --git a/packages/SystemUI/src/com/android/systemui/media/controls/ui/viewmodel/MediaCommonViewModel.kt b/packages/SystemUI/src/com/android/systemui/media/controls/ui/viewmodel/MediaCommonViewModel.kt new file mode 100644 index 000000000000..253f194a04eb --- /dev/null +++ b/packages/SystemUI/src/com/android/systemui/media/controls/ui/viewmodel/MediaCommonViewModel.kt @@ -0,0 +1,45 @@ +/* + * Copyright (C) 2024 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.media.controls.ui.viewmodel + +import com.android.internal.logging.InstanceId + +/** Models media view model UI state. */ +sealed class MediaCommonViewModel { + + abstract val onAdded: (MediaCommonViewModel) -> Unit + abstract val onRemoved: (MediaCommonViewModel, Boolean) -> Unit + abstract val onUpdated: (MediaCommonViewModel) -> Unit + + data class MediaControl( + val instanceId: InstanceId, + val immediatelyUpdateUi: Boolean, + val controlViewModel: MediaControlViewModel, + override val onAdded: (MediaCommonViewModel) -> Unit, + override val onRemoved: (MediaCommonViewModel, Boolean) -> Unit, + override val onUpdated: (MediaCommonViewModel) -> Unit, + ) : MediaCommonViewModel() + + data class MediaRecommendations( + val key: String, + val loadingEnabled: Boolean, + val recsViewModel: MediaRecommendationsViewModel, + override val onAdded: (MediaCommonViewModel) -> Unit, + override val onRemoved: (MediaCommonViewModel, Boolean) -> Unit, + override val onUpdated: (MediaCommonViewModel) -> Unit, + ) : MediaCommonViewModel() +} diff --git a/packages/SystemUI/src/com/android/systemui/media/controls/ui/viewmodel/MediaControlViewModel.kt b/packages/SystemUI/src/com/android/systemui/media/controls/ui/viewmodel/MediaControlViewModel.kt index d74506dc2e8d..52e49d6098f0 100644 --- a/packages/SystemUI/src/com/android/systemui/media/controls/ui/viewmodel/MediaControlViewModel.kt +++ b/packages/SystemUI/src/com/android/systemui/media/controls/ui/viewmodel/MediaControlViewModel.kt @@ -41,19 +41,21 @@ import com.android.systemui.monet.ColorScheme import com.android.systemui.monet.Style import com.android.systemui.res.R import com.android.systemui.util.kotlin.sample -import java.util.concurrent.Executor import kotlinx.coroutines.CoroutineDispatcher +import kotlinx.coroutines.CoroutineScope import kotlinx.coroutines.flow.Flow import kotlinx.coroutines.flow.MutableStateFlow import kotlinx.coroutines.flow.combine import kotlinx.coroutines.flow.distinctUntilChanged import kotlinx.coroutines.flow.flowOn +import kotlinx.coroutines.launch +import kotlinx.coroutines.withContext /** Models UI state and handles user input for a media control. */ class MediaControlViewModel( @Application private val applicationContext: Context, + @Application private val applicationScope: CoroutineScope, @Background private val backgroundDispatcher: CoroutineDispatcher, - @Background private val backgroundExecutor: Executor, private val interactor: MediaControlInteractor, private val logger: MediaUiEventLogger, ) { @@ -159,10 +161,12 @@ class MediaControlViewModel( if (model.isResume && model.resumeProgress != null) { seekBarViewModel.updateStaticProgress(model.resumeProgress) } else { - backgroundExecutor.execute { - seekBarViewModel.updateController( - model.token?.let { MediaController(applicationContext, it) } - ) + applicationScope.launch { + withContext(backgroundDispatcher) { + seekBarViewModel.updateController( + model.token?.let { MediaController(applicationContext, it) } + ) + } } } } diff --git a/packages/SystemUI/src/com/android/systemui/qs/ui/viewmodel/QuickSettingsSceneViewModel.kt b/packages/SystemUI/src/com/android/systemui/qs/ui/viewmodel/QuickSettingsSceneViewModel.kt index ab0b0b7b7c6c..c1986fa93dd9 100644 --- a/packages/SystemUI/src/com/android/systemui/qs/ui/viewmodel/QuickSettingsSceneViewModel.kt +++ b/packages/SystemUI/src/com/android/systemui/qs/ui/viewmodel/QuickSettingsSceneViewModel.kt @@ -18,10 +18,15 @@ package com.android.systemui.qs.ui.viewmodel import androidx.lifecycle.LifecycleOwner import com.android.compose.animation.scene.Back +import com.android.compose.animation.scene.Edge +import com.android.compose.animation.scene.SceneKey import com.android.compose.animation.scene.Swipe import com.android.compose.animation.scene.SwipeDirection +import com.android.compose.animation.scene.UserAction import com.android.compose.animation.scene.UserActionResult import com.android.systemui.dagger.SysUISingleton +import com.android.systemui.dagger.qualifiers.Application +import com.android.systemui.deviceentry.domain.interactor.DeviceEntryInteractor import com.android.systemui.qs.FooterActionsController import com.android.systemui.qs.footer.ui.viewmodel.FooterActionsViewModel import com.android.systemui.qs.ui.adapter.QSSceneAdapter @@ -32,38 +37,87 @@ import com.android.systemui.shade.ui.viewmodel.ShadeHeaderViewModel import com.android.systemui.statusbar.notification.stack.ui.viewmodel.NotificationsPlaceholderViewModel import java.util.concurrent.atomic.AtomicBoolean import javax.inject.Inject -import kotlinx.coroutines.flow.flatMapLatest -import kotlinx.coroutines.flow.flowOf -import kotlinx.coroutines.flow.map +import kotlinx.coroutines.CoroutineScope +import kotlinx.coroutines.ExperimentalCoroutinesApi +import kotlinx.coroutines.flow.SharingStarted +import kotlinx.coroutines.flow.StateFlow +import kotlinx.coroutines.flow.combine +import kotlinx.coroutines.flow.stateIn /** Models UI state and handles user input for the quick settings scene. */ @SysUISingleton class QuickSettingsSceneViewModel @Inject constructor( + @Application private val applicationScope: CoroutineScope, + deviceEntryInteractor: DeviceEntryInteractor, val brightnessMirrorViewModel: BrightnessMirrorViewModel, val shadeHeaderViewModel: ShadeHeaderViewModel, val qsSceneAdapter: QSSceneAdapter, val notifications: NotificationsPlaceholderViewModel, private val footerActionsViewModelFactory: FooterActionsViewModel.Factory, private val footerActionsController: FooterActionsController, - private val sceneInteractor: SceneInteractor, + sceneInteractor: SceneInteractor, ) { - val destinationScenes = - qsSceneAdapter.isCustomizing.flatMapLatest { customizing -> - if (customizing) { - flowOf(emptyMap()) + @OptIn(ExperimentalCoroutinesApi::class) + val destinationScenes: StateFlow<Map<UserAction, UserActionResult>> = + combine( + deviceEntryInteractor.isUnlocked, + deviceEntryInteractor.canSwipeToEnter, + qsSceneAdapter.isCustomizing, + sceneInteractor.previousScene(ignored = Scenes.QuickSettings), + ) { isUnlocked, canSwipeToDismiss, isCustomizing, previousScene -> + destinationScenes( + isUnlocked, + canSwipeToDismiss, + isCustomizing, + previousScene, + ) + } + .stateIn( + scope = applicationScope, + started = SharingStarted.WhileSubscribed(), + initialValue = + destinationScenes( + isUnlocked = deviceEntryInteractor.isUnlocked.value, + canSwipeToDismiss = deviceEntryInteractor.canSwipeToEnter.value, + isCustomizing = qsSceneAdapter.isCustomizing.value, + previousScene = sceneInteractor + .previousScene(ignored = Scenes.QuickSettings).value, + ), + ) + + private fun destinationScenes( + isUnlocked: Boolean, + canSwipeToDismiss: Boolean?, + isCustomizing: Boolean, + previousScene: SceneKey? + ): Map<UserAction, UserActionResult> { + val upBottomEdge = + when { + canSwipeToDismiss == true -> Scenes.Lockscreen + isUnlocked -> Scenes.Gone + else -> Scenes.Lockscreen + } + + return buildMap { + if (isCustomizing) { + // TODO(b/332749288) Empty map so there are no back handlers and back can close + // customizer + // TODO(b/330200163) Add an Up from Bottom to be able to collapse the shade // while customizing } else { - sceneInteractor.previousScene.map { previousScene -> - mapOf( - Back to UserActionResult(previousScene ?: Scenes.Shade), - Swipe(SwipeDirection.Up) to UserActionResult(previousScene ?: Scenes.Shade), - ) - } + this[Back] = UserActionResult(previousScene ?: Scenes.Shade) + this[Swipe(SwipeDirection.Up)] = UserActionResult(previousScene ?: Scenes.Shade) + this[ + Swipe( + fromSource = Edge.Bottom, + direction = SwipeDirection.Up, + )] = UserActionResult(upBottomEdge) } } + } private val footerActionsControllerInitialized = AtomicBoolean(false) diff --git a/packages/SystemUI/src/com/android/systemui/scene/domain/interactor/SceneInteractor.kt b/packages/SystemUI/src/com/android/systemui/scene/domain/interactor/SceneInteractor.kt index 02394552e8f9..8ced22223527 100644 --- a/packages/SystemUI/src/com/android/systemui/scene/domain/interactor/SceneInteractor.kt +++ b/packages/SystemUI/src/com/android/systemui/scene/domain/interactor/SceneInteractor.kt @@ -140,12 +140,31 @@ constructor( ) /** - * The previous scene. + * The previous scene (or `null` if the previous scene is the [ignored] scene). * * This is effectively the previous value of [currentScene] which means that all caveats, for * example regarding when in a transition the current scene changes, apply. + * + * @param ignored If the previous scene is the same as [ignored], `null` is emitted. This is + * designed to reduce the chances of a scene using [previousScene] naively to then set up a + * user action that ends up leading to itself, which is an illegal operation that would cause + * a crash. */ - val previousScene: StateFlow<SceneKey?> = repository.previousScene + fun previousScene( + ignored: SceneKey? = null, + ): StateFlow<SceneKey?> { + fun SceneKey?.nullifyIfIgnored(): SceneKey? { + return this?.takeIf { this != ignored } + } + + return repository.previousScene + .map { it.nullifyIfIgnored() } + .stateIn( + scope = applicationScope, + started = SharingStarted.WhileSubscribed(), + initialValue = repository.previousScene.value.nullifyIfIgnored(), + ) + } /** * Returns the keys of all scenes in the container. diff --git a/packages/SystemUI/src/com/android/systemui/scene/domain/startable/SceneContainerStartable.kt b/packages/SystemUI/src/com/android/systemui/scene/domain/startable/SceneContainerStartable.kt index 4774eb32a445..98b4ab88141c 100644 --- a/packages/SystemUI/src/com/android/systemui/scene/domain/startable/SceneContainerStartable.kt +++ b/packages/SystemUI/src/com/android/systemui/scene/domain/startable/SceneContainerStartable.kt @@ -253,7 +253,8 @@ constructor( // Track the previous scene (sans Bouncer), so that we know where to go when the device // is unlocked whilst on the bouncer. val previousScene = - sceneInteractor.previousScene + sceneInteractor + .previousScene() .filterNot { it == Scenes.Bouncer } .stateIn(this, SharingStarted.Eagerly, initialValue = null) deviceUnlockedInteractor.deviceUnlockStatus diff --git a/packages/SystemUI/src/com/android/systemui/scene/ui/viewmodel/SceneContainerViewModel.kt b/packages/SystemUI/src/com/android/systemui/scene/ui/viewmodel/SceneContainerViewModel.kt index 231b28424691..ef7829f91723 100644 --- a/packages/SystemUI/src/com/android/systemui/scene/ui/viewmodel/SceneContainerViewModel.kt +++ b/packages/SystemUI/src/com/android/systemui/scene/ui/viewmodel/SceneContainerViewModel.kt @@ -19,15 +19,22 @@ package com.android.systemui.scene.ui.viewmodel import android.view.MotionEvent import com.android.compose.animation.scene.ObservableTransitionState import com.android.compose.animation.scene.SceneKey +import com.android.compose.animation.scene.UserAction +import com.android.compose.animation.scene.UserActionResult import com.android.systemui.classifier.Classifier import com.android.systemui.classifier.domain.interactor.FalsingInteractor import com.android.systemui.dagger.SysUISingleton import com.android.systemui.power.domain.interactor.PowerInteractor import com.android.systemui.scene.domain.interactor.SceneInteractor +import com.android.systemui.scene.shared.model.Scene import com.android.systemui.scene.shared.model.Scenes +import com.android.systemui.utils.coroutines.flow.flatMapLatestConflated import javax.inject.Inject +import kotlinx.coroutines.CoroutineScope import kotlinx.coroutines.flow.Flow +import kotlinx.coroutines.flow.SharingStarted import kotlinx.coroutines.flow.StateFlow +import kotlinx.coroutines.flow.stateIn /** Models UI state for the scene container. */ @SysUISingleton @@ -37,6 +44,7 @@ constructor( private val sceneInteractor: SceneInteractor, private val falsingInteractor: FalsingInteractor, private val powerInteractor: PowerInteractor, + scenes: Set<@JvmSuppressWildcards Scene>, ) { /** * Keys of all scenes in the container. @@ -52,6 +60,23 @@ constructor( /** Whether the container is visible. */ val isVisible: StateFlow<Boolean> = sceneInteractor.isVisible + private val destinationScenesBySceneKey = + scenes.associate { scene -> scene.key to scene.destinationScenes } + + fun currentDestinationScenes( + scope: CoroutineScope, + ): StateFlow<Map<UserAction, UserActionResult>> { + return currentScene + .flatMapLatestConflated { currentSceneKey -> + checkNotNull(destinationScenesBySceneKey[currentSceneKey]) + } + .stateIn( + scope = scope, + started = SharingStarted.WhileSubscribed(), + initialValue = emptyMap(), + ) + } + /** * Binds the given flow so the system remembers it. * diff --git a/packages/SystemUI/src/com/android/systemui/screenshot/ScreenshotShelfViewProxy.kt b/packages/SystemUI/src/com/android/systemui/screenshot/ScreenshotShelfViewProxy.kt index 254c13367ce2..e2dc0928b823 100644 --- a/packages/SystemUI/src/com/android/systemui/screenshot/ScreenshotShelfViewProxy.kt +++ b/packages/SystemUI/src/com/android/systemui/screenshot/ScreenshotShelfViewProxy.kt @@ -42,6 +42,7 @@ import com.android.systemui.screenshot.ScreenshotEvent.SCREENSHOT_DISMISSED_OTHE import com.android.systemui.screenshot.scroll.ScrollCaptureController import com.android.systemui.screenshot.ui.ScreenshotAnimationController import com.android.systemui.screenshot.ui.ScreenshotShelfView +import com.android.systemui.screenshot.ui.SwipeGestureListener import com.android.systemui.screenshot.ui.binder.ScreenshotShelfViewBinder import com.android.systemui.screenshot.ui.viewmodel.ScreenshotViewModel import dagger.assisted.Assisted @@ -75,9 +76,17 @@ constructor( override var isPendingSharedTransition = false private val animationController = ScreenshotAnimationController(view) + private val swipeGestureListener = + SwipeGestureListener( + view, + onDismiss = { requestDismissal(ScreenshotEvent.SCREENSHOT_SWIPE_DISMISSED, it) }, + onCancel = { animationController.getSwipeReturnAnimation().start() } + ) init { - ScreenshotShelfViewBinder.bind(view, viewModel, LayoutInflater.from(context)) + ScreenshotShelfViewBinder.bind(view, viewModel, LayoutInflater.from(context)) { + swipeGestureListener.onMotionEvent(it) + } addPredictiveBackListener { requestDismissal(SCREENSHOT_DISMISSED_OTHER) } setOnKeyListener { requestDismissal(SCREENSHOT_DISMISSED_OTHER) } debugLog(DEBUG_WINDOW) { "adding OnComputeInternalInsetsListener" } @@ -111,6 +120,10 @@ constructor( override fun setChipIntents(imageData: SavedImageData) {} override fun requestDismissal(event: ScreenshotEvent?) { + requestDismissal(event, getDismissalVelocity()) + } + + private fun requestDismissal(event: ScreenshotEvent?, velocity: Float) { debugLog(DEBUG_DISMISS) { "screenshot dismissal requested: $event" } // If we're already animating out, don't restart the animation @@ -119,7 +132,7 @@ constructor( return } event?.let { logger.log(it, 0, packageName) } - val animator = animationController.getExitAnimation() + val animator = animationController.getSwipeDismissAnimation(velocity) animator.addListener( object : AnimatorListenerAdapter() { override fun onAnimationStart(animator: Animator) { @@ -222,6 +235,12 @@ constructor( ) } + private fun getDismissalVelocity(): Float { + val isLTR = view.resources.configuration.layoutDirection == View.LAYOUT_DIRECTION_LTR + // dismiss to the left in LTR locales, to the right in RTL + return if (isLTR) -1.5f else 1.5f + } + @AssistedFactory interface Factory : ScreenshotViewProxy.Factory { override fun getProxy(context: Context, displayId: Int): ScreenshotShelfViewProxy diff --git a/packages/SystemUI/src/com/android/systemui/screenshot/ui/ScreenshotAnimationController.kt b/packages/SystemUI/src/com/android/systemui/screenshot/ui/ScreenshotAnimationController.kt index 2c178736d9c4..f3c421e4896e 100644 --- a/packages/SystemUI/src/com/android/systemui/screenshot/ui/ScreenshotAnimationController.kt +++ b/packages/SystemUI/src/com/android/systemui/screenshot/ui/ScreenshotAnimationController.kt @@ -20,9 +20,12 @@ import android.animation.Animator import android.animation.AnimatorListenerAdapter import android.animation.ValueAnimator import android.view.View +import com.android.systemui.res.R +import kotlin.math.abs -class ScreenshotAnimationController(private val view: View) { +class ScreenshotAnimationController(private val view: ScreenshotShelfView) { private var animator: Animator? = null + private val actionContainer = view.requireViewById<View>(R.id.actions_container_background) fun getEntranceAnimation(): Animator { val animator = ValueAnimator.ofFloat(0f, 1f) @@ -41,19 +44,32 @@ class ScreenshotAnimationController(private val view: View) { return animator } - fun getExitAnimation(): Animator { - val animator = ValueAnimator.ofFloat(1f, 0f) - animator.addUpdateListener { view.alpha = it.animatedValue as Float } - animator.addListener( - object : AnimatorListenerAdapter() { - override fun onAnimationStart(animator: Animator) { - view.alpha = 1f - } - override fun onAnimationEnd(animator: Animator) { - view.alpha = 0f - } + fun getSwipeReturnAnimation(): Animator { + animator?.cancel() + val animator = ValueAnimator.ofFloat(view.translationX, 0f) + animator.addUpdateListener { view.translationX = it.animatedValue as Float } + this.animator = animator + return animator + } + + fun getSwipeDismissAnimation(velocity: Float): Animator { + val screenWidth = view.resources.displayMetrics.widthPixels + // translation at which point the visible UI is fully off the screen (in the direction + // according to velocity) + val endX = + if (velocity < 0) { + -1f * actionContainer.right + } else { + (screenWidth - actionContainer.left).toFloat() } - ) + val distance = endX - view.translationX + val animator = ValueAnimator.ofFloat(view.translationX, endX) + animator.addUpdateListener { + view.translationX = it.animatedValue as Float + view.alpha = 1f - it.animatedFraction + } + animator.duration = ((abs(distance / velocity))).toLong() + this.animator = animator return animator } diff --git a/packages/SystemUI/src/com/android/systemui/screenshot/ui/ScreenshotShelfView.kt b/packages/SystemUI/src/com/android/systemui/screenshot/ui/ScreenshotShelfView.kt index b7a03ef42245..16e23c54dfb2 100644 --- a/packages/SystemUI/src/com/android/systemui/screenshot/ui/ScreenshotShelfView.kt +++ b/packages/SystemUI/src/com/android/systemui/screenshot/ui/ScreenshotShelfView.kt @@ -21,6 +21,7 @@ import android.graphics.Insets import android.graphics.Rect import android.graphics.Region import android.util.AttributeSet +import android.view.MotionEvent import android.view.View import android.widget.ImageView import androidx.constraintlayout.widget.ConstraintLayout @@ -30,6 +31,7 @@ import com.android.systemui.screenshot.FloatingWindowUtil class ScreenshotShelfView(context: Context, attrs: AttributeSet? = null) : ConstraintLayout(context, attrs) { lateinit var screenshotPreview: ImageView + var onTouchInterceptListener: ((MotionEvent) -> Boolean)? = null private val displayMetrics = context.resources.displayMetrics private val tmpRect = Rect() @@ -83,4 +85,11 @@ class ScreenshotShelfView(context: Context, attrs: AttributeSet? = null) : companion object { private const val TOUCH_PADDING_DP = 12f } + + override fun onInterceptTouchEvent(ev: MotionEvent): Boolean { + if (onTouchInterceptListener?.invoke(ev) == true) { + return true + } + return super.onInterceptTouchEvent(ev) + } } diff --git a/packages/SystemUI/src/com/android/systemui/screenshot/ui/SwipeGestureListener.kt b/packages/SystemUI/src/com/android/systemui/screenshot/ui/SwipeGestureListener.kt new file mode 100644 index 000000000000..f2889602bc5d --- /dev/null +++ b/packages/SystemUI/src/com/android/systemui/screenshot/ui/SwipeGestureListener.kt @@ -0,0 +1,74 @@ +/* + * Copyright (C) 2024 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.screenshot.ui + +import android.view.MotionEvent +import android.view.VelocityTracker +import android.view.View +import com.android.systemui.screenshot.FloatingWindowUtil +import kotlin.math.abs +import kotlin.math.sign + +class SwipeGestureListener( + private val view: View, + private val onDismiss: (Float) -> Unit, + private val onCancel: () -> Unit +) { + private val velocityTracker = VelocityTracker.obtain() + private val displayMetrics = view.resources.displayMetrics + + private var startX = 0f + + fun onMotionEvent(ev: MotionEvent): Boolean { + ev.offsetLocation(view.translationX, 0f) + when (ev.actionMasked) { + MotionEvent.ACTION_DOWN -> { + velocityTracker.addMovement(ev) + startX = ev.rawX + } + MotionEvent.ACTION_UP -> { + velocityTracker.computeCurrentVelocity(1) + val xVelocity = velocityTracker.xVelocity + if ( + abs(xVelocity) > FloatingWindowUtil.dpToPx(displayMetrics, FLING_THRESHOLD_DP) + ) { + onDismiss.invoke(xVelocity) + return true + } else if ( + abs(view.translationX) > + FloatingWindowUtil.dpToPx(displayMetrics, DISMISS_THRESHOLD_DP) + ) { + onDismiss.invoke(1.5f * sign(view.translationX)) + return true + } else { + velocityTracker.clear() + onCancel.invoke() + } + } + MotionEvent.ACTION_MOVE -> { + velocityTracker.addMovement(ev) + view.translationX = ev.rawX - startX + } + } + return false + } + + companion object { + private const val DISMISS_THRESHOLD_DP = 80f + private const val FLING_THRESHOLD_DP = .8f // dp per ms + } +} diff --git a/packages/SystemUI/src/com/android/systemui/screenshot/ui/binder/ScreenshotShelfViewBinder.kt b/packages/SystemUI/src/com/android/systemui/screenshot/ui/binder/ScreenshotShelfViewBinder.kt index 5f835b3697a1..b8b9ce580796 100644 --- a/packages/SystemUI/src/com/android/systemui/screenshot/ui/binder/ScreenshotShelfViewBinder.kt +++ b/packages/SystemUI/src/com/android/systemui/screenshot/ui/binder/ScreenshotShelfViewBinder.kt @@ -17,8 +17,8 @@ package com.android.systemui.screenshot.ui.binder import android.view.LayoutInflater +import android.view.MotionEvent import android.view.View -import android.view.ViewGroup import android.widget.ImageView import android.widget.LinearLayout import androidx.lifecycle.Lifecycle @@ -26,16 +26,20 @@ import androidx.lifecycle.lifecycleScope import androidx.lifecycle.repeatOnLifecycle import com.android.systemui.lifecycle.repeatWhenAttached import com.android.systemui.res.R +import com.android.systemui.screenshot.ui.ScreenshotShelfView import com.android.systemui.screenshot.ui.viewmodel.ScreenshotViewModel import com.android.systemui.util.children import kotlinx.coroutines.launch object ScreenshotShelfViewBinder { fun bind( - view: ViewGroup, + view: ScreenshotShelfView, viewModel: ScreenshotViewModel, layoutInflater: LayoutInflater, + onTouchListener: (MotionEvent) -> Boolean, ) { + view.onTouchInterceptListener = onTouchListener + val previewView: ImageView = view.requireViewById(R.id.screenshot_preview) val previewBorder = view.requireViewById<View>(R.id.screenshot_preview_border) previewView.clipToOutline = true diff --git a/packages/SystemUI/src/com/android/systemui/shade/GlanceableHubContainerController.kt b/packages/SystemUI/src/com/android/systemui/shade/GlanceableHubContainerController.kt index 8f6b9d0d19e9..a8481cde8ff0 100644 --- a/packages/SystemUI/src/com/android/systemui/shade/GlanceableHubContainerController.kt +++ b/packages/SystemUI/src/com/android/systemui/shade/GlanceableHubContainerController.kt @@ -45,6 +45,7 @@ import com.android.systemui.res.R import com.android.systemui.scene.shared.model.SceneDataSourceDelegator import com.android.systemui.shade.domain.interactor.ShadeInteractor import com.android.systemui.statusbar.phone.SystemUIDialogFactory +import com.android.systemui.util.kotlin.BooleanFlowOperators.or import com.android.systemui.util.kotlin.collectFlow import javax.inject.Inject import kotlinx.coroutines.flow.Flow @@ -137,7 +138,8 @@ constructor( private var isDreaming = false /** Returns a flow that tracks whether communal hub is available. */ - fun communalAvailable(): Flow<Boolean> = communalInteractor.isCommunalAvailable + fun communalAvailable(): Flow<Boolean> = + or(communalInteractor.isCommunalAvailable, communalInteractor.editModeOpen) /** * Creates the container view containing the glanceable hub UI. diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/notification/icon/IconManager.kt b/packages/SystemUI/src/com/android/systemui/statusbar/notification/icon/IconManager.kt index 4ebb6998b8c7..271b0a86ca12 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/notification/icon/IconManager.kt +++ b/packages/SystemUI/src/com/android/systemui/statusbar/notification/icon/IconManager.kt @@ -39,13 +39,13 @@ import com.android.systemui.statusbar.notification.InflationException import com.android.systemui.statusbar.notification.collection.NotificationEntry import com.android.systemui.statusbar.notification.collection.notifcollection.CommonNotifCollection import com.android.systemui.statusbar.notification.collection.notifcollection.NotifCollectionListener +import java.util.concurrent.ConcurrentHashMap +import javax.inject.Inject +import kotlin.coroutines.CoroutineContext import kotlinx.coroutines.CoroutineScope import kotlinx.coroutines.Job import kotlinx.coroutines.launch import kotlinx.coroutines.withContext -import java.util.concurrent.ConcurrentHashMap -import javax.inject.Inject -import kotlin.coroutines.CoroutineContext /** * Inflates and updates icons associated with notifications @@ -239,8 +239,8 @@ constructor( val sbi = icon.toStatusBarIcon(entry) - // Cache if important conversation. - if (isImportantConversation(entry)) { + // Cache if important conversation or app icon. + if (isImportantConversation(entry) || android.app.Flags.notificationsUseAppIcon()) { if (showPeopleAvatar) { entry.icons.peopleAvatarDescriptor = sbi } else { diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/notification/icon/ui/viewbinder/StatusBarIconViewBinder.kt b/packages/SystemUI/src/com/android/systemui/statusbar/notification/icon/ui/viewbinder/StatusBarIconViewBinder.kt index bfeaced72162..2fdd2c6434cb 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/notification/icon/ui/viewbinder/StatusBarIconViewBinder.kt +++ b/packages/SystemUI/src/com/android/systemui/statusbar/notification/icon/ui/viewbinder/StatusBarIconViewBinder.kt @@ -20,6 +20,7 @@ import android.graphics.Rect import android.view.View import com.android.app.tracing.traceSection import com.android.internal.util.ContrastColorUtil +import com.android.systemui.Flags import com.android.systemui.res.R import com.android.systemui.statusbar.StatusBarIconView import com.android.systemui.statusbar.StatusBarIconView.NO_COLOR @@ -34,9 +35,12 @@ object StatusBarIconViewBinder { // view-model (which, at the time of this writing, does not yet exist). suspend fun bindColor(view: StatusBarIconView, color: Flow<Int>) { - color.collectTracingEach("SBIV#bindColor") { color -> - view.staticDrawableColor = color - view.setDecorColor(color) + // Don't change the icon color if an app icon experiment is enabled. + if (!android.app.Flags.notificationsUseAppIcon()) { + color.collectTracingEach("SBIV#bindColor") { color -> + view.staticDrawableColor = color + view.setDecorColor(color) + } } } @@ -53,12 +57,15 @@ object StatusBarIconViewBinder { iconColors: Flow<NotificationIconColors>, contrastColorUtil: ContrastColorUtil, ) { - iconColors.collectTracingEach("SBIV#bindIconColors") { colors -> - val isPreL = java.lang.Boolean.TRUE == view.getTag(R.id.icon_is_pre_L) - val isColorized = !isPreL || NotificationUtils.isGrayscale(view, contrastColorUtil) - view.staticDrawableColor = - if (isColorized) colors.staticDrawableColor(view.viewBounds) else NO_COLOR - view.setDecorColor(colors.tint) + // Don't change the icon color if an app icon experiment is enabled. + if (!android.app.Flags.notificationsUseAppIcon()) { + iconColors.collectTracingEach("SBIV#bindIconColors") { colors -> + val isPreL = java.lang.Boolean.TRUE == view.getTag(R.id.icon_is_pre_L) + val isColorized = !isPreL || NotificationUtils.isGrayscale(view, contrastColorUtil) + view.staticDrawableColor = + if (isColorized) colors.staticDrawableColor(view.viewBounds) else NO_COLOR + view.setDecorColor(colors.tint) + } } } } diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/notification/row/NotificationBackgroundView.java b/packages/SystemUI/src/com/android/systemui/statusbar/notification/row/NotificationBackgroundView.java index ed3a38d3305b..d0db5145e0ff 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/notification/row/NotificationBackgroundView.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/notification/row/NotificationBackgroundView.java @@ -53,6 +53,8 @@ public class NotificationBackgroundView extends View implements Dumpable { private int mTintColor; @Nullable private Integer mRippleColor; private final float[] mCornerRadii = new float[8]; + private final float[] mFocusOverlayCornerRadii = new float[8]; + private float mFocusOverlayStroke = 0; private boolean mBottomIsRounded; private boolean mBottomAmountClips = true; private int mActualHeight = -1; @@ -74,6 +76,7 @@ public class NotificationBackgroundView extends View implements Dumpable { R.color.notification_state_color_dark); mNormalColor = Utils.getColorAttrDefaultColor(mContext, com.android.internal.R.attr.materialColorSurfaceContainerHigh); + mFocusOverlayStroke = getResources().getDimension(R.dimen.notification_focus_stroke_width); } @Override @@ -290,14 +293,28 @@ public class NotificationBackgroundView extends View implements Dumpable { if (mDontModifyCorners) { return; } - if (mBackground instanceof LayerDrawable) { - int numberOfLayers = ((LayerDrawable) mBackground).getNumberOfLayers(); + if (mBackground instanceof LayerDrawable layerDrawable) { + int numberOfLayers = layerDrawable.getNumberOfLayers(); for (int i = 0; i < numberOfLayers; i++) { - GradientDrawable gradientDrawable = - (GradientDrawable) ((LayerDrawable) mBackground).getDrawable(i); + GradientDrawable gradientDrawable = (GradientDrawable) layerDrawable.getDrawable(i); gradientDrawable.setCornerRadii(mCornerRadii); } + updateFocusOverlayRadii(layerDrawable); + } + } + + private void updateFocusOverlayRadii(LayerDrawable background) { + GradientDrawable overlay = + (GradientDrawable) background.findDrawableByLayerId( + R.id.notification_focus_overlay); + for (int i = 0; i < mCornerRadii.length; i++) { + // in theory subtracting mFocusOverlayStroke/2 should be enough but notification + // background is still peeking a bit from below - probably due to antialiasing or + // overlay uneven scaling. So let's subtract full mFocusOverlayStroke to make sure the + // radius is a bit smaller and covers background corners fully + mFocusOverlayCornerRadii[i] = Math.max(0, mCornerRadii[i] - mFocusOverlayStroke); } + overlay.setCornerRadii(mFocusOverlayCornerRadii); } /** Set the current expand animation size. */ diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/notification/stack/NotificationStackScrollLayout.java b/packages/SystemUI/src/com/android/systemui/statusbar/notification/stack/NotificationStackScrollLayout.java index 8a1a4f1e4cd8..fd675866fa82 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/notification/stack/NotificationStackScrollLayout.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/notification/stack/NotificationStackScrollLayout.java @@ -482,7 +482,6 @@ public class NotificationStackScrollLayout private Interpolator mHideXInterpolator = Interpolators.FAST_OUT_SLOW_IN; private final NotificationSectionsManager mSectionsManager; - private boolean mAnimateBottomOnLayout; private float mLastSentAppear; private float mLastSentExpandedHeight; private boolean mWillExpand; @@ -2941,23 +2940,11 @@ public class NotificationStackScrollLayout } private void updateFirstAndLastBackgroundViews() { - NotificationSection firstSection = getFirstVisibleSection(); - NotificationSection lastSection = getLastVisibleSection(); - ExpandableView previousFirstChild = - firstSection == null ? null : firstSection.getFirstVisibleChild(); - ExpandableView previousLastChild = - lastSection == null ? null : lastSection.getLastVisibleChild(); - - ExpandableView firstChild = getFirstChildWithBackground(); ExpandableView lastChild = getLastChildWithBackground(); boolean sectionViewsChanged = mSectionsManager.updateFirstAndLastViewsForAllSections( mSections, getChildrenWithBackground()); - if (mAnimationsEnabled && mIsExpanded) { - } else { - } mAmbientState.setLastVisibleBackgroundChild(lastChild); - mAnimateBottomOnLayout = false; invalidate(); } @@ -5465,10 +5452,6 @@ public class NotificationStackScrollLayout } } - void setAnimateBottomOnLayout(boolean animateBottomOnLayout) { - mAnimateBottomOnLayout = animateBottomOnLayout; - } - public void setOnPulseHeightChangedListener(Runnable listener) { mAmbientState.setOnPulseHeightChangedListener(listener); } diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/notification/stack/NotificationStackScrollLayoutController.java b/packages/SystemUI/src/com/android/systemui/statusbar/notification/stack/NotificationStackScrollLayoutController.java index 5e719b1f0667..d8a16ce5a6e9 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/notification/stack/NotificationStackScrollLayoutController.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/notification/stack/NotificationStackScrollLayoutController.java @@ -306,10 +306,6 @@ public class NotificationStackScrollLayoutController implements Dumpable { }; private final DynamicPrivacyController.Listener mDynamicPrivacyControllerListener = () -> { - if (mView.isExpanded()) { - // The bottom might change because we're using the final actual height of the view - mView.setAnimateBottomOnLayout(true); - } if (!FooterViewRefactor.isEnabled()) { // Let's update the footer once the notifications have been updated (in the next frame) mView.post(this::updateFooter); diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/notification/stack/ui/viewmodel/NotificationScrollViewModel.kt b/packages/SystemUI/src/com/android/systemui/statusbar/notification/stack/ui/viewmodel/NotificationScrollViewModel.kt index 516ec319ceb9..4ae5e69dc8df 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/notification/stack/ui/viewmodel/NotificationScrollViewModel.kt +++ b/packages/SystemUI/src/com/android/systemui/statusbar/notification/stack/ui/viewmodel/NotificationScrollViewModel.kt @@ -22,11 +22,12 @@ import com.android.systemui.dagger.SysUISingleton import com.android.systemui.dump.DumpManager import com.android.systemui.scene.domain.interactor.SceneInteractor import com.android.systemui.scene.shared.model.Scenes -import com.android.systemui.scene.shared.model.Scenes.Shade import com.android.systemui.shade.domain.interactor.ShadeInteractor import com.android.systemui.statusbar.notification.stack.domain.interactor.NotificationStackAppearanceInteractor import com.android.systemui.statusbar.notification.stack.shared.model.ShadeScrimClipping import com.android.systemui.statusbar.notification.stack.shared.model.ShadeScrimShape +import com.android.systemui.statusbar.notification.stack.ui.viewmodel.NotificationTransitionThresholds.EXPANSION_FOR_DELAYED_STACK_FADE_IN +import com.android.systemui.statusbar.notification.stack.ui.viewmodel.NotificationTransitionThresholds.EXPANSION_FOR_MAX_SCRIM_ALPHA import com.android.systemui.util.kotlin.FlowDumperImpl import javax.inject.Inject import kotlinx.coroutines.flow.Flow @@ -52,8 +53,9 @@ constructor( val expandFraction: Flow<Float> = combine( shadeInteractor.shadeExpansion, + shadeInteractor.qsExpansion, sceneInteractor.transitionState, - ) { shadeExpansion, transitionState -> + ) { shadeExpansion, qsExpansion, transitionState -> when (transitionState) { is ObservableTransitionState.Idle -> { if (transitionState.scene == Scenes.Lockscreen) { @@ -70,6 +72,16 @@ constructor( transitionState.toScene == Scenes.Shade) ) { 1f + } else if ( + (transitionState.fromScene == Scenes.Gone || + transitionState.fromScene == Scenes.Lockscreen) && + transitionState.toScene == Scenes.QuickSettings + ) { + // during QS expansion, increase fraction at same rate as scrim alpha, + // but start when scrim alpha is at EXPANSION_FOR_DELAYED_STACK_FADE_IN. + (qsExpansion / EXPANSION_FOR_MAX_SCRIM_ALPHA - + EXPANSION_FOR_DELAYED_STACK_FADE_IN) + .coerceIn(0f, 1f) } else { shadeExpansion } @@ -125,5 +137,5 @@ constructor( /** Whether the notification stack is scrollable or not. */ val isScrollable: Flow<Boolean> = - sceneInteractor.currentScene.map { it == Shade }.dumpWhileCollecting("isScrollable") + sceneInteractor.currentScene.map { it == Scenes.Shade }.dumpWhileCollecting("isScrollable") } diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/notification/stack/ui/viewmodel/NotificationsPlaceholderViewModel.kt b/packages/SystemUI/src/com/android/systemui/statusbar/notification/stack/ui/viewmodel/NotificationsPlaceholderViewModel.kt index ca19da58a135..bf3b2c94ab7e 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/notification/stack/ui/viewmodel/NotificationsPlaceholderViewModel.kt +++ b/packages/SystemUI/src/com/android/systemui/statusbar/notification/stack/ui/viewmodel/NotificationsPlaceholderViewModel.kt @@ -93,10 +93,10 @@ constructor( val headsUpHeight: StateFlow<Float> = interactor.headsUpHeight.dumpValue("headsUpHeight") /** - * The amount [0-1] that the shade has been opened. At 0, the shade is closed; at 1, the shade - * is open. + * The amount [0-1] that the shade or quick settings has been opened. At 0, the shade is closed; + * at 1, either the shade or quick settings is open. */ - val expandFraction: Flow<Float> = shadeInteractor.shadeExpansion.dumpValue("expandFraction") + val expandFraction: Flow<Float> = shadeInteractor.anyExpansion.dumpValue("expandFraction") /** * The amount in px that the notification stack should scroll due to internal expansion. This @@ -111,3 +111,11 @@ constructor( interactor.setScrolledToTop(scrolledToTop) } } + +// Expansion fraction thresholds (between 0-1f) at which the corresponding value should be +// at its maximum, given they are at their minimum value at expansion = 0f. +object NotificationTransitionThresholds { + const val EXPANSION_FOR_MAX_CORNER_RADIUS = 0.1f + const val EXPANSION_FOR_MAX_SCRIM_ALPHA = 0.3f + const val EXPANSION_FOR_DELAYED_STACK_FADE_IN = 0.5f +} diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/notification/ui/viewbinder/HeadsUpNotificationViewBinder.kt b/packages/SystemUI/src/com/android/systemui/statusbar/notification/ui/viewbinder/HeadsUpNotificationViewBinder.kt index 6acb12a3e2af..52cb48be041f 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/notification/ui/viewbinder/HeadsUpNotificationViewBinder.kt +++ b/packages/SystemUI/src/com/android/systemui/statusbar/notification/ui/viewbinder/HeadsUpNotificationViewBinder.kt @@ -16,13 +16,12 @@ package com.android.systemui.statusbar.notification.ui.viewbinder -import android.util.Log -import com.android.systemui.common.coroutine.ConflatedCallbackFlow import com.android.systemui.statusbar.notification.row.ExpandableNotificationRow import com.android.systemui.statusbar.notification.shared.HeadsUpRowKey import com.android.systemui.statusbar.notification.stack.NotificationStackScrollLayout import com.android.systemui.statusbar.notification.stack.ui.viewmodel.NotificationListViewModel import com.android.systemui.util.kotlin.sample +import com.android.systemui.utils.coroutines.flow.conflatedCallbackFlow import javax.inject.Inject import kotlinx.coroutines.channels.awaitClose import kotlinx.coroutines.coroutineScope @@ -77,8 +76,7 @@ constructor(private val viewModel: NotificationListViewModel) { } private val NotificationStackScrollLayout.isHeadsUpAnimatingAway: Flow<Boolean> - get() = - ConflatedCallbackFlow.conflatedCallbackFlow { - setHeadsUpAnimatingAwayListener { animatingAway -> trySend(animatingAway) } - awaitClose { setHeadsUpAnimatingAwayListener(null) } - } + get() = conflatedCallbackFlow { + setHeadsUpAnimatingAwayListener { animatingAway -> trySend(animatingAway) } + awaitClose { setHeadsUpAnimatingAwayListener(null) } + } diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/pipeline/dagger/StatusBarPipelineModule.kt b/packages/SystemUI/src/com/android/systemui/statusbar/pipeline/dagger/StatusBarPipelineModule.kt index 6e24412fcff4..4129b3a8d9ec 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/pipeline/dagger/StatusBarPipelineModule.kt +++ b/packages/SystemUI/src/com/android/systemui/statusbar/pipeline/dagger/StatusBarPipelineModule.kt @@ -194,7 +194,7 @@ abstract class StatusBarPipelineModule { @SysUISingleton @MobileInputLog fun provideMobileInputLogBuffer(factory: LogBufferFactory): LogBuffer { - return factory.create("MobileInputLog", 100) + return factory.create("MobileInputLog", 300) } @Provides diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/policy/AvalancheController.kt b/packages/SystemUI/src/com/android/systemui/statusbar/policy/AvalancheController.kt index f5735300c30b..36c23d381844 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/policy/AvalancheController.kt +++ b/packages/SystemUI/src/com/android/systemui/statusbar/policy/AvalancheController.kt @@ -153,27 +153,45 @@ class AvalancheController @Inject constructor( // Use default duration, like we did before AvalancheController existed return autoDismissMs } - val showingList: MutableList<HeadsUpEntry> = mutableListOf() - headsUpEntryShowing?.let { showingList.add(it) } - + if (headsUpEntryShowing != null) { + showingList.add(headsUpEntryShowing!!) + } nextList.sort() val entryList = showingList + nextList - val thisEntryIndex = entryList.indexOf(entry) + if (entryList.isEmpty()) { + log { "No avalanche HUNs, use default ms: $autoDismissMs" } + return autoDismissMs + } + // entryList.indexOf(entry) returns -1 even when the entry is in entryList + var thisEntryIndex = -1 + for ((i, e) in entryList.withIndex()) { + if (e == entry) { + thisEntryIndex = i + } + } + if (thisEntryIndex == -1) { + log { "Untracked entry, use default ms: $autoDismissMs" } + return autoDismissMs + } val nextEntryIndex = thisEntryIndex + 1 // If last entry, use default duration if (nextEntryIndex >= entryList.size) { + log { "Last entry, use default ms: $autoDismissMs" } return autoDismissMs } val nextEntry = entryList[nextEntryIndex] if (nextEntry.compareNonTimeFields(entry) == -1) { // Next entry is higher priority + log { "Next entry is higher priority: 500ms" } return 500 } else if (nextEntry.compareNonTimeFields(entry) == 0) { // Next entry is same priority + log { "Next entry is same priority: 1000ms" } return 1000 } else { + log { "Next entry is lower priority, use default ms: $autoDismissMs" } return autoDismissMs } } diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/policy/SensitiveNotificationProtectionControllerImpl.java b/packages/SystemUI/src/com/android/systemui/statusbar/policy/SensitiveNotificationProtectionControllerImpl.java index 0d53277e51dc..40bb67f2e746 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/policy/SensitiveNotificationProtectionControllerImpl.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/policy/SensitiveNotificationProtectionControllerImpl.java @@ -34,6 +34,7 @@ import android.os.RemoteException; import android.os.Trace; import android.os.UserHandle; import android.service.notification.StatusBarNotification; +import android.telephony.TelephonyManager; import android.util.ArraySet; import android.util.Log; @@ -62,7 +63,10 @@ public class SensitiveNotificationProtectionControllerImpl private static final String LOG_TAG = "SNPC"; private final SensitiveNotificationProtectionControllerLogger mLogger; private final PackageManager mPackageManager; - private final ArraySet<String> mExemptPackages = new ArraySet<>(); + // Packages exempt from projection session protections (if they start a projection session) + private final ArraySet<String> mSessionProtectionExemptPackages = new ArraySet<>(); + // Packages exempt from individual notification protections (if they post a notification) + private final ArraySet<String> mNotificationProtectionExemptPackages = new ArraySet<>(); private final ListenerSet<Runnable> mListeners = new ListenerSet<>(); private volatile MediaProjectionInfo mProjection; private SensitiveNotificatioMediaProjectionSession mActiveMediaProjectionSession; @@ -161,6 +165,7 @@ public class SensitiveNotificationProtectionControllerImpl MediaProjectionManager mediaProjectionManager, IActivityManager activityManager, PackageManager packageManager, + TelephonyManager telephonyManager, @Main Handler mainHandler, @Background Executor bgExecutor, SensitiveNotificationProtectionControllerLogger logger) { @@ -191,26 +196,18 @@ public class SensitiveNotificationProtectionControllerImpl bgExecutor.execute(() -> developerOptionsObserver.onChange(true)); bgExecutor.execute(() -> { - ArraySet<String> exemptPackages = new ArraySet<>(); - // Exempt SystemUI - exemptPackages.add(context.getPackageName()); + ArraySet<String> sessionProtectionExemptPackages = + getSessionProtectionExemptPackages(context, activityManager); - // Exempt approved bug report handlers - try { - exemptPackages.addAll(activityManager.getBugreportWhitelistedPackages()); - } catch (RemoteException e) { - Log.e( - LOG_TAG, - "Error adding bug report handlers to exemption, continuing without", - e); - // silent failure, skip adding packages to exemption - } + ArraySet<String> notificationProtectionExemptPackages = + getNotificationProtectionExemptPackages(telephonyManager); // if currently projecting, notify listeners of exemption changes mainHandler.post(() -> { Trace.beginSection("SNPC.exemptPackagesUpdated"); try { - updateExemptPackagesAndNotifyListeners(exemptPackages); + updateExemptPackagesAndNotifyListeners(sessionProtectionExemptPackages, + notificationProtectionExemptPackages); } finally { Trace.endSection(); } @@ -220,15 +217,66 @@ public class SensitiveNotificationProtectionControllerImpl mediaProjectionManager.addCallback(mMediaProjectionCallback, mainHandler); } + @NonNull + private static ArraySet<String> getSessionProtectionExemptPackages(Context context, + IActivityManager activityManager) { + ArraySet<String> sessionProtectionExemptPackages = new ArraySet<>(); + // Exempt SystemUI + sessionProtectionExemptPackages.add(context.getPackageName()); + + // Exempt approved bug report handlers + try { + sessionProtectionExemptPackages.addAll( + activityManager.getBugreportWhitelistedPackages()); + } catch (RemoteException e) { + Log.w( + LOG_TAG, + "Error adding bug report handlers to exemption, continuing without", + e); + // silent failure, skip adding packages to exemption + } + return sessionProtectionExemptPackages; + } + + @NonNull + private static ArraySet<String> getNotificationProtectionExemptPackages( + TelephonyManager telephonyManager) { + ArraySet<String> notificationProtectionExemptPackages = new ArraySet<>(); + + // Get Emergency Assistance Package, all notifications from this package should not be + // hidden/redacted. + if (screenshareNotificationHidingBugFix()) { + try { + String emergencyAssistancePackageName = + telephonyManager.getEmergencyAssistancePackageName(); + if (emergencyAssistancePackageName != null) { + notificationProtectionExemptPackages.add(emergencyAssistancePackageName); + } + } catch (IllegalStateException e) { + Log.w( + LOG_TAG, + "Error adding emergency assistance package to exemption", + e); + // silent failure, skip adding packages to exemption + } + } + return notificationProtectionExemptPackages; + } + /** * Notify listeners of possible ProjectionState change regardless of current * isSensitiveStateActive value. Method used to ensure updates occur after mExemptPackages gets * updated, which directly changes the outcome of isSensitiveStateActive */ @MainThread - private void updateExemptPackagesAndNotifyListeners(ArraySet<String> exemptPackages) { + private void updateExemptPackagesAndNotifyListeners( + ArraySet<String> sessionProtectionExemptPackages, + ArraySet<String> notificationProtectionExemptPackages) { Assert.isMainThread(); - mExemptPackages.addAll(exemptPackages); + mSessionProtectionExemptPackages.addAll(sessionProtectionExemptPackages); + if (screenshareNotificationHidingBugFix()) { + mNotificationProtectionExemptPackages.addAll(notificationProtectionExemptPackages); + } if (mProjection != null) { updateProjectionStateAndNotifyListeners(mProjection); @@ -258,7 +306,8 @@ public class SensitiveNotificationProtectionControllerImpl if (mDisableScreenShareProtections) { Log.w(LOG_TAG, "Screen share protections disabled"); return null; - } else if (info != null && mExemptPackages.contains(info.getPackageName())) { + } else if (info != null + && mSessionProtectionExemptPackages.contains(info.getPackageName())) { Log.w(LOG_TAG, "Screen share protections exempt for package " + info.getPackageName()); return null; } else if (info != null && canRecordSensitiveContent(info.getPackageName())) { @@ -322,6 +371,11 @@ public class SensitiveNotificationProtectionControllerImpl return false; // do not hide/redact notifications from system uid } + if (screenshareNotificationHidingBugFix() + && mNotificationProtectionExemptPackages.contains(sbn.getPackageName())) { + return false; // do not hide/redact notifications from emergency app + } + // Only protect/redact notifications if the developer has not explicitly set notification // visibility as public and users has not adjusted default channel visibility to private boolean notificationRequestsRedaction = entry.isNotificationVisibilityPrivate(); diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/ui/SystemBarUtilsProxy.kt b/packages/SystemUI/src/com/android/systemui/statusbar/ui/SystemBarUtilsProxy.kt index 2b3fb70301e5..68bb6c3b45f8 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/ui/SystemBarUtilsProxy.kt +++ b/packages/SystemUI/src/com/android/systemui/statusbar/ui/SystemBarUtilsProxy.kt @@ -19,8 +19,10 @@ package com.android.systemui.statusbar.ui import android.content.Context import com.android.internal.policy.SystemBarUtils import com.android.systemui.dagger.qualifiers.Application +import com.android.systemui.res.R import dagger.Binds import javax.inject.Inject +import kotlin.math.max /** * Proxy interface to [SystemBarUtils], allowing injection of different logic for testing. @@ -29,6 +31,7 @@ import javax.inject.Inject */ interface SystemBarUtilsProxy { fun getStatusBarHeight(): Int + fun getStatusBarHeaderHeightKeyguard(): Int } class SystemBarUtilsProxyImpl @@ -37,6 +40,13 @@ constructor( @Application private val context: Context, ) : SystemBarUtilsProxy { override fun getStatusBarHeight(): Int = SystemBarUtils.getStatusBarHeight(context) + override fun getStatusBarHeaderHeightKeyguard(): Int { + val cutout = context.display.cutout + val waterfallInsetTop = if (cutout == null) 0 else cutout.waterfallInsets.top + val statusBarHeaderHeightKeyguard = + context.resources.getDimensionPixelSize(R.dimen.status_bar_header_height_keyguard) + return max(getStatusBarHeight(), statusBarHeaderHeightKeyguard + waterfallInsetTop) + } @dagger.Module interface Module { diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/ui/SystemBarUtilsState.kt b/packages/SystemUI/src/com/android/systemui/statusbar/ui/SystemBarUtilsState.kt index 10137a0d3430..2314f01d20ef 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/ui/SystemBarUtilsState.kt +++ b/packages/SystemUI/src/com/android/systemui/statusbar/ui/SystemBarUtilsState.kt @@ -52,4 +52,14 @@ constructor( .distinctUntilChanged() .flowOn(bgContext) .conflate() + + val statusBarHeaderHeightKeyguard: Flow<Int> = + configurationController.onConfigChanged + .onStart<Any> { emit(Unit) } + .flowOn(mainContext) + .conflate() + .map { proxy.getStatusBarHeaderHeightKeyguard() } + .distinctUntilChanged() + .flowOn(bgContext) + .conflate() } diff --git a/packages/SystemUI/src/com/android/systemui/util/Utils.java b/packages/SystemUI/src/com/android/systemui/util/Utils.java index 7861ded6cd24..3953188bb828 100644 --- a/packages/SystemUI/src/com/android/systemui/util/Utils.java +++ b/packages/SystemUI/src/com/android/systemui/util/Utils.java @@ -128,7 +128,10 @@ public class Utils { /** * Gets the {@link R.dimen#status_bar_header_height_keyguard}. + * + * @deprecated Prefer SystemBarUtilsState or SystemBarUtilsProxy */ + @Deprecated public static int getStatusBarHeaderHeightKeyguard(Context context) { final int statusBarHeight = SystemBarUtils.getStatusBarHeight(context); final DisplayCutout cutout = context.getDisplay().getCutout(); diff --git a/packages/SystemUI/src/com/android/systemui/util/kotlin/BooleanFlowOperators.kt b/packages/SystemUI/src/com/android/systemui/util/kotlin/BooleanFlowOperators.kt index 693a835e25d2..b3008856d370 100644 --- a/packages/SystemUI/src/com/android/systemui/util/kotlin/BooleanFlowOperators.kt +++ b/packages/SystemUI/src/com/android/systemui/util/kotlin/BooleanFlowOperators.kt @@ -18,6 +18,7 @@ package com.android.systemui.util.kotlin import kotlinx.coroutines.flow.Flow import kotlinx.coroutines.flow.combine +import kotlinx.coroutines.flow.distinctUntilChanged import kotlinx.coroutines.flow.map object BooleanFlowOperators { @@ -31,7 +32,7 @@ object BooleanFlowOperators { * ``` */ fun and(vararg flows: Flow<Boolean>): Flow<Boolean> = - combine(flows.asIterable()) { values -> values.all { it } } + combine(flows.asIterable()) { values -> values.all { it } }.distinctUntilChanged() /** * Logical NOT operator for a boolean flow. @@ -48,5 +49,5 @@ object BooleanFlowOperators { * determine the result. */ fun or(vararg flows: Flow<Boolean>): Flow<Boolean> = - combine(flows.asIterable()) { values -> values.any { it } } + combine(flows.asIterable()) { values -> values.any { it } }.distinctUntilChanged() } diff --git a/packages/SystemUI/tests/src/com/android/systemui/keyguard/data/repository/KeyguardClockRepositoryTest.kt b/packages/SystemUI/tests/src/com/android/systemui/keyguard/data/repository/KeyguardClockRepositoryTest.kt index d52e911d31f9..9aac8e270f92 100644 --- a/packages/SystemUI/tests/src/com/android/systemui/keyguard/data/repository/KeyguardClockRepositoryTest.kt +++ b/packages/SystemUI/tests/src/com/android/systemui/keyguard/data/repository/KeyguardClockRepositoryTest.kt @@ -23,7 +23,7 @@ import com.android.systemui.SysuiTestCase import com.android.systemui.coroutines.collectLastValue import com.android.systemui.flags.FakeFeatureFlagsClassic import com.android.systemui.flags.Flags -import com.android.systemui.keyguard.shared.model.SettingsClockSize +import com.android.systemui.keyguard.shared.model.ClockSizeSetting import com.android.systemui.res.R import com.android.systemui.shared.clocks.ClockRegistry import com.android.systemui.util.settings.FakeSettings @@ -78,7 +78,7 @@ class KeyguardClockRepositoryTest : SysuiTestCase() { scope.runTest { fakeSettings.putInt(Settings.Secure.LOCKSCREEN_USE_DOUBLE_LINE_CLOCK, 0) val value = collectLastValue(underTest.selectedClockSize) - Truth.assertThat(value()).isEqualTo(SettingsClockSize.SMALL) + Truth.assertThat(value()).isEqualTo(ClockSizeSetting.SMALL) } @Test @@ -86,7 +86,7 @@ class KeyguardClockRepositoryTest : SysuiTestCase() { scope.runTest { fakeSettings.putInt(Settings.Secure.LOCKSCREEN_USE_DOUBLE_LINE_CLOCK, 1) val value = collectLastValue(underTest.selectedClockSize) - Truth.assertThat(value()).isEqualTo(SettingsClockSize.DYNAMIC) + Truth.assertThat(value()).isEqualTo(ClockSizeSetting.DYNAMIC) } @Test diff --git a/packages/SystemUI/tests/src/com/android/systemui/keyguard/domain/interactor/FromDreamingTransitionInteractorTest.kt b/packages/SystemUI/tests/src/com/android/systemui/keyguard/domain/interactor/FromDreamingTransitionInteractorTest.kt index f534ba5bc68c..8435a03fae9a 100644 --- a/packages/SystemUI/tests/src/com/android/systemui/keyguard/domain/interactor/FromDreamingTransitionInteractorTest.kt +++ b/packages/SystemUI/tests/src/com/android/systemui/keyguard/domain/interactor/FromDreamingTransitionInteractorTest.kt @@ -37,6 +37,7 @@ import androidx.test.ext.junit.runners.AndroidJUnit4 import androidx.test.filters.SmallTest import com.android.systemui.Flags import com.android.systemui.SysuiTestCase +import com.android.systemui.bouncer.data.repository.fakeKeyguardBouncerRepository import com.android.systemui.keyguard.data.repository.FakeKeyguardTransitionRepository import com.android.systemui.keyguard.data.repository.fakeKeyguardRepository import com.android.systemui.keyguard.data.repository.fakeKeyguardTransitionRepository @@ -160,4 +161,17 @@ class FromDreamingTransitionInteractorTest : SysuiTestCase() { to = KeyguardState.LOCKSCREEN, ) } + + @Test + fun testTransitionToAlternateBouncer() = + testScope.runTest { + kosmos.fakeKeyguardBouncerRepository.setAlternateVisible(true) + runCurrent() + + assertThat(transitionRepository) + .startedTransition( + from = KeyguardState.DREAMING, + to = KeyguardState.ALTERNATE_BOUNCER, + ) + } } diff --git a/packages/SystemUI/tests/src/com/android/systemui/keyguard/domain/interactor/KeyguardBlueprintInteractorTest.kt b/packages/SystemUI/tests/src/com/android/systemui/keyguard/domain/interactor/KeyguardBlueprintInteractorTest.kt index 4270236f761e..ac5823e9365b 100644 --- a/packages/SystemUI/tests/src/com/android/systemui/keyguard/domain/interactor/KeyguardBlueprintInteractorTest.kt +++ b/packages/SystemUI/tests/src/com/android/systemui/keyguard/domain/interactor/KeyguardBlueprintInteractorTest.kt @@ -24,15 +24,20 @@ import androidx.test.filters.SmallTest import com.android.systemui.Flags import com.android.systemui.SysuiTestCase import com.android.systemui.biometrics.data.repository.fakeFingerprintPropertyRepository +import com.android.systemui.biometrics.shared.model.FingerprintSensorType +import com.android.systemui.biometrics.shared.model.SensorStrength import com.android.systemui.common.ui.data.repository.fakeConfigurationRepository import com.android.systemui.coroutines.collectLastValue import com.android.systemui.keyguard.data.repository.fakeKeyguardClockRepository import com.android.systemui.keyguard.ui.view.layout.blueprints.DefaultKeyguardBlueprint import com.android.systemui.keyguard.ui.view.layout.blueprints.SplitShadeKeyguardBlueprint import com.android.systemui.kosmos.testScope +import com.android.systemui.plugins.clocks.ClockConfig import com.android.systemui.plugins.clocks.ClockController -import com.android.systemui.res.R +import com.android.systemui.shade.data.repository.shadeRepository +import com.android.systemui.shade.shared.model.ShadeMode import com.android.systemui.testKosmos +import com.android.systemui.util.mockito.whenever import com.google.common.truth.Truth.assertThat import kotlinx.coroutines.ExperimentalCoroutinesApi import kotlinx.coroutines.test.runCurrent @@ -59,17 +64,24 @@ class KeyguardBlueprintInteractorTest : SysuiTestCase() { @Before fun setup() { MockitoAnnotations.initMocks(this) + whenever(clockController.config).thenReturn(ClockConfig("TEST", "Test", "")) + fingerprintPropertyRepository.setProperties( + sensorId = 1, + strength = SensorStrength.STRONG, + sensorType = FingerprintSensorType.POWER_BUTTON, + sensorLocations = mapOf() + ) } @Test fun testAppliesDefaultBlueprint() { testScope.runTest { - val blueprint by collectLastValue(underTest.blueprint) - overrideResource(R.bool.config_use_split_notification_shade, false) + val blueprintId by collectLastValue(underTest.blueprintId) + kosmos.shadeRepository.setShadeMode(ShadeMode.Single) configurationRepository.onConfigurationChange() runCurrent() - assertThat(blueprint?.id).isEqualTo(DefaultKeyguardBlueprint.Companion.DEFAULT) + assertThat(blueprintId).isEqualTo(DefaultKeyguardBlueprint.Companion.DEFAULT) } } @@ -77,12 +89,12 @@ class KeyguardBlueprintInteractorTest : SysuiTestCase() { @DisableFlags(Flags.FLAG_COMPOSE_LOCKSCREEN) fun testAppliesSplitShadeBlueprint() { testScope.runTest { - val blueprint by collectLastValue(underTest.blueprint) - overrideResource(R.bool.config_use_split_notification_shade, true) + val blueprintId by collectLastValue(underTest.blueprintId) + kosmos.shadeRepository.setShadeMode(ShadeMode.Split) configurationRepository.onConfigurationChange() runCurrent() - assertThat(blueprint?.id).isEqualTo(SplitShadeKeyguardBlueprint.Companion.ID) + assertThat(blueprintId).isEqualTo(SplitShadeKeyguardBlueprint.Companion.ID) } } @@ -90,11 +102,12 @@ class KeyguardBlueprintInteractorTest : SysuiTestCase() { @DisableFlags(Flags.FLAG_COMPOSE_LOCKSCREEN) fun fingerprintPropertyInitialized_updatesBlueprint() { testScope.runTest { - val blueprint by collectLastValue(underTest.blueprint) - overrideResource(R.bool.config_use_split_notification_shade, true) + val blueprintId by collectLastValue(underTest.blueprintId) + kosmos.shadeRepository.setShadeMode(ShadeMode.Split) fingerprintPropertyRepository.supportsUdfps() // initialize properties runCurrent() - assertThat(blueprint?.id).isEqualTo(SplitShadeKeyguardBlueprint.Companion.ID) + + assertThat(blueprintId).isEqualTo(SplitShadeKeyguardBlueprint.Companion.ID) } } @@ -102,13 +115,13 @@ class KeyguardBlueprintInteractorTest : SysuiTestCase() { @EnableFlags(Flags.FLAG_COMPOSE_LOCKSCREEN) fun testDoesNotApplySplitShadeBlueprint() { testScope.runTest { - overrideResource(R.bool.config_use_split_notification_shade, true) - val blueprint by collectLastValue(underTest.blueprint) + val blueprintId by collectLastValue(underTest.blueprintId) + kosmos.shadeRepository.setShadeMode(ShadeMode.Split) clockRepository.setCurrentClock(clockController) configurationRepository.onConfigurationChange() runCurrent() - assertThat(blueprint?.id).isEqualTo(DefaultKeyguardBlueprint.DEFAULT) + assertThat(blueprintId).isEqualTo(DefaultKeyguardBlueprint.DEFAULT) } } } diff --git a/packages/SystemUI/tests/src/com/android/systemui/keyguard/domain/interactor/KeyguardTransitionScenariosTest.kt b/packages/SystemUI/tests/src/com/android/systemui/keyguard/domain/interactor/KeyguardTransitionScenariosTest.kt index 085b70e61339..671b09b257ce 100644 --- a/packages/SystemUI/tests/src/com/android/systemui/keyguard/domain/interactor/KeyguardTransitionScenariosTest.kt +++ b/packages/SystemUI/tests/src/com/android/systemui/keyguard/domain/interactor/KeyguardTransitionScenariosTest.kt @@ -755,35 +755,6 @@ class KeyguardTransitionScenariosTest : SysuiTestCase() { } @Test - fun goneToDreamingLockscreenHosted() = - testScope.runTest { - // GIVEN a device that is not dreaming or dozing - keyguardRepository.setDreamingWithOverlay(false) - keyguardRepository.setDozeTransitionModel( - DozeTransitionModel(from = DozeStateModel.DOZE, to = DozeStateModel.FINISH) - ) - runCurrent() - - // GIVEN a prior transition has run to GONE - runTransitionAndSetWakefulness(KeyguardState.LOCKSCREEN, KeyguardState.GONE) - - // WHEN the device begins to dream with the lockscreen hosted dream - keyguardRepository.setDreamingWithOverlay(true) - keyguardRepository.setIsActiveDreamLockscreenHosted(true) - advanceTimeBy(100L) - - assertThat(transitionRepository) - .startedTransition( - to = KeyguardState.DREAMING_LOCKSCREEN_HOSTED, - from = KeyguardState.GONE, - ownerName = "FromGoneTransitionInteractor", - animatorAssertion = { it.isNotNull() } - ) - - coroutineContext.cancelChildren() - } - - @Test fun goneToGlanceableHub() = testScope.runTest { // GIVEN a prior transition has run to GONE @@ -1244,9 +1215,15 @@ class KeyguardTransitionScenariosTest : SysuiTestCase() { keyguardRepository.setKeyguardOccluded(true) runCurrent() - // GIVEN device is docked + // GIVEN device is docked/communal is available dockManager.setIsDocked(true) dockManager.setDockEvent(DockManager.STATE_DOCKED) + val idleTransitionState = + MutableStateFlow<ObservableTransitionState>( + ObservableTransitionState.Idle(CommunalScenes.Communal) + ) + communalInteractor.setTransitionState(idleTransitionState) + runCurrent() // WHEN occlusion ends keyguardRepository.setKeyguardOccluded(false) @@ -1372,6 +1349,8 @@ class KeyguardTransitionScenariosTest : SysuiTestCase() { // WHEN the keyguard is occluded and device wakes up and is no longer dreaming keyguardRepository.setDreaming(false) + testScheduler.advanceTimeBy(150) // The dreaming signal is debounced. + runCurrent() keyguardRepository.setKeyguardOccluded(true) powerInteractor.setAwakeForTest() runCurrent() @@ -1379,7 +1358,7 @@ class KeyguardTransitionScenariosTest : SysuiTestCase() { // THEN a transition to OCCLUDED should occur assertThat(transitionRepository) .startedTransition( - ownerName = "FromDreamingTransitionInteractor", + ownerName = "FromDreamingTransitionInteractor(Occluded but no longer dreaming)", from = KeyguardState.DREAMING, to = KeyguardState.OCCLUDED, animatorAssertion = { it.isNotNull() }, @@ -1516,7 +1495,7 @@ class KeyguardTransitionScenariosTest : SysuiTestCase() { // THEN a transition to OCCLUDED should occur assertThat(transitionRepository) .startedTransition( - ownerName = "FromAodTransitionInteractor", + ownerName = "FromAodTransitionInteractor(isOccluded = true)", from = KeyguardState.AOD, to = KeyguardState.OCCLUDED, animatorAssertion = { it.isNotNull() }, @@ -1555,7 +1534,8 @@ class KeyguardTransitionScenariosTest : SysuiTestCase() { runTransitionAndSetWakefulness(KeyguardState.AOD, KeyguardState.LOCKSCREEN) runCurrent() - // WHEN the device begins to sleep (first power button press)... + // WHEN the device begins to sleep (first power button press), which starts + // LS -> DOZING... powerInteractor.setAsleepForTest() runCurrent() reset(transitionRepository) @@ -1568,11 +1548,11 @@ class KeyguardTransitionScenariosTest : SysuiTestCase() { } runCurrent() - // THEN a transition from LOCKSCREEN => OCCLUDED should occur + // THEN a transition from DOZING => OCCLUDED should occur assertThat(transitionRepository) .startedTransition( - ownerName = "FromLockscreenTransitionInteractor", - from = KeyguardState.LOCKSCREEN, + ownerName = "FromDozingTransitionInteractor", + from = KeyguardState.DOZING, to = KeyguardState.OCCLUDED, animatorAssertion = { it.isNotNull() }, ) diff --git a/packages/SystemUI/tests/src/com/android/systemui/keyguard/ui/binder/KeyguardClockViewBinderTest.kt b/packages/SystemUI/tests/src/com/android/systemui/keyguard/ui/binder/KeyguardClockViewBinderTest.kt index 5e3a142dc348..2f650c4420a0 100644 --- a/packages/SystemUI/tests/src/com/android/systemui/keyguard/ui/binder/KeyguardClockViewBinderTest.kt +++ b/packages/SystemUI/tests/src/com/android/systemui/keyguard/ui/binder/KeyguardClockViewBinderTest.kt @@ -24,6 +24,7 @@ import androidx.test.filters.SmallTest import com.android.keyguard.KeyguardClockSwitch.LARGE import com.android.keyguard.KeyguardClockSwitch.SMALL import com.android.systemui.SysuiTestCase +import com.android.systemui.keyguard.shared.model.ClockSize import com.android.systemui.keyguard.ui.viewmodel.KeyguardClockViewModel import com.android.systemui.plugins.clocks.ClockConfig import com.android.systemui.plugins.clocks.ClockController @@ -53,7 +54,7 @@ class KeyguardClockViewBinderTest : SysuiTestCase() { @Mock private lateinit var smallClockFaceLayout: ClockFaceLayout @Mock private lateinit var largeClockFaceLayout: ClockFaceLayout @Mock private lateinit var clockViewModel: KeyguardClockViewModel - private val clockSize = MutableStateFlow(LARGE) + private val clockSize = MutableStateFlow(ClockSize.LARGE) private val currentClock: MutableStateFlow<ClockController?> = MutableStateFlow(null) @Before @@ -82,8 +83,7 @@ class KeyguardClockViewBinderTest : SysuiTestCase() { @Test fun addClockViewsToBurnInLayer_LargeWeatherClock() { setupWeatherClock() - clockSize.value = LARGE - KeyguardClockViewBinder.updateBurnInLayer(rootView, clockViewModel) + KeyguardClockViewBinder.updateBurnInLayer(rootView, clockViewModel, ClockSize.LARGE) verify(burnInLayer).removeView(smallClockView) verify(burnInLayer).addView(largeClockView) } @@ -91,8 +91,7 @@ class KeyguardClockViewBinderTest : SysuiTestCase() { @Test fun addClockViewsToBurnInLayer_LargeNonWeatherClock() { setupNonWeatherClock() - clockSize.value = LARGE - KeyguardClockViewBinder.updateBurnInLayer(rootView, clockViewModel) + KeyguardClockViewBinder.updateBurnInLayer(rootView, clockViewModel, ClockSize.LARGE) verify(burnInLayer).removeView(smallClockView) verify(burnInLayer, never()).addView(largeClockView) } @@ -100,8 +99,7 @@ class KeyguardClockViewBinderTest : SysuiTestCase() { @Test fun addClockViewsToBurnInLayer_SmallClock() { setupNonWeatherClock() - clockSize.value = SMALL - KeyguardClockViewBinder.updateBurnInLayer(rootView, clockViewModel) + KeyguardClockViewBinder.updateBurnInLayer(rootView, clockViewModel, ClockSize.SMALL) verify(burnInLayer).addView(smallClockView) verify(burnInLayer).removeView(largeClockView) } diff --git a/packages/SystemUI/tests/src/com/android/systemui/keyguard/ui/view/layout/blueprints/DefaultKeyguardBlueprintTest.kt b/packages/SystemUI/tests/src/com/android/systemui/keyguard/ui/view/layout/blueprints/DefaultKeyguardBlueprintTest.kt index 9aee5b628642..616aac7ce460 100644 --- a/packages/SystemUI/tests/src/com/android/systemui/keyguard/ui/view/layout/blueprints/DefaultKeyguardBlueprintTest.kt +++ b/packages/SystemUI/tests/src/com/android/systemui/keyguard/ui/view/layout/blueprints/DefaultKeyguardBlueprintTest.kt @@ -105,7 +105,7 @@ class DefaultKeyguardBlueprintTest : SysuiTestCase() { @Test fun replaceViews() { val constraintLayout = ConstraintLayout(context, null) - underTest.replaceViews(null, constraintLayout) + underTest.replaceViews(constraintLayout) underTest.sections.forEach { verify(it)?.addViews(constraintLayout) } } @@ -116,7 +116,7 @@ class DefaultKeyguardBlueprintTest : SysuiTestCase() { whenever(prevBlueprint.sections) .thenReturn(underTest.sections.minus(mDefaultDeviceEntrySection).plus(someSection)) val constraintLayout = ConstraintLayout(context, null) - underTest.replaceViews(prevBlueprint, constraintLayout) + underTest.replaceViews(constraintLayout, prevBlueprint) underTest.sections.minus(mDefaultDeviceEntrySection).forEach { verify(it, never())?.addViews(constraintLayout) } @@ -128,7 +128,7 @@ class DefaultKeyguardBlueprintTest : SysuiTestCase() { @Test fun deviceEntryIconIsOnTop() { val constraintLayout = ConstraintLayout(context, null) - underTest.replaceViews(null, constraintLayout) + underTest.replaceViews(constraintLayout) underTest.sections.forEach { verify(it)?.addViews(constraintLayout) } } diff --git a/packages/SystemUI/tests/src/com/android/systemui/keyguard/ui/view/layout/sections/ClockSectionTest.kt b/packages/SystemUI/tests/src/com/android/systemui/keyguard/ui/view/layout/sections/ClockSectionTest.kt index c47f0bcb3192..ba2efe6d7443 100644 --- a/packages/SystemUI/tests/src/com/android/systemui/keyguard/ui/view/layout/sections/ClockSectionTest.kt +++ b/packages/SystemUI/tests/src/com/android/systemui/keyguard/ui/view/layout/sections/ClockSectionTest.kt @@ -23,244 +23,297 @@ import android.view.View.GONE import android.view.View.VISIBLE import androidx.constraintlayout.widget.ConstraintSet import androidx.test.filters.SmallTest -import com.android.internal.policy.SystemBarUtils import com.android.systemui.SysuiTestCase -import com.android.systemui.keyguard.domain.interactor.KeyguardBlueprintInteractor -import com.android.systemui.keyguard.domain.interactor.KeyguardClockInteractor -import com.android.systemui.keyguard.ui.viewmodel.KeyguardClockViewModel -import com.android.systemui.keyguard.ui.viewmodel.KeyguardSmartspaceViewModel +import com.android.systemui.coroutines.collectLastValue +import com.android.systemui.customization.R as customR +import com.android.systemui.keyguard.data.repository.fakeKeyguardRepository +import com.android.systemui.keyguard.domain.interactor.keyguardBlueprintInteractor +import com.android.systemui.keyguard.domain.interactor.keyguardClockInteractor +import com.android.systemui.keyguard.domain.interactor.keyguardSmartspaceInteractor +import com.android.systemui.keyguard.shared.model.ClockSize +import com.android.systemui.keyguard.ui.viewmodel.keyguardClockViewModel +import com.android.systemui.keyguard.ui.viewmodel.keyguardSmartspaceViewModel +import com.android.systemui.kosmos.Kosmos +import com.android.systemui.kosmos.testScope import com.android.systemui.res.R -import com.android.systemui.shade.domain.interactor.ShadeInteractor +import com.android.systemui.shade.data.repository.shadeRepository import com.android.systemui.shade.shared.model.ShadeMode -import com.android.systemui.util.Utils +import com.android.systemui.statusbar.notification.stack.domain.interactor.notificationsKeyguardInteractor +import com.android.systemui.statusbar.policy.fakeConfigurationController +import com.android.systemui.statusbar.ui.fakeSystemBarUtilsProxy +import com.android.systemui.testKosmos import com.android.systemui.util.mockito.eq import com.android.systemui.util.mockito.mock import com.android.systemui.util.mockito.whenever import com.google.common.truth.Truth.assertThat -import dagger.Lazy -import kotlinx.coroutines.flow.MutableStateFlow +import kotlinx.coroutines.test.advanceUntilIdle +import kotlinx.coroutines.test.runTest import org.junit.Before import org.junit.Test import org.junit.runner.RunWith import org.junit.runners.JUnit4 import org.mockito.ArgumentMatchers.anyInt import org.mockito.ArgumentMatchers.anyString -import org.mockito.Mock import org.mockito.MockitoAnnotations @RunWith(JUnit4::class) @SmallTest class ClockSectionTest : SysuiTestCase() { - @Mock private lateinit var keyguardClockInteractor: KeyguardClockInteractor - @Mock private lateinit var keyguardClockViewModel: KeyguardClockViewModel - @Mock private lateinit var shadeInteractor: ShadeInteractor - @Mock private lateinit var smartspaceViewModel: KeyguardSmartspaceViewModel - @Mock private lateinit var blueprintInteractor: Lazy<KeyguardBlueprintInteractor> - private val bcSmartspaceVisibility: MutableStateFlow<Int> = MutableStateFlow(VISIBLE) - private val clockShouldBeCentered: MutableStateFlow<Boolean> = MutableStateFlow(true) - private val isAodIconsVisible: MutableStateFlow<Boolean> = MutableStateFlow(true) - private val shadeMode: MutableStateFlow<ShadeMode> = MutableStateFlow(ShadeMode.Single) - private lateinit var underTest: ClockSection - private val SMALL_CLOCK_TOP_SPLIT_SHADE = - context.resources.getDimensionPixelSize(R.dimen.keyguard_split_shade_top_margin) - - private val SMALL_CLOCK_TOP_NON_SPLIT_SHADE = - context.resources.getDimensionPixelSize(R.dimen.keyguard_clock_top_margin) + - Utils.getStatusBarHeaderHeightKeyguard(context) + private val LARGE_CLOCK_TOP_WITHOUT_SMARTSPACE: Int + get() = + kosmos.fakeSystemBarUtilsProxy.getStatusBarHeight() + + context.resources.getDimensionPixelSize(customR.dimen.small_clock_padding_top) + + context.resources.getDimensionPixelSize(R.dimen.keyguard_smartspace_top_offset) - private val LARGE_CLOCK_TOP_WITHOUT_SMARTSPACE = - SystemBarUtils.getStatusBarHeight(context) + - context.resources.getDimensionPixelSize( - com.android.systemui.customization.R.dimen.small_clock_padding_top - ) + - context.resources.getDimensionPixelSize(R.dimen.keyguard_smartspace_top_offset) + private val LARGE_CLOCK_TOP + get() = + LARGE_CLOCK_TOP_WITHOUT_SMARTSPACE + + SMART_SPACE_DATE_WEATHER_HEIGHT + + ENHANCED_SMART_SPACE_HEIGHT - private val LARGE_CLOCK_TOP = - LARGE_CLOCK_TOP_WITHOUT_SMARTSPACE + - SMART_SPACE_DATE_WEATHER_HEIGHT + - ENHANCED_SMART_SPACE_HEIGHT + private val CLOCK_FADE_TRANSLATION_Y + get() = context.resources.getDimensionPixelSize(customR.dimen.small_clock_height) - private val CLOCK_FADE_TRANSLATION_Y = - context.resources.getDimensionPixelSize( - com.android.systemui.customization.R.dimen.small_clock_height - ) - - private var DIMENSION_BY_IDENTIFIER_NAME: List<Pair<String, Int>> = listOf() + private var DIMENSION_BY_IDENTIFIER: List<Pair<String, Int>> = listOf() + private lateinit var kosmos: Kosmos @Before fun setup() { - DIMENSION_BY_IDENTIFIER_NAME = + DIMENSION_BY_IDENTIFIER = listOf( "date_weather_view_height" to SMART_SPACE_DATE_WEATHER_HEIGHT, "enhanced_smartspace_height" to ENHANCED_SMART_SPACE_HEIGHT, ) MockitoAnnotations.initMocks(this) - val remoteResources = mock<Resources>() - whenever(remoteResources.getIdentifier(anyString(), eq("dimen"), anyString())).then { - invocation -> - val name = invocation.arguments[0] as String - val index = DIMENSION_BY_IDENTIFIER_NAME.indexOfFirst { (key, _) -> key == name } - // increment index so that the not-found sentinel value lines up w/ what is - // returned by getIdentifier when a resource is not found - index + 1 - } - whenever(remoteResources.getDimensionPixelSize(anyInt())).then { invocation -> - val id = invocation.arguments[0] as Int - DIMENSION_BY_IDENTIFIER_NAME[id - 1].second + val remoteResources = + mock<Resources>().apply { + whenever(getIdentifier(anyString(), eq("dimen"), anyString())).then { invocation -> + val name = invocation.arguments[0] as String + val index = DIMENSION_BY_IDENTIFIER.indexOfFirst { (key, _) -> key == name } + // increment index so that the not-found sentinel value lines up w/ what is + // returned by getIdentifier when a resource is not found + index + 1 + } + whenever(getDimensionPixelSize(anyInt())).then { invocation -> + val id = invocation.arguments[0] as Int + DIMENSION_BY_IDENTIFIER[id - 1].second + } + } + mContext.setMockPackageManager( + mock<PackageManager>().apply { + whenever(getResourcesForApplication(anyString())).thenReturn(remoteResources) + } + ) + + kosmos = testKosmos() + with(kosmos) { + underTest = + ClockSection( + keyguardClockInteractor, + keyguardClockViewModel, + context, + keyguardSmartspaceViewModel, + { keyguardBlueprintInteractor }, + ) } - val packageManager = mock<PackageManager>() - whenever(packageManager.getResourcesForApplication(anyString())).thenReturn(remoteResources) - mContext.setMockPackageManager(packageManager) - - whenever(keyguardClockViewModel.clockShouldBeCentered).thenReturn(clockShouldBeCentered) - whenever(keyguardClockViewModel.isAodIconsVisible).thenReturn(isAodIconsVisible) - whenever(shadeInteractor.shadeMode).thenReturn(shadeMode) - whenever(keyguardClockViewModel.shadeInteractor).thenReturn(shadeInteractor) - whenever(smartspaceViewModel.bcSmartspaceVisibility).thenReturn(bcSmartspaceVisibility) - - underTest = - ClockSection( - keyguardClockInteractor, - keyguardClockViewModel, - context, - smartspaceViewModel, - blueprintInteractor - ) } @Test - fun testApplyDefaultConstraints_LargeClock_SplitShade() { - setLargeClock(true) - setSplitShade(true) - val cs = ConstraintSet() - underTest.applyDefaultConstraints(cs) - - val expectedLargeClockTopMargin = LARGE_CLOCK_TOP - assertLargeClockTop(cs, expectedLargeClockTopMargin) - - val expectedSmallClockTopMargin = SMALL_CLOCK_TOP_SPLIT_SHADE - assertSmallClockTop(cs) - } + fun testApplyDefaultConstraints_LargeClock_SplitShade() = + kosmos.testScope.runTest { + with(kosmos) { + shadeRepository.setShadeMode(ShadeMode.Split) + keyguardClockInteractor.setClockSize(ClockSize.LARGE) + advanceUntilIdle() + } + + val cs = ConstraintSet() + underTest.applyDefaultConstraints(cs) + + assertLargeClockTop(cs, LARGE_CLOCK_TOP) + assertSmallClockTop(cs) + } @Test - fun testApplyDefaultConstraints_LargeClock_NonSplitShade() { - setLargeClock(true) - setSplitShade(false) - val cs = ConstraintSet() - underTest.applyDefaultConstraints(cs) - - val expectedLargeClockTopMargin = LARGE_CLOCK_TOP - assertLargeClockTop(cs, expectedLargeClockTopMargin) - - val expectedSmallClockTopMargin = SMALL_CLOCK_TOP_NON_SPLIT_SHADE - assertSmallClockTop(cs) - } + fun testApplyDefaultConstraints_LargeClock_NonSplitShade() = + kosmos.testScope.runTest { + with(kosmos) { + val collectedShadeMode by collectLastValue(shadeRepository.shadeMode) + val isLargeClockVisible by + collectLastValue(keyguardClockViewModel.isLargeClockVisible) + + shadeRepository.setShadeMode(ShadeMode.Single) + keyguardClockInteractor.setClockSize(ClockSize.LARGE) + fakeKeyguardRepository.setClockShouldBeCentered(true) + notificationsKeyguardInteractor.setNotificationsFullyHidden(true) + keyguardSmartspaceInteractor.setBcSmartspaceVisibility(VISIBLE) + fakeConfigurationController.notifyConfigurationChanged() + advanceUntilIdle() + + val cs = ConstraintSet() + underTest.applyDefaultConstraints(cs) + + assertLargeClockTop(cs, LARGE_CLOCK_TOP) + assertSmallClockTop(cs) + } + } @Test - fun testApplyDefaultConstraints_LargeClock_MissingSmartspace_SplitShade() { - DIMENSION_BY_IDENTIFIER_NAME = listOf() // Remove Smartspace from mock - setLargeClock(true) - setSplitShade(true) - val cs = ConstraintSet() - underTest.applyDefaultConstraints(cs) - - val expectedLargeClockTopMargin = LARGE_CLOCK_TOP_WITHOUT_SMARTSPACE - assertLargeClockTop(cs, expectedLargeClockTopMargin) - - val expectedSmallClockTopMargin = SMALL_CLOCK_TOP_SPLIT_SHADE - assertSmallClockTop(cs) - } + fun testApplyDefaultConstraints_LargeClock_MissingSmartspace_SplitShade() = + kosmos.testScope.runTest { + with(kosmos) { + DIMENSION_BY_IDENTIFIER = listOf() // Remove Smartspace from mock + val collectedShadeMode by collectLastValue(shadeRepository.shadeMode) + val isLargeClockVisible by + collectLastValue(keyguardClockViewModel.isLargeClockVisible) + + shadeRepository.setShadeMode(ShadeMode.Split) + keyguardClockInteractor.setClockSize(ClockSize.LARGE) + fakeKeyguardRepository.setClockShouldBeCentered(true) + notificationsKeyguardInteractor.setNotificationsFullyHidden(true) + keyguardSmartspaceInteractor.setBcSmartspaceVisibility(VISIBLE) + fakeConfigurationController.notifyConfigurationChanged() + advanceUntilIdle() + + val cs = ConstraintSet() + underTest.applyDefaultConstraints(cs) + + assertLargeClockTop(cs, LARGE_CLOCK_TOP_WITHOUT_SMARTSPACE) + assertSmallClockTop(cs) + } + } @Test - fun testApplyDefaultConstraints_LargeClock_MissingSmartspace_NonSplitShade() { - DIMENSION_BY_IDENTIFIER_NAME = listOf() // Remove Smartspace from mock - setLargeClock(true) - setSplitShade(false) - val cs = ConstraintSet() - underTest.applyDefaultConstraints(cs) - - val expectedLargeClockTopMargin = LARGE_CLOCK_TOP_WITHOUT_SMARTSPACE - assertLargeClockTop(cs, expectedLargeClockTopMargin) - - val expectedSmallClockTopMargin = SMALL_CLOCK_TOP_NON_SPLIT_SHADE - assertSmallClockTop(cs) - } + fun testApplyDefaultConstraints_LargeClock_MissingSmartspace_NonSplitShade() = + kosmos.testScope.runTest { + with(kosmos) { + DIMENSION_BY_IDENTIFIER = listOf() // Remove Smartspace from mock + val collectedShadeMode by collectLastValue(shadeRepository.shadeMode) + val isLargeClockVisible by + collectLastValue(keyguardClockViewModel.isLargeClockVisible) + + shadeRepository.setShadeMode(ShadeMode.Single) + keyguardClockInteractor.setClockSize(ClockSize.LARGE) + fakeKeyguardRepository.setClockShouldBeCentered(true) + notificationsKeyguardInteractor.setNotificationsFullyHidden(true) + keyguardSmartspaceInteractor.setBcSmartspaceVisibility(VISIBLE) + fakeConfigurationController.notifyConfigurationChanged() + advanceUntilIdle() + + val cs = ConstraintSet() + underTest.applyDefaultConstraints(cs) + + assertLargeClockTop(cs, LARGE_CLOCK_TOP_WITHOUT_SMARTSPACE) + assertSmallClockTop(cs) + } + } @Test - fun testApplyDefaultConstraints_SmallClock_SplitShade() { - setLargeClock(false) - setSplitShade(true) - val cs = ConstraintSet() - underTest.applyDefaultConstraints(cs) - - val expectedLargeClockTopMargin = LARGE_CLOCK_TOP - assertLargeClockTop(cs, expectedLargeClockTopMargin) - - val expectedSmallClockTopMargin = SMALL_CLOCK_TOP_SPLIT_SHADE - assertSmallClockTop(cs) - } + fun testApplyDefaultConstraints_SmallClock_SplitShade() = + kosmos.testScope.runTest { + with(kosmos) { + val collectedShadeMode by collectLastValue(shadeRepository.shadeMode) + val isLargeClockVisible by + collectLastValue(keyguardClockViewModel.isLargeClockVisible) + + shadeRepository.setShadeMode(ShadeMode.Split) + keyguardClockInteractor.setClockSize(ClockSize.SMALL) + fakeKeyguardRepository.setClockShouldBeCentered(true) + notificationsKeyguardInteractor.setNotificationsFullyHidden(true) + keyguardSmartspaceInteractor.setBcSmartspaceVisibility(VISIBLE) + fakeConfigurationController.notifyConfigurationChanged() + advanceUntilIdle() + + val cs = ConstraintSet() + underTest.applyDefaultConstraints(cs) + + assertLargeClockTop(cs, LARGE_CLOCK_TOP) + assertSmallClockTop(cs) + } + } @Test - fun testApplyDefaultConstraints_SmallClock_NonSplitShade() { - setLargeClock(false) - setSplitShade(false) - val cs = ConstraintSet() - underTest.applyDefaultConstraints(cs) - val expectedLargeClockTopMargin = LARGE_CLOCK_TOP - assertLargeClockTop(cs, expectedLargeClockTopMargin) - - val expectedSmallClockTopMargin = SMALL_CLOCK_TOP_NON_SPLIT_SHADE - assertSmallClockTop(cs) - } + fun testApplyDefaultConstraints_SmallClock_NonSplitShade() = + kosmos.testScope.runTest { + with(kosmos) { + val collectedShadeMode by collectLastValue(shadeRepository.shadeMode) + val isLargeClockVisible by + collectLastValue(keyguardClockViewModel.isLargeClockVisible) + + shadeRepository.setShadeMode(ShadeMode.Single) + keyguardClockInteractor.setClockSize(ClockSize.SMALL) + fakeKeyguardRepository.setClockShouldBeCentered(true) + notificationsKeyguardInteractor.setNotificationsFullyHidden(true) + keyguardSmartspaceInteractor.setBcSmartspaceVisibility(VISIBLE) + fakeConfigurationController.notifyConfigurationChanged() + advanceUntilIdle() + + val cs = ConstraintSet() + underTest.applyDefaultConstraints(cs) + assertLargeClockTop(cs, LARGE_CLOCK_TOP) + assertSmallClockTop(cs) + } + } @Test - fun testSmartspaceVisible_weatherClockDateAndIconsBarrierBottomBelowBCSmartspace() { - isAodIconsVisible.value = false - bcSmartspaceVisibility.value = VISIBLE - val cs = ConstraintSet() - underTest.applyDefaultConstraints(cs) - val referencedIds = cs.getReferencedIds(R.id.weather_clock_date_and_icons_barrier_bottom) - referencedIds.contentEquals(intArrayOf(com.android.systemui.shared.R.id.bc_smartspace_view)) - } + fun testSmartspaceVisible_weatherClockDateAndIconsBarrierBottomBelowBCSmartspace() = + kosmos.testScope.runTest { + with(kosmos) { + notificationsKeyguardInteractor.setNotificationsFullyHidden(false) + keyguardSmartspaceInteractor.setBcSmartspaceVisibility(VISIBLE) + fakeConfigurationController.notifyConfigurationChanged() + advanceUntilIdle() + } + + val cs = ConstraintSet() + underTest.applyDefaultConstraints(cs) + val referencedIds = + cs.getReferencedIds(R.id.weather_clock_date_and_icons_barrier_bottom) + referencedIds.contentEquals( + intArrayOf(com.android.systemui.shared.R.id.bc_smartspace_view) + ) + } @Test - fun testSmartspaceGone_weatherClockDateAndIconsBarrierBottomBelowSmartspaceDateWeather() { - isAodIconsVisible.value = false - bcSmartspaceVisibility.value = GONE - val cs = ConstraintSet() - underTest.applyDefaultConstraints(cs) - val referencedIds = cs.getReferencedIds(R.id.weather_clock_date_and_icons_barrier_bottom) - referencedIds.contentEquals(intArrayOf(R.id.lockscreen_clock_view)) - } + fun testSmartspaceGone_weatherClockDateAndIconsBarrierBottomBelowSmartspaceDateWeather() = + kosmos.testScope.runTest { + with(kosmos) { + notificationsKeyguardInteractor.setNotificationsFullyHidden(false) + keyguardSmartspaceInteractor.setBcSmartspaceVisibility(GONE) + fakeConfigurationController.notifyConfigurationChanged() + advanceUntilIdle() + } + + val cs = ConstraintSet() + underTest.applyDefaultConstraints(cs) + val referencedIds = + cs.getReferencedIds(R.id.weather_clock_date_and_icons_barrier_bottom) + referencedIds.contentEquals(intArrayOf(R.id.lockscreen_clock_view)) + } @Test - fun testHasAodIcons_weatherClockDateAndIconsBarrierBottomBelowSmartspaceDateWeather() { - isAodIconsVisible.value = true - val cs = ConstraintSet() - underTest.applyDefaultConstraints(cs) - val referencedIds = cs.getReferencedIds(R.id.weather_clock_date_and_icons_barrier_bottom) - referencedIds.contentEquals( - intArrayOf( - com.android.systemui.shared.R.id.bc_smartspace_view, - R.id.aod_notification_icon_container + fun testHasAodIcons_weatherClockDateAndIconsBarrierBottomBelowSmartspaceDateWeather() = + kosmos.testScope.runTest { + with(kosmos) { + notificationsKeyguardInteractor.setNotificationsFullyHidden(true) + fakeConfigurationController.notifyConfigurationChanged() + advanceUntilIdle() + } + + val cs = ConstraintSet() + underTest.applyDefaultConstraints(cs) + val referencedIds = + cs.getReferencedIds(R.id.weather_clock_date_and_icons_barrier_bottom) + referencedIds.contentEquals( + intArrayOf( + com.android.systemui.shared.R.id.bc_smartspace_view, + R.id.aod_notification_icon_container + ) ) - ) - } - - private fun setLargeClock(useLargeClock: Boolean) { - whenever(keyguardClockViewModel.useLargeClock).thenReturn(useLargeClock) - } - - private fun setSplitShade(isInSplitShade: Boolean) { - if (isInSplitShade) { - shadeMode.value = ShadeMode.Split - } else { - shadeMode.value = ShadeMode.Single } - } private fun assertLargeClockTop(cs: ConstraintSet, expectedLargeClockTopMargin: Int) { val largeClockConstraint = cs.getConstraint(R.id.lockscreen_clock_view_large) diff --git a/packages/SystemUI/tests/src/com/android/systemui/keyguard/ui/viewmodel/KeyguardClockViewModelTest.kt b/packages/SystemUI/tests/src/com/android/systemui/keyguard/ui/viewmodel/KeyguardClockViewModelTest.kt index 01754c4b5598..1d98dc3a8f47 100644 --- a/packages/SystemUI/tests/src/com/android/systemui/keyguard/ui/viewmodel/KeyguardClockViewModelTest.kt +++ b/packages/SystemUI/tests/src/com/android/systemui/keyguard/ui/viewmodel/KeyguardClockViewModelTest.kt @@ -19,7 +19,6 @@ package com.android.systemui.keyguard.ui.viewmodel import android.platform.test.annotations.DisableFlags import android.platform.test.annotations.EnableFlags import androidx.test.filters.SmallTest -import com.android.keyguard.KeyguardClockSwitch import com.android.systemui.Flags import com.android.systemui.SysuiTestCase import com.android.systemui.coroutines.collectLastValue @@ -27,175 +26,195 @@ import com.android.systemui.flags.DisableSceneContainer import com.android.systemui.keyguard.data.repository.fakeKeyguardClockRepository import com.android.systemui.keyguard.data.repository.keyguardClockRepository import com.android.systemui.keyguard.data.repository.keyguardRepository -import com.android.systemui.keyguard.shared.model.SettingsClockSize -import com.android.systemui.kosmos.Kosmos +import com.android.systemui.keyguard.shared.model.ClockSize +import com.android.systemui.keyguard.shared.model.ClockSizeSetting +import com.android.systemui.keyguard.ui.viewmodel.KeyguardClockViewModel.ClockLayout import com.android.systemui.kosmos.testScope +import com.android.systemui.plugins.clocks.ClockConfig import com.android.systemui.plugins.clocks.ClockController import com.android.systemui.plugins.clocks.ClockFaceConfig import com.android.systemui.plugins.clocks.ClockFaceController import com.android.systemui.res.R import com.android.systemui.shade.data.repository.shadeRepository import com.android.systemui.shade.shared.model.ShadeMode +import com.android.systemui.statusbar.ui.fakeSystemBarUtilsProxy import com.android.systemui.testKosmos -import com.android.systemui.util.Utils import com.android.systemui.util.mockito.whenever import com.google.common.truth.Truth.assertThat import kotlin.test.Test -import kotlinx.coroutines.test.TestScope import kotlinx.coroutines.test.runTest import org.junit.Before import org.junit.runner.RunWith import org.junit.runners.JUnit4 -import org.mockito.Mockito.mock +import org.mockito.Mock +import org.mockito.MockitoAnnotations @SmallTest @RunWith(JUnit4::class) @DisableSceneContainer class KeyguardClockViewModelTest : SysuiTestCase() { - private lateinit var kosmos: Kosmos - private lateinit var underTest: KeyguardClockViewModel - private lateinit var testScope: TestScope - private lateinit var clockController: ClockController - private lateinit var config: ClockFaceConfig + val kosmos = testKosmos() + val testScope = kosmos.testScope + val underTest = kosmos.keyguardClockViewModel + val res = context.resources + + @Mock lateinit var clockController: ClockController + @Mock lateinit var largeClock: ClockFaceController + @Mock lateinit var smallClock: ClockFaceController + + var config = ClockConfig("TEST", "Test", "") + var faceConfig = ClockFaceConfig() @Before fun setup() { - kosmos = testKosmos() - testScope = kosmos.testScope - underTest = kosmos.keyguardClockViewModel - - clockController = mock(ClockController::class.java) - val largeClock = mock(ClockFaceController::class.java) - config = mock(ClockFaceConfig::class.java) + MockitoAnnotations.initMocks(this) whenever(clockController.largeClock).thenReturn(largeClock) - whenever(largeClock.config).thenReturn(config) + whenever(clockController.smallClock).thenReturn(smallClock) + whenever(clockController.config).thenAnswer { config } + whenever(largeClock.config).thenAnswer { faceConfig } + whenever(smallClock.config).thenAnswer { faceConfig } } @Test fun currentClockLayout_splitShadeOn_clockCentered_largeClock() = testScope.runTest { + val currentClockLayout by collectLastValue(underTest.currentClockLayout) + with(kosmos) { shadeRepository.setShadeMode(ShadeMode.Split) keyguardRepository.setClockShouldBeCentered(true) - keyguardClockRepository.setClockSize(KeyguardClockSwitch.LARGE) + keyguardClockRepository.setClockSize(ClockSize.LARGE) } - val currentClockLayout by collectLastValue(underTest.currentClockLayout) - assertThat(currentClockLayout).isEqualTo(KeyguardClockViewModel.ClockLayout.LARGE_CLOCK) + + assertThat(currentClockLayout).isEqualTo(ClockLayout.LARGE_CLOCK) } @Test fun currentClockLayout_splitShadeOn_clockNotCentered_largeClock_splitShadeLargeClock() = testScope.runTest { + val currentClockLayout by collectLastValue(underTest.currentClockLayout) + with(kosmos) { shadeRepository.setShadeMode(ShadeMode.Split) keyguardRepository.setClockShouldBeCentered(false) - keyguardClockRepository.setClockSize(KeyguardClockSwitch.LARGE) + keyguardClockRepository.setClockSize(ClockSize.LARGE) } - val currentClockLayout by collectLastValue(underTest.currentClockLayout) - assertThat(currentClockLayout) - .isEqualTo(KeyguardClockViewModel.ClockLayout.SPLIT_SHADE_LARGE_CLOCK) + + assertThat(currentClockLayout).isEqualTo(ClockLayout.SPLIT_SHADE_LARGE_CLOCK) } @Test fun currentClockLayout_splitShadeOn_clockNotCentered_smallClock_splitShadeSmallClock() = testScope.runTest { + val currentClockLayout by collectLastValue(underTest.currentClockLayout) + with(kosmos) { shadeRepository.setShadeMode(ShadeMode.Split) keyguardRepository.setClockShouldBeCentered(false) - keyguardClockRepository.setClockSize(KeyguardClockSwitch.SMALL) + keyguardClockRepository.setClockSize(ClockSize.SMALL) } - val currentClockLayout by collectLastValue(underTest.currentClockLayout) - assertThat(currentClockLayout) - .isEqualTo(KeyguardClockViewModel.ClockLayout.SPLIT_SHADE_SMALL_CLOCK) + + assertThat(currentClockLayout).isEqualTo(ClockLayout.SPLIT_SHADE_SMALL_CLOCK) } @Test fun currentClockLayout_singleShade_smallClock_smallClock() = testScope.runTest { + val currentClockLayout by collectLastValue(underTest.currentClockLayout) + with(kosmos) { shadeRepository.setShadeMode(ShadeMode.Single) - keyguardClockRepository.setClockSize(KeyguardClockSwitch.SMALL) + keyguardClockRepository.setClockSize(ClockSize.SMALL) } - val currentClockLayout by collectLastValue(underTest.currentClockLayout) - assertThat(currentClockLayout).isEqualTo(KeyguardClockViewModel.ClockLayout.SMALL_CLOCK) + + assertThat(currentClockLayout).isEqualTo(ClockLayout.SMALL_CLOCK) } @Test fun currentClockLayout_singleShade_largeClock_largeClock() = testScope.runTest { + val currentClockLayout by collectLastValue(underTest.currentClockLayout) + with(kosmos) { shadeRepository.setShadeMode(ShadeMode.Single) - keyguardClockRepository.setClockSize(KeyguardClockSwitch.LARGE) + keyguardClockRepository.setClockSize(ClockSize.LARGE) } - val currentClockLayout by collectLastValue(underTest.currentClockLayout) - assertThat(currentClockLayout).isEqualTo(KeyguardClockViewModel.ClockLayout.LARGE_CLOCK) + + assertThat(currentClockLayout).isEqualTo(ClockLayout.LARGE_CLOCK) } @Test fun hasCustomPositionUpdatedAnimation_withConfigTrue_isTrue() = testScope.runTest { + val hasCustomPositionUpdatedAnimation by + collectLastValue(underTest.hasCustomPositionUpdatedAnimation) + with(kosmos) { - keyguardClockRepository.setClockSize(KeyguardClockSwitch.LARGE) - whenever(config.hasCustomPositionUpdatedAnimation).thenReturn(true) + keyguardClockRepository.setClockSize(ClockSize.LARGE) + faceConfig = ClockFaceConfig(hasCustomPositionUpdatedAnimation = true) fakeKeyguardClockRepository.setCurrentClock(clockController) } - val hasCustomPositionUpdatedAnimation by - collectLastValue(underTest.hasCustomPositionUpdatedAnimation) assertThat(hasCustomPositionUpdatedAnimation).isEqualTo(true) } @Test fun hasCustomPositionUpdatedAnimation_withConfigFalse_isFalse() = testScope.runTest { - with(kosmos) { - keyguardClockRepository.setClockSize(KeyguardClockSwitch.LARGE) + val hasCustomPositionUpdatedAnimation by + collectLastValue(underTest.hasCustomPositionUpdatedAnimation) - whenever(config.hasCustomPositionUpdatedAnimation).thenReturn(false) + with(kosmos) { + keyguardClockRepository.setClockSize(ClockSize.LARGE) + faceConfig = ClockFaceConfig(hasCustomPositionUpdatedAnimation = false) fakeKeyguardClockRepository.setCurrentClock(clockController) } - val hasCustomPositionUpdatedAnimation by - collectLastValue(underTest.hasCustomPositionUpdatedAnimation) assertThat(hasCustomPositionUpdatedAnimation).isEqualTo(false) } @Test fun testClockSize_alwaysSmallClockSize() = testScope.runTest { - kosmos.fakeKeyguardClockRepository.setSelectedClockSize(SettingsClockSize.SMALL) - kosmos.keyguardClockRepository.setClockSize(KeyguardClockSwitch.LARGE) - val value by collectLastValue(underTest.clockSize) - assertThat(value).isEqualTo(KeyguardClockSwitch.SMALL) + + with(kosmos) { + fakeKeyguardClockRepository.setSelectedClockSize(ClockSizeSetting.SMALL) + keyguardClockRepository.setClockSize(ClockSize.LARGE) + } + + assertThat(value).isEqualTo(ClockSize.SMALL) } @Test fun testClockSize_dynamicClockSize() = testScope.runTest { - kosmos.keyguardClockRepository.setClockSize(KeyguardClockSwitch.SMALL) - kosmos.fakeKeyguardClockRepository.setSelectedClockSize(SettingsClockSize.DYNAMIC) - val value by collectLastValue(underTest.clockSize) - assertThat(value).isEqualTo(KeyguardClockSwitch.SMALL) + with(kosmos) { + val value by collectLastValue(underTest.clockSize) + fakeKeyguardClockRepository.setSelectedClockSize(ClockSizeSetting.DYNAMIC) - kosmos.keyguardClockRepository.setClockSize(KeyguardClockSwitch.LARGE) - assertThat(value).isEqualTo(KeyguardClockSwitch.LARGE) + keyguardClockRepository.setClockSize(ClockSize.SMALL) + assertThat(value).isEqualTo(ClockSize.SMALL) + + keyguardClockRepository.setClockSize(ClockSize.LARGE) + assertThat(value).isEqualTo(ClockSize.LARGE) + } } @Test fun isLargeClockVisible_whenLargeClockSize_isTrue() = testScope.runTest { - kosmos.keyguardClockRepository.setClockSize(KeyguardClockSwitch.LARGE) val value by collectLastValue(underTest.isLargeClockVisible) + kosmos.keyguardClockRepository.setClockSize(ClockSize.LARGE) assertThat(value).isEqualTo(true) } @Test fun isLargeClockVisible_whenSmallClockSize_isFalse() = testScope.runTest { - kosmos.keyguardClockRepository.setClockSize(KeyguardClockSwitch.SMALL) val value by collectLastValue(underTest.isLargeClockVisible) + kosmos.keyguardClockRepository.setClockSize(ClockSize.SMALL) assertThat(value).isEqualTo(false) } @@ -203,44 +222,59 @@ class KeyguardClockViewModelTest : SysuiTestCase() { @EnableFlags(Flags.FLAG_COMPOSE_LOCKSCREEN) fun testSmallClockTop_splitShade_composeLockscreenOn() = testScope.runTest { - kosmos.shadeRepository.setShadeMode(ShadeMode.Split) - assertThat(underTest.getSmallClockTopMargin(context)) - .isEqualTo( - context.resources.getDimensionPixelSize( - R.dimen.keyguard_split_shade_top_margin - ) - Utils.getStatusBarHeaderHeightKeyguard(context) - ) + with(kosmos) { + shadeRepository.setShadeMode(ShadeMode.Split) + fakeSystemBarUtilsProxy.fakeKeyguardStatusBarHeight = KEYGUARD_STATUS_BAR_HEIGHT + } + + val expected = + res.getDimensionPixelSize(R.dimen.keyguard_split_shade_top_margin) - + KEYGUARD_STATUS_BAR_HEIGHT + assertThat(underTest.getSmallClockTopMargin()).isEqualTo(expected) } @Test @DisableFlags(Flags.FLAG_COMPOSE_LOCKSCREEN) fun testSmallClockTop_splitShade_composeLockscreenOff() = testScope.runTest { - kosmos.shadeRepository.setShadeMode(ShadeMode.Split) - assertThat(underTest.getSmallClockTopMargin(context)) - .isEqualTo( - context.resources.getDimensionPixelSize(R.dimen.keyguard_split_shade_top_margin) - ) + with(kosmos) { + shadeRepository.setShadeMode(ShadeMode.Split) + fakeSystemBarUtilsProxy.fakeKeyguardStatusBarHeight = KEYGUARD_STATUS_BAR_HEIGHT + } + + assertThat(underTest.getSmallClockTopMargin()) + .isEqualTo(res.getDimensionPixelSize(R.dimen.keyguard_split_shade_top_margin)) } @Test @EnableFlags(Flags.FLAG_COMPOSE_LOCKSCREEN) fun testSmallClockTop_nonSplitShade_composeLockscreenOn() = testScope.runTest { - assertThat(underTest.getSmallClockTopMargin(context)) - .isEqualTo( - context.resources.getDimensionPixelSize(R.dimen.keyguard_clock_top_margin) - ) + with(kosmos) { + shadeRepository.setShadeMode(ShadeMode.Single) + fakeSystemBarUtilsProxy.fakeKeyguardStatusBarHeight = KEYGUARD_STATUS_BAR_HEIGHT + } + + assertThat(underTest.getSmallClockTopMargin()) + .isEqualTo(res.getDimensionPixelSize(R.dimen.keyguard_clock_top_margin)) } @Test @DisableFlags(Flags.FLAG_COMPOSE_LOCKSCREEN) fun testSmallClockTop_nonSplitShade_composeLockscreenOff() = testScope.runTest { - assertThat(underTest.getSmallClockTopMargin(context)) - .isEqualTo( - context.resources.getDimensionPixelSize(R.dimen.keyguard_clock_top_margin) + - Utils.getStatusBarHeaderHeightKeyguard(context) - ) + with(kosmos) { + shadeRepository.setShadeMode(ShadeMode.Single) + fakeSystemBarUtilsProxy.fakeKeyguardStatusBarHeight = KEYGUARD_STATUS_BAR_HEIGHT + } + + val expected = + res.getDimensionPixelSize(R.dimen.keyguard_clock_top_margin) + + KEYGUARD_STATUS_BAR_HEIGHT + assertThat(underTest.getSmallClockTopMargin()).isEqualTo(expected) } + + companion object { + private const val KEYGUARD_STATUS_BAR_HEIGHT = 20 + } } diff --git a/packages/SystemUI/tests/src/com/android/systemui/keyguard/util/KeyguardTransitionRepositorySpySubject.kt b/packages/SystemUI/tests/src/com/android/systemui/keyguard/util/KeyguardTransitionRepositorySpySubject.kt index a08e4913d553..af785c24bb5c 100644 --- a/packages/SystemUI/tests/src/com/android/systemui/keyguard/util/KeyguardTransitionRepositorySpySubject.kt +++ b/packages/SystemUI/tests/src/com/android/systemui/keyguard/util/KeyguardTransitionRepositorySpySubject.kt @@ -21,6 +21,8 @@ import com.android.systemui.keyguard.data.repository.KeyguardTransitionRepositor import com.android.systemui.keyguard.shared.model.KeyguardState import com.android.systemui.keyguard.shared.model.TransitionInfo import com.android.systemui.keyguard.shared.model.TransitionModeOnCanceled +import com.android.systemui.util.mockito.any +import com.android.systemui.util.mockito.withArgCaptor import com.google.common.truth.FailureMetadata import com.google.common.truth.Subject import com.google.common.truth.Truth @@ -28,6 +30,8 @@ import com.google.common.truth.Truth.assertAbout import junit.framework.Assert.assertEquals import kotlin.test.fail import org.mockito.Mockito +import org.mockito.Mockito.never +import org.mockito.Mockito.verify /** [Subject] used to make assertions about a [Mockito.spy] KeyguardTransitionRepository. */ class KeyguardTransitionRepositorySpySubject @@ -75,34 +79,19 @@ private constructor( animatorAssertion: (Subject) -> Unit, modeOnCanceled: TransitionModeOnCanceled? = null, ) { - // TODO(b/331799060): Remove this workaround once atest supports mocking suspend functions. - Mockito.mockingDetails(repository).invocations.forEach { invocation -> - if (invocation.method.equals(KeyguardTransitionRepository::startTransition.name)) { - val transitionInfo = invocation.arguments.firstOrNull() as TransitionInfo + withArgCaptor<TransitionInfo> { verify(repository).startTransition(capture()) } + .also { transitionInfo -> assertEquals(to, transitionInfo.to) animatorAssertion.invoke(Truth.assertThat(transitionInfo.animator)) from?.let { assertEquals(it, transitionInfo.from) } ownerName?.let { assertEquals(it, transitionInfo.ownerName) } modeOnCanceled?.let { assertEquals(it, transitionInfo.modeOnCanceled) } - invocation.markVerified() } - } } /** Verifies that [KeyguardTransitionRepository.startTransition] was never called. */ suspend fun noTransitionsStarted() { - // TODO(b/331799060): Remove this workaround once atest supports mocking suspend functions. - Mockito.mockingDetails(repository).invocations.forEach { - if ( - it.method.equals(KeyguardTransitionRepository::startTransition.name) && - !it.isVerified - ) { - fail( - "Expected no transitions started, however this transition was started: " + - it.arguments.firstOrNull() - ) - } - } + verify(repository, never()).startTransition(any()) } companion object { diff --git a/packages/SystemUI/tests/src/com/android/systemui/media/controls/domain/pipeline/MediaDataFilterImplTest.kt b/packages/SystemUI/tests/src/com/android/systemui/media/controls/domain/pipeline/MediaDataFilterImplTest.kt index 8f73811199ba..b3cfcf251a47 100644 --- a/packages/SystemUI/tests/src/com/android/systemui/media/controls/domain/pipeline/MediaDataFilterImplTest.kt +++ b/packages/SystemUI/tests/src/com/android/systemui/media/controls/domain/pipeline/MediaDataFilterImplTest.kt @@ -28,6 +28,7 @@ import com.android.systemui.coroutines.collectLastValue import com.android.systemui.media.controls.MediaTestUtils import com.android.systemui.media.controls.data.repository.MediaFilterRepository import com.android.systemui.media.controls.shared.model.EXTRA_KEY_TRIGGER_RESUME +import com.android.systemui.media.controls.shared.model.MediaCommonModel import com.android.systemui.media.controls.shared.model.MediaData import com.android.systemui.media.controls.shared.model.MediaDataLoadingModel import com.android.systemui.media.controls.shared.model.SmartspaceMediaData @@ -165,86 +166,88 @@ class MediaDataFilterImplTest : SysuiTestCase() { @Test fun onDataLoadedForCurrentUser_updatesLoadedStates() = testScope.runTest { - val mediaDataLoadedStates by collectLastValue(repository.mediaDataLoadedStates) - val mediaDataLoadingModel = listOf(MediaDataLoadingModel.Loaded(dataMain.instanceId)) + val sortedMedia by collectLastValue(repository.sortedMedia) + val mediaCommonModel = + MediaCommonModel.MediaControl(MediaDataLoadingModel.Loaded(dataMain.instanceId)) mediaDataFilter.onMediaDataLoaded(KEY, null, dataMain) verify(listener) .onMediaDataLoaded(eq(KEY), eq(null), eq(dataMain), eq(true), eq(0), eq(false)) - assertThat(mediaDataLoadedStates).isEqualTo(mediaDataLoadingModel) + assertThat(sortedMedia?.values).containsExactly(mediaCommonModel) } @Test fun onDataLoadedForGuest_doesNotUpdateLoadedStates() = testScope.runTest { - val mediaDataLoadedStates by collectLastValue(repository.mediaDataLoadedStates) - val mediaLoadedStatesModel = listOf(MediaDataLoadingModel.Loaded(dataMain.instanceId)) + val sortedMedia by collectLastValue(repository.sortedMedia) + val mediaCommonModel = + MediaCommonModel.MediaControl(MediaDataLoadingModel.Loaded(dataMain.instanceId)) mediaDataFilter.onMediaDataLoaded(KEY, null, dataGuest) verify(listener, never()) .onMediaDataLoaded(any(), any(), any(), anyBoolean(), anyInt(), anyBoolean()) - assertThat(mediaDataLoadedStates).isNotEqualTo(mediaLoadedStatesModel) + assertThat(sortedMedia?.values).doesNotContain(mediaCommonModel) } @Test fun onRemovedForCurrent_updatesLoadedStates() = testScope.runTest { - val mediaDataLoadedStates by collectLastValue(repository.mediaDataLoadedStates) - val mediaLoadedStatesModel = - mutableListOf(MediaDataLoadingModel.Loaded(dataMain.instanceId)) + val sortedMedia by collectLastValue(repository.sortedMedia) + val mediaCommonModel = + MediaCommonModel.MediaControl(MediaDataLoadingModel.Loaded(dataMain.instanceId)) // GIVEN a media was removed for main user mediaDataFilter.onMediaDataLoaded(KEY, null, dataMain) - assertThat(mediaDataLoadedStates).isEqualTo(mediaLoadedStatesModel) + assertThat(sortedMedia?.values).containsExactly(mediaCommonModel) - mediaLoadedStatesModel.remove(MediaDataLoadingModel.Loaded(dataMain.instanceId)) mediaDataFilter.onMediaDataRemoved(KEY) verify(listener).onMediaDataRemoved(eq(KEY)) - assertThat(mediaDataLoadedStates).isEqualTo(mediaLoadedStatesModel) + assertThat(sortedMedia?.values).doesNotContain(mediaCommonModel) } @Test fun onRemovedForGuest_doesNotUpdateLoadedStates() = testScope.runTest { - val mediaDataLoadedStates by collectLastValue(repository.mediaDataLoadedStates) + val sortedMedia by collectLastValue(repository.sortedMedia) // GIVEN a media was removed for guest user mediaDataFilter.onMediaDataLoaded(KEY, null, dataGuest) mediaDataFilter.onMediaDataRemoved(KEY) verify(listener, never()).onMediaDataRemoved(eq(KEY)) - assertThat(mediaDataLoadedStates).isEmpty() + assertThat(sortedMedia).isEmpty() } @Test fun onUserSwitched_removesOldUserControls() = testScope.runTest { - val mediaDataLoadedStates by collectLastValue(repository.mediaDataLoadedStates) - val mediaLoadedStatesModel = listOf(MediaDataLoadingModel.Loaded(dataMain.instanceId)) + val sortedMedia by collectLastValue(repository.sortedMedia) + val mediaLoaded = MediaDataLoadingModel.Loaded(dataMain.instanceId) // GIVEN that we have a media loaded for main user mediaDataFilter.onMediaDataLoaded(KEY, null, dataMain) - assertThat(mediaDataLoadedStates).isEqualTo(mediaLoadedStatesModel) + assertThat(sortedMedia?.values) + .containsExactly(MediaCommonModel.MediaControl(mediaLoaded)) // and we switch to guest user setUser(USER_GUEST) // THEN we should remove the main user's media verify(listener).onMediaDataRemoved(eq(KEY)) - assertThat(mediaDataLoadedStates).isEmpty() + assertThat(sortedMedia).isEmpty() } @Test fun onUserSwitched_addsNewUserControls() = testScope.runTest { - val mediaDataLoadedStates by collectLastValue(repository.mediaDataLoadedStates) - val guestLoadedStatesModel = listOf(MediaDataLoadingModel.Loaded(dataGuest.instanceId)) - val mainLoadedStatesModel = listOf(MediaDataLoadingModel.Loaded(dataMain.instanceId)) + val sortedMedia by collectLastValue(repository.sortedMedia) + val guestLoadedStatesModel = MediaDataLoadingModel.Loaded(dataGuest.instanceId) + val mainLoadedStatesModel = MediaDataLoadingModel.Loaded(dataMain.instanceId) // GIVEN that we had some media for both users mediaDataFilter.onMediaDataLoaded(KEY, null, dataMain) @@ -267,14 +270,16 @@ class MediaDataFilterImplTest : SysuiTestCase() { anyInt(), anyBoolean() ) - assertThat(mediaDataLoadedStates).isEqualTo(guestLoadedStatesModel) - assertThat(mediaDataLoadedStates).isNotEqualTo(mainLoadedStatesModel) + assertThat(sortedMedia?.values) + .containsExactly(MediaCommonModel.MediaControl(guestLoadedStatesModel)) + assertThat(sortedMedia?.values) + .doesNotContain(MediaCommonModel.MediaControl(mainLoadedStatesModel)) } @Test fun onProfileChanged_profileUnavailable_updateStates() = testScope.runTest { - val mediaDataLoadedStates by collectLastValue(repository.mediaDataLoadedStates) + val sortedMedia by collectLastValue(repository.sortedMedia) // GIVEN that we had some media for both profiles mediaDataFilter.onMediaDataLoaded(KEY, null, dataMain) @@ -283,10 +288,11 @@ class MediaDataFilterImplTest : SysuiTestCase() { // and we change profile status setPrivateProfileUnavailable() - val mediaLoadedStatesModel = listOf(MediaDataLoadingModel.Loaded(dataMain.instanceId)) + val mediaLoadedStatesModel = MediaDataLoadingModel.Loaded(dataMain.instanceId) // THEN we should remove the private profile media verify(listener).onMediaDataRemoved(eq(KEY_ALT)) - assertThat(mediaDataLoadedStates).isEqualTo(mediaLoadedStatesModel) + assertThat(sortedMedia?.values) + .containsExactly(MediaCommonModel.MediaControl(mediaLoadedStatesModel)) } @Test @@ -515,14 +521,14 @@ class MediaDataFilterImplTest : SysuiTestCase() { val selectedUserEntries by collectLastValue(repository.selectedUserEntries) val smartspaceMediaData by collectLastValue(repository.smartspaceMediaData) val reactivatedKey by collectLastValue(repository.reactivatedId) - val recommendationsLoadingState by - collectLastValue(repository.recommendationsLoadingState) + val sortedMedia by collectLastValue(repository.sortedMedia) val recommendationsLoadingModel = SmartspaceMediaLoadingModel.Loaded(SMARTSPACE_KEY, isPrioritized = true) mediaDataFilter.onSmartspaceMediaDataLoaded(SMARTSPACE_KEY, smartspaceData) - assertThat(recommendationsLoadingState).isEqualTo(recommendationsLoadingModel) + assertThat(sortedMedia?.values) + .containsExactly(MediaCommonModel.MediaRecommendations(recommendationsLoadingModel)) assertThat( hasActiveMediaOrRecommendation( selectedUserEntries, @@ -544,14 +550,13 @@ class MediaDataFilterImplTest : SysuiTestCase() { val selectedUserEntries by collectLastValue(repository.selectedUserEntries) val smartspaceMediaData by collectLastValue(repository.smartspaceMediaData) val reactivatedKey by collectLastValue(repository.reactivatedId) - val recommendationsLoadingState by - collectLastValue(repository.recommendationsLoadingState) + val sortedMedia by collectLastValue(repository.sortedMedia) whenever(smartspaceData.isActive).thenReturn(false) mediaDataFilter.onSmartspaceMediaDataLoaded(SMARTSPACE_KEY, smartspaceData) - assertThat(recommendationsLoadingState).isEqualTo(SmartspaceMediaLoadingModel.Unknown) + assertThat(sortedMedia).isEmpty() assertThat( hasActiveMediaOrRecommendation( selectedUserEntries, @@ -574,16 +579,22 @@ class MediaDataFilterImplTest : SysuiTestCase() { val selectedUserEntries by collectLastValue(repository.selectedUserEntries) val smartspaceMediaData by collectLastValue(repository.smartspaceMediaData) val reactivatedKey by collectLastValue(repository.reactivatedId) - val recommendationsLoadingState by - collectLastValue(repository.recommendationsLoadingState) - val recommendationsLoadingModel = - SmartspaceMediaLoadingModel.Loaded(SMARTSPACE_KEY, isPrioritized = true) + val sortedMedia by collectLastValue(repository.sortedMedia) + val recsCommonModel = + MediaCommonModel.MediaRecommendations( + SmartspaceMediaLoadingModel.Loaded(SMARTSPACE_KEY, isPrioritized = true) + ) + val controlCommonModel = + MediaCommonModel.MediaControl( + MediaDataLoadingModel.Loaded(dataMain.instanceId), + true + ) val dataOld = dataMain.copy(active = false, lastActive = clock.elapsedRealtime()) mediaDataFilter.onMediaDataLoaded(KEY, null, dataOld) clock.advanceTime(MediaDataFilterImpl.SMARTSPACE_MAX_AGE + 100) mediaDataFilter.onSmartspaceMediaDataLoaded(SMARTSPACE_KEY, smartspaceData) - assertThat(recommendationsLoadingState).isEqualTo(recommendationsLoadingModel) + assertThat(sortedMedia?.values).containsExactly(recsCommonModel, controlCommonModel) assertThat( hasActiveMediaOrRecommendation( selectedUserEntries, @@ -605,8 +616,7 @@ class MediaDataFilterImplTest : SysuiTestCase() { val selectedUserEntries by collectLastValue(repository.selectedUserEntries) val smartspaceMediaData by collectLastValue(repository.smartspaceMediaData) val reactivatedKey by collectLastValue(repository.reactivatedId) - val recommendationsLoadingState by - collectLastValue(repository.recommendationsLoadingState) + val sortedMedia by collectLastValue(repository.sortedMedia) whenever(smartspaceData.isActive).thenReturn(false) val dataOld = dataMain.copy(active = false, lastActive = clock.elapsedRealtime()) @@ -614,7 +624,12 @@ class MediaDataFilterImplTest : SysuiTestCase() { clock.advanceTime(MediaDataFilterImpl.SMARTSPACE_MAX_AGE + 100) mediaDataFilter.onSmartspaceMediaDataLoaded(SMARTSPACE_KEY, smartspaceData) - assertThat(recommendationsLoadingState).isEqualTo(SmartspaceMediaLoadingModel.Unknown) + assertThat(sortedMedia?.values) + .doesNotContain( + MediaCommonModel.MediaRecommendations( + SmartspaceMediaLoadingModel.Loaded(SMARTSPACE_KEY) + ) + ) assertThat( hasActiveMediaOrRecommendation( selectedUserEntries, @@ -635,18 +650,20 @@ class MediaDataFilterImplTest : SysuiTestCase() { val selectedUserEntries by collectLastValue(repository.selectedUserEntries) val smartspaceMediaData by collectLastValue(repository.smartspaceMediaData) val reactivatedKey by collectLastValue(repository.reactivatedId) - val recommendationsLoadingState by - collectLastValue(repository.recommendationsLoadingState) - val mediaDataLoadedStates by collectLastValue(repository.mediaDataLoadedStates) + val sortedMedia by collectLastValue(repository.sortedMedia) whenever(smartspaceData.isActive).thenReturn(false) // WHEN we have media that was recently played, but not currently active val dataCurrent = dataMain.copy(active = false, lastActive = clock.elapsedRealtime()) - val mediaLoadedStatesModel = listOf(MediaDataLoadingModel.Loaded(dataMain.instanceId)) + val controlCommonModel = + MediaCommonModel.MediaControl( + MediaDataLoadingModel.Loaded(dataMain.instanceId), + true + ) mediaDataFilter.onMediaDataLoaded(KEY, null, dataCurrent) - assertThat(mediaDataLoadedStates).isEqualTo(mediaLoadedStatesModel) + assertThat(sortedMedia?.values).containsExactly(controlCommonModel) verify(listener) .onMediaDataLoaded(eq(KEY), eq(null), eq(dataCurrent), eq(true), eq(0), eq(false)) @@ -654,7 +671,7 @@ class MediaDataFilterImplTest : SysuiTestCase() { mediaDataFilter.onSmartspaceMediaDataLoaded(SMARTSPACE_KEY, smartspaceData) // THEN we should treat the media as not active instead - assertThat(recommendationsLoadingState).isEqualTo(SmartspaceMediaLoadingModel.Unknown) + assertThat(sortedMedia?.values).containsExactly(controlCommonModel) assertThat( hasActiveMediaOrRecommendation( selectedUserEntries, @@ -677,16 +694,18 @@ class MediaDataFilterImplTest : SysuiTestCase() { val selectedUserEntries by collectLastValue(repository.selectedUserEntries) val smartspaceMediaData by collectLastValue(repository.smartspaceMediaData) val reactivatedKey by collectLastValue(repository.reactivatedId) - val recommendationsLoadingState by - collectLastValue(repository.recommendationsLoadingState) - val mediaDataLoadedStates by collectLastValue(repository.mediaDataLoadedStates) + val sortedMedia by collectLastValue(repository.sortedMedia) whenever(smartspaceData.isValid()).thenReturn(false) // WHEN we have media that was recently played, but not currently active val dataCurrent = dataMain.copy(active = false, lastActive = clock.elapsedRealtime()) - val mediaLoadedStatesModel = listOf(MediaDataLoadingModel.Loaded(dataMain.instanceId)) + val controlCommonModel = + MediaCommonModel.MediaControl( + MediaDataLoadingModel.Loaded(dataMain.instanceId), + true + ) mediaDataFilter.onMediaDataLoaded(KEY, null, dataCurrent) - assertThat(mediaDataLoadedStates).isEqualTo(mediaLoadedStatesModel) + assertThat(sortedMedia?.values).containsExactly(controlCommonModel) verify(listener) .onMediaDataLoaded(eq(KEY), eq(null), eq(dataCurrent), eq(true), eq(0), eq(false)) @@ -696,7 +715,7 @@ class MediaDataFilterImplTest : SysuiTestCase() { // THEN we should treat the media as active instead val dataCurrentAndActive = dataCurrent.copy(active = true) - assertThat(mediaDataLoadedStates).isEqualTo(mediaLoadedStatesModel) + assertThat(sortedMedia?.values).containsExactly(controlCommonModel) assertThat( hasActiveMediaOrRecommendation( selectedUserEntries, @@ -715,7 +734,6 @@ class MediaDataFilterImplTest : SysuiTestCase() { eq(true) ) // Smartspace update shouldn't be propagated for the empty rec list. - assertThat(recommendationsLoadingState).isEqualTo(SmartspaceMediaLoadingModel.Unknown) verify(listener, never()).onSmartspaceMediaDataLoaded(any(), any(), anyBoolean()) verify(logger, never()).logRecommendationAdded(any(), any()) verify(logger).logRecommendationActivated(eq(APP_UID), eq(PACKAGE), eq(INSTANCE_ID)) @@ -727,17 +745,22 @@ class MediaDataFilterImplTest : SysuiTestCase() { val selectedUserEntries by collectLastValue(repository.selectedUserEntries) val smartspaceMediaData by collectLastValue(repository.smartspaceMediaData) val reactivatedKey by collectLastValue(repository.reactivatedId) - val recommendationsLoadingState by - collectLastValue(repository.recommendationsLoadingState) - val mediaDataLoadedStates by collectLastValue(repository.mediaDataLoadedStates) + val sortedMedia by collectLastValue(repository.sortedMedia) // WHEN we have media that was recently played, but not currently active val dataCurrent = dataMain.copy(active = false, lastActive = clock.elapsedRealtime()) - val mediaDataLoadingModel = listOf(MediaDataLoadingModel.Loaded(dataMain.instanceId)) - val recommendationsLoadingModel = SmartspaceMediaLoadingModel.Loaded(SMARTSPACE_KEY) + val controlCommonModel = + MediaCommonModel.MediaControl( + MediaDataLoadingModel.Loaded(dataMain.instanceId), + true + ) + val recsCommonModel = + MediaCommonModel.MediaRecommendations( + SmartspaceMediaLoadingModel.Loaded(SMARTSPACE_KEY) + ) mediaDataFilter.onMediaDataLoaded(KEY, null, dataCurrent) - assertThat(mediaDataLoadedStates).isEqualTo(mediaDataLoadingModel) + assertThat(sortedMedia?.values).containsExactly(controlCommonModel) verify(listener) .onMediaDataLoaded(eq(KEY), eq(null), eq(dataCurrent), eq(true), eq(0), eq(false)) @@ -756,7 +779,6 @@ class MediaDataFilterImplTest : SysuiTestCase() { eq(100), eq(true) ) - assertThat(mediaDataLoadedStates).isEqualTo(mediaDataLoadingModel) assertThat( hasActiveMediaOrRecommendation( selectedUserEntries, @@ -766,7 +788,7 @@ class MediaDataFilterImplTest : SysuiTestCase() { ) .isTrue() // Smartspace update should also be propagated but not prioritized. - assertThat(recommendationsLoadingState).isEqualTo(recommendationsLoadingModel) + assertThat(sortedMedia?.values).containsExactly(controlCommonModel, recsCommonModel) verify(listener) .onSmartspaceMediaDataLoaded(eq(SMARTSPACE_KEY), eq(smartspaceData), eq(false)) verify(logger).logRecommendationAdded(SMARTSPACE_PACKAGE, SMARTSPACE_INSTANCE_ID) @@ -779,15 +801,13 @@ class MediaDataFilterImplTest : SysuiTestCase() { val selectedUserEntries by collectLastValue(repository.selectedUserEntries) val smartspaceMediaData by collectLastValue(repository.smartspaceMediaData) val reactivatedKey by collectLastValue(repository.reactivatedId) - val recommendationsLoadingState by - collectLastValue(repository.recommendationsLoadingState) - val recommendationsLoadingModel = SmartspaceMediaLoadingModel.Removed(SMARTSPACE_KEY) + val sortedMedia by collectLastValue(repository.sortedMedia) mediaDataFilter.onSmartspaceMediaDataLoaded(SMARTSPACE_KEY, smartspaceData) mediaDataFilter.onSmartspaceMediaDataRemoved(SMARTSPACE_KEY) verify(listener).onSmartspaceMediaDataRemoved(SMARTSPACE_KEY) - assertThat(recommendationsLoadingState).isEqualTo(recommendationsLoadingModel) + assertThat(sortedMedia?.values).isEmpty() assertThat( hasActiveMediaOrRecommendation( selectedUserEntries, @@ -805,15 +825,16 @@ class MediaDataFilterImplTest : SysuiTestCase() { val selectedUserEntries by collectLastValue(repository.selectedUserEntries) val smartspaceMediaData by collectLastValue(repository.smartspaceMediaData) val reactivatedKey by collectLastValue(repository.reactivatedId) - val mediaDataLoadedStates by collectLastValue(repository.mediaDataLoadedStates) - val recommendationsLoadingState by - collectLastValue(repository.recommendationsLoadingState) - val recommendationsLoadingModel = SmartspaceMediaLoadingModel.Removed(SMARTSPACE_KEY) - val mediaLoadedStatesModel = listOf(MediaDataLoadingModel.Loaded(dataMain.instanceId)) + val sortedMedia by collectLastValue(repository.sortedMedia) + val controlCommonModel = + MediaCommonModel.MediaControl( + MediaDataLoadingModel.Loaded(dataMain.instanceId), + true + ) val dataCurrent = dataMain.copy(active = false, lastActive = clock.elapsedRealtime()) mediaDataFilter.onMediaDataLoaded(KEY, null, dataCurrent) - assertThat(mediaDataLoadedStates).isEqualTo(mediaLoadedStatesModel) + assertThat(sortedMedia?.values).containsExactly(controlCommonModel) verify(listener) .onMediaDataLoaded(eq(KEY), eq(null), eq(dataCurrent), eq(true), eq(0), eq(false)) @@ -830,12 +851,11 @@ class MediaDataFilterImplTest : SysuiTestCase() { eq(100), eq(true) ) - assertThat(mediaDataLoadedStates).isEqualTo(mediaLoadedStatesModel) mediaDataFilter.onSmartspaceMediaDataRemoved(SMARTSPACE_KEY) verify(listener).onSmartspaceMediaDataRemoved(SMARTSPACE_KEY) - assertThat(recommendationsLoadingState).isEqualTo(recommendationsLoadingModel) + assertThat(sortedMedia?.values).containsExactly(controlCommonModel) assertThat( hasActiveMediaOrRecommendation( selectedUserEntries, @@ -853,9 +873,11 @@ class MediaDataFilterImplTest : SysuiTestCase() { val selectedUserEntries by collectLastValue(repository.selectedUserEntries) val smartspaceMediaData by collectLastValue(repository.smartspaceMediaData) val reactivatedKey by collectLastValue(repository.reactivatedId) - val recommendationsLoadingState by - collectLastValue(repository.recommendationsLoadingState) - val recommendationsLoadingModel = SmartspaceMediaLoadingModel.Loaded(SMARTSPACE_KEY) + val sortedMedia by collectLastValue(repository.sortedMedia) + val recsCommonModel = + MediaCommonModel.MediaRecommendations( + SmartspaceMediaLoadingModel.Loaded(SMARTSPACE_KEY) + ) whenever(mediaFlags.isPersistentSsCardEnabled()).thenReturn(true) whenever(smartspaceData.isActive).thenReturn(false) @@ -863,7 +885,7 @@ class MediaDataFilterImplTest : SysuiTestCase() { verify(listener) .onSmartspaceMediaDataLoaded(eq(SMARTSPACE_KEY), eq(smartspaceData), eq(false)) - assertThat(recommendationsLoadingState).isEqualTo(recommendationsLoadingModel) + assertThat(sortedMedia?.values).containsExactly(recsCommonModel) assertThat( hasActiveMediaOrRecommendation( selectedUserEntries, @@ -882,11 +904,16 @@ class MediaDataFilterImplTest : SysuiTestCase() { val selectedUserEntries by collectLastValue(repository.selectedUserEntries) val smartspaceMediaData by collectLastValue(repository.smartspaceMediaData) val reactivatedKey by collectLastValue(repository.reactivatedId) - val mediaDataLoadedStates by collectLastValue(repository.mediaDataLoadedStates) - val recommendationsLoadingState by - collectLastValue(repository.recommendationsLoadingState) - val recommendationsLoadingModel = SmartspaceMediaLoadingModel.Loaded(SMARTSPACE_KEY) - val mediaLoadedStatesModel = listOf(MediaDataLoadingModel.Loaded(dataMain.instanceId)) + val sortedMedia by collectLastValue(repository.sortedMedia) + val recsCommonModel = + MediaCommonModel.MediaRecommendations( + SmartspaceMediaLoadingModel.Loaded(SMARTSPACE_KEY) + ) + val controlCommonModel = + MediaCommonModel.MediaControl( + MediaDataLoadingModel.Loaded(dataMain.instanceId), + true + ) whenever(mediaFlags.isPersistentSsCardEnabled()).thenReturn(true) whenever(smartspaceData.isActive).thenReturn(false) @@ -897,7 +924,7 @@ class MediaDataFilterImplTest : SysuiTestCase() { verify(listener) .onMediaDataLoaded(eq(KEY), eq(null), eq(dataCurrent), eq(true), eq(0), eq(false)) - assertThat(mediaDataLoadedStates).isEqualTo(mediaLoadedStatesModel) + assertThat(sortedMedia?.values).containsExactly(controlCommonModel) // And an inactive recommendation is loaded mediaDataFilter.onSmartspaceMediaDataLoaded(SMARTSPACE_KEY, smartspaceData) @@ -907,7 +934,7 @@ class MediaDataFilterImplTest : SysuiTestCase() { .onSmartspaceMediaDataLoaded(eq(SMARTSPACE_KEY), eq(smartspaceData), eq(false)) verify(listener, never()) .onMediaDataLoaded(any(), any(), any(), anyBoolean(), anyInt(), anyBoolean()) - assertThat(recommendationsLoadingState).isEqualTo(recommendationsLoadingModel) + assertThat(sortedMedia?.values).containsExactly(controlCommonModel, recsCommonModel) assertThat( hasActiveMediaOrRecommendation( selectedUserEntries, @@ -945,18 +972,23 @@ class MediaDataFilterImplTest : SysuiTestCase() { val selectedUserEntries by collectLastValue(repository.selectedUserEntries) val smartspaceMediaData by collectLastValue(repository.smartspaceMediaData) val reactivatedKey by collectLastValue(repository.reactivatedId) - val mediaDataLoadedStates by collectLastValue(repository.mediaDataLoadedStates) - val recommendationsLoadingState by - collectLastValue(repository.recommendationsLoadingState) - val recommendationsLoadingModel = SmartspaceMediaLoadingModel.Loaded(SMARTSPACE_KEY) - val mediaLoadedStatesModel = listOf(MediaDataLoadingModel.Loaded(dataMain.instanceId)) + val sortedMedia by collectLastValue(repository.sortedMedia) + val recsCommonModel = + MediaCommonModel.MediaRecommendations( + SmartspaceMediaLoadingModel.Loaded(SMARTSPACE_KEY) + ) + val controlCommonModel = + MediaCommonModel.MediaControl( + MediaDataLoadingModel.Loaded(dataMain.instanceId), + true + ) // WHEN we have media that was recently played, but not currently active val dataCurrent = dataMain.copy(active = false, lastActive = clock.elapsedRealtime()) mediaDataFilter.onMediaDataLoaded(KEY, null, dataCurrent) verify(listener) .onMediaDataLoaded(eq(KEY), eq(null), eq(dataCurrent), eq(true), eq(0), eq(false)) - assertThat(mediaDataLoadedStates).isEqualTo(mediaLoadedStatesModel) + assertThat(sortedMedia?.values).containsExactly(controlCommonModel) // AND we get a smartspace signal with extra to trigger resume runCurrent() @@ -975,7 +1007,7 @@ class MediaDataFilterImplTest : SysuiTestCase() { eq(100), eq(true) ) - assertThat(mediaDataLoadedStates).isEqualTo(mediaLoadedStatesModel) + assertThat(sortedMedia?.values).containsExactly(controlCommonModel, recsCommonModel) assertThat( hasActiveMediaOrRecommendation( selectedUserEntries, @@ -985,7 +1017,6 @@ class MediaDataFilterImplTest : SysuiTestCase() { ) .isTrue() // And update the smartspace data state, but not prioritized - assertThat(recommendationsLoadingState).isEqualTo(recommendationsLoadingModel) verify(listener) .onSmartspaceMediaDataLoaded(eq(SMARTSPACE_KEY), eq(smartspaceData), eq(false)) } @@ -993,11 +1024,16 @@ class MediaDataFilterImplTest : SysuiTestCase() { @Test fun smartspaceLoaded_notShouldTriggerResume_doesNotTrigger() = testScope.runTest { - val mediaDataLoadedStates by collectLastValue(repository.mediaDataLoadedStates) - val recommendationsLoadingState by - collectLastValue(repository.recommendationsLoadingState) - val recommendationsLoadingModel = SmartspaceMediaLoadingModel.Loaded(SMARTSPACE_KEY) - val mediaLoadedStatesModel = listOf(MediaDataLoadingModel.Loaded(dataMain.instanceId)) + val sortedMedia by collectLastValue(repository.sortedMedia) + val recsCommonModel = + MediaCommonModel.MediaRecommendations( + SmartspaceMediaLoadingModel.Loaded(SMARTSPACE_KEY) + ) + val controlCommonModel = + MediaCommonModel.MediaControl( + MediaDataLoadingModel.Loaded(dataMain.instanceId), + true + ) // WHEN we have media that was recently played, but not currently active val dataCurrent = dataMain.copy(active = false, lastActive = clock.elapsedRealtime()) @@ -1005,7 +1041,7 @@ class MediaDataFilterImplTest : SysuiTestCase() { verify(listener) .onMediaDataLoaded(eq(KEY), eq(null), eq(dataCurrent), eq(true), eq(0), eq(false)) - assertThat(mediaDataLoadedStates).isEqualTo(mediaLoadedStatesModel) + assertThat(sortedMedia?.values).containsExactly(controlCommonModel) // AND we get a smartspace signal with extra to not trigger resume val extras = Bundle().apply { putBoolean(EXTRA_KEY_TRIGGER_RESUME, false) } @@ -1018,7 +1054,7 @@ class MediaDataFilterImplTest : SysuiTestCase() { // But the smartspace update is still propagated verify(listener) .onSmartspaceMediaDataLoaded(eq(SMARTSPACE_KEY), eq(smartspaceData), eq(false)) - assertThat(recommendationsLoadingState).isEqualTo(recommendationsLoadingModel) + assertThat(sortedMedia?.values).containsExactly(controlCommonModel, recsCommonModel) } private fun hasActiveMediaOrRecommendation( diff --git a/packages/SystemUI/tests/src/com/android/systemui/shade/GlanceableHubContainerControllerTest.kt b/packages/SystemUI/tests/src/com/android/systemui/shade/GlanceableHubContainerControllerTest.kt index ee03236d00b3..fd9daf862190 100644 --- a/packages/SystemUI/tests/src/com/android/systemui/shade/GlanceableHubContainerControllerTest.kt +++ b/packages/SystemUI/tests/src/com/android/systemui/shade/GlanceableHubContainerControllerTest.kt @@ -37,6 +37,7 @@ import com.android.systemui.communal.domain.interactor.setCommunalAvailable import com.android.systemui.communal.shared.model.CommunalScenes import com.android.systemui.communal.ui.viewmodel.CommunalViewModel import com.android.systemui.communal.util.CommunalColors +import com.android.systemui.coroutines.collectLastValue import com.android.systemui.keyguard.data.repository.fakeKeyguardRepository import com.android.systemui.keyguard.data.repository.fakeKeyguardTransitionRepository import com.android.systemui.keyguard.domain.interactor.KeyguardInteractor @@ -325,6 +326,19 @@ class GlanceableHubContainerControllerTest : SysuiTestCase() { } } + @Test + fun editMode_communalAvailable() = + with(kosmos) { + testScope.runTest { + val available by collectLastValue(underTest.communalAvailable()) + setCommunalAvailable(false) + + assertThat(available).isFalse() + communalInteractor.setEditModeOpen(true) + assertThat(available).isTrue() + } + } + private fun initAndAttachContainerView() { containerView = View(context) diff --git a/packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/ongoingcall/OngoingCallControllerTest.kt b/packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/ongoingcall/OngoingCallControllerTest.kt index 7b73528cd932..efd7f9969d49 100644 --- a/packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/ongoingcall/OngoingCallControllerTest.kt +++ b/packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/ongoingcall/OngoingCallControllerTest.kt @@ -22,6 +22,7 @@ import android.app.IUidObserver import android.app.Notification import android.app.PendingIntent import android.app.Person +import android.platform.test.annotations.DisableFlags import android.service.notification.NotificationListenerService.REASON_USER_STOPPED import android.testing.AndroidTestingRunner import android.testing.TestableLooper @@ -193,6 +194,7 @@ class OngoingCallControllerTest : SysuiTestCase() { /** Regression test for b/192379214. */ @Test + @DisableFlags(android.app.Flags.FLAG_UPDATE_RANKING_TIME) fun onEntryUpdated_notificationWhenIsZero_timeHidden() { val notification = NotificationEntryBuilder(createOngoingCallNotifEntry()) notification.modifyNotification(context).setWhen(0) diff --git a/packages/SystemUI/tests/src/com/android/systemui/statusbar/policy/SensitiveNotificationProtectionControllerFlagDisabledTest.kt b/packages/SystemUI/tests/src/com/android/systemui/statusbar/policy/SensitiveNotificationProtectionControllerFlagDisabledTest.kt index 358709f48ea8..3e20f689569e 100644 --- a/packages/SystemUI/tests/src/com/android/systemui/statusbar/policy/SensitiveNotificationProtectionControllerFlagDisabledTest.kt +++ b/packages/SystemUI/tests/src/com/android/systemui/statusbar/policy/SensitiveNotificationProtectionControllerFlagDisabledTest.kt @@ -21,6 +21,7 @@ import android.content.pm.PackageManager import android.media.projection.MediaProjectionManager import android.os.Handler import android.platform.test.annotations.DisableFlags +import android.telephony.TelephonyManager import android.testing.AndroidTestingRunner import androidx.test.filters.SmallTest import com.android.server.notification.Flags @@ -46,6 +47,7 @@ class SensitiveNotificationProtectionControllerFlagDisabledTest : SysuiTestCase( @Mock private lateinit var activityManager: IActivityManager @Mock private lateinit var mediaProjectionManager: MediaProjectionManager @Mock private lateinit var packageManager: PackageManager + @Mock private lateinit var telephonyManager: TelephonyManager private lateinit var controller: SensitiveNotificationProtectionControllerImpl @Before @@ -59,6 +61,7 @@ class SensitiveNotificationProtectionControllerFlagDisabledTest : SysuiTestCase( mediaProjectionManager, activityManager, packageManager, + telephonyManager, handler, FakeExecutor(FakeSystemClock()), logger diff --git a/packages/SystemUI/tests/src/com/android/systemui/statusbar/policy/SensitiveNotificationProtectionControllerTest.kt b/packages/SystemUI/tests/src/com/android/systemui/statusbar/policy/SensitiveNotificationProtectionControllerTest.kt index 4ace163164f1..2127057522a7 100644 --- a/packages/SystemUI/tests/src/com/android/systemui/statusbar/policy/SensitiveNotificationProtectionControllerTest.kt +++ b/packages/SystemUI/tests/src/com/android/systemui/statusbar/policy/SensitiveNotificationProtectionControllerTest.kt @@ -37,6 +37,7 @@ import android.platform.test.annotations.RequiresFlagsDisabled import android.platform.test.annotations.RequiresFlagsEnabled import android.platform.test.flag.junit.DeviceFlagsValueProvider import android.provider.Settings.Global.DISABLE_SCREEN_SHARE_PROTECTIONS_FOR_APPS_AND_NOTIFICATIONS +import android.telephony.TelephonyManager import android.testing.AndroidTestingRunner import android.testing.TestableLooper.RunWithLooper import androidx.test.filters.SmallTest @@ -89,6 +90,7 @@ class SensitiveNotificationProtectionControllerTest : SysuiTestCase() { @Mock private lateinit var activityManager: IActivityManager @Mock private lateinit var mediaProjectionManager: MediaProjectionManager @Mock private lateinit var packageManager: PackageManager + @Mock private lateinit var telephonyManager: TelephonyManager @Mock private lateinit var listener1: Runnable @Mock private lateinit var listener2: Runnable @Mock private lateinit var listener3: Runnable @@ -141,6 +143,9 @@ class SensitiveNotificationProtectionControllerTest : SysuiTestCase() { whenever(packageManager.checkPermission(anyString(), anyString())) .thenReturn(PackageManager.PERMISSION_DENIED) + whenever(telephonyManager.getEmergencyAssistancePackageName()) + .thenReturn(EMERGENCY_ASSISTANCE_PACKAGE_NAME) + executor = FakeExecutor(FakeSystemClock()) globalSettings = FakeGlobalSettings() controller = @@ -150,6 +155,7 @@ class SensitiveNotificationProtectionControllerTest : SysuiTestCase() { mediaProjectionManager, activityManager, packageManager, + telephonyManager, mockExecutorHandler(executor), executor, logger @@ -407,6 +413,26 @@ class SensitiveNotificationProtectionControllerTest : SysuiTestCase() { } @Test + @DisableFlags(FLAG_SCREENSHARE_NOTIFICATION_HIDING_BUG_FIX) + fun shouldProtectNotification_projectionActive_isFromEmergencyPackage_fixDisabled_true() { + mediaProjectionCallback.onStart(mediaProjectionInfo) + + val notificationEntry = setupNotificationEntry(EMERGENCY_ASSISTANCE_PACKAGE_NAME) + + assertTrue(controller.shouldProtectNotification(notificationEntry)) + } + + @Test + @EnableFlags(FLAG_SCREENSHARE_NOTIFICATION_HIDING_BUG_FIX) + fun shouldProtectNotification_projectionActive_isFromEmergencyPackage_false() { + mediaProjectionCallback.onStart(mediaProjectionInfo) + + val notificationEntry = setupNotificationEntry(EMERGENCY_ASSISTANCE_PACKAGE_NAME) + + assertFalse(controller.shouldProtectNotification(notificationEntry)) + } + + @Test fun shouldProtectNotification_projectionActive_sysuiExempt_false() { // SystemUi context package name is exempt, but in test scenarios its // com.android.systemui.tests so use that instead of hardcoding @@ -742,6 +768,7 @@ class SensitiveNotificationProtectionControllerTest : SysuiTestCase() { private const val TEST_PROJECTION_PACKAGE_NAME = "com.android.systemui.statusbar.policy.projectionpackage" private const val TEST_PACKAGE_NAME = "com.android.systemui.statusbar.policy.testpackage" + private const val EMERGENCY_ASSISTANCE_PACKAGE_NAME = "com.android.test.emergencyassistance" private const val BUGREPORT_PACKAGE_NAME = "com.android.test.bugreporthandler" } } diff --git a/packages/SystemUI/tests/utils/src/com/android/systemui/SysuiTestCase.java b/packages/SystemUI/tests/utils/src/com/android/systemui/SysuiTestCase.java index 353d9709b056..9dcd94687668 100644 --- a/packages/SystemUI/tests/utils/src/com/android/systemui/SysuiTestCase.java +++ b/packages/SystemUI/tests/utils/src/com/android/systemui/SysuiTestCase.java @@ -177,7 +177,7 @@ public abstract class SysuiTestCase { // TODO(b/292141694): build out Ravenwood support for Instrumentation // Ravenwood doesn't yet provide Instrumentation, so we sidestep this global configuration // step; any tests that rely on it are already being excluded on Ravenwood - if (!isRavenwoodTest()) { + if (!isRavenwoodTest() && !isScreenshotTest()) { mRealInstrumentation = InstrumentationRegistry.getInstrumentation(); Instrumentation inst = spy(mRealInstrumentation); when(inst.getContext()).thenAnswer(invocation -> { @@ -288,6 +288,10 @@ public abstract class SysuiTestCase { return !isRavenwoodTest() && Build.FINGERPRINT.contains("robolectric"); } + protected boolean isScreenshotTest() { + return false; + } + public static boolean isRavenwoodTest() { return RavenwoodRule.isOnRavenwood(); } diff --git a/packages/SystemUI/tests/utils/src/com/android/systemui/deviceentry/domain/interactor/DeviceEntryInteractorKosmos.kt b/packages/SystemUI/tests/utils/src/com/android/systemui/deviceentry/domain/interactor/DeviceEntryInteractorKosmos.kt index bff10a191d5a..120086686282 100644 --- a/packages/SystemUI/tests/utils/src/com/android/systemui/deviceentry/domain/interactor/DeviceEntryInteractorKosmos.kt +++ b/packages/SystemUI/tests/utils/src/com/android/systemui/deviceentry/domain/interactor/DeviceEntryInteractorKosmos.kt @@ -17,6 +17,7 @@ package com.android.systemui.deviceentry.domain.interactor import com.android.systemui.authentication.domain.interactor.authenticationInteractor +import com.android.systemui.bouncer.domain.interactor.alternateBouncerInteractor import com.android.systemui.deviceentry.data.repository.deviceEntryRepository import com.android.systemui.flags.fakeSystemPropertiesHelper import com.android.systemui.keyguard.domain.interactor.trustInteractor @@ -39,5 +40,6 @@ val Kosmos.deviceEntryInteractor by trustInteractor = trustInteractor, deviceUnlockedInteractor = deviceUnlockedInteractor, systemPropertiesHelper = fakeSystemPropertiesHelper, + alternateBouncerInteractor = alternateBouncerInteractor, ) } diff --git a/packages/SystemUI/tests/utils/src/com/android/systemui/flags/SceneContainerRule.kt b/packages/SystemUI/tests/utils/src/com/android/systemui/flags/SceneContainerRule.kt index 9ec1481355a5..5f9f6b43be2a 100644 --- a/packages/SystemUI/tests/utils/src/com/android/systemui/flags/SceneContainerRule.kt +++ b/packages/SystemUI/tests/utils/src/com/android/systemui/flags/SceneContainerRule.kt @@ -43,6 +43,21 @@ class SceneContainerRule : TestRule { SceneContainerFlag.isEnabled ) } + // Get the flag value, treating the unset error as false. + val sceneContainerAconfigEnabled = try { + com.android.systemui.Flags.sceneContainer() + } catch (e: Exception) { + false + } + if (sceneContainerAconfigEnabled) { + Assert.assertTrue( + "FLAG_SCENE_CONTAINER is enabled but SceneContainerFlag.isEnabled" + + " is false. Use `.andSceneContainer()` from" + + " SceneContainerFlagParameterization.kt to parameterize this" + + " flag correctly.", + SceneContainerFlag.isEnabled + ) + } if ( description.hasAnnotation<BrokenWithSceneContainer>() && SceneContainerFlag.isEnabled diff --git a/packages/SystemUI/tests/utils/src/com/android/systemui/keyguard/data/repository/FakeKeyguardClockRepository.kt b/packages/SystemUI/tests/utils/src/com/android/systemui/keyguard/data/repository/FakeKeyguardClockRepository.kt index 4f2310f9972d..5e5f8cb1055a 100644 --- a/packages/SystemUI/tests/utils/src/com/android/systemui/keyguard/data/repository/FakeKeyguardClockRepository.kt +++ b/packages/SystemUI/tests/utils/src/com/android/systemui/keyguard/data/repository/FakeKeyguardClockRepository.kt @@ -17,26 +17,24 @@ package com.android.systemui.keyguard.data.repository import com.android.keyguard.ClockEventController -import com.android.keyguard.KeyguardClockSwitch.ClockSize -import com.android.keyguard.KeyguardClockSwitch.LARGE -import com.android.systemui.keyguard.shared.model.SettingsClockSize +import com.android.systemui.keyguard.shared.model.ClockSize +import com.android.systemui.keyguard.shared.model.ClockSizeSetting import com.android.systemui.plugins.clocks.ClockController import com.android.systemui.plugins.clocks.ClockId import com.android.systemui.shared.clocks.DEFAULT_CLOCK_ID import com.android.systemui.util.mockito.mock import dagger.Binds import dagger.Module -import javax.inject.Inject import kotlinx.coroutines.flow.Flow import kotlinx.coroutines.flow.MutableStateFlow import kotlinx.coroutines.flow.StateFlow import org.mockito.Mockito -class FakeKeyguardClockRepository @Inject constructor() : KeyguardClockRepository { - private val _clockSize = MutableStateFlow(LARGE) - override val clockSize: StateFlow<Int> = _clockSize +class FakeKeyguardClockRepository() : KeyguardClockRepository { + private val _clockSize = MutableStateFlow(ClockSize.LARGE) + override val clockSize: StateFlow<ClockSize> = _clockSize - private val _selectedClockSize = MutableStateFlow(SettingsClockSize.DYNAMIC) + private val _selectedClockSize = MutableStateFlow(ClockSizeSetting.DYNAMIC) override val selectedClockSize = _selectedClockSize private val _currentClockId = MutableStateFlow(DEFAULT_CLOCK_ID) @@ -54,16 +52,17 @@ class FakeKeyguardClockRepository @Inject constructor() : KeyguardClockRepositor get() = _shouldForceSmallClock private var _shouldForceSmallClock: Boolean = false - override fun setClockSize(@ClockSize size: Int) { + override fun setClockSize(size: ClockSize) { _clockSize.value = size } - fun setSelectedClockSize(size: SettingsClockSize) { - selectedClockSize.value = size + fun setSelectedClockSize(size: ClockSizeSetting) { + _selectedClockSize.value = size } fun setCurrentClock(clockController: ClockController) { _currentClock.value = clockController + _currentClockId.value = clockController.config.id } fun setShouldForceSmallClock(shouldForceSmallClock: Boolean) { diff --git a/packages/SystemUI/tests/utils/src/com/android/systemui/keyguard/data/repository/KeyguardBlueprintRepositoryKosmos.kt b/packages/SystemUI/tests/utils/src/com/android/systemui/keyguard/data/repository/KeyguardBlueprintRepositoryKosmos.kt index 8954231a9731..90a93f4e7544 100644 --- a/packages/SystemUI/tests/utils/src/com/android/systemui/keyguard/data/repository/KeyguardBlueprintRepositoryKosmos.kt +++ b/packages/SystemUI/tests/utils/src/com/android/systemui/keyguard/data/repository/KeyguardBlueprintRepositoryKosmos.kt @@ -16,40 +16,83 @@ package com.android.systemui.keyguard.data.repository +import android.content.applicationContext import android.os.fakeExecutorHandler -import com.android.systemui.keyguard.shared.model.KeyguardBlueprint -import com.android.systemui.keyguard.shared.model.KeyguardSection -import com.android.systemui.keyguard.ui.view.layout.blueprints.DefaultKeyguardBlueprint.Companion.DEFAULT +import com.android.systemui.keyguard.domain.interactor.keyguardBlueprintInteractor +import com.android.systemui.keyguard.domain.interactor.keyguardClockInteractor +import com.android.systemui.keyguard.ui.view.layout.blueprints.DefaultKeyguardBlueprint import com.android.systemui.keyguard.ui.view.layout.blueprints.SplitShadeKeyguardBlueprint +import com.android.systemui.keyguard.ui.view.layout.sections.ClockSection +import com.android.systemui.keyguard.ui.viewmodel.keyguardClockViewModel +import com.android.systemui.keyguard.ui.viewmodel.keyguardSmartspaceViewModel import com.android.systemui.kosmos.Kosmos -import com.android.systemui.util.ThreadAssert import com.android.systemui.util.mockito.mock +import java.util.Optional + +val Kosmos.keyguardClockSection: ClockSection by + Kosmos.Fixture { + ClockSection( + clockInteractor = keyguardClockInteractor, + keyguardClockViewModel = keyguardClockViewModel, + context = applicationContext, + smartspaceViewModel = keyguardSmartspaceViewModel, + blueprintInteractor = { keyguardBlueprintInteractor }, + ) + } + +val Kosmos.defaultKeyguardBlueprint by + Kosmos.Fixture { + DefaultKeyguardBlueprint( + defaultIndicationAreaSection = mock(), + defaultDeviceEntrySection = mock(), + defaultShortcutsSection = mock(), + defaultAmbientIndicationAreaSection = Optional.of(mock()), + defaultSettingsPopupMenuSection = mock(), + defaultStatusViewSection = mock(), + defaultStatusBarSection = mock(), + defaultNotificationStackScrollLayoutSection = mock(), + aodNotificationIconsSection = mock(), + aodBurnInSection = mock(), + communalTutorialIndicatorSection = mock(), + clockSection = keyguardClockSection, + smartspaceSection = mock(), + keyguardSliceViewSection = mock(), + udfpsAccessibilityOverlaySection = mock(), + accessibilityActionsSection = mock(), + ) + } + +val Kosmos.splitShadeBlueprint by + Kosmos.Fixture { + SplitShadeKeyguardBlueprint( + defaultIndicationAreaSection = mock(), + defaultDeviceEntrySection = mock(), + defaultShortcutsSection = mock(), + defaultAmbientIndicationAreaSection = Optional.of(mock()), + defaultSettingsPopupMenuSection = mock(), + defaultStatusViewSection = mock(), + defaultStatusBarSection = mock(), + splitShadeNotificationStackScrollLayoutSection = mock(), + splitShadeGuidelines = mock(), + aodNotificationIconsSection = mock(), + aodBurnInSection = mock(), + communalTutorialIndicatorSection = mock(), + clockSection = keyguardClockSection, + smartspaceSection = mock(), + mediaSection = mock(), + accessibilityActionsSection = mock(), + ) + } val Kosmos.keyguardBlueprintRepository by Kosmos.Fixture { KeyguardBlueprintRepository( blueprints = setOf( - defaultBlueprint, + defaultKeyguardBlueprint, splitShadeBlueprint, ), handler = fakeExecutorHandler, - assert = mock<ThreadAssert>(), + assert = mock(), ) } - -private val defaultBlueprint = - object : KeyguardBlueprint { - override val id: String - get() = DEFAULT - override val sections: List<KeyguardSection> - get() = listOf() - } - -private val splitShadeBlueprint = - object : KeyguardBlueprint { - override val id: String - get() = SplitShadeKeyguardBlueprint.Companion.ID - override val sections: List<KeyguardSection> - get() = listOf() - } diff --git a/packages/SystemUI/tests/utils/src/com/android/systemui/keyguard/data/repository/KeyguardSmartspaceRepositoryKosmos.kt b/packages/SystemUI/tests/utils/src/com/android/systemui/keyguard/data/repository/KeyguardSmartspaceRepositoryKosmos.kt new file mode 100644 index 000000000000..dc7103f2c560 --- /dev/null +++ b/packages/SystemUI/tests/utils/src/com/android/systemui/keyguard/data/repository/KeyguardSmartspaceRepositoryKosmos.kt @@ -0,0 +1,21 @@ +/* + * Copyright (C) 2024 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.keyguard.data.repository + +import com.android.systemui.kosmos.Kosmos + +val Kosmos.keyguardSmartspaceRepository by Kosmos.Fixture { KeyguardSmartspaceRepository() } diff --git a/packages/SystemUI/tests/utils/src/com/android/systemui/keyguard/domain/interactor/KeyguardBlueprintInteractorKosmos.kt b/packages/SystemUI/tests/utils/src/com/android/systemui/keyguard/domain/interactor/KeyguardBlueprintInteractorKosmos.kt index 87d6c171ad0a..5256ce4b9adf 100644 --- a/packages/SystemUI/tests/utils/src/com/android/systemui/keyguard/domain/interactor/KeyguardBlueprintInteractorKosmos.kt +++ b/packages/SystemUI/tests/utils/src/com/android/systemui/keyguard/domain/interactor/KeyguardBlueprintInteractorKosmos.kt @@ -22,7 +22,7 @@ import com.android.systemui.common.ui.domain.interactor.configurationInteractor import com.android.systemui.keyguard.data.repository.keyguardBlueprintRepository import com.android.systemui.kosmos.Kosmos import com.android.systemui.kosmos.applicationCoroutineScope -import com.android.systemui.statusbar.policy.splitShadeStateController +import com.android.systemui.shade.domain.interactor.shadeInteractor val Kosmos.keyguardBlueprintInteractor by Kosmos.Fixture { @@ -30,7 +30,7 @@ val Kosmos.keyguardBlueprintInteractor by keyguardBlueprintRepository = keyguardBlueprintRepository, applicationScope = applicationCoroutineScope, context = applicationContext, - splitShadeStateController = splitShadeStateController, + shadeInteractor = shadeInteractor, clockInteractor = keyguardClockInteractor, configurationInteractor = configurationInteractor, fingerprintPropertyInteractor = fingerprintPropertyInteractor, diff --git a/packages/SystemUI/tests/utils/src/com/android/systemui/keyguard/domain/interactor/KeyguardSmartspaceInteractorKosmos.kt b/packages/SystemUI/tests/utils/src/com/android/systemui/keyguard/domain/interactor/KeyguardSmartspaceInteractorKosmos.kt new file mode 100644 index 000000000000..b5d5d641b0fe --- /dev/null +++ b/packages/SystemUI/tests/utils/src/com/android/systemui/keyguard/domain/interactor/KeyguardSmartspaceInteractorKosmos.kt @@ -0,0 +1,30 @@ +/* + * Copyright (C) 2023 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. + */ + +@file:OptIn(ExperimentalCoroutinesApi::class) + +package com.android.systemui.keyguard.domain.interactor + +import com.android.systemui.keyguard.data.repository.keyguardSmartspaceRepository +import com.android.systemui.kosmos.Kosmos +import com.android.systemui.kosmos.Kosmos.Fixture +import kotlinx.coroutines.ExperimentalCoroutinesApi + +var Kosmos.keyguardSmartspaceInteractor by Fixture { + KeyguardSmartspaceInteractor( + keyguardSmartspaceRepository = keyguardSmartspaceRepository, + ) +} diff --git a/packages/SystemUI/src/com/android/systemui/keyguard/shared/model/SettingsClockSize.kt b/packages/SystemUI/tests/utils/src/com/android/systemui/keyguard/ui/binder/KeyguardBlueprintViewBinderKosmos.kt index c6b0f58a0cd3..24d2c2f5dae1 100644 --- a/packages/SystemUI/src/com/android/systemui/keyguard/shared/model/SettingsClockSize.kt +++ b/packages/SystemUI/tests/utils/src/com/android/systemui/keyguard/ui/binder/KeyguardBlueprintViewBinderKosmos.kt @@ -12,12 +12,12 @@ * 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.keyguard.shared.model +package com.android.systemui.keyguard.ui.binder + +import android.os.fakeExecutorHandler +import com.android.systemui.kosmos.Kosmos -enum class SettingsClockSize { - DYNAMIC, - SMALL, -} +val Kosmos.keyguardBlueprintViewBinder by + Kosmos.Fixture { KeyguardBlueprintViewBinder(fakeExecutorHandler) } diff --git a/packages/SystemUI/tests/utils/src/com/android/systemui/keyguard/ui/viewmodel/KeyguardBlueprintViewModelKosmos.kt b/packages/SystemUI/tests/utils/src/com/android/systemui/keyguard/ui/viewmodel/KeyguardBlueprintViewModelKosmos.kt new file mode 100644 index 000000000000..63b87c075378 --- /dev/null +++ b/packages/SystemUI/tests/utils/src/com/android/systemui/keyguard/ui/viewmodel/KeyguardBlueprintViewModelKosmos.kt @@ -0,0 +1,23 @@ +/* + * Copyright (C) 2023 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.keyguard.ui.viewmodel + +import com.android.systemui.keyguard.domain.interactor.keyguardBlueprintInteractor +import com.android.systemui.kosmos.Kosmos + +val Kosmos.keyguardBlueprintViewModel by + Kosmos.Fixture { KeyguardBlueprintViewModel(keyguardBlueprintInteractor) } diff --git a/packages/SystemUI/tests/utils/src/com/android/systemui/keyguard/ui/viewmodel/KeyguardClockViewModelKosmos.kt b/packages/SystemUI/tests/utils/src/com/android/systemui/keyguard/ui/viewmodel/KeyguardClockViewModelKosmos.kt index a048d3cfffca..6d46694db650 100644 --- a/packages/SystemUI/tests/utils/src/com/android/systemui/keyguard/ui/viewmodel/KeyguardClockViewModelKosmos.kt +++ b/packages/SystemUI/tests/utils/src/com/android/systemui/keyguard/ui/viewmodel/KeyguardClockViewModelKosmos.kt @@ -16,11 +16,14 @@ package com.android.systemui.keyguard.ui.viewmodel +import android.content.res.mainResources +import com.android.systemui.common.ui.domain.interactor.configurationInteractor import com.android.systemui.keyguard.domain.interactor.keyguardClockInteractor import com.android.systemui.kosmos.Kosmos import com.android.systemui.kosmos.applicationCoroutineScope import com.android.systemui.shade.domain.interactor.shadeInteractor import com.android.systemui.statusbar.notification.stack.domain.interactor.notificationsKeyguardInteractor +import com.android.systemui.statusbar.ui.systemBarUtilsProxy val Kosmos.keyguardClockViewModel by Kosmos.Fixture { @@ -29,5 +32,8 @@ val Kosmos.keyguardClockViewModel by applicationScope = applicationCoroutineScope, notifsKeyguardInteractor = notificationsKeyguardInteractor, shadeInteractor = shadeInteractor, + systemBarUtils = systemBarUtilsProxy, + configurationInteractor = configurationInteractor, + resources = mainResources ) } diff --git a/packages/SystemUI/tests/utils/src/com/android/systemui/keyguard/ui/viewmodel/KeyguardSmartspaceViewModelKosmos.kt b/packages/SystemUI/tests/utils/src/com/android/systemui/keyguard/ui/viewmodel/KeyguardSmartspaceViewModelKosmos.kt new file mode 100644 index 000000000000..d33d594d9e8a --- /dev/null +++ b/packages/SystemUI/tests/utils/src/com/android/systemui/keyguard/ui/viewmodel/KeyguardSmartspaceViewModelKosmos.kt @@ -0,0 +1,32 @@ +/* + * Copyright (C) 2023 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.keyguard.ui.viewmodel + +import com.android.systemui.keyguard.domain.interactor.keyguardSmartspaceInteractor +import com.android.systemui.kosmos.Kosmos +import com.android.systemui.kosmos.applicationCoroutineScope +import com.android.systemui.util.mockito.mock + +val Kosmos.keyguardSmartspaceViewModel by + Kosmos.Fixture { + KeyguardSmartspaceViewModel( + applicationScope = applicationCoroutineScope, + smartspaceController = mock(), + keyguardClockViewModel = keyguardClockViewModel, + smartspaceInteractor = keyguardSmartspaceInteractor, + ) + } diff --git a/packages/SystemUI/tests/utils/src/com/android/systemui/media/controls/domain/pipeline/interactor/factory/MediaControlInteractorFactoryKosmos.kt b/packages/SystemUI/tests/utils/src/com/android/systemui/media/controls/domain/pipeline/interactor/factory/MediaControlInteractorFactoryKosmos.kt new file mode 100644 index 000000000000..461eaa24426f --- /dev/null +++ b/packages/SystemUI/tests/utils/src/com/android/systemui/media/controls/domain/pipeline/interactor/factory/MediaControlInteractorFactoryKosmos.kt @@ -0,0 +1,50 @@ +/* + * Copyright (C) 2024 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.media.controls.domain.pipeline.interactor.factory + +import android.content.applicationContext +import com.android.internal.logging.InstanceId +import com.android.systemui.activityIntentHelper +import com.android.systemui.bluetooth.mockBroadcastDialogController +import com.android.systemui.kosmos.Kosmos +import com.android.systemui.media.controls.data.repository.mediaFilterRepository +import com.android.systemui.media.controls.domain.pipeline.interactor.MediaControlInteractor +import com.android.systemui.media.controls.domain.pipeline.mediaDataProcessor +import com.android.systemui.media.mediaOutputDialogManager +import com.android.systemui.plugins.activityStarter +import com.android.systemui.statusbar.notificationLockscreenUserManager +import com.android.systemui.statusbar.policy.keyguardStateController + +val Kosmos.mediaControlInteractorFactory by + Kosmos.Fixture { + object : MediaControlInteractorFactory { + override fun create(instanceId: InstanceId): MediaControlInteractor { + return MediaControlInteractor( + applicationContext = applicationContext, + instanceId = instanceId, + repository = mediaFilterRepository, + mediaDataProcessor = mediaDataProcessor, + keyguardStateController = keyguardStateController, + activityStarter = activityStarter, + activityIntentHelper = activityIntentHelper, + lockscreenUserManager = notificationLockscreenUserManager, + mediaOutputDialogManager = mediaOutputDialogManager, + broadcastDialogController = mockBroadcastDialogController, + ) + } + } + } diff --git a/packages/SystemUI/tests/utils/src/com/android/systemui/media/controls/ui/viewmodel/MediaCarouselViewModelKosmos.kt b/packages/SystemUI/tests/utils/src/com/android/systemui/media/controls/ui/viewmodel/MediaCarouselViewModelKosmos.kt new file mode 100644 index 000000000000..9a181cd4ab72 --- /dev/null +++ b/packages/SystemUI/tests/utils/src/com/android/systemui/media/controls/ui/viewmodel/MediaCarouselViewModelKosmos.kt @@ -0,0 +1,42 @@ +/* + * Copyright (C) 2024 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.media.controls.ui.viewmodel + +import android.content.applicationContext +import com.android.systemui.kosmos.Kosmos +import com.android.systemui.kosmos.applicationCoroutineScope +import com.android.systemui.kosmos.testDispatcher +import com.android.systemui.media.controls.domain.pipeline.interactor.factory.mediaControlInteractorFactory +import com.android.systemui.media.controls.domain.pipeline.interactor.mediaCarouselInteractor +import com.android.systemui.media.controls.util.mediaFlags +import com.android.systemui.media.controls.util.mediaUiEventLogger +import com.android.systemui.statusbar.notification.collection.provider.VisualStabilityProvider + +val Kosmos.mediaCarouselViewModel by + Kosmos.Fixture { + MediaCarouselViewModel( + applicationScope = applicationCoroutineScope, + applicationContext = applicationContext, + backgroundDispatcher = testDispatcher, + visualStabilityProvider = VisualStabilityProvider(), + interactor = mediaCarouselInteractor, + controlInteractorFactory = mediaControlInteractorFactory, + recommendationsViewModel = mediaRecommendationsViewModel, + logger = mediaUiEventLogger, + mediaFlags = mediaFlags, + ) + } diff --git a/packages/SystemUI/tests/utils/src/com/android/systemui/media/controls/ui/viewmodel/MediaControlViewModelKosmos.kt b/packages/SystemUI/tests/utils/src/com/android/systemui/media/controls/ui/viewmodel/MediaControlViewModelKosmos.kt index 2f3d3c3e0489..b3fb15ff0c31 100644 --- a/packages/SystemUI/tests/utils/src/com/android/systemui/media/controls/ui/viewmodel/MediaControlViewModelKosmos.kt +++ b/packages/SystemUI/tests/utils/src/com/android/systemui/media/controls/ui/viewmodel/MediaControlViewModelKosmos.kt @@ -17,8 +17,8 @@ package com.android.systemui.media.controls.ui.viewmodel import android.content.applicationContext -import com.android.systemui.concurrency.fakeExecutor import com.android.systemui.kosmos.Kosmos +import com.android.systemui.kosmos.applicationCoroutineScope import com.android.systemui.kosmos.testDispatcher import com.android.systemui.media.controls.domain.pipeline.interactor.mediaControlInteractor import com.android.systemui.media.controls.util.mediaUiEventLogger @@ -26,9 +26,9 @@ import com.android.systemui.media.controls.util.mediaUiEventLogger val Kosmos.mediaControlViewModel by Kosmos.Fixture { MediaControlViewModel( + applicationScope = applicationCoroutineScope, applicationContext = applicationContext, backgroundDispatcher = testDispatcher, - backgroundExecutor = fakeExecutor, interactor = mediaControlInteractor, logger = mediaUiEventLogger, ) diff --git a/packages/SystemUI/tests/utils/src/com/android/systemui/scene/SceneKosmos.kt b/packages/SystemUI/tests/utils/src/com/android/systemui/scene/SceneKosmos.kt index 2cdf76d50299..7f6a7bd3f7d8 100644 --- a/packages/SystemUI/tests/utils/src/com/android/systemui/scene/SceneKosmos.kt +++ b/packages/SystemUI/tests/utils/src/com/android/systemui/scene/SceneKosmos.kt @@ -2,6 +2,8 @@ package com.android.systemui.scene import com.android.systemui.kosmos.Kosmos import com.android.systemui.kosmos.Kosmos.Fixture +import com.android.systemui.kosmos.testScope +import com.android.systemui.scene.shared.model.FakeScene import com.android.systemui.scene.shared.model.SceneContainerConfig import com.android.systemui.scene.shared.model.Scenes @@ -16,5 +18,18 @@ var Kosmos.sceneKeys by Fixture { ) } +val Kosmos.fakeScenes by Fixture { + sceneKeys + .map { key -> + FakeScene( + scope = testScope.backgroundScope, + key = key, + ) + } + .toSet() +} + +val Kosmos.scenes by Fixture { fakeScenes } + val Kosmos.initialSceneKey by Fixture { Scenes.Lockscreen } val Kosmos.sceneContainerConfig by Fixture { SceneContainerConfig(sceneKeys, initialSceneKey) } diff --git a/packages/SystemUI/tests/utils/src/com/android/systemui/scene/shared/model/FakeScene.kt b/packages/SystemUI/tests/utils/src/com/android/systemui/scene/shared/model/FakeScene.kt new file mode 100644 index 000000000000..eeaa9db16730 --- /dev/null +++ b/packages/SystemUI/tests/utils/src/com/android/systemui/scene/shared/model/FakeScene.kt @@ -0,0 +1,52 @@ +/* + * Copyright (C) 2024 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.scene.shared.model + +import com.android.compose.animation.scene.SceneKey +import com.android.compose.animation.scene.UserAction +import com.android.compose.animation.scene.UserActionResult +import kotlinx.coroutines.CoroutineScope +import kotlinx.coroutines.channels.Channel +import kotlinx.coroutines.flow.SharingStarted +import kotlinx.coroutines.flow.onCompletion +import kotlinx.coroutines.flow.onStart +import kotlinx.coroutines.flow.receiveAsFlow +import kotlinx.coroutines.flow.stateIn + +class FakeScene( + val scope: CoroutineScope, + override val key: SceneKey, +) : Scene { + var isDestinationScenesBeingCollected = false + + private val destinationScenesChannel = Channel<Map<UserAction, UserActionResult>>() + + override val destinationScenes = + destinationScenesChannel + .receiveAsFlow() + .onStart { isDestinationScenesBeingCollected = true } + .onCompletion { isDestinationScenesBeingCollected = false } + .stateIn( + scope = scope, + started = SharingStarted.WhileSubscribed(), + initialValue = emptyMap(), + ) + + suspend fun setDestinationScenes(value: Map<UserAction, UserActionResult>) { + destinationScenesChannel.send(value) + } +} diff --git a/packages/SystemUI/tests/utils/src/com/android/systemui/shade/ShadeTestUtil.kt b/packages/SystemUI/tests/utils/src/com/android/systemui/shade/ShadeTestUtil.kt new file mode 100644 index 000000000000..a47b2e829cfa --- /dev/null +++ b/packages/SystemUI/tests/utils/src/com/android/systemui/shade/ShadeTestUtil.kt @@ -0,0 +1,100 @@ +/* + * Copyright (C) 2024 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.shade + +import com.android.compose.animation.scene.ObservableTransitionState +import com.android.compose.animation.scene.SceneKey +import com.android.systemui.scene.domain.interactor.SceneInteractor +import com.android.systemui.scene.shared.flag.SceneContainerFlag +import com.android.systemui.scene.shared.model.Scenes +import com.android.systemui.shade.data.repository.FakeShadeRepository +import kotlinx.coroutines.flow.MutableStateFlow +import kotlinx.coroutines.flow.flowOf +import kotlinx.coroutines.test.TestScope +import kotlinx.coroutines.test.runCurrent +import org.junit.Assert + +/** Sets up shade state for tests for either value of the scene container flag. */ +class ShadeTestUtil constructor(val delegate: ShadeTestUtilDelegate) { + + /** Sets both shade and QS expansion. One value must be zero or values must add up to 1f. */ + fun setShadeAndQsExpansion(shadeExpansion: Float, qsExpansion: Float) { + Assert.assertTrue( + "One expansion must be zero or both must add up to 1", + shadeExpansion == 0f || qsExpansion == 0f || shadeExpansion + qsExpansion == 1f, + ) + delegate.assertFlagValid() + delegate.setShadeAndQsExpansionInternal(shadeExpansion, qsExpansion) + } +} + +/** Sets up shade state for tests for a specific value of the scene container flag. */ +interface ShadeTestUtilDelegate { + /** Sets both shade and QS expansion. One value must be zero or values must add up to 1f. */ + fun setShadeAndQsExpansionInternal(shadeExpansion: Float, qsExpansion: Float) + + /** Asserts that the scene container flag matches this implementation. */ + fun assertFlagValid() +} + +/** Sets up shade state for tests when the scene container flag is disabled. */ +class ShadeTestUtilLegacyImpl(val testScope: TestScope, val shadeRepository: FakeShadeRepository) : + ShadeTestUtilDelegate { + override fun setShadeAndQsExpansionInternal(shadeExpansion: Float, qsExpansion: Float) { + shadeRepository.setLegacyShadeExpansion(shadeExpansion) + shadeRepository.setQsExpansion(qsExpansion) + testScope.runCurrent() + } + + override fun assertFlagValid() { + Assert.assertFalse(SceneContainerFlag.isEnabled) + } +} + +/** Sets up shade state for tests when the scene container flag is disabled. */ +class ShadeTestUtilSceneImpl(val testScope: TestScope, val sceneInteractor: SceneInteractor) : + ShadeTestUtilDelegate { + override fun setShadeAndQsExpansionInternal(shadeExpansion: Float, qsExpansion: Float) { + if (shadeExpansion == 0f) { + setTransitionProgress(Scenes.Lockscreen, Scenes.QuickSettings, qsExpansion) + } else if (qsExpansion == 0f) { + setTransitionProgress(Scenes.Lockscreen, Scenes.Shade, shadeExpansion) + } else { + setTransitionProgress(Scenes.Shade, Scenes.QuickSettings, qsExpansion) + } + } + + private fun setTransitionProgress(from: SceneKey, to: SceneKey, progress: Float) { + sceneInteractor.changeScene(from, "test") + val transitionState = + MutableStateFlow<ObservableTransitionState>( + ObservableTransitionState.Transition( + fromScene = from, + toScene = to, + progress = MutableStateFlow(progress), + isInitiatedByUserInput = false, + isUserInputOngoing = flowOf(false), + ) + ) + sceneInteractor.setTransitionState(transitionState) + testScope.runCurrent() + } + + override fun assertFlagValid() { + Assert.assertTrue(SceneContainerFlag.isEnabled) + } +} diff --git a/packages/SystemUI/tests/utils/src/com/android/systemui/shade/ShadeTestUtilKosmos.kt b/packages/SystemUI/tests/utils/src/com/android/systemui/shade/ShadeTestUtilKosmos.kt new file mode 100644 index 000000000000..9eeb345bde0a --- /dev/null +++ b/packages/SystemUI/tests/utils/src/com/android/systemui/shade/ShadeTestUtilKosmos.kt @@ -0,0 +1,34 @@ +/* + * Copyright (C) 2024 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.shade + +import com.android.systemui.kosmos.Kosmos +import com.android.systemui.kosmos.testScope +import com.android.systemui.scene.domain.interactor.sceneInteractor +import com.android.systemui.scene.shared.flag.SceneContainerFlag +import com.android.systemui.shade.data.repository.fakeShadeRepository + +var Kosmos.shadeTestUtil: ShadeTestUtil by + Kosmos.Fixture { + ShadeTestUtil( + if (SceneContainerFlag.isEnabled) { + ShadeTestUtilSceneImpl(testScope, sceneInteractor) + } else { + ShadeTestUtilLegacyImpl(testScope, fakeShadeRepository) + } + ) + } diff --git a/packages/SystemUI/tests/utils/src/com/android/systemui/statusbar/ui/FakeSystemBarUtilsProxy.kt b/packages/SystemUI/tests/utils/src/com/android/systemui/statusbar/ui/FakeSystemBarUtilsProxy.kt index d38baba8876f..7e993b46fc1e 100644 --- a/packages/SystemUI/tests/utils/src/com/android/systemui/statusbar/ui/FakeSystemBarUtilsProxy.kt +++ b/packages/SystemUI/tests/utils/src/com/android/systemui/statusbar/ui/FakeSystemBarUtilsProxy.kt @@ -16,6 +16,31 @@ package com.android.systemui.statusbar.ui -class FakeSystemBarUtilsProxy(private var statusBarHeight: Int) : SystemBarUtilsProxy { - override fun getStatusBarHeight(): Int = statusBarHeight +import com.android.systemui.statusbar.policy.FakeConfigurationController + +class FakeSystemBarUtilsProxy( + val fakeConfigurationController: FakeConfigurationController, + statusBarHeight: Int, + keyguardStatusBarHeight: Int, +) : SystemBarUtilsProxy { + var fakeStatusBarHeight: Int = statusBarHeight + get() = field + set(value) { + if (field != value) { + field = value + fakeConfigurationController.notifyConfigurationChanged() + } + } + + var fakeKeyguardStatusBarHeight = keyguardStatusBarHeight + get() = field + set(value) { + if (field != value) { + field = value + fakeConfigurationController.notifyConfigurationChanged() + } + } + + override fun getStatusBarHeight(): Int = fakeStatusBarHeight + override fun getStatusBarHeaderHeightKeyguard(): Int = fakeKeyguardStatusBarHeight } diff --git a/packages/SystemUI/tests/utils/src/com/android/systemui/statusbar/ui/SystemBarUtilsProxyKosmos.kt b/packages/SystemUI/tests/utils/src/com/android/systemui/statusbar/ui/SystemBarUtilsProxyKosmos.kt index f24037d4aea2..dce22f8bec34 100644 --- a/packages/SystemUI/tests/utils/src/com/android/systemui/statusbar/ui/SystemBarUtilsProxyKosmos.kt +++ b/packages/SystemUI/tests/utils/src/com/android/systemui/statusbar/ui/SystemBarUtilsProxyKosmos.kt @@ -21,6 +21,7 @@ import android.content.res.mainResources import com.android.systemui.kosmos.Kosmos import com.android.systemui.kosmos.Kosmos.Fixture import com.android.systemui.res.R +import com.android.systemui.statusbar.policy.fakeConfigurationController /** * Main fixture for supplying a [SystemBarUtilsProxy]. Should be used by other fixtures. Unless @@ -47,5 +48,9 @@ val Kosmos.systemBarUtilsProxyImpl by Fixture { SystemBarUtilsProxyImpl(applicat * tests in order to provide custom results. */ var Kosmos.fakeSystemBarUtilsProxy by Fixture { - FakeSystemBarUtilsProxy(mainResources.getDimensionPixelSize(R.dimen.status_bar_height)) + FakeSystemBarUtilsProxy( + fakeConfigurationController, + mainResources.getDimensionPixelSize(R.dimen.status_bar_height), + mainResources.getDimensionPixelSize(R.dimen.status_bar_header_height_keyguard), + ) } diff --git a/services/autofill/bugfixes.aconfig b/services/autofill/bugfixes.aconfig index 590a1efaf576..0c3d40d9e17e 100644 --- a/services/autofill/bugfixes.aconfig +++ b/services/autofill/bugfixes.aconfig @@ -1,4 +1,5 @@ package: "android.service.autofill" +container: "system" flag { name: "test" diff --git a/services/autofill/features.aconfig b/services/autofill/features.aconfig index c130ceef1e08..1dc3b73d2bd3 100644 --- a/services/autofill/features.aconfig +++ b/services/autofill/features.aconfig @@ -1,4 +1,5 @@ package: "android.service.autofill" +container: "system" flag { name: "autofill_credman_integration" diff --git a/services/autofill/java/com/android/server/autofill/RemoteFillService.java b/services/autofill/java/com/android/server/autofill/RemoteFillService.java index c96688c1b9ae..7ceb3bb56403 100644 --- a/services/autofill/java/com/android/server/autofill/RemoteFillService.java +++ b/services/autofill/java/com/android/server/autofill/RemoteFillService.java @@ -28,6 +28,7 @@ import android.content.Context; import android.content.Intent; import android.content.IntentSender; import android.os.Handler; +import android.os.IBinder; import android.os.ICancellationSignal; import android.os.RemoteException; import android.service.autofill.AutofillService; @@ -42,7 +43,6 @@ import android.service.autofill.ISaveCallback; import android.service.autofill.SaveRequest; import android.text.format.DateUtils; import android.util.Slog; -import android.view.autofill.IAutoFillManagerClient; import com.android.internal.infra.AbstractRemoteService; import com.android.internal.infra.ServiceConnector; @@ -283,8 +283,7 @@ final class RemoteFillService extends ServiceConnector.Impl<IAutoFillService> { return callback; } - public void onFillCredentialRequest(@NonNull FillRequest request, - IAutoFillManagerClient autofillCallback) { + public void onFillCredentialRequest(@NonNull FillRequest request, IBinder autofillCallback) { if (sVerbose) { Slog.v(TAG, "onFillRequest:" + request); } diff --git a/services/autofill/java/com/android/server/autofill/SecondaryProviderHandler.java b/services/autofill/java/com/android/server/autofill/SecondaryProviderHandler.java index ce9d1803d764..044a06417c00 100644 --- a/services/autofill/java/com/android/server/autofill/SecondaryProviderHandler.java +++ b/services/autofill/java/com/android/server/autofill/SecondaryProviderHandler.java @@ -21,11 +21,11 @@ import android.annotation.Nullable; import android.content.ComponentName; import android.content.Context; import android.content.IntentSender; +import android.os.IBinder; import android.service.autofill.ConvertCredentialResponse; import android.service.autofill.FillRequest; import android.service.autofill.FillResponse; import android.util.Slog; -import android.view.autofill.IAutoFillManagerClient; /** * Requests autofill response from a Remote Autofill Service. This autofill service can be @@ -105,8 +105,7 @@ final class SecondaryProviderHandler implements RemoteFillService.FillServiceCal /** * Requests a new fill response. */ - public void onFillRequest(FillRequest pendingFillRequest, int flag, - IAutoFillManagerClient client) { + public void onFillRequest(FillRequest pendingFillRequest, int flag, IBinder client) { Slog.v(TAG, "Requesting fill response to secondary provider."); mLastFlag = flag; if (mRemoteFillService != null && mRemoteFillService.isCredentialAutofillService()) { diff --git a/services/autofill/java/com/android/server/autofill/Session.java b/services/autofill/java/com/android/server/autofill/Session.java index 3a384065217e..cd1ef882868a 100644 --- a/services/autofill/java/com/android/server/autofill/Session.java +++ b/services/autofill/java/com/android/server/autofill/Session.java @@ -757,13 +757,14 @@ final class Session implements RemoteFillService.FillServiceCallbacks, ViewState mPendingInlineSuggestionsRequest, id); } mSecondaryProviderHandler.onFillRequest(mPendingFillRequest, - mPendingFillRequest.getFlags(), mClient); + mPendingFillRequest.getFlags(), mClient.asBinder()); } else if (mRemoteFillService != null) { if (mIsPrimaryCredential) { mPendingFillRequest = addCredentialManagerDataToClientState( mPendingFillRequest, mPendingInlineSuggestionsRequest, id); - mRemoteFillService.onFillCredentialRequest(mPendingFillRequest, mClient); + mRemoteFillService.onFillCredentialRequest(mPendingFillRequest, + mClient.asBinder()); } else { mRemoteFillService.onFillRequest(mPendingFillRequest); } @@ -2897,7 +2898,7 @@ final class Session implements RemoteFillService.FillServiceCallbacks, ViewState + ", clientState=" + newClientState + ", authenticationId=" + authenticationId); } if (Flags.autofillCredmanDevIntegration() && exception != null - && exception instanceof GetCredentialException) { + && !exception.getType().equals(GetCredentialException.TYPE_USER_CANCELED)) { if (dataset != null && dataset.getFieldIds().size() == 1) { if (sDebug) { Slog.d(TAG, "setAuthenticationResultLocked(): result returns with" @@ -6494,21 +6495,15 @@ final class Session implements RemoteFillService.FillServiceCallbacks, ViewState } } if (exception != null) { - mClient.onGetCredentialException(id, viewId, exception.getType(), - exception.getMessage()); + if (viewId.isVirtualInt()) { + sendResponseToViewNode(viewId, /*response=*/ null, exception); + } else { + mClient.onGetCredentialException(id, viewId, exception.getType(), + exception.getMessage()); + } } else if (response != null) { if (viewId.isVirtualInt()) { - ViewNode viewNode = getViewNodeFromContextsLocked(viewId); - if (viewNode != null && viewNode.getPendingCredentialCallback() != null) { - Bundle resultData = new Bundle(); - resultData.putParcelable( - CredentialProviderService.EXTRA_GET_CREDENTIAL_RESPONSE, - response); - viewNode.getPendingCredentialCallback().send(SUCCESS_CREDMAN_SELECTOR, - resultData); - } else { - Slog.w(TAG, "View node not found after GetCredentialResponse"); - } + sendResponseToViewNode(viewId, response, /*exception=*/ null); } else { mClient.onGetCredentialResponse(id, viewId, response); } @@ -6522,6 +6517,30 @@ final class Session implements RemoteFillService.FillServiceCallbacks, ViewState } } + @GuardedBy("mLock") + private void sendResponseToViewNode(AutofillId viewId, GetCredentialResponse response, + GetCredentialException exception) { + ViewNode viewNode = getViewNodeFromContextsLocked(viewId); + if (viewNode != null && viewNode.getPendingCredentialCallback() != null) { + Bundle resultData = new Bundle(); + if (response != null) { + resultData.putParcelable( + CredentialProviderService.EXTRA_GET_CREDENTIAL_RESPONSE, + response); + viewNode.getPendingCredentialCallback().send(SUCCESS_CREDMAN_SELECTOR, + resultData); + } else if (exception != null) { + resultData.putStringArray( + CredentialProviderService.EXTRA_GET_CREDENTIAL_EXCEPTION, + new String[] {exception.getType(), exception.getMessage()}); + viewNode.getPendingCredentialCallback().send(FAILURE_CREDMAN_SELECTOR, + resultData); + } + } else { + Slog.w(TAG, "View node not found after GetCredentialResponse"); + } + } + void autoFillApp(Dataset dataset) { synchronized (mLock) { if (mDestroyed) { diff --git a/services/backup/java/com/android/server/backup/BackupManagerService.java b/services/backup/java/com/android/server/backup/BackupManagerService.java index 0353d5a962c7..5f0071d47c89 100644 --- a/services/backup/java/com/android/server/backup/BackupManagerService.java +++ b/services/backup/java/com/android/server/backup/BackupManagerService.java @@ -1516,7 +1516,7 @@ public class BackupManagerService extends IBackupManager.Stub { String op = nextArg(args, argIndex); argIndex++; - if ("--help".equals(op)) { + if ("--help".equals(op) || "-h".equals(op)) { showDumpUsage(pw); return; } @@ -1548,19 +1548,17 @@ public class BackupManagerService extends IBackupManager.Stub { } return; } - if (op == null || "agents".startsWith(op) || "transportclients".equals(op) - || "transportstats".equals(op)) { - for (int i = 0; i < mUserServices.size(); i++) { - UserBackupManagerService userBackupManagerService = - getServiceForUserIfCallerHasPermission(mUserServices.keyAt(i), "dump()"); - if (userBackupManagerService != null) { - userBackupManagerService.dump(fd, pw, args); - } + + // We get here if we have no parameters or parameters unkonwn to us. + // Print dumpsys info in either case: bug report creation passes some parameter to + // dumpsys that we don't need to check. + for (int i = 0; i < mUserServices.size(); i++) { + UserBackupManagerService userBackupManagerService = + getServiceForUserIfCallerHasPermission(mUserServices.keyAt(i), "dump()"); + if (userBackupManagerService != null) { + userBackupManagerService.dump(fd, pw, args); } - return; } - - showDumpUsage(pw); } private String nextArg(String[] args, int argIndex) { diff --git a/services/companion/java/com/android/server/companion/virtual/InputController.java b/services/companion/java/com/android/server/companion/virtual/InputController.java index 3c258351b63d..9b72288955a7 100644 --- a/services/companion/java/com/android/server/companion/virtual/InputController.java +++ b/services/companion/java/com/android/server/companion/virtual/InputController.java @@ -226,7 +226,7 @@ class InputController { token.unlinkToDeath(inputDeviceDescriptor.getDeathRecipient(), /* flags= */ 0); mNativeWrapper.closeUinput(inputDeviceDescriptor.getNativePointer()); String phys = inputDeviceDescriptor.getPhys(); - InputManagerGlobal.getInstance().removeUniqueIdAssociationByDescriptor(phys); + InputManagerGlobal.getInstance().removeUniqueIdAssociation(phys); // Type associations are added in the case of navigation touchpads. Those should be removed // once the input device gets closed. if (inputDeviceDescriptor.getType() == InputDeviceDescriptor.TYPE_NAVIGATION_TOUCHPAD) { @@ -319,9 +319,9 @@ class InputController { return formatSimple("virtual%s:%d", type, sNextPhysId.getAndIncrement()); } - private void setUniqueIdAssociationByPort(int displayId, String phys) { + private void setUniqueIdAssociation(int displayId, String phys) { final String displayUniqueId = mDisplayManagerInternal.getDisplayInfo(displayId).uniqueId; - InputManagerGlobal.getInstance().addUniqueIdAssociationByPort(phys, displayUniqueId); + InputManagerGlobal.getInstance().addUniqueIdAssociation(phys, displayUniqueId); } boolean sendDpadKeyEvent(@NonNull IBinder token, @NonNull VirtualKeyEvent event) { @@ -809,7 +809,7 @@ class InputController { final int inputDeviceId; - setUniqueIdAssociationByPort(displayId, phys); + setUniqueIdAssociation(displayId, phys); try (WaitForDevice waiter = new WaitForDevice(deviceName, vendorId, productId, displayId)) { ptr = deviceOpener.get(); // See INVALID_PTR in libs/input/VirtualInputDevice.cpp. @@ -835,7 +835,7 @@ class InputController { throw e; } } catch (DeviceCreationException e) { - InputManagerGlobal.getInstance().removeUniqueIdAssociationByPort(phys); + InputManagerGlobal.getInstance().removeUniqueIdAssociation(phys); throw e; } diff --git a/services/core/Android.bp b/services/core/Android.bp index e095fa3e8539..300b147509a7 100644 --- a/services/core/Android.bp +++ b/services/core/Android.bp @@ -234,7 +234,6 @@ java_library_static { "android.hidl.manager-V1.2-java", "cbor-java", "com.android.media.audio-aconfig-java", - "dropbox_flags_lib", "icu4j_calendar_astronomer", "android.security.aaid_aidl-java", "netd-client", diff --git a/services/core/java/com/android/server/am/ActiveServices.java b/services/core/java/com/android/server/am/ActiveServices.java index 26e9bf52f456..2fa0be21a8b0 100644 --- a/services/core/java/com/android/server/am/ActiveServices.java +++ b/services/core/java/com/android/server/am/ActiveServices.java @@ -3867,8 +3867,10 @@ public final class ActiveServices { Slog.w(TAG_SERVICE, "Exception from scheduleTimeoutServiceForType: " + e); } - // ANR the service after giving the service some time to clean up. - mFGSAnrTimer.start(sr, mAm.mConstants.mFgsAnrExtraWaitDuration); + if (android.app.Flags.introduceNewServiceOntimeoutCallback()) { + // ANR the service after giving the service some time to clean up. + mFGSAnrTimer.start(sr, mAm.mConstants.mFgsAnrExtraWaitDuration); + } } } diff --git a/services/core/java/com/android/server/am/ActivityManagerService.java b/services/core/java/com/android/server/am/ActivityManagerService.java index 6612319c4a3f..a1d75b258e33 100644 --- a/services/core/java/com/android/server/am/ActivityManagerService.java +++ b/services/core/java/com/android/server/am/ActivityManagerService.java @@ -463,6 +463,7 @@ import com.android.server.net.NetworkManagementInternal; import com.android.server.os.NativeTombstoneManager; import com.android.server.pm.Computer; import com.android.server.pm.Installer; +import com.android.server.pm.PackageManagerServiceUtils; import com.android.server.pm.UserManagerInternal; import com.android.server.pm.permission.PermissionManagerServiceInternal; import com.android.server.pm.pkg.AndroidPackage; @@ -15876,6 +15877,11 @@ public class ActivityManagerService extends IActivityManager.Stub registeredReceivers = mReceiverResolver.queryIntent(snapshot, intent, resolvedType, false /*defaultOnly*/, userId); } + if (registeredReceivers != null) { + PackageManagerServiceUtils.applyNullActionBlocking( + mPlatformCompat, snapshot, registeredReceivers, + true, intent, callingUid); + } } BroadcastQueue.traceEnd(cookie); @@ -20697,7 +20703,7 @@ public class ActivityManagerService extends IActivityManager.Stub /** @see Binder#getCallingPid */ public int getCallingPid() { - return Binder.getCallingUid(); + return Binder.getCallingPid(); } /** @see Binder#clearCallingIdentity */ diff --git a/services/core/java/com/android/server/am/SettingsToPropertiesMapper.java b/services/core/java/com/android/server/am/SettingsToPropertiesMapper.java index 1f89ca70ce8d..8b64538ac33c 100644 --- a/services/core/java/com/android/server/am/SettingsToPropertiesMapper.java +++ b/services/core/java/com/android/server/am/SettingsToPropertiesMapper.java @@ -163,6 +163,7 @@ public class SettingsToPropertiesMapper { "media_reliability", "media_solutions", "media_tv", + "nearby", "nfc", "pdf_viewer", "perfetto", diff --git a/services/core/java/com/android/server/app/flags.aconfig b/services/core/java/com/android/server/app/flags.aconfig index 0673013bdc44..54e45716a232 100644 --- a/services/core/java/com/android/server/app/flags.aconfig +++ b/services/core/java/com/android/server/app/flags.aconfig @@ -1,4 +1,5 @@ package: "android.server.app" +container: "system" flag { name: "game_default_frame_rate" diff --git a/services/core/java/com/android/server/biometrics/BiometricService.java b/services/core/java/com/android/server/biometrics/BiometricService.java index 3737d6fb4f3f..0e81eb914697 100644 --- a/services/core/java/com/android/server/biometrics/BiometricService.java +++ b/services/core/java/com/android/server/biometrics/BiometricService.java @@ -850,8 +850,10 @@ public class BiometricService extends SystemService { Slog.d(TAG, "resetLockout(userId=" + userId + ", hat=" + (hardwareAuthToken == null ? "null " : "present") + ")"); - mBiometricContext.getAuthSessionCoordinator() + mHandler.post(() -> { + mBiometricContext.getAuthSessionCoordinator() .resetLockoutFor(userId, Authenticators.BIOMETRIC_STRONG, -1); + }); } @android.annotation.EnforcePermission(android.Manifest.permission.USE_BIOMETRIC_INTERNAL) diff --git a/services/core/java/com/android/server/biometrics/sensors/AuthSessionCoordinator.java b/services/core/java/com/android/server/biometrics/sensors/AuthSessionCoordinator.java index d9947ddedcef..dc2eff4847f7 100644 --- a/services/core/java/com/android/server/biometrics/sensors/AuthSessionCoordinator.java +++ b/services/core/java/com/android/server/biometrics/sensors/AuthSessionCoordinator.java @@ -235,7 +235,7 @@ public class AuthSessionCoordinator implements AuthSessionListener { mApiCallNumber = 0; } - void addApiCall(String str) { + synchronized void addApiCall(String str) { mApiCalls[mCurr] = str; mCurr++; mCurr %= mSize; @@ -243,7 +243,7 @@ public class AuthSessionCoordinator implements AuthSessionListener { } @Override - public String toString() { + public synchronized String toString() { String buffer = ""; int apiCall = mApiCallNumber > mSize ? mApiCallNumber - mSize : 0; for (int i = 0; i < mSize; i++) { diff --git a/services/core/java/com/android/server/display/feature/display_flags.aconfig b/services/core/java/com/android/server/display/feature/display_flags.aconfig index c68ef9bd4cce..a7dd2430901f 100644 --- a/services/core/java/com/android/server/display/feature/display_flags.aconfig +++ b/services/core/java/com/android/server/display/feature/display_flags.aconfig @@ -126,7 +126,7 @@ flag { name: "even_dimmer" namespace: "display_manager" description: "Feature flag for extending the brightness below traditional range" - bug: "179428400" + bug: "294760970" is_fixed_read_only: true } diff --git a/services/core/java/com/android/server/feature/Android.bp b/services/core/java/com/android/server/feature/Android.bp deleted file mode 100644 index b0fbab6657b0..000000000000 --- a/services/core/java/com/android/server/feature/Android.bp +++ /dev/null @@ -1,13 +0,0 @@ -aconfig_declarations { - name: "dropbox_flags", - package: "com.android.server.feature.flags", - container: "system", - srcs: [ - "dropbox_flags.aconfig", - ], -} - -java_aconfig_library { - name: "dropbox_flags_lib", - aconfig_declarations: "dropbox_flags", -} diff --git a/services/core/java/com/android/server/flags/compaction.aconfig b/services/core/java/com/android/server/flags/compaction.aconfig index 58cc56029ea1..067a1c996a02 100644 --- a/services/core/java/com/android/server/flags/compaction.aconfig +++ b/services/core/java/com/android/server/flags/compaction.aconfig @@ -1,4 +1,5 @@ package: "com.android.server.flags" +container: "system" flag { name: "disable_system_compaction" diff --git a/services/core/java/com/android/server/flags/pinner.aconfig b/services/core/java/com/android/server/flags/pinner.aconfig index 606a6be29511..16a45cd87fd7 100644 --- a/services/core/java/com/android/server/flags/pinner.aconfig +++ b/services/core/java/com/android/server/flags/pinner.aconfig @@ -1,4 +1,5 @@ package: "com.android.server.flags" +container: "system" flag { name: "pin_webview" diff --git a/services/core/java/com/android/server/flags/services.aconfig b/services/core/java/com/android/server/flags/services.aconfig index 10b5eff06e0c..e43d0866e1bd 100644 --- a/services/core/java/com/android/server/flags/services.aconfig +++ b/services/core/java/com/android/server/flags/services.aconfig @@ -1,8 +1,19 @@ package: "com.android.server.flags" +container: "system" flag { namespace: "wear_frameworks" name: "enable_odp_feature_guard" description: "Enable guard based on system feature to prevent OnDevicePersonalization service from starting on form factors." bug: "322249125" -}
\ No newline at end of file +} + +flag { + namespace: "input" + name: "new_bugreport_keyboard_shortcut" + description: "Enable META+CTRL+BACKSPACE keyboard shortcut for taking a bug report" + bug: "335607520" + metadata { + purpose: PURPOSE_BUGFIX + } +} diff --git a/services/core/java/com/android/server/input/InputManagerService.java b/services/core/java/com/android/server/input/InputManagerService.java index 73df594ecfac..f32c11d90c0d 100644 --- a/services/core/java/com/android/server/input/InputManagerService.java +++ b/services/core/java/com/android/server/input/InputManagerService.java @@ -250,19 +250,8 @@ public class InputManagerService extends IInputManager.Stub private final Object mAssociationsLock = new Object(); @GuardedBy("mAssociationsLock") private final Map<String, Integer> mRuntimeAssociations = new ArrayMap<>(); - - // The associations of input devices to displays by port. Maps from {InputDevice#mName} (String) - // to {DisplayInfo#uniqueId} (String) so that events from the Input Device go to a - // specific display. - @GuardedBy("mAssociationsLock") - private final Map<String, String> mUniqueIdAssociationsByPort = new ArrayMap<>(); - - // The associations of input devices to displays by descriptor. Maps from - // {InputDevice#mDescriptor} to {DisplayInfo#uniqueId} (String) so that events from the - // input device go to a specific display. @GuardedBy("mAssociationsLock") - private final Map<String, String> mUniqueIdAssociationsByDescriptor = new ArrayMap<>(); - + private final Map<String, String> mUniqueIdAssociations = new ArrayMap<>(); // The map from input port (String) to the keyboard layout identifiers (comma separated string // containing language tag and layout type) associated with the corresponding keyboard device. // Currently only accessed by InputReader. @@ -1752,8 +1741,8 @@ public class InputManagerService extends IInputManager.Stub /** * Add a runtime association between the input port and the display port. This overrides any * static associations. - * @param inputPort the port of the input device - * @param displayPort the physical port of the associated display + * @param inputPort The port of the input device. + * @param displayPort The physical port of the associated display. */ @Override // Binder call public void addPortAssociation(@NonNull String inputPort, int displayPort) { @@ -1774,7 +1763,7 @@ public class InputManagerService extends IInputManager.Stub /** * Remove the runtime association between the input port and the display port. Any existing * static association for the cleared input port will be restored. - * @param inputPort the port of the input device to be cleared + * @param inputPort The port of the input device to be cleared. */ @Override // Binder call public void removePortAssociation(@NonNull String inputPort) { @@ -1793,11 +1782,10 @@ public class InputManagerService extends IInputManager.Stub } @Override // Binder call - public void addUniqueIdAssociationByPort(@NonNull String inputPort, - @NonNull String displayUniqueId) { + public void addUniqueIdAssociation(@NonNull String inputPort, @NonNull String displayUniqueId) { if (!checkCallingPermission( android.Manifest.permission.ASSOCIATE_INPUT_DEVICE_TO_DISPLAY, - "addUniqueIdAssociationByPort()")) { + "addUniqueIdAssociation()")) { throw new SecurityException( "Requires ASSOCIATE_INPUT_DEVICE_TO_DISPLAY permission"); } @@ -1805,65 +1793,22 @@ public class InputManagerService extends IInputManager.Stub Objects.requireNonNull(inputPort); Objects.requireNonNull(displayUniqueId); synchronized (mAssociationsLock) { - mUniqueIdAssociationsByPort.put(inputPort, displayUniqueId); + mUniqueIdAssociations.put(inputPort, displayUniqueId); } mNative.changeUniqueIdAssociation(); } @Override // Binder call - public void removeUniqueIdAssociationByPort(@NonNull String inputPort) { + public void removeUniqueIdAssociation(@NonNull String inputPort) { if (!checkCallingPermission( android.Manifest.permission.ASSOCIATE_INPUT_DEVICE_TO_DISPLAY, - "removeUniqueIdAssociationByPort()")) { + "removeUniqueIdAssociation()")) { throw new SecurityException("Requires ASSOCIATE_INPUT_DEVICE_TO_DISPLAY permission"); } Objects.requireNonNull(inputPort); synchronized (mAssociationsLock) { - mUniqueIdAssociationsByPort.remove(inputPort); - } - mNative.changeUniqueIdAssociation(); - } - - /** - * Adds a runtime association between the input device descriptor and the display unique id. - * @param inputDeviceDescriptor the descriptor of the input device - * @param displayUniqueId the unique ID of the display - */ - @Override // Binder call - public void addUniqueIdAssociationByDescriptor(@NonNull String inputDeviceDescriptor, - @NonNull String displayUniqueId) { - if (!checkCallingPermission( - android.Manifest.permission.ASSOCIATE_INPUT_DEVICE_TO_DISPLAY, - "addUniqueIdAssociationByDescriptor()")) { - throw new SecurityException( - "Requires ASSOCIATE_INPUT_DEVICE_TO_DISPLAY permission"); - } - - Objects.requireNonNull(inputDeviceDescriptor); - Objects.requireNonNull(displayUniqueId); - synchronized (mAssociationsLock) { - mUniqueIdAssociationsByDescriptor.put(inputDeviceDescriptor, displayUniqueId); - } - mNative.changeUniqueIdAssociation(); - } - - /** - * Removes the runtime association between the input device and the display. - * @param inputDeviceDescriptor the descriptor of the input device - */ - @Override // Binder call - public void removeUniqueIdAssociationByDescriptor(@NonNull String inputDeviceDescriptor) { - if (!checkCallingPermission( - android.Manifest.permission.ASSOCIATE_INPUT_DEVICE_TO_DISPLAY, - "removeUniqueIdAssociationByDescriptor()")) { - throw new SecurityException( - "Requires ASSOCIATE_INPUT_DEVICE_TO_DISPLAY permission"); - } - - Objects.requireNonNull(inputDeviceDescriptor); - synchronized (mAssociationsLock) { - mUniqueIdAssociationsByDescriptor.remove(inputDeviceDescriptor); + mUniqueIdAssociations.remove(inputPort); } mNative.changeUniqueIdAssociation(); } @@ -2238,20 +2183,13 @@ public class InputManagerService extends IInputManager.Stub pw.println(" display: " + v); }); } - if (!mUniqueIdAssociationsByPort.isEmpty()) { + if (!mUniqueIdAssociations.isEmpty()) { pw.println("Unique Id Associations:"); - mUniqueIdAssociationsByPort.forEach((k, v) -> { + mUniqueIdAssociations.forEach((k, v) -> { pw.print(" port: " + k); pw.println(" uniqueId: " + v); }); } - if (!mUniqueIdAssociationsByDescriptor.isEmpty()) { - pw.println("Unique Id Associations:"); - mUniqueIdAssociationsByDescriptor.forEach((k, v) -> { - pw.print(" descriptor: " + k); - pw.println(" uniqueId: " + v); - }); - } if (!mDeviceTypeAssociations.isEmpty()) { pw.println("Type Associations:"); mDeviceTypeAssociations.forEach((k, v) -> { @@ -2684,21 +2622,10 @@ public class InputManagerService extends IInputManager.Stub // Native callback @SuppressWarnings("unused") - private String[] getInputUniqueIdAssociationsByPort() { - final Map<String, String> associations; - synchronized (mAssociationsLock) { - associations = new HashMap<>(mUniqueIdAssociationsByPort); - } - - return flatten(associations); - } - - // Native callback - @SuppressWarnings("unused") - private String[] getInputUniqueIdAssociationsByDescriptor() { + private String[] getInputUniqueIdAssociations() { final Map<String, String> associations; synchronized (mAssociationsLock) { - associations = new HashMap<>(mUniqueIdAssociationsByDescriptor); + associations = new HashMap<>(mUniqueIdAssociations); } return flatten(associations); diff --git a/services/core/java/com/android/server/inputmethod/HandwritingEventReceiverSurface.java b/services/core/java/com/android/server/inputmethod/HandwritingEventReceiverSurface.java index dbbbed31df76..d13244905633 100644 --- a/services/core/java/com/android/server/inputmethod/HandwritingEventReceiverSurface.java +++ b/services/core/java/com/android/server/inputmethod/HandwritingEventReceiverSurface.java @@ -85,6 +85,17 @@ final class HandwritingEventReceiverSurface { mIsIntercepting = true; } + void setNotTouchable(boolean notTouchable) { + if (notTouchable) { + mWindowHandle.inputConfig |= InputConfig.NOT_TOUCHABLE; + } else { + mWindowHandle.inputConfig &= ~InputConfig.NOT_TOUCHABLE; + } + new SurfaceControl.Transaction() + .setInputWindowInfo(mInputSurface, mWindowHandle) + .apply(); + } + boolean isIntercepting() { return mIsIntercepting; } diff --git a/services/core/java/com/android/server/inputmethod/HandwritingModeController.java b/services/core/java/com/android/server/inputmethod/HandwritingModeController.java index dbdac4184f28..7956e03f22a9 100644 --- a/services/core/java/com/android/server/inputmethod/HandwritingModeController.java +++ b/services/core/java/com/android/server/inputmethod/HandwritingModeController.java @@ -159,6 +159,13 @@ final class HandwritingModeController { return OptionalInt.of(mCurrentRequestId); } + void setNotTouchable(boolean notTouchable) { + if (!getCurrentRequestId().isPresent()) { + return; + } + mHandwritingSurface.setNotTouchable(notTouchable); + } + boolean isStylusGestureOngoing() { if (mRecordingGestureAfterStylusUp && !mHandwritingBuffer.isEmpty()) { // If it is less than AFTER_STYLUS_UP_ALLOW_PERIOD_MS after the stylus up event, return diff --git a/services/core/java/com/android/server/inputmethod/InputMethodManagerService.java b/services/core/java/com/android/server/inputmethod/InputMethodManagerService.java index 808e29632f23..7bd47f5d574e 100644 --- a/services/core/java/com/android/server/inputmethod/InputMethodManagerService.java +++ b/services/core/java/com/android/server/inputmethod/InputMethodManagerService.java @@ -6548,6 +6548,12 @@ public final class InputMethodManagerService implements IInputMethodManagerImpl. @BinderThread @Override + public void setHandwritingSurfaceNotTouchable(boolean notTouchable) { + mImms.mHwController.setNotTouchable(notTouchable); + } + + @BinderThread + @Override public void createInputContentUriToken(Uri contentUri, String packageName, AndroidFuture future /* T=IBinder */) { @SuppressWarnings("unchecked") diff --git a/services/core/java/com/android/server/location/gnss/GnssNetworkConnectivityHandler.java b/services/core/java/com/android/server/location/gnss/GnssNetworkConnectivityHandler.java index 32a0ef4c6a42..8002300dacc0 100644 --- a/services/core/java/com/android/server/location/gnss/GnssNetworkConnectivityHandler.java +++ b/services/core/java/com/android/server/location/gnss/GnssNetworkConnectivityHandler.java @@ -18,6 +18,7 @@ package com.android.server.location.gnss; import static android.net.NetworkCapabilities.NET_CAPABILITY_NOT_RESTRICTED; +import android.annotation.RequiresPermission; import android.content.Context; import android.location.flags.Flags; import android.net.ConnectivityManager; @@ -32,6 +33,7 @@ import android.os.Looper; import android.os.PowerManager; import android.telephony.PhoneStateListener; import android.telephony.PreciseCallState; +import android.telephony.ServiceState; import android.telephony.SubscriptionInfo; import android.telephony.SubscriptionManager; import android.telephony.TelephonyManager; @@ -572,6 +574,10 @@ class GnssNetworkConnectivityHandler { } } + @RequiresPermission(allOf = { + android.Manifest.permission.ACCESS_COARSE_LOCATION, + android.Manifest.permission.READ_PHONE_STATE + }) private void handleRequestSuplConnection(int agpsType, byte[] suplIpAddr) { mAGpsDataConnectionIpAddr = null; mAGpsType = agpsType; @@ -605,6 +611,19 @@ class GnssNetworkConnectivityHandler { NetworkRequest.Builder networkRequestBuilder = new NetworkRequest.Builder(); networkRequestBuilder.addCapability(getNetworkCapability(mAGpsType)); networkRequestBuilder.addTransportType(NetworkCapabilities.TRANSPORT_CELLULAR); + + if (com.android.internal.telephony.flags.Flags.satelliteInternet()) { + // Add transport type NetworkCapabilities.TRANSPORT_SATELLITE on satellite network. + TelephonyManager telephonyManager = mContext.getSystemService(TelephonyManager.class); + if (telephonyManager != null) { + ServiceState state = telephonyManager.getServiceState(); + if (state != null && state.isUsingNonTerrestrialNetwork()) { + networkRequestBuilder.removeCapability(NET_CAPABILITY_NOT_RESTRICTED); + networkRequestBuilder.addTransportType(NetworkCapabilities.TRANSPORT_SATELLITE); + } + } + } + // During an emergency call, and when we have cached the Active Sub Id, we set the // Network Specifier so that the network request goes to the correct Sub Id if (mNiHandler.getInEmergency() && mActiveSubId >= 0) { diff --git a/services/core/java/com/android/server/media/MediaServerUtils.java b/services/core/java/com/android/server/media/MediaServerUtils.java index 6a954d66d18d..f16d426d634a 100644 --- a/services/core/java/com/android/server/media/MediaServerUtils.java +++ b/services/core/java/com/android/server/media/MediaServerUtils.java @@ -74,10 +74,7 @@ import java.util.List; } final PackageManagerInternal packageManagerInternal = LocalServices.getService(PackageManagerInternal.class); - final int actualUid = - packageManagerInternal.getPackageUid( - packageName, 0 /* flags */, UserHandle.getUserId(uid)); - if (!UserHandle.isSameApp(uid, actualUid)) { + if (!packageManagerInternal.isSameApp(packageName, uid, UserHandle.getUserId(uid))) { String[] uidPackages = context.getPackageManager().getPackagesForUid(uid); throw new IllegalArgumentException( "packageName does not belong to the calling uid; " diff --git a/services/core/java/com/android/server/notification/NotificationManagerService.java b/services/core/java/com/android/server/notification/NotificationManagerService.java index ebea05ddfd0c..bff3d39d7361 100755 --- a/services/core/java/com/android/server/notification/NotificationManagerService.java +++ b/services/core/java/com/android/server/notification/NotificationManagerService.java @@ -98,6 +98,7 @@ import static android.os.UserHandle.USER_NULL; import static android.os.UserHandle.USER_SYSTEM; import static android.service.notification.Flags.callstyleCallbackApi; import static android.service.notification.Flags.redactSensitiveNotificationsFromUntrustedListeners; +import static android.service.notification.Flags.redactSensitiveNotificationsBigTextStyle; import static android.service.notification.NotificationListenerService.FLAG_FILTER_TYPE_ALERTING; import static android.service.notification.NotificationListenerService.FLAG_FILTER_TYPE_CONVERSATIONS; import static android.service.notification.NotificationListenerService.FLAG_FILTER_TYPE_ONGOING; @@ -139,6 +140,7 @@ import static android.service.notification.NotificationListenerService.TRIM_FULL import static android.service.notification.NotificationListenerService.TRIM_LIGHT; import static android.view.WindowManager.LayoutParams.TYPE_TOAST; import static android.view.contentprotection.flags.Flags.rapidClearNotificationsByListenerAppOpEnabled; + import static com.android.internal.util.FrameworkStatsLog.DND_MODE_RULE; import static com.android.internal.util.FrameworkStatsLog.PACKAGE_NOTIFICATION_CHANNEL_GROUP_PREFERENCES; import static com.android.internal.util.FrameworkStatsLog.PACKAGE_NOTIFICATION_CHANNEL_PREFERENCES; @@ -306,6 +308,7 @@ import android.view.Display; import android.view.accessibility.AccessibilityManager; import android.widget.RemoteViews; import android.widget.Toast; + import com.android.internal.R; import com.android.internal.annotations.GuardedBy; import com.android.internal.annotations.VisibleForTesting; @@ -357,7 +360,9 @@ import com.android.server.utils.quota.MultiRateLimiter; import com.android.server.wm.ActivityTaskManagerInternal; import com.android.server.wm.BackgroundActivityStartCallback; import com.android.server.wm.WindowManagerInternal; + import libcore.io.IoUtils; + import org.json.JSONException; import org.json.JSONObject; import org.xmlpull.v1.XmlPullParserException; @@ -3780,9 +3785,9 @@ public class NotificationManagerService extends SystemService { // If cancellation will be prevented due to lifetime extension, we send updates // to system UI. synchronized (mNotificationLock) { - notifySystemUiListenerLifetimeExtendedListLocked(mNotificationList, + maybeNotifySystemUiListenerLifetimeExtendedListLocked(mNotificationList, packageImportance); - notifySystemUiListenerLifetimeExtendedListLocked(mEnqueuedNotifications, + maybeNotifySystemUiListenerLifetimeExtendedListLocked(mEnqueuedNotifications, packageImportance); } } else { @@ -4969,10 +4974,10 @@ public class NotificationManagerService extends SystemService { | FLAG_LIFETIME_EXTENDED_BY_DIRECT_REPLY); // If cancellation will be prevented due to lifetime extension, we send // an update to system UI. - notifySystemUiListenerLifetimeExtendedListLocked(mNotificationList, - packageImportance); - notifySystemUiListenerLifetimeExtendedListLocked(mEnqueuedNotifications, - packageImportance); + maybeNotifySystemUiListenerLifetimeExtendedListLocked( + mNotificationList, packageImportance); + maybeNotifySystemUiListenerLifetimeExtendedListLocked( + mEnqueuedNotifications, packageImportance); } else { cancelAllLocked(callingUid, callingPid, info.userid, REASON_LISTENER_CANCEL_ALL, info, info.supportsProfiles(), @@ -7235,6 +7240,10 @@ public class NotificationManagerService extends SystemService { } } } + if (Flags.traceCancelEvents()) { + Trace.instant(Trace.TRACE_TAG_SYSTEM_SERVER, "cancelNotificationInternal: " + + SmallHash.hash(Objects.hashCode(tag) ^ id)); + } cancelNotification(uid, callingPid, pkg, tag, id, 0, mustNotHaveFlags, false, userId, REASON_APP_CANCEL, null); @@ -8289,14 +8298,6 @@ public class NotificationManagerService extends SystemService { mUsageStats.registerClickedByUser(r); } - // If cancellation will be prevented due to lifetime extension, we need to - // send an update to system UI. This must be checked before flags are checked. - // We do not want to send this update. - if (lifetimeExtensionRefactor() && mReason != REASON_CLICK) { - maybeNotifySystemUiListenerLifetimeExtendedLocked(r, mPkg, - packageImportance); - } - if ((mReason == REASON_LISTENER_CANCEL && r.getNotification().isBubbleNotification()) || (mReason == REASON_CLICK && r.canBubble() @@ -8313,6 +8314,12 @@ public class NotificationManagerService extends SystemService { return; } if ((r.getNotification().flags & mMustNotHaveFlags) != 0) { + if (lifetimeExtensionRefactor()) { + // If cancellation will be prevented due to lifetime extension, + // we need to send an update to system UI first. + maybeNotifySystemUiListenerLifetimeExtendedLocked(r, mPkg, + packageImportance); + } return; } @@ -11235,7 +11242,7 @@ public class NotificationManagerService extends SystemService { @FlaggedApi(FLAG_LIFETIME_EXTENSION_REFACTOR) @GuardedBy("mNotificationLock") - private void notifySystemUiListenerLifetimeExtendedListLocked( + private void maybeNotifySystemUiListenerLifetimeExtendedListLocked( List<NotificationRecord> notificationList, int packageImportance) { for (int i = notificationList.size() - 1; i >= 0; --i) { NotificationRecord record = notificationList.get(i); @@ -11775,10 +11782,18 @@ public class NotificationManagerService extends SystemService { } if (lifetimeExtensionRefactor()) { + if (sendRedacted && redactedSbn == null) { + redactedSbn = redactStatusBarNotification(sbn); + redactedCache = new TrimCache(redactedSbn); + } + final StatusBarNotification sbnToPost = sendRedacted + ? redactedCache.ForListener(info) : trimCache.ForListener(info); + // Checks if this is a request to notify system UI about a notification that // has been lifetime extended. // (We only need to check old for the flag, because in both cancellation and - // update cases, old should have the flag.) + // update cases, old should have the flag, whereas in update cases the + // new will NOT have the flag.) // If it is such a request, and this is system UI, we send the post request // only to System UI, and break as we don't need to continue checking other // Managed Services. @@ -11786,7 +11801,7 @@ public class NotificationManagerService extends SystemService { && (old.getNotification().flags & FLAG_LIFETIME_EXTENDED_BY_DIRECT_REPLY) > 0) { final NotificationRankingUpdate update = makeRankingUpdateLocked(info); - listenerCalls.add(() -> notifyPosted(info, oldSbn, update)); + listenerCalls.add(() -> notifyPosted(info, sbnToPost, update)); break; } } @@ -11917,6 +11932,14 @@ public class NotificationManagerService extends SystemService { redactedText, System.currentTimeMillis(), empty)); redactedNotifBuilder.setStyle(messageStyle); } + if (redactSensitiveNotificationsBigTextStyle() + && oldNotif.isStyle(Notification.BigTextStyle.class)) { + Notification.BigTextStyle bigTextStyle = new Notification.BigTextStyle(); + bigTextStyle.bigText(mContext.getString(R.string.redacted_notification_message)); + bigTextStyle.setBigContentTitle(""); + bigTextStyle.setSummaryText(""); + redactedNotifBuilder.setStyle(bigTextStyle); + } Notification redacted = redactedNotifBuilder.build(); // Notification extras can't always be overridden by a builder (configured by a system diff --git a/services/core/java/com/android/server/notification/NotificationRecord.java b/services/core/java/com/android/server/notification/NotificationRecord.java index c69bead309f1..e75d0a3285e7 100644 --- a/services/core/java/com/android/server/notification/NotificationRecord.java +++ b/services/core/java/com/android/server/notification/NotificationRecord.java @@ -66,15 +66,16 @@ import android.service.notification.StatusBarNotification; import android.text.TextUtils; import android.util.ArraySet; import android.util.Log; -import android.util.TimeUtils; import android.util.proto.ProtoOutputStream; import android.widget.RemoteViews; + import com.android.internal.annotations.VisibleForTesting; import com.android.internal.logging.MetricsLogger; import com.android.internal.logging.nano.MetricsProto.MetricsEvent; import com.android.server.EventLogTags; import com.android.server.LocalServices; import com.android.server.uri.UriGrantsManagerInternal; + import dalvik.annotation.optimization.NeverCompile; import java.io.PrintWriter; @@ -1165,7 +1166,11 @@ public final class NotificationRecord { mVibration = calculateVibration(); if (restrictAudioAttributesCall() || restrictAudioAttributesAlarm() || restrictAudioAttributesMedia()) { - mAttributes = channel.getAudioAttributes(); + if (channel.getAudioAttributes() != null) { + mAttributes = channel.getAudioAttributes(); + } else { + mAttributes = Notification.AUDIO_ATTRIBUTES_DEFAULT; + } } } } diff --git a/services/core/java/com/android/server/notification/ZenModeHelper.java b/services/core/java/com/android/server/notification/ZenModeHelper.java index 20b7fd46beb5..4a3812bf0f49 100644 --- a/services/core/java/com/android/server/notification/ZenModeHelper.java +++ b/services/core/java/com/android/server/notification/ZenModeHelper.java @@ -1493,9 +1493,13 @@ public class ZenModeHelper { newConfig = mConfig.copy(); if (zenMode == Global.ZEN_MODE_OFF) { newConfig.manualRule = null; - for (ZenRule automaticRule : newConfig.automaticRules.values()) { - if (automaticRule.isAutomaticActive()) { - automaticRule.snoozing = true; + if (!Flags.modesUi() || origin != UPDATE_ORIGIN_USER) { + // User deactivation of DND means just turning off the manual DND rule. + // For API calls (different origin) keep old behavior of snoozing all rules. + for (ZenRule automaticRule : newConfig.automaticRules.values()) { + if (automaticRule.isAutomaticActive()) { + automaticRule.snoozing = true; + } } } } else { diff --git a/services/core/java/com/android/server/notification/flags.aconfig b/services/core/java/com/android/server/notification/flags.aconfig index 28598711ae3a..af3db6c6be4f 100644 --- a/services/core/java/com/android/server/notification/flags.aconfig +++ b/services/core/java/com/android/server/notification/flags.aconfig @@ -101,3 +101,30 @@ flag { description: "Stores restore data for not-yet-installed pkgs for 48 hours" bug: "334999659" } + +flag { + name: "trace_cancel_events" + namespace: "systemui" + description: "Adds performance tracing for binder cancel calls" + bug: "331677193" + metadata { + purpose: PURPOSE_BUGFIX + } +} + +flag { + name: "exit_invalid_cancel_early" + namespace: "systemui" + description: "aborts cancel binder events early if notif doesn't exist" + bug: "331677193" + metadata { + purpose: PURPOSE_BUGFIX + } +} + +flag { + name: "use_ipcdatacache_channels" + namespace: "systemui" + description: "Adds an IPCDataCache for notification channel/group lookups" + bug: "331677193" +} diff --git a/services/core/java/com/android/server/ondeviceintelligence/OnDeviceIntelligenceManagerService.java b/services/core/java/com/android/server/ondeviceintelligence/OnDeviceIntelligenceManagerService.java index af339dfe541d..8f6aa955c0b1 100644 --- a/services/core/java/com/android/server/ondeviceintelligence/OnDeviceIntelligenceManagerService.java +++ b/services/core/java/com/android/server/ondeviceintelligence/OnDeviceIntelligenceManagerService.java @@ -662,7 +662,11 @@ public class OnDeviceIntelligenceManagerService extends SystemService { } } + @RequiresPermission(Manifest.permission.USE_ON_DEVICE_INTELLIGENCE) public void resetTemporaryServices() { + enforceShellOnly(Binder.getCallingUid(), "resetTemporaryServices"); + mContext.enforceCallingPermission( + Manifest.permission.USE_ON_DEVICE_INTELLIGENCE, TAG); synchronized (mLock) { if (mTemporaryHandler != null) { mTemporaryHandler.removeMessages(MSG_RESET_TEMPORARY_SERVICE); diff --git a/services/core/java/com/android/server/pm/ComputerEngine.java b/services/core/java/com/android/server/pm/ComputerEngine.java index 2005b17e82a6..6a25f64b697d 100644 --- a/services/core/java/com/android/server/pm/ComputerEngine.java +++ b/services/core/java/com/android/server/pm/ComputerEngine.java @@ -584,8 +584,8 @@ public class ComputerEngine implements Computer { list = new ArrayList<>(1); list.add(ri); PackageManagerServiceUtils.applyEnforceIntentFilterMatching( - mInjector.getCompatibility(), mComponentResolver, - list, false, intent, resolvedType, filterCallingUid); + mInjector.getCompatibility(), this, list, false, intent, + resolvedType, filterCallingUid); } } } else { @@ -609,13 +609,15 @@ public class ComputerEngine implements Computer { } list = lockedResult.result; } + PackageManagerServiceUtils.applyNullActionBlocking( + mInjector.getCompatibility(), this, list, false, intent, filterCallingUid); } if (originalIntent != null) { // We also have to ensure all components match the original intent PackageManagerServiceUtils.applyEnforceIntentFilterMatching( - mInjector.getCompatibility(), mComponentResolver, - list, false, originalIntent, resolvedType, filterCallingUid); + mInjector.getCompatibility(), this, list, false, originalIntent, + resolvedType, filterCallingUid); } return skipPostResolution ? list : applyPostResolutionFilter( @@ -698,20 +700,22 @@ public class ComputerEngine implements Computer { list = new ArrayList<>(1); list.add(ri); PackageManagerServiceUtils.applyEnforceIntentFilterMatching( - mInjector.getCompatibility(), mComponentResolver, - list, false, intent, resolvedType, callingUid); + mInjector.getCompatibility(), this, list, false, intent, + resolvedType, callingUid); } } } else { list = queryIntentServicesInternalBody(intent, resolvedType, flags, userId, callingUid, instantAppPkgName); + PackageManagerServiceUtils.applyNullActionBlocking( + mInjector.getCompatibility(), this, list, false, intent, callingUid); } if (originalIntent != null) { // We also have to ensure all components match the original intent PackageManagerServiceUtils.applyEnforceIntentFilterMatching( - mInjector.getCompatibility(), mComponentResolver, - list, false, originalIntent, resolvedType, callingUid); + mInjector.getCompatibility(), this, list, false, originalIntent, + resolvedType, callingUid); } return list; diff --git a/services/core/java/com/android/server/pm/PackageManagerNative.java b/services/core/java/com/android/server/pm/PackageManagerNative.java index d035084d8b02..66ecd6e67e56 100644 --- a/services/core/java/com/android/server/pm/PackageManagerNative.java +++ b/services/core/java/com/android/server/pm/PackageManagerNative.java @@ -68,6 +68,11 @@ final class PackageManagerNative extends IPackageManagerNative.Stub { } } + @Override + public int getPackageUid(String packageName, long flags, int userId) throws RemoteException { + return mPm.snapshotComputer().getPackageUid(packageName, flags, userId); + } + // NB: this differentiates between preloads and sideloads @Override public String getInstallerForPackage(String packageName) throws RemoteException { diff --git a/services/core/java/com/android/server/pm/PackageManagerServiceUtils.java b/services/core/java/com/android/server/pm/PackageManagerServiceUtils.java index 9484d0d7b52b..5f04a0bd3264 100644 --- a/services/core/java/com/android/server/pm/PackageManagerServiceUtils.java +++ b/services/core/java/com/android/server/pm/PackageManagerServiceUtils.java @@ -27,6 +27,7 @@ import static android.system.OsConstants.O_RDWR; import static com.android.internal.content.NativeLibraryHelper.LIB64_DIR_NAME; import static com.android.internal.content.NativeLibraryHelper.LIB_DIR_NAME; import static com.android.internal.util.FrameworkStatsLog.UNSAFE_INTENT_EVENT_REPORTED__EVENT_TYPE__EXPLICIT_INTENT_FILTER_UNMATCH; +import static com.android.internal.util.FrameworkStatsLog.UNSAFE_INTENT_EVENT_REPORTED__EVENT_TYPE__NULL_ACTION_MATCH; import static com.android.server.LocalManagerRegistry.ManagerNotFoundException; import static com.android.server.pm.PackageInstallerSession.APP_METADATA_FILE_ACCESS_MODE; import static com.android.server.pm.PackageInstallerSession.getAppMetadataSizeLimit; @@ -115,6 +116,7 @@ import com.android.server.pm.pkg.AndroidPackage; import com.android.server.pm.pkg.AndroidPackageSplit; import com.android.server.pm.pkg.PackageStateInternal; import com.android.server.pm.resolution.ComponentResolverApi; +import com.android.server.pm.snapshot.PackageDataSnapshot; import com.android.server.pm.verify.domain.DomainVerificationManagerInternal; import dalvik.system.VMRuntime; @@ -1198,9 +1200,77 @@ public class PackageManagerServiceUtils { return (ps.getFlags() & ApplicationInfo.FLAG_UPDATED_SYSTEM_APP) != 0; } - // Static to give access to ComputeEngine + private static ParsedMainComponent componentInfoToComponent( + ComponentInfo info, ComponentResolverApi resolver, boolean isReceiver) { + if (info instanceof ActivityInfo) { + if (isReceiver) { + return resolver.getReceiver(info.getComponentName()); + } else { + return resolver.getActivity(info.getComponentName()); + } + } else if (info instanceof ServiceInfo) { + return resolver.getService(info.getComponentName()); + } else { + // This shall never happen + throw new IllegalArgumentException("Unsupported component type"); + } + } + + /** + * Under the correct conditions, remove components if the intent has null action. + * + * `compat` and `snapshot` may be null when this method is called in ActivityManagerService + * CTS tests. The code in this method will properly avoid control flows using these arguments. + */ + public static void applyNullActionBlocking( + @Nullable PlatformCompat compat, @Nullable PackageDataSnapshot snapshot, + List componentList, boolean isReceiver, Intent intent, int filterCallingUid) { + if (ActivityManager.canAccessUnexportedComponents(filterCallingUid)) return; + + final Computer computer = (Computer) snapshot; + ComponentResolverApi resolver = null; + + final boolean enforce = android.security.Flags.blockNullActionIntents() + && (compat == null || compat.isChangeEnabledByUidInternal( + IntentFilter.BLOCK_NULL_ACTION_INTENTS, filterCallingUid)); + + for (int i = componentList.size() - 1; i >= 0; --i) { + boolean match = true; + + Object c = componentList.get(i); + if (c instanceof ResolveInfo resolveInfo) { + if (computer == null) { + // PackageManagerService is not started + return; + } + if (resolver == null) { + resolver = computer.getComponentResolver(); + } + final ParsedMainComponent comp = componentInfoToComponent( + resolveInfo.getComponentInfo(), resolver, isReceiver); + if (!comp.getIntents().isEmpty() && intent.getAction() == null) { + match = false; + } + } else if (c instanceof IntentFilter) { + if (intent.getAction() == null) { + match = false; + } + } + + if (!match) { + ActivityManagerUtils.logUnsafeIntentEvent( + UNSAFE_INTENT_EVENT_REPORTED__EVENT_TYPE__NULL_ACTION_MATCH, + filterCallingUid, intent, null, enforce); + if (enforce) { + Slog.w(TAG, "Blocking intent with null action: " + intent); + componentList.remove(i); + } + } + } + } + public static void applyEnforceIntentFilterMatching( - PlatformCompat compat, ComponentResolverApi resolver, + PlatformCompat compat, PackageDataSnapshot snapshot, List<ResolveInfo> resolveInfos, boolean isReceiver, Intent intent, String resolvedType, int filterCallingUid) { if (DISABLE_ENFORCE_INTENTS_TO_MATCH_INTENT_FILTERS.get()) return; @@ -1208,13 +1278,19 @@ public class PackageManagerServiceUtils { // Do not enforce filter matching when the caller is system or root if (ActivityManager.canAccessUnexportedComponents(filterCallingUid)) return; + final Computer computer = (Computer) snapshot; + final ComponentResolverApi resolver = computer.getComponentResolver(); + final Printer logPrinter = DEBUG_INTENT_MATCHING ? new LogPrinter(Log.VERBOSE, TAG, Log.LOG_ID_SYSTEM) : null; - final boolean enforce = android.security.Flags.enforceIntentFilterMatch() + final boolean enforceMatch = android.security.Flags.enforceIntentFilterMatch() && compat.isChangeEnabledByUidInternal( ENFORCE_INTENTS_TO_MATCH_INTENT_FILTERS, filterCallingUid); + final boolean blockNullAction = android.security.Flags.blockNullActionIntents() + && compat.isChangeEnabledByUidInternal( + IntentFilter.BLOCK_NULL_ACTION_INTENTS, filterCallingUid); for (int i = resolveInfos.size() - 1; i >= 0; --i) { final ComponentInfo info = resolveInfos.get(i).getComponentInfo(); @@ -1224,40 +1300,53 @@ public class PackageManagerServiceUtils { continue; } - final ParsedMainComponent comp; - if (info instanceof ActivityInfo) { - if (isReceiver) { - comp = resolver.getReceiver(info.getComponentName()); - } else { - comp = resolver.getActivity(info.getComponentName()); - } - } else if (info instanceof ServiceInfo) { - comp = resolver.getService(info.getComponentName()); - } else { - // This shall never happen - throw new IllegalArgumentException("Unsupported component type"); - } + final ParsedMainComponent comp = componentInfoToComponent(info, resolver, isReceiver); if (comp == null || comp.getIntents().isEmpty()) { continue; } - boolean match = false; - for (int j = 0, size = comp.getIntents().size(); j < size; ++j) { - IntentFilter intentFilter = comp.getIntents().get(j).getIntentFilter(); - if (IntentResolver.intentMatchesFilter(intentFilter, intent, resolvedType)) { - match = true; - break; + Boolean match = null; + + if (intent.getAction() == null) { + ActivityManagerUtils.logUnsafeIntentEvent( + UNSAFE_INTENT_EVENT_REPORTED__EVENT_TYPE__NULL_ACTION_MATCH, + filterCallingUid, intent, resolvedType, enforceMatch && blockNullAction); + if (blockNullAction) { + // Skip intent filter matching if blocking null action + match = false; } } - if (!match) { + + if (match == null) { + // Check if any intent filter matches + for (int j = 0, size = comp.getIntents().size(); j < size; ++j) { + IntentFilter intentFilter = comp.getIntents().get(j).getIntentFilter(); + if (IntentResolver.intentMatchesFilter(intentFilter, intent, resolvedType)) { + match = true; + break; + } + } + } + + // At this point, the value `match` has the following states: + // null : Intent does not match any intent filter + // false: Null action intent detected AND blockNullAction == true + // true : The intent matches at least one intent filter + + if (match == null) { ActivityManagerUtils.logUnsafeIntentEvent( UNSAFE_INTENT_EVENT_REPORTED__EVENT_TYPE__EXPLICIT_INTENT_FILTER_UNMATCH, - filterCallingUid, intent, resolvedType, enforce); + filterCallingUid, intent, resolvedType, enforceMatch); + match = false; + } + + if (!match) { + // All non-matching intents has to be marked accordingly if (android.security.Flags.enforceIntentFilterMatch()) { intent.addExtendedFlags(Intent.EXTENDED_FLAG_FILTER_MISMATCH); } - if (enforce) { + if (enforceMatch) { Slog.w(TAG, "Intent does not match component's intent filter: " + intent); Slog.w(TAG, "Access blocked: " + comp.getComponentName()); if (DEBUG_INTENT_MATCHING) { @@ -1271,7 +1360,6 @@ public class PackageManagerServiceUtils { } } - /** * Do NOT use for intent resolution filtering. That should be done with * {@link DomainVerificationManagerInternal#filterToApprovedApp(Intent, List, int, Function)}. diff --git a/services/core/java/com/android/server/pm/ResolveIntentHelper.java b/services/core/java/com/android/server/pm/ResolveIntentHelper.java index b664e39cfd1c..309a4481e9de 100644 --- a/services/core/java/com/android/server/pm/ResolveIntentHelper.java +++ b/services/core/java/com/android/server/pm/ResolveIntentHelper.java @@ -458,7 +458,7 @@ final class ResolveIntentHelper { list = new ArrayList<>(1); list.add(ri); PackageManagerServiceUtils.applyEnforceIntentFilterMatching( - mPlatformCompat, componentResolver, list, true, intent, + mPlatformCompat, computer, list, true, intent, resolvedType, filterCallingUid); } } @@ -479,12 +479,14 @@ final class ResolveIntentHelper { list = result; } } + PackageManagerServiceUtils.applyNullActionBlocking( + mPlatformCompat, computer, list, true, intent, filterCallingUid); } if (originalIntent != null) { // We also have to ensure all components match the original intent PackageManagerServiceUtils.applyEnforceIntentFilterMatching( - mPlatformCompat, componentResolver, + mPlatformCompat, computer, list, true, originalIntent, resolvedType, filterCallingUid); } diff --git a/services/core/java/com/android/server/power/batterysaver/TEST_MAPPING b/services/core/java/com/android/server/power/batterysaver/TEST_MAPPING index c091b8e68236..eb91a72c127a 100644 --- a/services/core/java/com/android/server/power/batterysaver/TEST_MAPPING +++ b/services/core/java/com/android/server/power/batterysaver/TEST_MAPPING @@ -5,12 +5,7 @@ }, { "name": "CtsLocationFineTestCases", - "options": [ - { - // TODO: Wait for test to deflake - b/293934372 - "exclude-filter":"android.location.cts.fine.ScanningSettingsTest" - } - ] + "options": [] }, { "name": "CtsLocationNoneTestCases" diff --git a/services/core/java/com/android/server/power/hint/HintManagerService.java b/services/core/java/com/android/server/power/hint/HintManagerService.java index 101983e6ecf1..6e17fd3d8c87 100644 --- a/services/core/java/com/android/server/power/hint/HintManagerService.java +++ b/services/core/java/com/android/server/power/hint/HintManagerService.java @@ -20,11 +20,14 @@ import static com.android.internal.util.ConcurrentUtils.DIRECT_EXECUTOR; import static com.android.server.power.hint.Flags.powerhintThreadCleanup; import android.annotation.NonNull; +import android.annotation.Nullable; import android.app.ActivityManager; import android.app.ActivityManagerInternal; import android.app.StatsManager; import android.app.UidObserver; import android.content.Context; +import android.hardware.power.SessionConfig; +import android.hardware.power.SessionTag; import android.hardware.power.WorkDuration; import android.os.Binder; import android.os.Handler; @@ -67,6 +70,7 @@ import java.util.NoSuchElementException; import java.util.Objects; import java.util.Set; import java.util.concurrent.TimeUnit; +import java.util.concurrent.atomic.AtomicBoolean; /** An hint service implementation that runs in System Server process. */ public final class HintManagerService extends SystemService { @@ -87,7 +91,7 @@ public final class HintManagerService extends SystemService { @GuardedBy("mLock") private final ArrayMap<Integer, ArrayMap<IBinder, ArraySet<AppHintSession>>> mActiveSessions; - /** Lock to protect HAL handles and listen list. */ + /** Lock to protect mActiveSessions. */ private final Object mLock = new Object(); @GuardedBy("mNonIsolatedTidsLock") @@ -104,6 +108,8 @@ public final class HintManagerService extends SystemService { private final Context mContext; + private AtomicBoolean mConfigCreationSupport = new AtomicBoolean(true); + private static final String PROPERTY_SF_ENABLE_CPU_HINT = "debug.sf.enable_adpf_cpu_hint"; private static final String PROPERTY_HWUI_ENABLE_HINT_MANAGER = "debug.hwui.use_hint_manager"; @@ -217,6 +223,9 @@ public final class HintManagerService extends SystemService { private static native long nativeCreateHintSession(int tgid, int uid, int[] tids, long durationNanos); + private static native long nativeCreateHintSessionWithConfig(int tgid, int uid, int[] tids, + long durationNanos, int tag, SessionConfig config); + private static native void nativePauseHintSession(long halPtr); private static native void nativeResumeHintSession(long halPtr); @@ -253,6 +262,12 @@ public final class HintManagerService extends SystemService { return nativeCreateHintSession(tgid, uid, tids, durationNanos); } + /** Wrapper for HintManager.nativeCreateHintSessionWithConfig */ + public long halCreateHintSessionWithConfig( + int tgid, int uid, int[] tids, long durationNanos, int tag, SessionConfig config) { + return nativeCreateHintSessionWithConfig(tgid, uid, tids, durationNanos, tag, config); + } + /** Wrapper for HintManager.nativePauseHintSession */ public void halPauseHintSession(long halPtr) { nativePauseHintSession(halPtr); @@ -612,8 +627,12 @@ public final class HintManagerService extends SystemService { @VisibleForTesting final class BinderService extends IHintManager.Stub { @Override - public IHintSession createHintSession(IBinder token, int[] tids, long durationNanos) { - if (!isHalSupported()) return null; + public IHintSession createHintSessionWithConfig(@NonNull IBinder token, + @NonNull int[] tids, long durationNanos, @SessionTag int tag, + @Nullable SessionConfig config) { + if (!isHalSupported()) { + throw new UnsupportedOperationException("PowerHAL is not supported!"); + } java.util.Objects.requireNonNull(token); java.util.Objects.requireNonNull(tids); @@ -634,8 +653,35 @@ public final class HintManagerService extends SystemService { throw new SecurityException(errMsg); } - long halSessionPtr = mNativeWrapper.halCreateHintSession(callingTgid, callingUid, - tids, durationNanos); + Long halSessionPtr = null; + if (mConfigCreationSupport.get()) { + try { + halSessionPtr = mNativeWrapper.halCreateHintSessionWithConfig( + callingTgid, callingUid, tids, durationNanos, tag, config); + } catch (UnsupportedOperationException e) { + mConfigCreationSupport.set(false); + } catch (IllegalStateException e) { + Slog.e("createHintSessionWithConfig failed: ", e.getMessage()); + throw new IllegalStateException( + "createHintSessionWithConfig failed: " + e.getMessage()); + } + } + + if (halSessionPtr == null) { + try { + halSessionPtr = mNativeWrapper.halCreateHintSession(callingTgid, + callingUid, tids, durationNanos); + } catch (UnsupportedOperationException e) { + Slog.w("createHintSession unsupported: ", e.getMessage()); + throw new UnsupportedOperationException( + "createHintSession unsupported: " + e.getMessage()); + } catch (IllegalStateException e) { + Slog.e("createHintSession failed: ", e.getMessage()); + throw new IllegalStateException( + "createHintSession failed: " + e.getMessage()); + } + } + if (powerhintThreadCleanup()) { synchronized (mNonIsolatedTidsLock) { for (int i = nonIsolated.size() - 1; i >= 0; i--) { @@ -644,9 +690,6 @@ public final class HintManagerService extends SystemService { } } } - if (halSessionPtr == 0) { - return null; - } AppHintSession hs = new AppHintSession(callingUid, callingTgid, tids, token, halSessionPtr, durationNanos); diff --git a/services/core/java/com/android/server/vcn/Vcn.java b/services/core/java/com/android/server/vcn/Vcn.java index 37f04501bf28..5a5f7ef7b225 100644 --- a/services/core/java/com/android/server/vcn/Vcn.java +++ b/services/core/java/com/android/server/vcn/Vcn.java @@ -626,8 +626,12 @@ public class Vcn extends Handler { * Dumps the state of this Vcn for logging and debugging purposes. * * <p>PII and credentials MUST NEVER be dumped here. + * + * <p>This method is not thread safe and MUST run on the VCN thread. */ public void dump(IndentingPrintWriter pw) { + mVcnContext.ensureRunningOnLooperThread(); + pw.println("Vcn (" + mSubscriptionGroup + "):"); pw.increaseIndent(); diff --git a/services/core/java/com/android/server/vcn/VcnGatewayConnection.java b/services/core/java/com/android/server/vcn/VcnGatewayConnection.java index 3094b182093b..8d378a021f17 100644 --- a/services/core/java/com/android/server/vcn/VcnGatewayConnection.java +++ b/services/core/java/com/android/server/vcn/VcnGatewayConnection.java @@ -2580,8 +2580,12 @@ public class VcnGatewayConnection extends StateMachine { * Dumps the state of this VcnGatewayConnection for logging and debugging purposes. * * <p>PII and credentials MUST NEVER be dumped here. + * + * <p>This method is not thread safe and MUST run on the VCN thread. */ public void dump(IndentingPrintWriter pw) { + mVcnContext.ensureRunningOnLooperThread(); + pw.println("VcnGatewayConnection (" + mConnectionConfig.getGatewayConnectionName() + "):"); pw.increaseIndent(); @@ -2602,6 +2606,19 @@ public class VcnGatewayConnection extends StateMachine { mUnderlyingNetworkController.dump(pw); pw.println(); + if (mIkeSession == null) { + pw.println("mIkeSession: null"); + } else { + pw.println("mIkeSession:"); + + // Add a try catch block in case IkeSession#dump is not thread-safe + try { + mIkeSession.dump(pw); + } catch (Exception e) { + Slog.wtf(TAG, "Failed to dump IkeSession: " + e); + } + } + pw.decreaseIndent(); } @@ -2905,6 +2922,11 @@ public class VcnGatewayConnection extends StateMachine { public void setNetwork(@NonNull Network network) { mImpl.setNetwork(network); } + + /** Dumps the state of the IkeSession */ + public void dump(@NonNull IndentingPrintWriter pw) { + mImpl.dump(pw); + } } /** Proxy Implementation of WakeLock, used for testing. */ diff --git a/services/core/java/com/android/server/webkit/flags.aconfig b/services/core/java/com/android/server/webkit/flags.aconfig index 2afbcd6f101d..84dc1d7ca831 100644 --- a/services/core/java/com/android/server/webkit/flags.aconfig +++ b/services/core/java/com/android/server/webkit/flags.aconfig @@ -1,4 +1,5 @@ package: "android.webkit" +container: "system" flag { name: "update_service_v2" diff --git a/services/core/java/com/android/server/wm/ActivityMetricsLogger.java b/services/core/java/com/android/server/wm/ActivityMetricsLogger.java index 19f344996700..6ec557a15134 100644 --- a/services/core/java/com/android/server/wm/ActivityMetricsLogger.java +++ b/services/core/java/com/android/server/wm/ActivityMetricsLogger.java @@ -4,10 +4,10 @@ import static android.app.ActivityManager.PROCESS_STATE_NONEXISTENT; import static android.app.ActivityManager.START_SUCCESS; import static android.app.ActivityManager.START_TASK_TO_FRONT; import static android.app.ActivityManager.processStateAmToProto; -import static android.app.AppCompatTaskInfo.CAMERA_COMPAT_CONTROL_DISMISSED; -import static android.app.AppCompatTaskInfo.CAMERA_COMPAT_CONTROL_HIDDEN; -import static android.app.AppCompatTaskInfo.CAMERA_COMPAT_CONTROL_TREATMENT_APPLIED; -import static android.app.AppCompatTaskInfo.CAMERA_COMPAT_CONTROL_TREATMENT_SUGGESTED; +import static android.app.CameraCompatTaskInfo.CAMERA_COMPAT_CONTROL_DISMISSED; +import static android.app.CameraCompatTaskInfo.CAMERA_COMPAT_CONTROL_HIDDEN; +import static android.app.CameraCompatTaskInfo.CAMERA_COMPAT_CONTROL_TREATMENT_APPLIED; +import static android.app.CameraCompatTaskInfo.CAMERA_COMPAT_CONTROL_TREATMENT_SUGGESTED; import static android.app.WaitResult.INVALID_DELAY; import static android.app.WaitResult.LAUNCH_STATE_COLD; import static android.app.WaitResult.LAUNCH_STATE_HOT; @@ -88,7 +88,7 @@ import android.annotation.NonNull; import android.annotation.Nullable; import android.app.ActivityOptions; import android.app.ActivityOptions.SourceInfo; -import android.app.AppCompatTaskInfo.CameraCompatControlState; +import android.app.CameraCompatTaskInfo.CameraCompatControlState; import android.app.WaitResult; import android.app.WindowConfiguration.WindowingMode; import android.content.ComponentName; diff --git a/services/core/java/com/android/server/wm/ActivityRecord.java b/services/core/java/com/android/server/wm/ActivityRecord.java index 54e932a80ee9..85f96dc81b29 100644 --- a/services/core/java/com/android/server/wm/ActivityRecord.java +++ b/services/core/java/com/android/server/wm/ActivityRecord.java @@ -31,12 +31,13 @@ import static android.app.ActivityOptions.ANIM_THUMBNAIL_SCALE_DOWN; import static android.app.ActivityOptions.ANIM_THUMBNAIL_SCALE_UP; import static android.app.ActivityOptions.ANIM_UNDEFINED; import static android.app.ActivityTaskManager.INVALID_TASK_ID; -import static android.app.AppCompatTaskInfo.CAMERA_COMPAT_CONTROL_DISMISSED; -import static android.app.AppCompatTaskInfo.CAMERA_COMPAT_CONTROL_HIDDEN; -import static android.app.AppCompatTaskInfo.CAMERA_COMPAT_CONTROL_TREATMENT_APPLIED; -import static android.app.AppCompatTaskInfo.CAMERA_COMPAT_CONTROL_TREATMENT_SUGGESTED; import static android.app.AppOpsManager.MODE_ALLOWED; import static android.app.AppOpsManager.OP_PICTURE_IN_PICTURE; +import static android.app.CameraCompatTaskInfo.CAMERA_COMPAT_CONTROL_DISMISSED; +import static android.app.CameraCompatTaskInfo.CAMERA_COMPAT_CONTROL_HIDDEN; +import static android.app.CameraCompatTaskInfo.CAMERA_COMPAT_CONTROL_TREATMENT_APPLIED; +import static android.app.CameraCompatTaskInfo.CAMERA_COMPAT_CONTROL_TREATMENT_SUGGESTED; +import static android.app.CameraCompatTaskInfo.cameraCompatControlStateToString; import static android.app.WaitResult.INVALID_DELAY; import static android.app.WindowConfiguration.ACTIVITY_TYPE_ASSISTANT; import static android.app.WindowConfiguration.ACTIVITY_TYPE_DREAM; @@ -274,8 +275,7 @@ import android.annotation.Size; import android.app.Activity; import android.app.ActivityManager.TaskDescription; import android.app.ActivityOptions; -import android.app.AppCompatTaskInfo; -import android.app.AppCompatTaskInfo.CameraCompatControlState; +import android.app.CameraCompatTaskInfo.CameraCompatControlState; import android.app.ICompatCameraControlCallback; import android.app.IScreenCaptureObserver; import android.app.PendingIntent; @@ -1357,7 +1357,7 @@ final class ActivityRecord extends WindowToken implements WindowManagerService.A mLetterboxUiController.dump(pw, prefix); pw.println(prefix + "mCameraCompatControlState=" - + AppCompatTaskInfo.cameraCompatControlStateToString(mCameraCompatControlState)); + + cameraCompatControlStateToString(mCameraCompatControlState)); pw.println(prefix + "mCameraCompatControlEnabled=" + mCameraCompatControlEnabled); } @@ -8363,7 +8363,7 @@ final class ActivityRecord extends WindowToken implements WindowManagerService.A * aspect ratio. */ boolean shouldCreateCompatDisplayInsets() { - if (mLetterboxUiController.shouldApplyUserFullscreenOverride()) { + if (mLetterboxUiController.hasFullscreenOverride()) { // If the user has forced the applications aspect ratio to be fullscreen, don't use size // compatibility mode in any situation. The user has been warned and therefore accepts // the risk of the application misbehaving. @@ -8378,7 +8378,11 @@ final class ActivityRecord extends WindowToken implements WindowManagerService.A default: // Fall through } - if (inMultiWindowMode() || getWindowConfiguration().hasWindowDecorCaption()) { + // Use root activity's info for tasks in multi-window mode, or fullscreen tasks in freeform + // task display areas, to ensure visual consistency across activity launches and exits in + // the same task. + final TaskDisplayArea tda = getTaskDisplayArea(); + if (inMultiWindowMode() || (tda != null && tda.inFreeformWindowingMode())) { final ActivityRecord root = task != null ? task.getRootActivity() : null; if (root != null && root != this && !root.shouldCreateCompatDisplayInsets()) { // If the root activity doesn't use size compatibility mode, the activities above diff --git a/services/core/java/com/android/server/wm/ConfigurationContainer.java b/services/core/java/com/android/server/wm/ConfigurationContainer.java index be7c18c49373..31754bf67cc8 100644 --- a/services/core/java/com/android/server/wm/ConfigurationContainer.java +++ b/services/core/java/com/android/server/wm/ConfigurationContainer.java @@ -467,13 +467,6 @@ public abstract class ConfigurationContainer<E extends ConfigurationContainer> { onRequestedOverrideConfigurationChanged(mRequestsTmpConfig); } - /** Sets the windowing mode for the configuration container. */ - void setDisplayWindowingMode(int windowingMode) { - mRequestsTmpConfig.setTo(getRequestedOverrideConfiguration()); - mRequestsTmpConfig.windowConfiguration.setDisplayWindowingMode(windowingMode); - onRequestedOverrideConfigurationChanged(mRequestsTmpConfig); - } - /** * Returns true if this container is currently in multi-window mode. I.e. sharing the screen * with another activity. diff --git a/services/core/java/com/android/server/wm/DisplayContent.java b/services/core/java/com/android/server/wm/DisplayContent.java index 00d42e0eb109..6c757a31f323 100644 --- a/services/core/java/com/android/server/wm/DisplayContent.java +++ b/services/core/java/com/android/server/wm/DisplayContent.java @@ -2456,7 +2456,6 @@ class DisplayContent extends RootDisplayArea implements WindowManagerPolicy.Disp config.windowConfiguration.setBounds(mTmpRect); config.windowConfiguration.setMaxBounds(mTmpRect); config.windowConfiguration.setWindowingMode(getWindowingMode()); - config.windowConfiguration.setDisplayWindowingMode(getWindowingMode()); computeScreenAppConfiguration(config, dw, dh, displayInfo.rotation); @@ -2834,11 +2833,6 @@ class DisplayContent extends RootDisplayArea implements WindowManagerPolicy.Disp } } - @Override - void setDisplayWindowingMode(int windowingMode) { - setWindowingMode(windowingMode); - } - /** * See {@code WindowState#applyImeWindowsIfNeeded} for the details that we won't traverse the * IME window in some cases. @@ -2956,7 +2950,6 @@ class DisplayContent extends RootDisplayArea implements WindowManagerPolicy.Disp void onDisplayChanged(DisplayContent dc) { super.onDisplayChanged(dc); updateSystemGestureExclusionLimit(); - updateKeepClearAreas(); } void updateSystemGestureExclusionLimit() { @@ -4035,7 +4028,6 @@ class DisplayContent extends RootDisplayArea implements WindowManagerPolicy.Disp } adjustForImeIfNeeded(); - updateKeepClearAreas(); // We may need to schedule some toast windows to be removed. The toasts for an app that // does not have input focus are removed within a timeout to prevent apps to redress @@ -6156,6 +6148,7 @@ class DisplayContent extends RootDisplayArea implements WindowManagerPolicy.Disp Region touchableRegion = Region.obtain(); w.getEffectiveTouchableRegion(touchableRegion); RegionUtils.forEachRect(touchableRegion, rect -> outUnrestricted.add(rect)); + touchableRegion.recycle(); } } diff --git a/services/core/java/com/android/server/wm/ImeInsetsSourceProvider.java b/services/core/java/com/android/server/wm/ImeInsetsSourceProvider.java index 2dbb37066a9e..092ff3dd07a5 100644 --- a/services/core/java/com/android/server/wm/ImeInsetsSourceProvider.java +++ b/services/core/java/com/android/server/wm/ImeInsetsSourceProvider.java @@ -181,8 +181,10 @@ final class ImeInsetsSourceProvider extends InsetsSourceProvider { } WindowToken imeToken = mWindowContainer.asWindowState() != null ? mWindowContainer.asWindowState().mToken : null; - if (mDisplayContent.getAsyncRotationController() != null - && mDisplayContent.getAsyncRotationController().isTargetToken(imeToken)) { + final var rotationController = mDisplayContent.getAsyncRotationController(); + if ((rotationController != null && rotationController.isTargetToken(imeToken)) + || (imeToken != null && imeToken.isSelfAnimating( + 0 /* flags */, SurfaceAnimator.ANIMATION_TYPE_TOKEN_TRANSFORM))) { // Skip reporting IME drawn state when the control target is in fixed // rotation, AsyncRotationController will report after the animation finished. return; diff --git a/services/core/java/com/android/server/wm/InsetsStateController.java b/services/core/java/com/android/server/wm/InsetsStateController.java index 3a04bcd1df7d..dfee16440518 100644 --- a/services/core/java/com/android/server/wm/InsetsStateController.java +++ b/services/core/java/com/android/server/wm/InsetsStateController.java @@ -224,7 +224,6 @@ class InsetsStateController { if (changed) { notifyInsetsChanged(); mDisplayContent.updateSystemGestureExclusion(); - mDisplayContent.updateKeepClearAreas(); mDisplayContent.getDisplayPolicy().updateSystemBarAttributes(); } } diff --git a/services/core/java/com/android/server/wm/Task.java b/services/core/java/com/android/server/wm/Task.java index 390a7cf2d09e..9d3ffa95f744 100644 --- a/services/core/java/com/android/server/wm/Task.java +++ b/services/core/java/com/android/server/wm/Task.java @@ -137,6 +137,7 @@ import android.app.ActivityOptions; import android.app.ActivityTaskManager; import android.app.AppCompatTaskInfo; import android.app.AppGlobals; +import android.app.CameraCompatTaskInfo; import android.app.IActivityController; import android.app.PictureInPictureParams; import android.app.TaskInfo; @@ -3537,9 +3538,9 @@ class Task extends TaskFragment { appCompatTaskInfo.topActivityEligibleForLetterboxEducation = isTopActivityResumed && top.isEligibleForLetterboxEducation(); // Whether the direct top activity requested showing camera compat control. - appCompatTaskInfo.cameraCompatControlState = isTopActivityResumed + appCompatTaskInfo.cameraCompatTaskInfo.cameraCompatControlState = isTopActivityResumed ? top.getCameraCompatControlState() - : AppCompatTaskInfo.CAMERA_COMPAT_CONTROL_HIDDEN; + : CameraCompatTaskInfo.CAMERA_COMPAT_CONTROL_HIDDEN; final Task parentTask = getParent() != null ? getParent().asTask() : null; info.parentTaskId = parentTask != null && parentTask.mCreatedByOrganizer diff --git a/services/core/java/com/android/server/wm/TaskDisplayArea.java b/services/core/java/com/android/server/wm/TaskDisplayArea.java index 90a3b25303f5..2c27b98250c9 100644 --- a/services/core/java/com/android/server/wm/TaskDisplayArea.java +++ b/services/core/java/com/android/server/wm/TaskDisplayArea.java @@ -1880,7 +1880,6 @@ final class TaskDisplayArea extends DisplayArea<WindowContainer> { mTempConfiguration.setTo(getRequestedOverrideConfiguration()); WindowConfiguration tempRequestWindowConfiguration = mTempConfiguration.windowConfiguration; tempRequestWindowConfiguration.setWindowingMode(windowingMode); - tempRequestWindowConfiguration.setDisplayWindowingMode(windowingMode); onRequestedOverrideConfigurationChanged(mTempConfiguration); } diff --git a/services/core/java/com/android/server/wm/TaskFragment.java b/services/core/java/com/android/server/wm/TaskFragment.java index fc85af5c2303..7a8bea0c726b 100644 --- a/services/core/java/com/android/server/wm/TaskFragment.java +++ b/services/core/java/com/android/server/wm/TaskFragment.java @@ -1971,6 +1971,15 @@ class TaskFragment extends WindowContainer<WindowContainer> { return SCREEN_ORIENTATION_UNSET; } + @ActivityInfo.ScreenOrientation + @Override + protected int getOverrideOrientation() { + if (isEmbedded() && !isVisibleRequested()) { + return SCREEN_ORIENTATION_UNSPECIFIED; + } + return super.getOverrideOrientation(); + } + /** * Whether or not to allow this container to specify an app requested orientation. * diff --git a/services/core/java/com/android/server/wm/TaskOrganizerController.java b/services/core/java/com/android/server/wm/TaskOrganizerController.java index 74dad916c5c7..b24d53b26caa 100644 --- a/services/core/java/com/android/server/wm/TaskOrganizerController.java +++ b/services/core/java/com/android/server/wm/TaskOrganizerController.java @@ -17,7 +17,7 @@ package com.android.server.wm; import static android.app.ActivityTaskManager.INVALID_TASK_ID; -import static android.app.AppCompatTaskInfo.cameraCompatControlStateToString; +import static android.app.CameraCompatTaskInfo.cameraCompatControlStateToString; import static android.window.StartingWindowRemovalInfo.DEFER_MODE_NONE; import static android.window.StartingWindowRemovalInfo.DEFER_MODE_NORMAL; import static android.window.StartingWindowRemovalInfo.DEFER_MODE_ROTATION; diff --git a/services/core/java/com/android/server/wm/WindowOrganizerController.java b/services/core/java/com/android/server/wm/WindowOrganizerController.java index 41804751ed4b..7afd34c90b0d 100644 --- a/services/core/java/com/android/server/wm/WindowOrganizerController.java +++ b/services/core/java/com/android/server/wm/WindowOrganizerController.java @@ -1025,7 +1025,9 @@ class WindowOrganizerController extends IWindowOrganizerController.Stub break; } final Task task = wc.asTask(); - + if (task.isVisibleRequested() || task.isVisible()) { + effects |= TRANSACT_EFFECTS_LIFECYCLE; + } if (task.isLeafTask()) { mService.mTaskSupervisor .removeTask(task, true, REMOVE_FROM_RECENTS, "remove-task" diff --git a/services/core/jni/com_android_server_hint_HintManagerService.cpp b/services/core/jni/com_android_server_hint_HintManagerService.cpp index 5b8ef19ea179..be188358b90b 100644 --- a/services/core/jni/com_android_server_hint_HintManagerService.cpp +++ b/services/core/jni/com_android_server_hint_HintManagerService.cpp @@ -34,13 +34,13 @@ #include "jni.h" +using aidl::android::hardware::power::SessionConfig; using aidl::android::hardware::power::SessionHint; using aidl::android::hardware::power::SessionMode; +using aidl::android::hardware::power::SessionTag; using aidl::android::hardware::power::WorkDuration; using android::power::PowerHintSessionWrapper; -using android::base::StringPrintf; - namespace android { static struct { @@ -66,6 +66,15 @@ static int64_t getHintSessionPreferredRate() { return rate; } +void throwUnsupported(JNIEnv* env, const char* msg) { + env->ThrowNew(env->FindClass("java/lang/UnsupportedOperationException"), msg); +} + +void throwFailed(JNIEnv* env, const char* msg) { + // We throw IllegalStateException for all errors other than the "unsupported" ones + env->ThrowNew(env->FindClass("java/lang/IllegalStateException"), msg); +} + static jlong createHintSession(JNIEnv* env, int32_t tgid, int32_t uid, std::vector<int32_t>& threadIds, int64_t durationNanos) { auto result = gPowerHalController.createHintSession(tgid, uid, threadIds, durationNanos); @@ -76,10 +85,38 @@ static jlong createHintSession(JNIEnv* env, int32_t tgid, int32_t uid, return res.second ? session_ptr : 0; } else if (result.isFailed()) { ALOGW("createHintSession failed with message: %s", result.errorMessage()); + throwFailed(env, result.errorMessage()); + } else if (result.isUnsupported()) { + throwUnsupported(env, result.errorMessage()); + return -1; } return 0; } +static jlong createHintSessionWithConfig(JNIEnv* env, int32_t tgid, int32_t uid, + std::vector<int32_t> threadIds, int64_t durationNanos, + int32_t sessionTag, SessionConfig& config) { + auto result = + gPowerHalController.createHintSessionWithConfig(tgid, uid, threadIds, durationNanos, + static_cast<SessionTag>(sessionTag), + &config); + if (result.isOk()) { + jlong session_ptr = reinterpret_cast<jlong>(result.value().get()); + std::scoped_lock sessionLock(gSessionMapLock); + auto res = gSessionMap.insert({session_ptr, result.value()}); + if (!res.second) { + throwFailed(env, "PowerHAL provided an invalid session"); + return 0; + } + return session_ptr; + } else if (result.isUnsupported()) { + throwUnsupported(env, result.errorMessage()); + return -1; + } + throwFailed(env, result.errorMessage()); + return 0; +} + static void pauseHintSession(JNIEnv* env, int64_t session_ptr) { auto appSession = reinterpret_cast<PowerHintSessionWrapper*>(session_ptr); appSession->pause(); @@ -136,13 +173,34 @@ static jlong nativeCreateHintSession(JNIEnv* env, jclass /* clazz */, jint tgid, jintArray tids, jlong durationNanos) { ScopedIntArrayRO tidArray(env, tids); if (nullptr == tidArray.get() || tidArray.size() == 0) { - ALOGW("GetIntArrayElements returns nullptr."); + ALOGW("nativeCreateHintSession: GetIntArrayElements returns nullptr."); return 0; } std::vector<int32_t> threadIds(tidArray.get(), tidArray.get() + tidArray.size()); return createHintSession(env, tgid, uid, threadIds, durationNanos); } +static jlong nativeCreateHintSessionWithConfig(JNIEnv* env, jclass /* clazz */, jint tgid, jint uid, + jintArray tids, jlong durationNanos, jint sessionTag, + jobject sessionConfig) { + ScopedIntArrayRO tidArray(env, tids); + if (nullptr == tidArray.get() || tidArray.size() == 0) { + ALOGW("nativeCreateHintSessionWithConfig: GetIntArrayElements returns nullptr."); + return 0; + } + std::vector<int32_t> threadIds(tidArray.get(), tidArray.get() + tidArray.size()); + SessionConfig config; + jlong out = createHintSessionWithConfig(env, tgid, uid, std::move(threadIds), durationNanos, + sessionTag, config); + if (out <= 0) { + return out; + } + static jclass configClass = env->FindClass("android/hardware/power/SessionConfig"); + static jfieldID fid = env->GetFieldID(configClass, "id", "J"); + env->SetLongField(sessionConfig, fid, config.id); + return out; +} + static void nativePauseHintSession(JNIEnv* env, jclass /* clazz */, jlong session_ptr) { pauseHintSession(env, session_ptr); } @@ -215,6 +273,8 @@ static const JNINativeMethod sHintManagerServiceMethods[] = { {"nativeInit", "()V", (void*)nativeInit}, {"nativeGetHintSessionPreferredRate", "()J", (void*)nativeGetHintSessionPreferredRate}, {"nativeCreateHintSession", "(II[IJ)J", (void*)nativeCreateHintSession}, + {"nativeCreateHintSessionWithConfig", "(II[IJILandroid/hardware/power/SessionConfig;)J", + (void*)nativeCreateHintSessionWithConfig}, {"nativePauseHintSession", "(J)V", (void*)nativePauseHintSession}, {"nativeResumeHintSession", "(J)V", (void*)nativeResumeHintSession}, {"nativeCloseHintSession", "(J)V", (void*)nativeCloseHintSession}, diff --git a/services/core/jni/com_android_server_input_InputManagerService.cpp b/services/core/jni/com_android_server_input_InputManagerService.cpp index 2f880ba25376..88c47f3cc5f8 100644 --- a/services/core/jni/com_android_server_input_InputManagerService.cpp +++ b/services/core/jni/com_android_server_input_InputManagerService.cpp @@ -128,8 +128,7 @@ static struct { jmethodID getVirtualKeyQuietTimeMillis; jmethodID getExcludedDeviceNames; jmethodID getInputPortAssociations; - jmethodID getInputUniqueIdAssociationsByPort; - jmethodID getInputUniqueIdAssociationsByDescriptor; + jmethodID getInputUniqueIdAssociations; jmethodID getDeviceTypeAssociations; jmethodID getKeyboardLayoutAssociations; jmethodID getHoverTapTimeout; @@ -635,13 +634,10 @@ void NativeInputManager::getReaderConfiguration(InputReaderConfiguration* outCon env->DeleteLocalRef(portAssociations); } - outConfig->uniqueIdAssociationsByPort = readMapFromInterleavedJavaArray< - std::string>(gServiceClassInfo.getInputUniqueIdAssociationsByPort, - "getInputUniqueIdAssociationsByPort"); - - outConfig->uniqueIdAssociationsByDescriptor = readMapFromInterleavedJavaArray< - std::string>(gServiceClassInfo.getInputUniqueIdAssociationsByDescriptor, - "getInputUniqueIdAssociationsByDescriptor"); + outConfig->uniqueIdAssociations = + readMapFromInterleavedJavaArray<std::string>(gServiceClassInfo + .getInputUniqueIdAssociations, + "getInputUniqueIdAssociations"); outConfig->deviceTypeAssociations = readMapFromInterleavedJavaArray<std::string>(gServiceClassInfo @@ -3094,11 +3090,8 @@ int register_android_server_InputManager(JNIEnv* env) { GET_METHOD_ID(gServiceClassInfo.getInputPortAssociations, clazz, "getInputPortAssociations", "()[Ljava/lang/String;"); - GET_METHOD_ID(gServiceClassInfo.getInputUniqueIdAssociationsByPort, clazz, - "getInputUniqueIdAssociationsByPort", "()[Ljava/lang/String;"); - - GET_METHOD_ID(gServiceClassInfo.getInputUniqueIdAssociationsByDescriptor, clazz, - "getInputUniqueIdAssociationsByDescriptor", "()[Ljava/lang/String;"); + GET_METHOD_ID(gServiceClassInfo.getInputUniqueIdAssociations, clazz, + "getInputUniqueIdAssociations", "()[Ljava/lang/String;"); GET_METHOD_ID(gServiceClassInfo.getDeviceTypeAssociations, clazz, "getDeviceTypeAssociations", "()[Ljava/lang/String;"); diff --git a/services/devicepolicy/java/com/android/server/devicepolicy/DevicePolicyManagerService.java b/services/devicepolicy/java/com/android/server/devicepolicy/DevicePolicyManagerService.java index 7e083ba8859a..be235b3bef92 100644 --- a/services/devicepolicy/java/com/android/server/devicepolicy/DevicePolicyManagerService.java +++ b/services/devicepolicy/java/com/android/server/devicepolicy/DevicePolicyManagerService.java @@ -821,6 +821,13 @@ public class DevicePolicyManagerService extends IDevicePolicyManager.Stub { @EnabledSince(targetSdkVersion = Build.VERSION_CODES.UPSIDE_DOWN_CAKE) public static final long THROW_SECURITY_EXCEPTION_FOR_SENSOR_PERMISSIONS = 277035314L; + /** + * Allows DPCs to provisioning fully managed headless devices in single-user mode. + */ + @ChangeId + @EnabledSince(targetSdkVersion = 35) + public static final long PROVISION_SINGLE_USER_MODE = 289515470L; + // Only add to the end of the list. Do not change or rearrange these values, that will break // historical data. Do not use negative numbers or zero, logger only handles positive // integers. @@ -6834,7 +6841,10 @@ public class DevicePolicyManagerService extends IDevicePolicyManager.Stub { // If there is a profile owner, redirect to that; otherwise query the device owner. ComponentName aliasChooser = getProfileOwnerAsUser(caller.getUserId()); - if (aliasChooser == null && caller.getUserHandle().isSystem()) { + boolean isDoUser = Flags.headlessSingleUserFixes() + ? caller.getUserId() == getDeviceOwnerUserId() + : caller.getUserHandle().isSystem(); + if (aliasChooser == null && isDoUser) { synchronized (getLockObject()) { final ActiveAdmin deviceOwnerAdmin = getDeviceOwnerAdminLocked(); if (deviceOwnerAdmin != null) { @@ -7828,7 +7838,12 @@ public class DevicePolicyManagerService extends IDevicePolicyManager.Stub { mInjector.binderWithCleanCallingIdentity(() -> { // First check whether the admin is allowed to wipe the device/user/profile. final String restriction; - if (userId == UserHandle.USER_SYSTEM) { + boolean shouldFactoryReset = userId == UserHandle.USER_SYSTEM; + if (Flags.headlessSingleUserFixes() && getHeadlessDeviceOwnerModeForDeviceOwner() + == HEADLESS_DEVICE_OWNER_MODE_SINGLE_USER) { + shouldFactoryReset = userId == getMainUserId(); + } + if (shouldFactoryReset) { restriction = UserManager.DISALLOW_FACTORY_RESET; } else if (isManagedProfile(userId)) { restriction = UserManager.DISALLOW_REMOVE_MANAGED_PROFILE; @@ -7842,12 +7857,15 @@ public class DevicePolicyManagerService extends IDevicePolicyManager.Stub { }); boolean isSystemUser = userId == UserHandle.USER_SYSTEM; + boolean isMainUser = userId == getMainUserId(); boolean wipeDevice; if (factoryReset == null || !mInjector.isChangeEnabled(EXPLICIT_WIPE_BEHAVIOUR, adminPackage, userId)) { // Legacy mode - wipeDevice = isSystemUser; + wipeDevice = Flags.headlessSingleUserFixes() + && getHeadlessDeviceOwnerModeForDeviceOwner() + == HEADLESS_DEVICE_OWNER_MODE_SINGLE_USER ? isMainUser : isSystemUser; } else { // Explicit behaviour if (factoryReset) { @@ -8185,6 +8203,7 @@ public class DevicePolicyManagerService extends IDevicePolicyManager.Stub { userHandle, /* parent= */ false); int max = strictestAdmin != null ? strictestAdmin.maximumFailedPasswordsForWipe : 0; + if (max > 0 && policy.mFailedPasswordAttempts >= max) { wipeData = true; } @@ -18398,6 +18417,14 @@ public class DevicePolicyManagerService extends IDevicePolicyManager.Stub { Preconditions.checkCallAuthorization(isDefaultDeviceOwner(caller) || isProfileOwner(caller) || isFinancedDeviceOwner(caller)); + // Backup service has to be enabled on the main user in order for it to be enabled on + // secondary users. + if (Flags.headlessSingleUserFixes() && isDeviceOwner(caller) + && getHeadlessDeviceOwnerModeForDeviceOwner() + == HEADLESS_DEVICE_OWNER_MODE_SINGLE_USER) { + toggleBackupServiceActive(UserHandle.USER_SYSTEM, enabled); + } + toggleBackupServiceActive(caller.getUserId(), enabled); if (Flags.backupServiceSecurityLogEventEnabled()) { @@ -21745,7 +21772,7 @@ public class DevicePolicyManagerService extends IDevicePolicyManager.Stub { Objects.requireNonNull(deviceAdmin, "admin is null."); Objects.requireNonNull(provisioningParams.getOwnerName(), "owner name is null."); - final CallerIdentity caller = getCallerIdentity(); + final CallerIdentity caller = getCallerIdentity(callerPackage); Preconditions.checkCallAuthorization( hasCallingOrSelfPermission(MANAGE_PROFILE_AND_DEVICE_OWNERS) || (hasCallingOrSelfPermission(permission.PROVISION_DEMO_DEVICE) @@ -21755,6 +21782,23 @@ public class DevicePolicyManagerService extends IDevicePolicyManager.Stub { final long identity = Binder.clearCallingIdentity(); try { + boolean isSingleUserMode; + if (Flags.headlessDeviceOwnerProvisioningFixEnabled()) { + int headlessDeviceOwnerMode = getHeadlessDeviceOwnerModeForDeviceAdmin( + deviceAdmin, caller.getUserId()); + isSingleUserMode = + headlessDeviceOwnerMode == HEADLESS_DEVICE_OWNER_MODE_SINGLE_USER; + } else { + isSingleUserMode = + getHeadlessDeviceOwnerModeForDeviceOwner() + == HEADLESS_DEVICE_OWNER_MODE_SINGLE_USER; + } + + if (Flags.headlessSingleUserFixes() && isSingleUserMode && !mInjector.isChangeEnabled( + PROVISION_SINGLE_USER_MODE, deviceAdmin.getPackageName(), caller.getUserId())) { + throw new IllegalStateException("Device admin is not targeting Android V."); + } + int result = checkProvisioningPreconditionSkipPermission( ACTION_PROVISION_MANAGED_DEVICE, deviceAdmin, caller.getUserId()); if (result != STATUS_OK) { @@ -21768,17 +21812,6 @@ public class DevicePolicyManagerService extends IDevicePolicyManager.Stub { setTimeAndTimezone(provisioningParams.getTimeZone(), provisioningParams.getLocalTime()); setLocale(provisioningParams.getLocale()); - boolean isSingleUserMode; - if (Flags.headlessDeviceOwnerProvisioningFixEnabled()) { - int headlessDeviceOwnerMode = getHeadlessDeviceOwnerModeForDeviceAdmin( - deviceAdmin, caller.getUserId()); - isSingleUserMode = - headlessDeviceOwnerMode == HEADLESS_DEVICE_OWNER_MODE_SINGLE_USER; - } else { - isSingleUserMode = - getHeadlessDeviceOwnerModeForDeviceOwner() - == HEADLESS_DEVICE_OWNER_MODE_SINGLE_USER; - } int deviceOwnerUserId = Flags.headlessDeviceOwnerSingleUserEnabled() && isSingleUserMode ? mUserManagerInternal.getMainUserId() : UserHandle.USER_SYSTEM; diff --git a/services/foldables/devicestateprovider/src/com/android/server/policy/BookStyleDeviceStatePolicy.java b/services/foldables/devicestateprovider/src/com/android/server/policy/BookStyleDeviceStatePolicy.java index 95c4407e3963..cc5573bb01d8 100644 --- a/services/foldables/devicestateprovider/src/com/android/server/policy/BookStyleDeviceStatePolicy.java +++ b/services/foldables/devicestateprovider/src/com/android/server/policy/BookStyleDeviceStatePolicy.java @@ -103,6 +103,12 @@ public class BookStyleDeviceStatePolicy extends DeviceStatePolicy implements final DisplayManager displayManager = mContext.getSystemService(DisplayManager.class); mEnablePostureBasedClosedState = featureFlags.enableFoldablesPostureBasedClosedState(); + if (mEnablePostureBasedClosedState) { + // This configuration doesn't require listening to hall sensor, it solely relies + // on the fused hinge angle sensor + hallSensor = null; + } + mIsDualDisplayBlockingEnabled = featureFlags.enableDualDisplayBlocking(); final DeviceStatePredicateWrapper[] configuration = createConfiguration( diff --git a/services/foldables/devicestateprovider/src/com/android/server/policy/FoldableDeviceStateProvider.java b/services/foldables/devicestateprovider/src/com/android/server/policy/FoldableDeviceStateProvider.java index bc8643f3d173..daeaa9833d78 100644 --- a/services/foldables/devicestateprovider/src/com/android/server/policy/FoldableDeviceStateProvider.java +++ b/services/foldables/devicestateprovider/src/com/android/server/policy/FoldableDeviceStateProvider.java @@ -95,6 +95,7 @@ public final class FoldableDeviceStateProvider implements DeviceStateProvider, private final Sensor mHingeAngleSensor; private final DisplayManager mDisplayManager; + @Nullable private final Sensor mHallSensor; private static final Predicate<FoldableDeviceStateProvider> ALLOWED = p -> true; @@ -122,7 +123,7 @@ public final class FoldableDeviceStateProvider implements DeviceStateProvider, @NonNull Context context, @NonNull SensorManager sensorManager, @NonNull Sensor hingeAngleSensor, - @NonNull Sensor hallSensor, + @Nullable Sensor hallSensor, @NonNull DisplayManager displayManager, @NonNull DeviceStatePredicateWrapper[] deviceStatePredicateWrappers) { this(new FeatureFlagsImpl(), context, sensorManager, hingeAngleSensor, hallSensor, @@ -135,7 +136,7 @@ public final class FoldableDeviceStateProvider implements DeviceStateProvider, @NonNull Context context, @NonNull SensorManager sensorManager, @NonNull Sensor hingeAngleSensor, - @NonNull Sensor hallSensor, + @Nullable Sensor hallSensor, @NonNull DisplayManager displayManager, @NonNull DeviceStatePredicateWrapper[] deviceStatePredicateWrappers) { @@ -149,7 +150,9 @@ public final class FoldableDeviceStateProvider implements DeviceStateProvider, mIsDualDisplayBlockingEnabled = featureFlags.enableDualDisplayBlocking(); sensorManager.registerListener(this, mHingeAngleSensor, SENSOR_DELAY_FASTEST); - sensorManager.registerListener(this, mHallSensor, SENSOR_DELAY_FASTEST); + if (hallSensor != null) { + sensorManager.registerListener(this, mHallSensor, SENSOR_DELAY_FASTEST); + } mOrderedStates = new DeviceState[deviceStatePredicateWrappers.length]; for (int i = 0; i < deviceStatePredicateWrappers.length; i++) { @@ -324,7 +327,7 @@ public final class FoldableDeviceStateProvider implements DeviceStateProvider, @Override public void onSensorChanged(SensorEvent event) { synchronized (mLock) { - if (event.sensor == mHallSensor) { + if (mHallSensor != null && event.sensor == mHallSensor) { mLastHallSensorEvent = event; } else if (event.sensor == mHingeAngleSensor) { mLastHingeAngleSensorEvent = event; @@ -359,11 +362,11 @@ public final class FoldableDeviceStateProvider implements DeviceStateProvider, } @GuardedBy("mLock") - private void dumpSensorValues(Sensor sensor, @Nullable SensorEvent event) { + private void dumpSensorValues(@Nullable Sensor sensor, @Nullable SensorEvent event) { Slog.i(TAG, toSensorValueString(sensor, event)); } - private String toSensorValueString(Sensor sensor, @Nullable SensorEvent event) { + private String toSensorValueString(@Nullable Sensor sensor, @Nullable SensorEvent event) { String sensorString = sensor == null ? "null" : sensor.getName(); String eventValues = event == null ? "null" : Arrays.toString(event.values); return sensorString + " : " + eventValues; diff --git a/services/foldables/devicestateprovider/tests/src/com/android/server/policy/BookStyleDeviceStatePolicyTest.java b/services/foldables/devicestateprovider/tests/src/com/android/server/policy/BookStyleDeviceStatePolicyTest.java index 901f24dd9b0b..9f07aa8c1a41 100644 --- a/services/foldables/devicestateprovider/tests/src/com/android/server/policy/BookStyleDeviceStatePolicyTest.java +++ b/services/foldables/devicestateprovider/tests/src/com/android/server/policy/BookStyleDeviceStatePolicyTest.java @@ -219,6 +219,26 @@ public final class BookStyleDeviceStatePolicyTest { } @Test + public void test_postureBasedClosedState_createPolicy_doesNotRegisterHallSensor() { + mFakeFeatureFlags.setFlag(Flags.FLAG_ENABLE_FOLDABLES_POSTURE_BASED_CLOSED_STATE, true); + clearInvocations(mSensorManager); + + mInstrumentation.runOnMainSync(() -> mProvider = createProvider()); + + verify(mSensorManager, never()).registerListener(any(), eq(mHallSensor), anyInt()); + } + + @Test + public void test_postureBasedClosedStateDisabled_createPolicy_registersHallSensor() { + mFakeFeatureFlags.setFlag(Flags.FLAG_ENABLE_FOLDABLES_POSTURE_BASED_CLOSED_STATE, false); + clearInvocations(mSensorManager); + + mInstrumentation.runOnMainSync(() -> mProvider = createProvider()); + + verify(mSensorManager).registerListener(any(), eq(mHallSensor), anyInt()); + } + + @Test public void test_noSensorEventsYet_reportOpenedState() { mProvider.setListener(mListener); verify(mListener).onStateChanged(mDeviceStateCaptor.capture()); diff --git a/services/java/com/android/server/flags.aconfig b/services/java/com/android/server/flags.aconfig index 4b578afddad2..854bc0f86bd4 100644 --- a/services/java/com/android/server/flags.aconfig +++ b/services/java/com/android/server/flags.aconfig @@ -1,4 +1,5 @@ package: "android.server" +container: "system" flag { namespace: "system_performance" diff --git a/services/tests/servicestests/src/com/android/server/companion/virtual/InputManagerMockHelper.java b/services/tests/servicestests/src/com/android/server/companion/virtual/InputManagerMockHelper.java index 00c8ed188d1e..74e854e49c2a 100644 --- a/services/tests/servicestests/src/com/android/server/companion/virtual/InputManagerMockHelper.java +++ b/services/tests/servicestests/src/com/android/server/companion/virtual/InputManagerMockHelper.java @@ -53,7 +53,7 @@ class InputManagerMockHelper { private IInputDevicesChangedListener mDevicesChangedListener; private final Map<String /* uniqueId */, Integer /* displayId */> mDisplayIdMapping = new HashMap<>(); - private final Map<String /* phys */, String /* uniqueId */> mUniqueIdAssociationByPort = + private final Map<String /* phys */, String /* uniqueId */> mUniqueIdAssociation = new HashMap<>(); InputManagerMockHelper(TestableLooper testableLooper, @@ -79,11 +79,10 @@ class InputManagerMockHelper { when(mIInputManagerMock.getInputDeviceIds()).thenReturn(new int[0]); doAnswer(inv -> mDevices.get(inv.getArgument(0))) .when(mIInputManagerMock).getInputDevice(anyInt()); - doAnswer(inv -> mUniqueIdAssociationByPort.put(inv.getArgument(0), - inv.getArgument(1))).when(mIInputManagerMock).addUniqueIdAssociationByPort( - anyString(), anyString()); - doAnswer(inv -> mUniqueIdAssociationByPort.remove(inv.getArgument(0))).when( - mIInputManagerMock).removeUniqueIdAssociationByPort(anyString()); + doAnswer(inv -> mUniqueIdAssociation.put(inv.getArgument(0), inv.getArgument(1))).when( + mIInputManagerMock).addUniqueIdAssociation(anyString(), anyString()); + doAnswer(inv -> mUniqueIdAssociation.remove(inv.getArgument(0))).when( + mIInputManagerMock).removeUniqueIdAssociation(anyString()); // Set a new instance of InputManager for testing that uses the IInputManager mock as the // interface to the server. @@ -113,7 +112,7 @@ class InputManagerMockHelper { .setDescriptor(phys) .setExternal(true) .setAssociatedDisplayId( - mDisplayIdMapping.getOrDefault(mUniqueIdAssociationByPort.get(phys), + mDisplayIdMapping.getOrDefault(mUniqueIdAssociation.get(phys), Display.INVALID_DISPLAY)) .build(); diff --git a/services/tests/servicestests/src/com/android/server/power/hint/HintManagerServiceTest.java b/services/tests/servicestests/src/com/android/server/power/hint/HintManagerServiceTest.java index 510e7c42f12d..5902caae443d 100644 --- a/services/tests/servicestests/src/com/android/server/power/hint/HintManagerServiceTest.java +++ b/services/tests/servicestests/src/com/android/server/power/hint/HintManagerServiceTest.java @@ -22,6 +22,7 @@ import static com.android.server.power.hint.HintManagerService.CLEAN_UP_UID_DELA import static com.google.common.truth.Truth.assertThat; import static org.junit.Assert.assertArrayEquals; +import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertFalse; import static org.junit.Assert.assertNotEquals; import static org.junit.Assert.assertNotNull; @@ -41,6 +42,8 @@ import static org.mockito.Mockito.when; import android.app.ActivityManager; import android.app.ActivityManagerInternal; import android.content.Context; +import android.hardware.power.SessionConfig; +import android.hardware.power.SessionTag; import android.hardware.power.WorkDuration; import android.os.Binder; import android.os.IBinder; @@ -63,6 +66,8 @@ import org.junit.Rule; import org.junit.Test; import org.mockito.Mock; import org.mockito.MockitoAnnotations; +import org.mockito.invocation.InvocationOnMock; +import org.mockito.stubbing.Answer; import java.util.ArrayList; import java.util.Arrays; @@ -97,6 +102,7 @@ public class HintManagerServiceTest { private static final long DEFAULT_HINT_PREFERRED_RATE = 16666666L; private static final long DEFAULT_TARGET_DURATION = 16666666L; + private static final long DOUBLED_TARGET_DURATION = 33333333L; private static final long CONCURRENCY_TEST_DURATION_SEC = 10; private static final int UID = Process.myUid(); private static final int TID = Process.myPid(); @@ -106,6 +112,8 @@ public class HintManagerServiceTest { private static final int[] SESSION_TIDS_C = new int[] {TID}; private static final long[] DURATIONS_THREE = new long[] {1L, 100L, 1000L}; private static final long[] TIMESTAMPS_THREE = new long[] {1L, 2L, 3L}; + private static final long[] SESSION_PTRS = new long[] {11L, 22L, 33L}; + private static final long[] SESSION_IDS = new long[] {1L, 11L, 111L}; private static final long[] DURATIONS_ZERO = new long[] {}; private static final long[] TIMESTAMPS_ZERO = new long[] {}; private static final long[] TIMESTAMPS_TWO = new long[] {1L, 2L}; @@ -129,21 +137,61 @@ public class HintManagerServiceTest { private HintManagerService mService; + private static Answer<Long> fakeCreateWithConfig(Long ptr, Long sessionId) { + return new Answer<Long>() { + public Long answer(InvocationOnMock invocation) { + ((SessionConfig) invocation.getArguments()[5]).id = sessionId; + return ptr; + } + }; + } + @Before public void setUp() throws Exception { MockitoAnnotations.initMocks(this); when(mNativeWrapperMock.halGetHintSessionPreferredRate()) .thenReturn(DEFAULT_HINT_PREFERRED_RATE); when(mNativeWrapperMock.halCreateHintSession(eq(TGID), eq(UID), eq(SESSION_TIDS_A), - eq(DEFAULT_TARGET_DURATION))).thenReturn(1L); + eq(DEFAULT_TARGET_DURATION))).thenReturn(SESSION_PTRS[0]); when(mNativeWrapperMock.halCreateHintSession(eq(TGID), eq(UID), eq(SESSION_TIDS_B), - eq(DEFAULT_TARGET_DURATION))).thenReturn(2L); + eq(DOUBLED_TARGET_DURATION))).thenReturn(SESSION_PTRS[1]); when(mNativeWrapperMock.halCreateHintSession(eq(TGID), eq(UID), eq(SESSION_TIDS_C), - eq(0L))).thenReturn(1L); + eq(0L))).thenReturn(SESSION_PTRS[2]); + when(mNativeWrapperMock.halCreateHintSessionWithConfig(eq(TGID), eq(UID), + eq(SESSION_TIDS_A), eq(DEFAULT_TARGET_DURATION), anyInt(), + any(SessionConfig.class))).thenAnswer(fakeCreateWithConfig(SESSION_PTRS[0], + SESSION_IDS[0])); + when(mNativeWrapperMock.halCreateHintSessionWithConfig(eq(TGID), eq(UID), + eq(SESSION_TIDS_B), eq(DOUBLED_TARGET_DURATION), anyInt(), + any(SessionConfig.class))).thenAnswer(fakeCreateWithConfig(SESSION_PTRS[1], + SESSION_IDS[1])); + when(mNativeWrapperMock.halCreateHintSessionWithConfig(eq(TGID), eq(UID), + eq(SESSION_TIDS_C), eq(0L), anyInt(), + any(SessionConfig.class))).thenAnswer(fakeCreateWithConfig(SESSION_PTRS[2], + SESSION_IDS[2])); + LocalServices.removeServiceForTest(ActivityManagerInternal.class); LocalServices.addService(ActivityManagerInternal.class, mAmInternalMock); } + /** + * Mocks the creation calls, but without support for new createHintSessionWithConfig method + */ + public void makeConfigCreationUnsupported() { + reset(mNativeWrapperMock); + when(mNativeWrapperMock.halGetHintSessionPreferredRate()) + .thenReturn(DEFAULT_HINT_PREFERRED_RATE); + when(mNativeWrapperMock.halCreateHintSession(eq(TGID), eq(UID), eq(SESSION_TIDS_A), + eq(DEFAULT_TARGET_DURATION))).thenReturn(SESSION_PTRS[0]); + when(mNativeWrapperMock.halCreateHintSession(eq(TGID), eq(UID), eq(SESSION_TIDS_B), + eq(DOUBLED_TARGET_DURATION))).thenReturn(SESSION_PTRS[1]); + when(mNativeWrapperMock.halCreateHintSession(eq(TGID), eq(UID), eq(SESSION_TIDS_C), + eq(0L))).thenReturn(SESSION_PTRS[2]); + when(mNativeWrapperMock.halCreateHintSessionWithConfig(anyInt(), anyInt(), + any(int[].class), anyLong(), anyInt(), + any(SessionConfig.class))).thenThrow(new UnsupportedOperationException()); + } + static class NativeWrapperFake extends NativeWrapper { @Override public void halInit() { @@ -160,6 +208,12 @@ public class HintManagerServiceTest { } @Override + public long halCreateHintSessionWithConfig(int tgid, int uid, int[] tids, + long durationNanos, int tag, SessionConfig config) { + return 1; + } + + @Override public void halPauseHintSession(long halPtr) { } @@ -224,27 +278,57 @@ public class HintManagerServiceTest { IBinder token = new Binder(); // Make sure we throw exception when adding a TID doesn't belong to the processes // In this case, we add `init` PID into the list. + SessionConfig config = new SessionConfig(); assertThrows(SecurityException.class, - () -> service.getBinderServiceInstance().createHintSession(token, - new int[]{TID, 1}, DEFAULT_TARGET_DURATION)); + () -> service.getBinderServiceInstance().createHintSessionWithConfig(token, + new int[]{TID, 1}, DEFAULT_TARGET_DURATION, SessionTag.OTHER, config)); + } + + @Test + public void testCreateHintSessionFallback() throws Exception { + HintManagerService service = createService(); + IBinder token = new Binder(); + makeConfigCreationUnsupported(); + + IHintSession a = service.getBinderServiceInstance().createHintSessionWithConfig(token, + SESSION_TIDS_A, DEFAULT_TARGET_DURATION, SessionTag.OTHER, new SessionConfig()); + assertNotNull(a); + + IHintSession b = service.getBinderServiceInstance().createHintSessionWithConfig(token, + SESSION_TIDS_B, DOUBLED_TARGET_DURATION, SessionTag.OTHER, new SessionConfig()); + assertNotEquals(a, b); + + IHintSession c = service.getBinderServiceInstance().createHintSessionWithConfig(token, + SESSION_TIDS_C, 0L, SessionTag.OTHER, new SessionConfig()); + assertNotNull(c); + verify(mNativeWrapperMock, times(3)).halCreateHintSession(anyInt(), anyInt(), + any(int[].class), anyLong()); } @Test - public void testCreateHintSession() throws Exception { + public void testCreateHintSessionWithConfig() throws Exception { HintManagerService service = createService(); IBinder token = new Binder(); - IHintSession a = service.getBinderServiceInstance().createHintSession(token, - SESSION_TIDS_A, DEFAULT_TARGET_DURATION); + SessionConfig config = new SessionConfig(); + IHintSession a = service.getBinderServiceInstance().createHintSessionWithConfig(token, + SESSION_TIDS_A, DEFAULT_TARGET_DURATION, SessionTag.OTHER, config); assertNotNull(a); + assertEquals(SESSION_IDS[0], config.id); - IHintSession b = service.getBinderServiceInstance().createHintSession(token, - SESSION_TIDS_B, DEFAULT_TARGET_DURATION); + SessionConfig config2 = new SessionConfig(); + IHintSession b = service.getBinderServiceInstance().createHintSessionWithConfig(token, + SESSION_TIDS_B, DOUBLED_TARGET_DURATION, SessionTag.APP, config2); assertNotEquals(a, b); + assertEquals(SESSION_IDS[1], config2.id); - IHintSession c = service.getBinderServiceInstance().createHintSession(token, - SESSION_TIDS_C, 0L); + SessionConfig config3 = new SessionConfig(); + IHintSession c = service.getBinderServiceInstance().createHintSessionWithConfig(token, + SESSION_TIDS_C, 0L, SessionTag.GAME, config3); assertNotNull(c); + assertEquals(SESSION_IDS[2], config3.id); + verify(mNativeWrapperMock, times(3)).halCreateHintSessionWithConfig(anyInt(), anyInt(), + any(int[].class), anyLong(), anyInt(), any(SessionConfig.class)); } @Test @@ -253,7 +337,8 @@ public class HintManagerServiceTest { IBinder token = new Binder(); AppHintSession a = (AppHintSession) service.getBinderServiceInstance() - .createHintSession(token, SESSION_TIDS_A, DEFAULT_TARGET_DURATION); + .createHintSessionWithConfig(token, SESSION_TIDS_A, DEFAULT_TARGET_DURATION, + SessionTag.OTHER, new SessionConfig()); // Set session to background and calling updateHintAllowed() would invoke pause(); service.mUidObserver.onUidStateChanged( @@ -288,8 +373,8 @@ public class HintManagerServiceTest { HintManagerService service = createService(); IBinder token = new Binder(); - IHintSession a = service.getBinderServiceInstance().createHintSession(token, - SESSION_TIDS_A, DEFAULT_TARGET_DURATION); + IHintSession a = service.getBinderServiceInstance().createHintSessionWithConfig(token, + SESSION_TIDS_A, DEFAULT_TARGET_DURATION, SessionTag.OTHER, new SessionConfig()); a.close(); verify(mNativeWrapperMock, times(1)).halCloseHintSession(anyLong()); @@ -300,8 +385,8 @@ public class HintManagerServiceTest { HintManagerService service = createService(); IBinder token = new Binder(); - IHintSession a = service.getBinderServiceInstance().createHintSession(token, - SESSION_TIDS_A, DEFAULT_TARGET_DURATION); + IHintSession a = service.getBinderServiceInstance().createHintSessionWithConfig(token, + SESSION_TIDS_A, DEFAULT_TARGET_DURATION, SessionTag.OTHER, new SessionConfig()); assertThrows(IllegalArgumentException.class, () -> { a.updateTargetWorkDuration(-1L); @@ -321,7 +406,8 @@ public class HintManagerServiceTest { IBinder token = new Binder(); AppHintSession a = (AppHintSession) service.getBinderServiceInstance() - .createHintSession(token, SESSION_TIDS_A, DEFAULT_TARGET_DURATION); + .createHintSessionWithConfig(token, SESSION_TIDS_A, DEFAULT_TARGET_DURATION, + SessionTag.OTHER, new SessionConfig()); a.updateTargetWorkDuration(100L); a.reportActualWorkDuration(DURATIONS_THREE, TIMESTAMPS_THREE); @@ -363,7 +449,8 @@ public class HintManagerServiceTest { IBinder token = new Binder(); AppHintSession a = (AppHintSession) service.getBinderServiceInstance() - .createHintSession(token, SESSION_TIDS_A, DEFAULT_TARGET_DURATION); + .createHintSessionWithConfig(token, SESSION_TIDS_A, DEFAULT_TARGET_DURATION, + SessionTag.OTHER, new SessionConfig()); a.sendHint(PerformanceHintManager.Session.CPU_LOAD_RESET); verify(mNativeWrapperMock, times(1)).halSendHint(anyLong(), @@ -389,7 +476,8 @@ public class HintManagerServiceTest { IBinder token = new Binder(); AppHintSession a = (AppHintSession) service.getBinderServiceInstance() - .createHintSession(token, SESSION_TIDS_A, DEFAULT_TARGET_DURATION); + .createHintSessionWithConfig(token, SESSION_TIDS_A, DEFAULT_TARGET_DURATION, + SessionTag.OTHER, new SessionConfig()); service.mUidObserver.onUidStateChanged( a.mUid, ActivityManager.PROCESS_STATE_IMPORTANT_BACKGROUND, 0, 0); @@ -410,7 +498,8 @@ public class HintManagerServiceTest { IBinder token = new Binder(); AppHintSession a = (AppHintSession) service.getBinderServiceInstance() - .createHintSession(token, SESSION_TIDS_A, DEFAULT_TARGET_DURATION); + .createHintSessionWithConfig(token, SESSION_TIDS_A, DEFAULT_TARGET_DURATION, + SessionTag.OTHER, new SessionConfig()); service.mUidObserver.onUidStateChanged( a.mUid, ActivityManager.PROCESS_STATE_IMPORTANT_FOREGROUND, 0, 0); @@ -423,7 +512,8 @@ public class HintManagerServiceTest { IBinder token = new Binder(); AppHintSession a = (AppHintSession) service.getBinderServiceInstance() - .createHintSession(token, SESSION_TIDS_A, DEFAULT_TARGET_DURATION); + .createHintSessionWithConfig(token, SESSION_TIDS_A, DEFAULT_TARGET_DURATION, + SessionTag.OTHER, new SessionConfig()); a.updateTargetWorkDuration(100L); @@ -454,10 +544,12 @@ public class HintManagerServiceTest { int threadCount = 3; int[] tids1 = createThreads(threadCount, stopLatch1); long sessionPtr1 = 111; - when(mNativeWrapperMock.halCreateHintSession(eq(TGID), eq(UID), eq(tids1), - eq(DEFAULT_TARGET_DURATION))).thenReturn(sessionPtr1); + when(mNativeWrapperMock.halCreateHintSessionWithConfig(eq(TGID), eq(UID), eq(tids1), + eq(DEFAULT_TARGET_DURATION), anyInt(), any(SessionConfig.class))) + .thenReturn(sessionPtr1); AppHintSession session1 = (AppHintSession) service.getBinderServiceInstance() - .createHintSession(token, tids1, DEFAULT_TARGET_DURATION); + .createHintSessionWithConfig(token, tids1, DEFAULT_TARGET_DURATION, + SessionTag.OTHER, new SessionConfig()); assertNotNull(session1); // for test only to avoid conflicting with any real thread that exists on device @@ -473,10 +565,12 @@ public class HintManagerServiceTest { tids2WithIsolated[threadCount] = isoProc1; tids2WithIsolated[threadCount + 1] = isoProc2; long sessionPtr2 = 222; - when(mNativeWrapperMock.halCreateHintSession(eq(TGID), eq(UID), eq(tids2WithIsolated), - eq(DEFAULT_TARGET_DURATION))).thenReturn(sessionPtr2); + when(mNativeWrapperMock.halCreateHintSessionWithConfig(eq(TGID), eq(UID), + eq(tids2WithIsolated), eq(DEFAULT_TARGET_DURATION), anyInt(), + any(SessionConfig.class))).thenReturn(sessionPtr2); AppHintSession session2 = (AppHintSession) service.getBinderServiceInstance() - .createHintSession(token, tids2WithIsolated, DEFAULT_TARGET_DURATION); + .createHintSessionWithConfig(token, tids2WithIsolated, + DEFAULT_TARGET_DURATION, SessionTag.OTHER, new SessionConfig()); assertNotNull(session2); // trigger clean up through UID state change by making the process background @@ -608,7 +702,8 @@ public class HintManagerServiceTest { IBinder token = new Binder(); AppHintSession a = (AppHintSession) service.getBinderServiceInstance() - .createHintSession(token, SESSION_TIDS_A, DEFAULT_TARGET_DURATION); + .createHintSessionWithConfig(token, SESSION_TIDS_A, DEFAULT_TARGET_DURATION, + SessionTag.OTHER, new SessionConfig()); a.setMode(0, true); verify(mNativeWrapperMock, times(1)).halSetMode(anyLong(), @@ -726,7 +821,8 @@ public class HintManagerServiceTest { AtomicReference<Boolean> shouldRun) throws Exception { IBinder token = new Binder(); AppHintSession a = (AppHintSession) service.getBinderServiceInstance() - .createHintSession(token, SESSION_TIDS_A, DEFAULT_TARGET_DURATION); + .createHintSessionWithConfig(token, SESSION_TIDS_A, DEFAULT_TARGET_DURATION, + SessionTag.OTHER, new SessionConfig()); // we will start some threads and get their valid TIDs to update int threadCount = 3; // the list of TIDs @@ -793,7 +889,8 @@ public class HintManagerServiceTest { IBinder token = new Binder(); AppHintSession a = (AppHintSession) service.getBinderServiceInstance() - .createHintSession(token, SESSION_TIDS_A, DEFAULT_TARGET_DURATION); + .createHintSessionWithConfig(token, SESSION_TIDS_A, DEFAULT_TARGET_DURATION, + SessionTag.OTHER, new SessionConfig()); a.updateTargetWorkDuration(100L); a.reportActualWorkDuration2(WORK_DURATIONS_FIVE); diff --git a/services/tests/uiservicestests/src/com/android/server/notification/NotificationListenersTest.java b/services/tests/uiservicestests/src/com/android/server/notification/NotificationListenersTest.java index ae3683961d61..983e694a8f1a 100644 --- a/services/tests/uiservicestests/src/com/android/server/notification/NotificationListenersTest.java +++ b/services/tests/uiservicestests/src/com/android/server/notification/NotificationListenersTest.java @@ -70,6 +70,7 @@ import android.os.RemoteException; import android.os.UserHandle; import android.platform.test.flag.junit.SetFlagsRule; import android.service.notification.INotificationListener; +import android.service.notification.IStatusBarNotificationHolder; import android.service.notification.NotificationListenerFilter; import android.service.notification.NotificationListenerService; import android.service.notification.NotificationRankingUpdate; @@ -90,6 +91,7 @@ import com.google.common.collect.ImmutableList; import org.junit.Before; import org.junit.Rule; import org.junit.Test; +import org.mockito.ArgumentCaptor; import org.mockito.ArgumentMatcher; import org.mockito.Mock; import org.mockito.MockitoAnnotations; @@ -154,6 +156,11 @@ public class NotificationListenersTest extends UiServiceTestCase { .thenReturn(new ArrayList<>()); mNm.mHandler = mock(NotificationManagerService.WorkerHandler.class); mNm.mAssistants = mock(NotificationManagerService.NotificationAssistants.class); + FieldSetter.setField(mNm, + NotificationManagerService.class.getDeclaredField("mListeners"), + mListeners); + doReturn(android.service.notification.NotificationListenerService.TRIM_FULL) + .when(mListeners).getOnNotificationPostedTrim(any()); } @Test @@ -827,6 +834,68 @@ public class NotificationListenersTest extends UiServiceTestCase { verify(mListeners, never()).redactStatusBarNotification(eq(sbn)); } + @Test + public void testListenerPost_UpdateLifetimeExtended() throws Exception { + mSetFlagsRule.enableFlags(android.app.Flags.FLAG_LIFETIME_EXTENSION_REFACTOR); + + // Create original notification, with FLAG_LIFETIME_EXTENDED_BY_DIRECT_REPLY. + String pkg = "pkg"; + int uid = 9; + UserHandle userHandle = UserHandle.getUserHandleForUid(uid); + NotificationChannel channel = new NotificationChannel("id", "name", + NotificationManager.IMPORTANCE_HIGH); + Notification.Builder nb = new Notification.Builder(mContext, channel.getId()) + .setContentTitle("foo") + .setSmallIcon(android.R.drawable.sym_def_app_icon) + .setFlag(Notification.FLAG_LIFETIME_EXTENDED_BY_DIRECT_REPLY, true); + StatusBarNotification sbn = new StatusBarNotification(pkg, pkg, 8, "tag", uid, 0, + nb.build(), userHandle, null, 0); + NotificationRecord old = new NotificationRecord(mContext, sbn, channel); + + // Creates updated notification (without FLAG_LIFETIME_EXTENDED_BY_DIRECT_REPLY) + Notification.Builder nb2 = new Notification.Builder(mContext, channel.getId()) + .setContentTitle("new title") + .setSmallIcon(android.R.drawable.sym_def_app_icon) + .setFlag(Notification.FLAG_LIFETIME_EXTENDED_BY_DIRECT_REPLY, false); + StatusBarNotification sbn2 = new StatusBarNotification(pkg, pkg, 8, "tag", uid, 0, + nb2.build(), userHandle, null, 0); + NotificationRecord toPost = new NotificationRecord(mContext, sbn2, channel); + + // Create system ui-like service. + ManagedServices.ManagedServiceInfo info = mListeners.new ManagedServiceInfo( + null, new ComponentName("a", "a"), sbn2.getUserId(), false, null, 33, 33); + info.isSystemUi = true; + INotificationListener l1 = mock(INotificationListener.class); + info.service = l1; + List<ManagedServices.ManagedServiceInfo> services = ImmutableList.of(info); + when(mListeners.getServices()).thenReturn(services); + + FieldSetter.setField(mNm, + NotificationManagerService.class.getDeclaredField("mHandler"), + mock(NotificationManagerService.WorkerHandler.class)); + doReturn(true).when(mNm).isVisibleToListener(any(), anyInt(), any()); + doReturn(mock(NotificationRankingUpdate.class)).when(mNm).makeRankingUpdateLocked(info); + doReturn(false).when(mNm).isInLockDownMode(anyInt()); + doNothing().when(mNm).updateUriPermissions(any(), any(), any(), anyInt()); + doReturn(sbn2).when(mListeners).redactStatusBarNotification(sbn2); + doReturn(sbn2).when(mListeners).redactStatusBarNotification(any()); + + // The notification change is posted to the service listener. + mListeners.notifyPostedLocked(toPost, old); + + // Verify that the post occcurs with the updated notification value. + ArgumentCaptor<Runnable> runnableCaptor = ArgumentCaptor.forClass(Runnable.class); + verify(mNm.mHandler, times(1)).post(runnableCaptor.capture()); + runnableCaptor.getValue().run(); + ArgumentCaptor<IStatusBarNotificationHolder> sbnCaptor = + ArgumentCaptor.forClass(IStatusBarNotificationHolder.class); + verify(l1, times(1)).onNotificationPosted(sbnCaptor.capture(), any()); + StatusBarNotification sbnResult = sbnCaptor.getValue().get(); + assertThat(sbnResult.getNotification() + .extras.getCharSequence(Notification.EXTRA_TITLE).toString()) + .isEqualTo("new title"); + } + /** * Helper method to test the thread safety of some operations. * 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 011f2e39d6f8..ce7a0a03ea0a 100755 --- a/services/tests/uiservicestests/src/com/android/server/notification/NotificationManagerServiceTest.java +++ b/services/tests/uiservicestests/src/com/android/server/notification/NotificationManagerServiceTest.java @@ -106,6 +106,7 @@ import static android.service.notification.NotificationListenerService.Ranking.U import static android.view.Display.DEFAULT_DISPLAY; import static android.view.Display.INVALID_DISPLAY; import static android.view.WindowManager.LayoutParams.TYPE_TOAST; + import static com.android.internal.widget.LockPatternUtils.StrongAuthTracker.STRONG_AUTH_REQUIRED_AFTER_USER_LOCKDOWN; import static com.android.server.am.PendingIntentRecord.FLAG_ACTIVITY_SENDER; import static com.android.server.am.PendingIntentRecord.FLAG_BROADCAST_SENDER; @@ -118,11 +119,11 @@ import static com.android.server.notification.NotificationManagerService.TAG; import static com.android.server.notification.NotificationRecordLogger.NotificationReportedEvent.NOTIFICATION_ADJUSTED; import static com.android.server.notification.NotificationRecordLogger.NotificationReportedEvent.NOTIFICATION_POSTED; import static com.android.server.notification.NotificationRecordLogger.NotificationReportedEvent.NOTIFICATION_UPDATED; + import static com.google.common.collect.Iterables.getOnlyElement; import static com.google.common.truth.Truth.assertThat; import static com.google.common.truth.Truth.assertWithMessage; -import static java.util.Collections.emptyList; -import static java.util.Collections.singletonList; + import static junit.framework.Assert.assertEquals; import static junit.framework.Assert.assertFalse; import static junit.framework.Assert.assertNotNull; @@ -131,6 +132,7 @@ import static junit.framework.Assert.assertNull; import static junit.framework.Assert.assertSame; import static junit.framework.Assert.assertTrue; import static junit.framework.Assert.fail; + import static org.junit.Assert.assertNotEquals; import static org.junit.Assert.assertThrows; import static org.mockito.ArgumentMatchers.isNull; @@ -157,6 +159,9 @@ import static org.mockito.Mockito.verify; import static org.mockito.Mockito.verifyNoMoreInteractions; import static org.mockito.Mockito.when; +import static java.util.Collections.emptyList; +import static java.util.Collections.singletonList; + import android.Manifest; import android.annotation.Nullable; import android.annotation.SuppressLint; @@ -270,8 +275,10 @@ import android.util.Pair; import android.util.Xml; import android.view.accessibility.AccessibilityManager; import android.widget.RemoteViews; + import androidx.test.InstrumentationRegistry; import androidx.test.filters.SmallTest; + import com.android.internal.R; import com.android.internal.config.sysui.SystemUiDeviceConfigFlags; import com.android.internal.config.sysui.TestableFlagResolver; @@ -303,10 +310,12 @@ import com.android.server.uri.UriGrantsManagerInternal; import com.android.server.utils.quota.MultiRateLimiter; import com.android.server.wm.ActivityTaskManagerInternal; import com.android.server.wm.WindowManagerInternal; + import com.google.android.collect.Lists; import com.google.common.collect.ImmutableList; import libcore.junit.util.compat.CoreCompatChangeRule.DisableCompatChanges; import libcore.junit.util.compat.CoreCompatChangeRule.EnableCompatChanges; + import org.junit.After; import org.junit.Assert; import org.junit.Before; @@ -2607,7 +2616,30 @@ public class NotificationManagerServiceTest extends UiServiceTestCase { @Test @EnableFlags(android.app.Flags.FLAG_LIFETIME_EXTENSION_REFACTOR) - public void testCancelAllDoesNotCancelLifetimeExtended() throws Exception { + public void testCancelAllClearsLifetimeExtended() throws Exception { + final NotificationRecord notif = generateNotificationRecord( + mTestNotificationChannel, 1, "group", true); + notif.getNotification().flags |= Notification.FLAG_LIFETIME_EXTENDED_BY_DIRECT_REPLY; + mService.addNotification(notif); + StatusBarNotification[] notifs = + mBinderService.getActiveNotifications(notif.getSbn().getPackageName()); + assertThat(notifs.length).isEqualTo(1); + + // Simulate a "cancel all" received. + mService.mNotificationDelegate.onClearAll(mUid, Binder.getCallingPid(), + notif.getUserId()); + waitForIdle(); + notifs = mBinderService.getActiveNotifications(notif.getSbn().getPackageName()); + assertThat(notifs.length).isEqualTo(0); + + // Test that no update post is sent to System UI. + verify(mWorkerHandler, never()) + .post(any(NotificationManagerService.EnqueueNotificationRunnable.class)); + } + + @Test + @EnableFlags(android.app.Flags.FLAG_LIFETIME_EXTENSION_REFACTOR) + public void testAppCancelAllDoesNotCancelLifetimeExtended() throws Exception { // Adds a lifetime extended notification. final NotificationRecord notif = generateNotificationRecord(mTestNotificationChannel, 1, null, false); @@ -5934,6 +5966,45 @@ public class NotificationManagerServiceTest extends UiServiceTestCase { } @Test + @EnableFlags(android.app.Flags.FLAG_LIFETIME_EXTENSION_REFACTOR) + public void testUpdate_DirectReplyLifetimeExtendedUpdateSucceeds() throws Exception { + // Creates a lifetime extended notification. + NotificationRecord original = generateNotificationRecord(mTestNotificationChannel); + original.getSbn().getNotification().flags |= FLAG_LIFETIME_EXTENDED_BY_DIRECT_REPLY; + mService.addNotification(original); + + // Post an update for that notification. + StatusBarNotification sbn = new StatusBarNotification(mPkg, mPkg, original.getSbn().getId(), + original.getSbn().getTag(), mUid, 0, + new Notification.Builder(mContext, mTestNotificationChannel.getId()) + .setSmallIcon(android.R.drawable.sym_def_app_icon) + .setContentTitle("new title").build(), + UserHandle.getUserHandleForUid(mUid), null, 0); + NotificationRecord update = new NotificationRecord(mContext, sbn, mTestNotificationChannel); + mService.addEnqueuedNotification(update); + + NotificationManagerService.PostNotificationRunnable runnable = + mService.new PostNotificationRunnable(update.getKey(), + update.getSbn().getPackageName(), + update.getUid(), + mPostNotificationTrackerFactory.newTracker(null)); + runnable.run(); + waitForIdle(); + + // Checks the update was sent, and that update contains the new title, and does not contain + // the lifetime extension flag. + ArgumentCaptor<NotificationRecord> captor = + ArgumentCaptor.forClass(NotificationRecord.class); + verify(mListeners, times(1)).prepareNotifyPostedLocked(captor.capture(), any(), + anyBoolean()); + assertThat(captor.getValue().getNotification().flags + & FLAG_LIFETIME_EXTENDED_BY_DIRECT_REPLY).isEqualTo(0); + assertThat(captor.getValue() + .getNotification().extras.getCharSequence(Notification.EXTRA_TITLE).toString()) + .isEqualTo("new title"); + } + + @Test public void testStats_updatedOnUserExpansion() throws Exception { NotificationRecord r = generateNotificationRecord(mTestNotificationChannel); mService.addNotification(r); @@ -8788,9 +8859,8 @@ public class NotificationManagerServiceTest extends UiServiceTestCase { } @Test + @EnableFlags(android.app.Flags.FLAG_LIFETIME_EXTENSION_REFACTOR) public void testActionClickLifetimeExtendedCancel_PreventByNoDismiss() throws Exception { - mSetFlagsRule.enableFlags(android.app.Flags.FLAG_LIFETIME_EXTENSION_REFACTOR); - final Notification.Action action = new Notification.Action.Builder(null, "text", PendingIntent.getActivity( mContext, 0, new Intent(), PendingIntent.FLAG_IMMUTABLE)).build(); @@ -8831,9 +8901,8 @@ public class NotificationManagerServiceTest extends UiServiceTestCase { } @Test + @EnableFlags(android.app.Flags.FLAG_LIFETIME_EXTENSION_REFACTOR) public void testUpdateOnActionClickDropsLifetimeExtendedCancel() throws Exception { - mSetFlagsRule.enableFlags(android.app.Flags.FLAG_LIFETIME_EXTENSION_REFACTOR); - final Notification.Action action = new Notification.Action.Builder(null, "text", PendingIntent.getActivity( mContext, 0, new Intent(), PendingIntent.FLAG_IMMUTABLE)).build(); @@ -12602,7 +12671,6 @@ public class NotificationManagerServiceTest extends UiServiceTestCase { // the notifyPostedLocked function is called twice. verify(mWorkerHandler, times(2)).postDelayed(any(Runnable.class), anyLong()); - //verify(mListeners, times(2)).notifyPostedLocked(any(), any()); } @Test diff --git a/services/tests/uiservicestests/src/com/android/server/notification/NotificationRecordTest.java b/services/tests/uiservicestests/src/com/android/server/notification/NotificationRecordTest.java index 130a8ca54c7c..f572e7aa1706 100644 --- a/services/tests/uiservicestests/src/com/android/server/notification/NotificationRecordTest.java +++ b/services/tests/uiservicestests/src/com/android/server/notification/NotificationRecordTest.java @@ -20,6 +20,7 @@ import static android.app.NotificationManager.IMPORTANCE_DEFAULT; import static android.app.NotificationManager.IMPORTANCE_HIGH; import static android.app.NotificationManager.IMPORTANCE_LOW; import static android.app.NotificationManager.IMPORTANCE_UNSPECIFIED; +import static android.media.AudioAttributes.USAGE_ALARM; import static android.service.notification.Adjustment.KEY_IMPORTANCE; import static android.service.notification.Adjustment.KEY_NOT_CONVERSATION; import static android.service.notification.NotificationListenerService.FLAG_FILTER_TYPE_ALERTING; @@ -68,6 +69,7 @@ import android.os.Bundle; import android.os.UserHandle; import android.os.VibrationEffect; import android.os.Vibrator; +import android.platform.test.annotations.EnableFlags; import android.platform.test.flag.junit.SetFlagsRule; import android.provider.Settings; import android.service.notification.Adjustment; @@ -1565,4 +1567,31 @@ public class NotificationRecordTest extends UiServiceTestCase { assertTrue(record.getPhoneNumbers().contains("16175552121")); assertTrue(record.getPhoneNumbers().contains("16175553434")); } + + @Test + @EnableFlags(Flags.FLAG_RESTRICT_AUDIO_ATTRIBUTES_ALARM) + public void updateChannel_nullAudioAttributes() { + StatusBarNotification sbn = getStyledNotification(true, true, true, + new Notification.DecoratedCustomViewStyle()); + NotificationRecord record = new NotificationRecord(mMockContext, sbn, channel); + + record.updateNotificationChannel(new NotificationChannel("new", "new", 3)); + + assertThat(record.getAudioAttributes()).isNotNull(); + } + + @Test + @EnableFlags(Flags.FLAG_RESTRICT_AUDIO_ATTRIBUTES_ALARM) + public void updateChannel_nonNullAudioAttributes() { + StatusBarNotification sbn = getStyledNotification(true, true, true, + new Notification.DecoratedCustomViewStyle()); + NotificationRecord record = new NotificationRecord(mMockContext, sbn, channel); + + NotificationChannel update = new NotificationChannel("new", "new", 3); + update.setSound(Uri.EMPTY, + new AudioAttributes.Builder().setUsage(USAGE_ALARM).build()); + record.updateNotificationChannel(update); + + assertThat(record.getAudioAttributes().getUsage()).isEqualTo(USAGE_ALARM); + } } diff --git a/services/tests/uiservicestests/src/com/android/server/notification/ZenEnumTest.java b/services/tests/uiservicestests/src/com/android/server/notification/ZenEnumTest.java index f724510eeb73..8add2f957a07 100644 --- a/services/tests/uiservicestests/src/com/android/server/notification/ZenEnumTest.java +++ b/services/tests/uiservicestests/src/com/android/server/notification/ZenEnumTest.java @@ -21,8 +21,8 @@ import static com.google.common.truth.Truth.assertThat; import android.app.AutomaticZenRule; import android.provider.Settings; import android.service.notification.ZenPolicy; -import android.test.suitebuilder.annotation.SmallTest; +import androidx.test.filters.SmallTest; import androidx.test.runner.AndroidJUnit4; import com.android.os.dnd.ActiveRuleType; diff --git a/services/tests/uiservicestests/src/com/android/server/notification/ZenModeHelperTest.java b/services/tests/uiservicestests/src/com/android/server/notification/ZenModeHelperTest.java index 43f24750ddef..5adfafb8a57c 100644 --- a/services/tests/uiservicestests/src/com/android/server/notification/ZenModeHelperTest.java +++ b/services/tests/uiservicestests/src/com/android/server/notification/ZenModeHelperTest.java @@ -322,6 +322,27 @@ public class ZenModeHelperTest extends UiServiceTestCase { mZenModeEventLogger.reset(); } + private enum ChangeOrigin { + ORIGIN_UNKNOWN(ZenModeConfig.UPDATE_ORIGIN_UNKNOWN), + ORIGIN_INIT(ZenModeConfig.UPDATE_ORIGIN_INIT), + ORIGIN_INIT_USER(ZenModeConfig.UPDATE_ORIGIN_INIT_USER), + ORIGIN_USER(ZenModeConfig.UPDATE_ORIGIN_USER), + ORIGIN_APP(ZenModeConfig.UPDATE_ORIGIN_APP), + ORIGIN_SYSTEM_OR_SYSTEMUI(ZenModeConfig.UPDATE_ORIGIN_SYSTEM_OR_SYSTEMUI), + ORIGIN_RESTORE_BACKUP(ZenModeConfig.UPDATE_ORIGIN_RESTORE_BACKUP); + + private final int mValue; + + ChangeOrigin(@ZenModeConfig.ConfigChangeOrigin int value) { + mValue = value; + } + + @ZenModeConfig.ConfigChangeOrigin + public int value() { + return mValue; + } + } + private XmlResourceParser getDefaultConfigParser() throws IOException, XmlPullParserException { String xml = "<zen version=\"10\">\n" + "<allow alarms=\"true\" media=\"true\" system=\"false\" calls=\"true\" " @@ -2898,6 +2919,72 @@ public class ZenModeHelperTest extends UiServiceTestCase { } @Test + @EnableFlags(Flags.FLAG_MODES_API) + @DisableFlags(Flags.FLAG_MODES_UI) + public void setManualZenMode_off_snoozesActiveRules(@TestParameter ChangeOrigin setZenOrigin) { + // Start with an active rule and an inactive rule. + mZenModeHelper.mConfig.automaticRules.clear(); + AutomaticZenRule activeRule = new AutomaticZenRule.Builder("Test", CONDITION_ID) + .setInterruptionFilter(INTERRUPTION_FILTER_PRIORITY) + .build(); + String activeRuleId = mZenModeHelper.addAutomaticZenRule(mContext.getPackageName(), + activeRule, UPDATE_ORIGIN_APP, "add it", CUSTOM_PKG_UID); + mZenModeHelper.setAutomaticZenRuleState(activeRuleId, CONDITION_TRUE, UPDATE_ORIGIN_APP, + CUSTOM_PKG_UID); + AutomaticZenRule inactiveRule = new AutomaticZenRule.Builder("Test", CONDITION_ID) + .setInterruptionFilter(INTERRUPTION_FILTER_PRIORITY) + .build(); + String inactiveRuleId = mZenModeHelper.addAutomaticZenRule(mContext.getPackageName(), + inactiveRule, UPDATE_ORIGIN_APP, "add it", CUSTOM_PKG_UID); + + assertThat(mZenModeHelper.getZenMode()).isEqualTo(ZEN_MODE_IMPORTANT_INTERRUPTIONS); + + // User turns DND off. + mZenModeHelper.setManualZenMode(ZEN_MODE_OFF, null, setZenOrigin.value(), + "snoozing", "systemui", Process.SYSTEM_UID); + assertThat(mZenModeHelper.getZenMode()).isEqualTo(ZEN_MODE_OFF); + assertThat(mZenModeHelper.mConfig.automaticRules.get(activeRuleId).snoozing).isTrue(); + assertThat(mZenModeHelper.mConfig.automaticRules.get(inactiveRuleId).snoozing).isFalse(); + } + + @Test + @EnableFlags({Flags.FLAG_MODES_API, Flags.FLAG_MODES_UI}) + public void setManualZenMode_off_doesNotSnoozeRulesIfFromUser( + @TestParameter ChangeOrigin setZenOrigin) { + // Start with an active rule and an inactive rule + mZenModeHelper.mConfig.automaticRules.clear(); + AutomaticZenRule activeRule = new AutomaticZenRule.Builder("Test", CONDITION_ID) + .setInterruptionFilter(INTERRUPTION_FILTER_PRIORITY) + .build(); + String activeRuleId = mZenModeHelper.addAutomaticZenRule(mContext.getPackageName(), + activeRule, UPDATE_ORIGIN_APP, "add it", CUSTOM_PKG_UID); + mZenModeHelper.setAutomaticZenRuleState(activeRuleId, CONDITION_TRUE, UPDATE_ORIGIN_APP, + CUSTOM_PKG_UID); + AutomaticZenRule inactiveRule = new AutomaticZenRule.Builder("Test", CONDITION_ID) + .setInterruptionFilter(INTERRUPTION_FILTER_PRIORITY) + .build(); + String inactiveRuleId = mZenModeHelper.addAutomaticZenRule(mContext.getPackageName(), + inactiveRule, UPDATE_ORIGIN_APP, "add it", CUSTOM_PKG_UID); + + assertThat(mZenModeHelper.getZenMode()).isEqualTo(ZEN_MODE_IMPORTANT_INTERRUPTIONS); + + // User turns DND off. + mZenModeHelper.setManualZenMode(ZEN_MODE_OFF, null, setZenOrigin.value(), + "snoozing", "systemui", Process.SYSTEM_UID); + ZenModeConfig config = mZenModeHelper.mConfig; + if (setZenOrigin == ChangeOrigin.ORIGIN_USER) { + // Other rule was unaffected. + assertThat(mZenModeHelper.getZenMode()).isEqualTo(ZEN_MODE_IMPORTANT_INTERRUPTIONS); + assertThat(config.automaticRules.get(activeRuleId).snoozing).isFalse(); + assertThat(config.automaticRules.get(inactiveRuleId).snoozing).isFalse(); + } else { + assertThat(mZenModeHelper.getZenMode()).isEqualTo(ZEN_MODE_OFF); + assertThat(config.automaticRules.get(activeRuleId).snoozing).isTrue(); + assertThat(config.automaticRules.get(inactiveRuleId).snoozing).isFalse(); + } + } + + @Test public void testSetManualZenMode_legacy() { setupZenConfig(); diff --git a/services/tests/wmtests/src/com/android/server/wm/ActivityRecordTests.java b/services/tests/wmtests/src/com/android/server/wm/ActivityRecordTests.java index e42acba4da7a..30eb5efc16a7 100644 --- a/services/tests/wmtests/src/com/android/server/wm/ActivityRecordTests.java +++ b/services/tests/wmtests/src/com/android/server/wm/ActivityRecordTests.java @@ -18,10 +18,10 @@ package com.android.server.wm; import static android.app.AppOpsManager.MODE_ALLOWED; import static android.app.AppOpsManager.OP_PICTURE_IN_PICTURE; -import static android.app.AppCompatTaskInfo.CAMERA_COMPAT_CONTROL_DISMISSED; -import static android.app.AppCompatTaskInfo.CAMERA_COMPAT_CONTROL_HIDDEN; -import static android.app.AppCompatTaskInfo.CAMERA_COMPAT_CONTROL_TREATMENT_APPLIED; -import static android.app.AppCompatTaskInfo.CAMERA_COMPAT_CONTROL_TREATMENT_SUGGESTED; +import static android.app.CameraCompatTaskInfo.CAMERA_COMPAT_CONTROL_DISMISSED; +import static android.app.CameraCompatTaskInfo.CAMERA_COMPAT_CONTROL_HIDDEN; +import static android.app.CameraCompatTaskInfo.CAMERA_COMPAT_CONTROL_TREATMENT_APPLIED; +import static android.app.CameraCompatTaskInfo.CAMERA_COMPAT_CONTROL_TREATMENT_SUGGESTED; import static android.app.WindowConfiguration.ACTIVITY_TYPE_STANDARD; import static android.app.WindowConfiguration.WINDOWING_MODE_FREEFORM; import static android.app.WindowConfiguration.WINDOWING_MODE_FULLSCREEN; diff --git a/services/tests/wmtests/src/com/android/server/wm/SizeCompatTests.java b/services/tests/wmtests/src/com/android/server/wm/SizeCompatTests.java index 9697c65dc1ea..000162a9e705 100644 --- a/services/tests/wmtests/src/com/android/server/wm/SizeCompatTests.java +++ b/services/tests/wmtests/src/com/android/server/wm/SizeCompatTests.java @@ -502,7 +502,6 @@ public class SizeCompatTests extends WindowTestsBase { final WindowConfiguration translucentWinConf = requestedConfig.windowConfiguration; translucentWinConf.setActivityType(ACTIVITY_TYPE_STANDARD); translucentWinConf.setWindowingMode(WINDOWING_MODE_MULTI_WINDOW); - translucentWinConf.setDisplayWindowingMode(WINDOWING_MODE_MULTI_WINDOW); translucentWinConf.setAlwaysOnTop(true); translucentActivity.onRequestedOverrideConfigurationChanged(requestedConfig); @@ -511,7 +510,6 @@ public class SizeCompatTests extends WindowTestsBase { // The original override of WindowConfiguration should keep. assertEquals(ACTIVITY_TYPE_STANDARD, translucentActivity.getActivityType()); assertEquals(WINDOWING_MODE_MULTI_WINDOW, translucentWinConf.getWindowingMode()); - assertEquals(WINDOWING_MODE_MULTI_WINDOW, translucentWinConf.getDisplayWindowingMode()); assertTrue(translucentWinConf.isAlwaysOnTop()); // Unless display is going to be rotated, it should always inherit from parent. assertEquals(ROTATION_UNDEFINED, translucentWinConf.getDisplayRotation()); @@ -1384,6 +1382,25 @@ public class SizeCompatTests extends WindowTestsBase { } @Test + @EnableCompatChanges({ActivityInfo.OVERRIDE_ANY_ORIENTATION_TO_USER}) + public void testShouldNotCreateCompatDisplays_systemFullscreenOverride() { + setUpDisplaySizeWithApp(1000, 2500); + + // Make the task root resizable. + mActivity.info.resizeMode = RESIZE_MODE_RESIZEABLE; + + // Create an activity on the same task. + final ActivityRecord activity = buildActivityRecord(/* supportsSizeChanges= */false, + RESIZE_MODE_UNRESIZEABLE, ActivityInfo.SCREEN_ORIENTATION_PORTRAIT); + + // Simulate the user selecting the fullscreen user aspect ratio override + spyOn(activity.mLetterboxUiController); + doReturn(true).when(activity.mLetterboxUiController) + .isSystemOverrideToFullscreenEnabled(); + assertFalse(activity.shouldCreateCompatDisplayInsets()); + } + + @Test @EnableCompatChanges({ActivityInfo.NEVER_SANDBOX_DISPLAY_APIS}) public void testNeverSandboxDisplayApis_configEnabled_sandboxingNotApplied() { setUpDisplaySizeWithApp(1000, 1200); diff --git a/services/tests/wmtests/src/com/android/server/wm/TaskFragmentOrganizerControllerTest.java b/services/tests/wmtests/src/com/android/server/wm/TaskFragmentOrganizerControllerTest.java index 002a3d5a0d53..65a81c419d37 100644 --- a/services/tests/wmtests/src/com/android/server/wm/TaskFragmentOrganizerControllerTest.java +++ b/services/tests/wmtests/src/com/android/server/wm/TaskFragmentOrganizerControllerTest.java @@ -1050,6 +1050,8 @@ public class TaskFragmentOrganizerControllerTest extends WindowTestsBase { // TaskFragment override orientation should be set for a system organizer. final TaskFragment taskFragment = mWindowOrganizerController.getTaskFragment(fragmentToken); assertNotNull(taskFragment); + + taskFragment.setVisibleRequested(true); assertEquals(SCREEN_ORIENTATION_BEHIND, taskFragment.getOverrideOrientation()); } diff --git a/services/tests/wmtests/src/com/android/server/wm/TaskFragmentTest.java b/services/tests/wmtests/src/com/android/server/wm/TaskFragmentTest.java index 4837fcbfc262..a90a158e0c2a 100644 --- a/services/tests/wmtests/src/com/android/server/wm/TaskFragmentTest.java +++ b/services/tests/wmtests/src/com/android/server/wm/TaskFragmentTest.java @@ -757,6 +757,7 @@ public class TaskFragmentTest extends WindowTestsBase { final Task task = createTask(mDisplayContent); final TaskFragment tf = createTaskFragmentWithActivity(task); final ActivityRecord activity = tf.getTopMostActivity(); + tf.setVisibleRequested(true); tf.setOverrideOrientation(SCREEN_ORIENTATION_BEHIND); // Should report the override orientation @@ -768,6 +769,26 @@ public class TaskFragmentTest extends WindowTestsBase { } @Test + public void testGetOrientation_reportOverrideOrientation_whenInvisible() { + final Task task = createTask(mDisplayContent); + final TaskFragment tf = createTaskFragmentWithActivity(task); + final ActivityRecord activity = tf.getTopMostActivity(); + tf.setVisibleRequested(false); + tf.setOverrideOrientation(SCREEN_ORIENTATION_BEHIND); + + // Should report SCREEN_ORIENTATION_UNSPECIFIED for the override orientation when invisible + assertEquals(SCREEN_ORIENTATION_UNSPECIFIED, tf.getOverrideOrientation()); + + // Should report SCREEN_ORIENTATION_UNSET for the orientation + assertEquals(SCREEN_ORIENTATION_UNSET, tf.getOrientation(SCREEN_ORIENTATION_UNSET)); + + // Should report SCREEN_ORIENTATION_UNSET even if the activity requests a different + // value + activity.setRequestedOrientation(SCREEN_ORIENTATION_LANDSCAPE); + assertEquals(SCREEN_ORIENTATION_UNSET, tf.getOrientation(SCREEN_ORIENTATION_UNSET)); + } + + @Test public void testUpdateImeParentForActivityEmbedding() { // Setup two activities in ActivityEmbedding. final Task task = createTask(mDisplayContent); diff --git a/services/tests/wmtests/src/com/android/server/wm/WindowConfigurationTests.java b/services/tests/wmtests/src/com/android/server/wm/WindowConfigurationTests.java index 38aac7cfee22..eca51aed334e 100644 --- a/services/tests/wmtests/src/com/android/server/wm/WindowConfigurationTests.java +++ b/services/tests/wmtests/src/com/android/server/wm/WindowConfigurationTests.java @@ -16,9 +16,7 @@ package com.android.server.wm; -import static android.app.WindowConfiguration.ACTIVITY_TYPE_ASSISTANT; import static android.app.WindowConfiguration.ACTIVITY_TYPE_HOME; -import static android.app.WindowConfiguration.ACTIVITY_TYPE_RECENTS; import static android.app.WindowConfiguration.ACTIVITY_TYPE_STANDARD; import static android.app.WindowConfiguration.ROTATION_UNDEFINED; import static android.app.WindowConfiguration.WINDOWING_MODE_FREEFORM; @@ -208,43 +206,6 @@ public class WindowConfigurationTests extends WindowTestsBase { /** Ensure the window always has a caption in Freeform window mode or display mode. */ @Test - public void testCaptionShownForFreeformWindowingMode() { - final WindowConfiguration config = new WindowConfiguration(); - config.setActivityType(ACTIVITY_TYPE_STANDARD); - config.setWindowingMode(WINDOWING_MODE_FREEFORM); - config.setDisplayWindowingMode(WINDOWING_MODE_FULLSCREEN); - assertTrue(config.hasWindowDecorCaption()); - - config.setDisplayWindowingMode(WINDOWING_MODE_FREEFORM); - assertTrue(config.hasWindowDecorCaption()); - - config.setWindowingMode(WINDOWING_MODE_FULLSCREEN); - assertTrue(config.hasWindowDecorCaption()); - - config.setDisplayWindowingMode(WINDOWING_MODE_FULLSCREEN); - assertFalse(config.hasWindowDecorCaption()); - } - - /** Caption should not show for non-standard activity window. */ - @Test - public void testCaptionNotShownForNonStandardActivityType() { - final WindowConfiguration config = new WindowConfiguration(); - config.setActivityType(ACTIVITY_TYPE_HOME); - config.setWindowingMode(WINDOWING_MODE_FREEFORM); - config.setDisplayWindowingMode(WINDOWING_MODE_FREEFORM); - assertFalse(config.hasWindowDecorCaption()); - - config.setActivityType(ACTIVITY_TYPE_ASSISTANT); - assertFalse(config.hasWindowDecorCaption()); - - config.setActivityType(ACTIVITY_TYPE_RECENTS); - assertFalse(config.hasWindowDecorCaption()); - - config.setActivityType(ACTIVITY_TYPE_STANDARD); - assertTrue(config.hasWindowDecorCaption()); - } - - @Test public void testMaskedSetTo() { final WindowConfiguration config = new WindowConfiguration(); final WindowConfiguration other = new WindowConfiguration(); diff --git a/tests/FsVerityTest/FsVerityTestApp/src/com/android/fsverity/Helper.java b/tests/FsVerityTest/FsVerityTestApp/src/com/android/fsverity/Helper.java index 2ed4fec4a93c..c52be7c2b0c6 100644 --- a/tests/FsVerityTest/FsVerityTestApp/src/com/android/fsverity/Helper.java +++ b/tests/FsVerityTest/FsVerityTestApp/src/com/android/fsverity/Helper.java @@ -27,6 +27,9 @@ import android.util.Log; import androidx.test.core.app.ApplicationProvider; import androidx.test.platform.app.InstrumentationRegistry; +import com.android.compatibility.common.util.AdoptShellPermissionsRule; + +import org.junit.Rule; import org.junit.Test; import java.io.FileOutputStream; @@ -46,6 +49,12 @@ public class Helper { private static final long BLOCK_SIZE = 4096; + @Rule + public final AdoptShellPermissionsRule mAdoptShellPermissionsRule = + new AdoptShellPermissionsRule( + InstrumentationRegistry.getInstrumentation().getUiAutomation(), + android.Manifest.permission.SETUP_FSVERITY); + @Test public void prepareTest() throws Exception { Context context = ApplicationProvider.getApplicationContext(); diff --git a/tests/Input/src/com/android/server/input/InputManagerServiceTests.kt b/tests/Input/src/com/android/server/input/InputManagerServiceTests.kt index 8d2b927ce9ae..f6f766a6a5b0 100644 --- a/tests/Input/src/com/android/server/input/InputManagerServiceTests.kt +++ b/tests/Input/src/com/android/server/input/InputManagerServiceTests.kt @@ -19,26 +19,17 @@ package com.android.server.input import android.content.Context import android.content.ContextWrapper -import android.hardware.display.DisplayManager import android.hardware.display.DisplayViewport -import android.hardware.display.VirtualDisplay import android.hardware.input.InputManager import android.hardware.input.InputManagerGlobal -import android.os.InputEventInjectionSync -import android.os.SystemClock import android.os.test.TestLooper import android.platform.test.annotations.Presubmit import android.platform.test.annotations.RequiresFlagsDisabled import android.platform.test.flag.junit.DeviceFlagsValueProvider import android.provider.Settings -import android.view.View.OnKeyListener +import android.test.mock.MockContentResolver import android.view.Display -import android.view.InputDevice -import android.view.KeyEvent import android.view.PointerIcon -import android.view.SurfaceHolder -import android.view.SurfaceView -import android.test.mock.MockContentResolver import androidx.test.platform.app.InstrumentationRegistry import com.android.internal.util.test.FakeSettingsProvider import com.google.common.truth.Truth.assertThat @@ -57,7 +48,6 @@ import org.mockito.Mock import org.mockito.Mockito.`when` import org.mockito.Mockito.clearInvocations import org.mockito.Mockito.doAnswer -import org.mockito.Mockito.mock import org.mockito.Mockito.never import org.mockito.Mockito.spy import org.mockito.Mockito.times @@ -422,174 +412,6 @@ class InputManagerServiceTests { verify(wmCallbacks).notifyPointerDisplayIdChanged(overrideDisplayId, 0f, 0f) thread.join(100 /*millis*/) } - - private fun createVirtualDisplays(count: Int): List<VirtualDisplay> { - val displayManager: DisplayManager = context.getSystemService( - DisplayManager::class.java - ) as DisplayManager - val virtualDisplays = mutableListOf<VirtualDisplay>() - for (i in 0 until count) { - virtualDisplays.add(displayManager.createVirtualDisplay( - /* displayName= */ "testVirtualDisplay$i", - /* width= */ 100, - /* height= */ 100, - /* densityDpi= */ 100, - /* surface= */ null, - /* flags= */ 0 - )) - } - return virtualDisplays - } - - // Helper function that creates a KeyEvent with Keycode A with the given action - private fun createKeycodeAEvent(inputDevice: InputDevice, action: Int): KeyEvent { - val eventTime = SystemClock.uptimeMillis() - return KeyEvent( - /* downTime= */ eventTime, - /* eventTime= */ eventTime, - /* action= */ action, - /* code= */ KeyEvent.KEYCODE_A, - /* repeat= */ 0, - /* metaState= */ 0, - /* deviceId= */ inputDevice.id, - /* scanCode= */ 0, - /* flags= */ KeyEvent.FLAG_FROM_SYSTEM, - /* source= */ InputDevice.SOURCE_KEYBOARD - ) - } - - private fun createInputDevice(): InputDevice { - return InputDevice.Builder() - .setId(123) - .setName("abc") - .setDescriptor("def") - .setSources(InputDevice.SOURCE_KEYBOARD) - .build() - } - - @Test - fun addUniqueIdAssociationByDescriptor_verifyAssociations() { - // Overall goal is to have 2 displays and verify that events from the InputDevice are - // sent only to the view that is on the associated display. - // So, associate the InputDevice with display 1, then send and verify KeyEvents. - // Then remove associations, then associate the InputDevice with display 2, then send - // and verify commands. - - // Make 2 virtual displays with some mock SurfaceViews - val mockSurfaceView1 = mock(SurfaceView::class.java) - val mockSurfaceView2 = mock(SurfaceView::class.java) - val mockSurfaceHolder1 = mock(SurfaceHolder::class.java) - `when`(mockSurfaceView1.holder).thenReturn(mockSurfaceHolder1) - val mockSurfaceHolder2 = mock(SurfaceHolder::class.java) - `when`(mockSurfaceView2.holder).thenReturn(mockSurfaceHolder2) - - val virtualDisplays = createVirtualDisplays(2) - - // Simulate an InputDevice - val inputDevice = createInputDevice() - - // Associate input device with display - service.addUniqueIdAssociationByDescriptor( - inputDevice.descriptor, - virtualDisplays[0].display.displayId.toString() - ) - - // Simulate 2 different KeyEvents - val downEvent = createKeycodeAEvent(inputDevice, KeyEvent.ACTION_DOWN) - val upEvent = createKeycodeAEvent(inputDevice, KeyEvent.ACTION_UP) - - // Create a mock OnKeyListener object - val mockOnKeyListener = mock(OnKeyListener::class.java) - - // Verify that the event went to Display 1 not Display 2 - service.injectInputEvent(downEvent, InputEventInjectionSync.NONE) - - // Call the onKey method on the mock OnKeyListener object - mockOnKeyListener.onKey(mockSurfaceView1, /* keyCode= */ KeyEvent.KEYCODE_A, downEvent) - mockOnKeyListener.onKey(mockSurfaceView2, /* keyCode= */ KeyEvent.KEYCODE_A, upEvent) - - // Verify that the onKey method was called with the expected arguments - verify(mockOnKeyListener).onKey(mockSurfaceView1, KeyEvent.KEYCODE_A, downEvent) - verify(mockOnKeyListener, never()).onKey(mockSurfaceView2, KeyEvent.KEYCODE_A, downEvent) - - // Remove association - service.removeUniqueIdAssociationByDescriptor(inputDevice.descriptor) - - // Associate with Display 2 - service.addUniqueIdAssociationByDescriptor( - inputDevice.descriptor, - virtualDisplays[1].display.displayId.toString() - ) - - // Simulate a KeyEvent - service.injectInputEvent(upEvent, InputEventInjectionSync.NONE) - - // Verify that the event went to Display 2 not Display 1 - verify(mockOnKeyListener).onKey(mockSurfaceView2, KeyEvent.KEYCODE_A, upEvent) - verify(mockOnKeyListener, never()).onKey(mockSurfaceView1, KeyEvent.KEYCODE_A, upEvent) - } - - @Test - fun addUniqueIdAssociationByPort_verifyAssociations() { - // Overall goal is to have 2 displays and verify that events from the InputDevice are - // sent only to the view that is on the associated display. - // So, associate the InputDevice with display 1, then send and verify KeyEvents. - // Then remove associations, then associate the InputDevice with display 2, then send - // and verify commands. - - // Make 2 virtual displays with some mock SurfaceViews - val mockSurfaceView1 = mock(SurfaceView::class.java) - val mockSurfaceView2 = mock(SurfaceView::class.java) - val mockSurfaceHolder1 = mock(SurfaceHolder::class.java) - `when`(mockSurfaceView1.holder).thenReturn(mockSurfaceHolder1) - val mockSurfaceHolder2 = mock(SurfaceHolder::class.java) - `when`(mockSurfaceView2.holder).thenReturn(mockSurfaceHolder2) - - val virtualDisplays = createVirtualDisplays(2) - - // Simulate an InputDevice - val inputDevice = createInputDevice() - - // Associate input device with display - service.addUniqueIdAssociationByPort( - inputDevice.name, - virtualDisplays[0].display.displayId.toString() - ) - - // Simulate 2 different KeyEvents - val downEvent = createKeycodeAEvent(inputDevice, KeyEvent.ACTION_DOWN) - val upEvent = createKeycodeAEvent(inputDevice, KeyEvent.ACTION_UP) - - // Create a mock OnKeyListener object - val mockOnKeyListener = mock(OnKeyListener::class.java) - - // Verify that the event went to Display 1 not Display 2 - service.injectInputEvent(downEvent, InputEventInjectionSync.NONE) - - // Call the onKey method on the mock OnKeyListener object - mockOnKeyListener.onKey(mockSurfaceView1, /* keyCode= */ KeyEvent.KEYCODE_A, downEvent) - mockOnKeyListener.onKey(mockSurfaceView2, /* keyCode= */ KeyEvent.KEYCODE_A, upEvent) - - // Verify that the onKey method was called with the expected arguments - verify(mockOnKeyListener).onKey(mockSurfaceView1, KeyEvent.KEYCODE_A, downEvent) - verify(mockOnKeyListener, never()).onKey(mockSurfaceView2, KeyEvent.KEYCODE_A, downEvent) - - // Remove association - service.removeUniqueIdAssociationByPort(inputDevice.name) - - // Associate with Display 2 - service.addUniqueIdAssociationByPort( - inputDevice.name, - virtualDisplays[1].display.displayId.toString() - ) - - // Simulate a KeyEvent - service.injectInputEvent(upEvent, InputEventInjectionSync.NONE) - - // Verify that the event went to Display 2 not Display 1 - verify(mockOnKeyListener).onKey(mockSurfaceView2, KeyEvent.KEYCODE_A, upEvent) - verify(mockOnKeyListener, never()).onKey(mockSurfaceView1, KeyEvent.KEYCODE_A, upEvent) - } } private fun <T> whenever(methodCall: T): OngoingStubbing<T> = `when`(methodCall) diff --git a/wifi/wifi.aconfig b/wifi/wifi.aconfig index 6c4e4c3eb9be..3c734bc7e1e3 100644 --- a/wifi/wifi.aconfig +++ b/wifi/wifi.aconfig @@ -1,4 +1,5 @@ package: "android.net.wifi.flags" +container: "system" flag { name: "get_device_cross_akm_roaming_support" |