Merge "Extract RefreshRateData from DisplayDeviceConfig" into main
diff --git a/AconfigFlags.bp b/AconfigFlags.bp
index d3e80ae..94ff091 100644
--- a/AconfigFlags.bp
+++ b/AconfigFlags.bp
@@ -87,11 +87,13 @@
"com.android.media.flags.performance-aconfig-java",
"com.android.media.flags.projection-aconfig-java",
"com.android.net.thread.platform.flags-aconfig-java",
+ "com.android.server.contextualsearch.flags-java",
"com.android.server.flags.services-aconfig-java",
"com.android.text.flags-aconfig-java",
"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 +162,7 @@
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 +177,7 @@
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 +192,7 @@
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 +212,7 @@
aconfig_declarations {
name: "com.android.text.flags-aconfig",
package: "com.android.text.flags",
+ container: "system",
srcs: ["core/java/android/text/flags/*.aconfig"],
}
@@ -225,6 +231,7 @@
aconfig_declarations {
name: "android.location.flags-aconfig",
package: "android.location.flags",
+ container: "system",
srcs: [
"location/java/android/location/flags/*.aconfig",
],
@@ -246,6 +253,7 @@
aconfig_declarations {
name: "android.nfc.flags-aconfig",
package: "android.nfc",
+ container: "system",
srcs: ["nfc/java/android/nfc/*.aconfig"],
}
@@ -276,6 +284,7 @@
aconfig_declarations {
name: "android.security.flags-aconfig",
package: "android.security",
+ container: "system",
srcs: ["core/java/android/security/*.aconfig"],
}
@@ -296,6 +305,7 @@
aconfig_declarations {
name: "android.app.usage.flags-aconfig",
package: "android.app.usage",
+ container: "system",
srcs: ["core/java/android/app/usage/*.aconfig"],
}
@@ -379,6 +389,7 @@
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 +402,7 @@
aconfig_declarations {
name: "android.companion.virtual.flags-aconfig",
package: "android.companion.virtual.flags",
+ container: "system",
srcs: ["core/java/android/companion/virtual/*.aconfig"],
}
@@ -398,6 +410,7 @@
aconfig_declarations {
name: "android.view.inputmethod.flags-aconfig",
package: "android.view.inputmethod",
+ container: "system",
srcs: ["core/java/android/view/inputmethod/flags.aconfig"],
}
@@ -411,6 +424,7 @@
aconfig_declarations {
name: "android.os.vibrator.flags-aconfig",
package: "android.os.vibrator",
+ container: "system",
srcs: ["core/java/android/os/vibrator/*.aconfig"],
}
@@ -424,6 +438,7 @@
aconfig_declarations {
name: "android.view.flags-aconfig",
package: "android.view.flags",
+ container: "system",
srcs: ["core/java/android/view/flags/*.aconfig"],
}
@@ -442,6 +457,7 @@
aconfig_declarations {
name: "android.view.accessibility.flags-aconfig",
package: "android.view.accessibility",
+ container: "system",
srcs: ["core/java/android/view/accessibility/flags/*.aconfig"],
}
@@ -461,6 +477,7 @@
name: "android.hardware.flags-aconfig",
exportable: true,
package: "android.hardware.flags",
+ container: "system",
srcs: ["core/java/android/hardware/flags/*.aconfig"],
}
@@ -474,6 +491,7 @@
aconfig_declarations {
name: "android.widget.flags-aconfig",
package: "android.widget.flags",
+ container: "system",
srcs: ["core/java/android/widget/flags/*.aconfig"],
}
@@ -493,6 +511,7 @@
aconfig_declarations {
name: "android.content.pm.flags-aconfig",
package: "android.content.pm",
+ container: "system",
srcs: ["core/java/android/content/pm/flags.aconfig"],
}
@@ -513,6 +532,7 @@
aconfig_declarations {
name: "android.content.res.flags-aconfig",
package: "android.content.res",
+ container: "system",
srcs: ["core/java/android/content/res/*.aconfig"],
}
@@ -533,6 +553,7 @@
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 +575,7 @@
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 +591,7 @@
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 +623,7 @@
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 +638,7 @@
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 +652,7 @@
aconfig_declarations {
name: "android.permission.flags-aconfig",
package: "android.permission.flags",
+ container: "system",
srcs: ["core/java/android/permission/flags.aconfig"],
}
@@ -659,6 +685,7 @@
aconfig_declarations {
name: "android.database.sqlite-aconfig",
package: "android.database.sqlite",
+ container: "system",
srcs: ["core/java/android/database/sqlite/*.aconfig"],
}
@@ -679,6 +706,7 @@
name: "android.hardware.biometrics.flags-aconfig",
exportable: true,
package: "android.hardware.biometrics",
+ container: "system",
srcs: ["core/java/android/hardware/biometrics/flags.aconfig"],
}
@@ -730,6 +758,7 @@
aconfig_declarations {
name: "android.multiuser.flags-aconfig",
package: "android.multiuser",
+ container: "system",
srcs: ["core/java/android/content/pm/multiuser.aconfig"],
}
@@ -743,6 +772,7 @@
aconfig_declarations {
name: "android.app.flags-aconfig",
package: "android.app",
+ container: "system",
srcs: ["core/java/android/app/*.aconfig"],
}
@@ -757,6 +787,7 @@
name: "android.hardware.radio.flags-aconfig",
exportable: true,
package: "android.hardware.radio",
+ container: "system",
srcs: ["core/java/android/hardware/radio/*.aconfig"],
}
@@ -770,6 +801,7 @@
aconfig_declarations {
name: "android.credentials.flags-aconfig",
package: "android.credentials.flags",
+ container: "system",
srcs: ["core/java/android/credentials/flags.aconfig"],
exportable: true,
}
@@ -792,6 +824,7 @@
name: "android.view.contentprotection.flags-aconfig",
exportable: true,
package: "android.view.contentprotection.flags",
+ container: "system",
srcs: ["core/java/android/view/contentprotection/flags/*.aconfig"],
}
@@ -801,10 +834,24 @@
defaults: ["framework-minus-apex-aconfig-java-defaults"],
}
+// Contextual Search system service
+aconfig_declarations {
+ name: "com.android.server.contextualsearch.flags-aconfig",
+ package: "com.android.server.contextualsearch.flags",
+ srcs: ["services/contextualsearch/flags/flags.aconfig"],
+}
+
+java_aconfig_library {
+ name: "com.android.server.contextualsearch.flags-java",
+ aconfig_declarations: "com.android.server.contextualsearch.flags-aconfig",
+ defaults: ["framework-minus-apex-aconfig-java-defaults"],
+}
+
// Server Services Flags
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 +866,7 @@
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 +881,7 @@
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 +896,7 @@
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 +910,7 @@
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 +928,7 @@
name: "android.companion.flags-aconfig",
exportable: true,
package: "android.companion",
+ container: "system",
srcs: ["core/java/android/companion/*.aconfig"],
}
@@ -891,6 +943,7 @@
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 +953,7 @@
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 +974,7 @@
aconfig_declarations {
name: "android.media.playback.flags-aconfig",
package: "com.android.media.playback.flags",
+ container: "system",
srcs: ["media/jni/playback_flags.aconfig"],
}
@@ -938,6 +993,7 @@
aconfig_declarations {
name: "android.net.vcn.flags-aconfig",
package: "android.net.vcn",
+ container: "system",
srcs: ["core/java/android/net/vcn/*.aconfig"],
}
@@ -951,6 +1007,7 @@
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 +1035,7 @@
aconfig_declarations {
name: "android.service.chooser.flags-aconfig",
package: "android.service.chooser",
+ container: "system",
srcs: ["core/java/android/service/chooser/flags.aconfig"],
}
@@ -996,6 +1054,7 @@
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 +1069,7 @@
aconfig_declarations {
name: "android.service.dreams.flags-aconfig",
package: "android.service.dreams",
+ container: "system",
srcs: ["core/java/android/service/dreams/flags.aconfig"],
}
@@ -1050,6 +1110,7 @@
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 +1125,7 @@
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 +1146,7 @@
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 +1161,7 @@
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 +1182,7 @@
aconfig_declarations {
name: "android.tracing.flags-aconfig",
package: "android.tracing",
+ container: "system",
srcs: ["core/java/android/tracing/flags.aconfig"],
}
@@ -1136,6 +1201,7 @@
aconfig_declarations {
name: "android.appwidget.flags-aconfig",
package: "android.appwidget.flags",
+ container: "system",
srcs: ["core/java/android/appwidget/flags.aconfig"],
}
@@ -1149,6 +1215,7 @@
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 +1229,7 @@
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 +1247,7 @@
name: "android.provider.flags-aconfig",
exportable: true,
package: "android.provider",
+ container: "system",
srcs: ["core/java/android/provider/*.aconfig"],
}
@@ -1200,6 +1269,7 @@
name: "android.speech.flags-aconfig",
exportable: true,
package: "android.speech.flags",
+ container: "system",
srcs: ["core/java/android/speech/flags/*.aconfig"],
}
@@ -1221,6 +1291,7 @@
name: "android.content.flags-aconfig",
exportable: true,
package: "android.content.flags",
+ container: "system",
srcs: ["core/java/android/content/flags/flags.aconfig"],
}
@@ -1234,6 +1305,7 @@
aconfig_declarations {
name: "android.adaptiveauth.flags-aconfig",
package: "android.adaptiveauth",
+ container: "system",
srcs: ["core/java/android/adaptiveauth/*.aconfig"],
}
@@ -1248,6 +1320,7 @@
name: "android.crashrecovery.flags-aconfig",
exportable: true,
package: "android.crashrecovery.flags",
+ container: "system",
srcs: ["packages/CrashRecovery/aconfig/flags.aconfig"],
}
@@ -1275,6 +1348,7 @@
aconfig_declarations {
name: "android.net.wifi.flags-aconfig",
package: "android.net.wifi.flags",
+ container: "system",
srcs: ["wifi/*.aconfig"],
}
@@ -1294,6 +1368,7 @@
name: "android.app.wearable.flags-aconfig",
exportable: true,
package: "android.app.wearable",
+ container: "system",
srcs: ["core/java/android/app/wearable/*.aconfig"],
}
@@ -1306,6 +1381,7 @@
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 +1402,7 @@
aconfig_declarations {
name: "android.systemserver.flags-aconfig",
package: "android.server",
+ container: "system",
srcs: ["services/java/com/android/server/flags.aconfig"],
}
@@ -1351,3 +1428,19 @@
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 2c1a853..80db264 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 ae98fe1..6c8af39 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 @@
@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 10162fd..5d1433c 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 @@
}
@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 @@
}
/**
- * 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 9985543..7fca867 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 @@
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 1383096..443a6c0e 100644
--- a/core/api/test-current.txt
+++ b/core/api/test-current.txt
@@ -1769,16 +1769,14 @@
}
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 e6265ae..685ea63 100644
--- a/core/api/test-lint-baseline.txt
+++ b/core/api/test-lint-baseline.txt
@@ -977,16 +977,8 @@
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 de4e607..b9cf29c 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 0bae5e6..7724c23 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 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 @@
};
/**
- * @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 @@
&& topActivityLetterboxHorizontalPosition
== that.topActivityLetterboxHorizontalPosition
&& isUserFullscreenOverrideEnabled == that.isUserFullscreenOverrideEnabled
- && isSystemFullscreenOverrideEnabled == that.isSystemFullscreenOverrideEnabled;
+ && isSystemFullscreenOverrideEnabled == that.isSystemFullscreenOverrideEnabled
+ && cameraCompatTaskInfo.equalsForTaskOrganizer(that.cameraCompatTaskInfo);
}
/**
@@ -229,18 +183,17 @@
== 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 @@
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 @@
dest.writeInt(topActivityLetterboxHeight);
dest.writeBoolean(isUserFullscreenOverrideEnabled);
dest.writeBoolean(isSystemFullscreenOverrideEnabled);
+ dest.writeTypedObject(cameraCompatTaskInfo, flags);
}
@Override
@@ -290,23 +244,7 @@
+ " 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 7ae514a..f4d1304 100644
--- a/core/java/android/app/AppOpsManager.java
+++ b/core/java/android/app/AppOpsManager.java
@@ -1554,11 +1554,11 @@
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 @@
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 @@
"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 @@
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 @@
// 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 0000000..1e116b7
--- /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 e39928b..f7e0e9f 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;
diff --git a/core/java/android/app/WindowConfiguration.java b/core/java/android/app/WindowConfiguration.java
index aa3b71a..a12faca 100644
--- a/core/java/android/app/WindowConfiguration.java
+++ b/core/java/android/app/WindowConfiguration.java
@@ -100,9 +100,6 @@
/** 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 @@
/** 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 @@
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 @@
dest.writeInt(mActivityType);
dest.writeInt(mAlwaysOnTop);
dest.writeInt(mRotation);
- dest.writeInt(mDisplayWindowingMode);
dest.writeInt(mDisplayRotation);
}
@@ -250,7 +242,6 @@
mActivityType = source.readInt();
mAlwaysOnTop = source.readInt();
mRotation = source.readInt();
- mDisplayWindowingMode = source.readInt();
mDisplayRotation = source.readInt();
}
@@ -411,17 +402,6 @@
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 @@
setActivityType(other.mActivityType);
setAlwaysOnTop(other.mAlwaysOnTop);
setRotation(other.mRotation);
- setDisplayWindowingMode(other.mDisplayWindowingMode);
}
/** Set this object to completely undefined.
@@ -472,7 +451,6 @@
setActivityType(ACTIVITY_TYPE_UNDEFINED);
setAlwaysOnTop(ALWAYS_ON_TOP_UNDEFINED);
setRotation(ROTATION_UNDEFINED);
- setDisplayWindowingMode(WINDOWING_MODE_UNDEFINED);
}
/** @hide */
@@ -543,11 +521,6 @@
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 @@
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 @@
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 @@
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 @@
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 @@
+ " 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 @@
}
/**
- * 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 e751bd2..e4425ca 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 ac843cb..31c9a258 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 @@
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 5f3bb07..d29c5b5 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 5ab0762..3385b2b 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 0d7bf65..ea494f4 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 dbf3173..9a64519 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 88f386f..e7b02a7 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 28afd5f..e694ccc 100644
--- a/core/java/android/app/notification.aconfig
+++ b/core/java/android/app/notification.aconfig
@@ -1,4 +1,5 @@
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
diff --git a/core/java/android/app/ondeviceintelligence/Feature.java b/core/java/android/app/ondeviceintelligence/Feature.java
index fd0379a..bcc56073 100644
--- a/core/java/android/app/ondeviceintelligence/Feature.java
+++ b/core/java/android/app/ondeviceintelligence/Feature.java
@@ -137,8 +137,8 @@
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 dd9210f..8b6441a 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 0f7fa14..696fd38 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 e90ba67..df71924 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 27a38cc..9f44a4d 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 9a2d2e5..c7b168a 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 d1d7b5d..b68bafe 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 765c802..374be6f 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 ecc5e1b..8458857 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 e6649df..3e23762 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 2904e7c..006226e 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 e290722..86d061c 100644
--- a/core/java/android/content/IntentFilter.java
+++ b/core/java/android/content/IntentFilter.java
@@ -21,6 +21,9 @@
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 @@
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 27bce5b..aac04b3a 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/flags.aconfig b/core/java/android/content/pm/flags.aconfig
index cde565b..6158917 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 321e539..6d3a56d 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 8f5c912..a475cc8 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 d077329..d243575 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 7ecffaf..3073e25 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 9836eec..4284ad0 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 e474603..12d3f94 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 1165e65..6c86108 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 2d474d6..1c37aa2 100644
--- a/core/java/android/hardware/input/IInputManager.aidl
+++ b/core/java/android/hardware/input/IInputManager.aidl
@@ -165,17 +165,10 @@
// 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 4dda2c7..f949158 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 @@
/**
* 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 @@
/**
* 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 @@
/**
* 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 1d253d9..7b29666 100644
--- a/core/java/android/hardware/input/InputManagerGlobal.java
+++ b/core/java/android/hardware/input/InputManagerGlobal.java
@@ -1467,46 +1467,22 @@
}
/**
- * @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 9684e64..ed536ce 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 d0d10c1..c9ab62d 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 fac02ce..967fc42 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 3dd746c..94df160 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 cbfc5d1..278e863 100644
--- a/core/java/android/inputmethodservice/InputMethodService.java
+++ b/core/java/android/inputmethodservice/InputMethodService.java
@@ -765,6 +765,7 @@
private boolean mSystemCallingShowSoftInput;
private boolean mSystemCallingHideSoftInput;
+ private boolean mSimultaneousStylusAndTouchEnabled;
/**
* {@inheritDoc}
@@ -1129,9 +1130,11 @@
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 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 @@
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 3544a69..048c50e 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 ef798ad..afb982b 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 6fde398..fea2c25 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 d97ea54..e057a85 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 f26a797..fd955e2 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 229d119..eda755c 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 abb4917..6b5e17d 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 6ad7422..16649e8 100644
--- a/core/java/android/provider/Settings.java
+++ b/core/java/android/provider/Settings.java
@@ -686,25 +686,6 @@
"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 d0cef83..77353c2 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 7f5b550..02e787b 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 548f8aa..c7d951b 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 7f9764e..953bc44 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 e6a84df..269839b 100644
--- a/core/java/android/service/autofill/AutofillService.java
+++ b/core/java/android/service/autofill/AutofillService.java
@@ -37,7 +37,6 @@
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 @@
@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 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 2c2feae..3b64b8a 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 @@
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 a3eff3b..d6425c3 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 197f1bc..6f3a67d 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 cca4937..88f1090 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 35cd3ed..c5b4b41 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 @@
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 1ae7d8c..357cb47 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 fa33592..2a42357 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 24035af..a8a0c5b 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 1815f14..c50c384 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 5466bf5..ebc86ee 100644
--- a/core/java/android/view/TextureView.java
+++ b/core/java/android/view/TextureView.java
@@ -202,6 +202,14 @@
// 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 @@
*/
@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 4c4a22c..a355f55 100644
--- a/core/java/android/view/View.java
+++ b/core/java/android/view/View.java
@@ -911,6 +911,12 @@
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 @@
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 @@
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 @@
@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 @@
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 @@
// 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 @@
}
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 @@
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 @@
// 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 @@
/** @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 @@
if (sToolkitSetFrameRateReadOnlyFlagValue
&& sToolkitFrameRateViewEnablingReadOnlyFlagValue) {
votePreferredFrameRate();
- updateInfrequentCount();
}
mPrivateFlags4 = (mPrivateFlags4 & ~PFLAG4_HAS_MOVED) | PFLAG4_HAS_DRAWN;
@@ -32835,6 +32828,13 @@
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 @@
* @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 @@
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() && isDirty() && viewRootImpl.shouldCheckFrameRateCategory()) {
- if (sToolkitMetricsForFrameRateDecisionFlagValue) {
- float sizePercentage = width * height / mAttachInfo.mDisplayPixelCount;
- viewRootImpl.recordViewPercentage(sizePercentage);
- }
-
- 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()) {
+ 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 (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);
+ }
+ }
+
+ 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;
}
}
@@ -34074,33 +34097,4 @@
}
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 8d55777..e2ed2b8 100644
--- a/core/java/android/view/ViewRootImpl.java
+++ b/core/java/android/view/ViewRootImpl.java
@@ -392,6 +392,26 @@
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 @@
// 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 @@
// 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 @@
// 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);
+ 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;
}
- 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 @@
mTempInsets, mTempControls, mRelayoutBundle);
mRelayoutRequested = true;
+ if (activityWindowInfoFlag() && mPendingActivityWindowInfo != null) {
+ 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);
+ }
+ }
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);
- if (outInfo != null) {
- mPendingActivityWindowInfo.set(outInfo);
- }
- }
- mRelayoutBundle.clear();
+
mWinFrameInScreen.set(mTmpFrames.frame);
if (mTranslator != null) {
mTranslator.translateRectInScreenToAppWindow(mTmpFrames.frame);
@@ -12510,6 +12550,15 @@
* 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 @@
*/
@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 @@
mFrameRateCategoryHighCount = FRAME_RATE_CATEGORY_COUNT;
mFrameRateCategoryChangeReason = FRAME_RATE_CATEGORY_REASON_VELOCITY;
mFrameRateCategoryView = null;
+ mHasInvalidation = true;
+ mDrawnThisFrame = true;
return;
}
}
@@ -12755,6 +12816,7 @@
mPreferredFrameRate = nextFrameRate;
mFrameRateCompatibility = nextFrameRateCompatibility;
mHasInvalidation = true;
+ mDrawnThisFrame = true;
}
/**
@@ -12888,4 +12950,29 @@
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 c9d99d1..da2bf9d 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 3c15518..416a877 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 4de0f29..b3bd92b 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 1047131..d0fe3e0 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 a7c4104..338037f 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 486c2ab..33b29c7 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 bf6df5c..bedb7d5 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 0d19746..d79903b 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 2d834a8..defe61e 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 79cfe56..a0a391e 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 515fa55..95794f3 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 6d36b57..b9ffdbc 100644
--- a/core/java/android/window/TaskOrganizer.java
+++ b/core/java/android/window/TaskOrganizer.java
@@ -24,7 +24,7 @@
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 368c609..733e3db 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 fa0dab0..98ff3c6 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 65e5f1a..b9c15c5 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 94c72c6..33af486 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 edf90b5..150b04e 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 5c31048..460df31 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 e2efff3..87c47da 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 e49089d..6c00c70 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 457b9dd..63623c7 100644
--- a/core/java/com/android/internal/inputmethod/IInputMethodPrivilegedOperations.aidl
+++ b/core/java/com/android/internal/inputmethod/IInputMethodPrivilegedOperations.aidl
@@ -49,4 +49,5 @@
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 635a227..72c41be 100644
--- a/core/java/com/android/internal/inputmethod/InputMethodPrivilegedOperations.java
+++ b/core/java/com/android/internal/inputmethod/InputMethodPrivilegedOperations.java
@@ -144,6 +144,24 @@
}
/**
+ * 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 ea9abdb..89db1cb 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 76d7a41..657cc18 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 0841861..8b9660e 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 86df650..60eb410 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 185c3c6..e3f8442 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 618c581..1b8ca14 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 643c5cb..661732d 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 06b6a13..950247c 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 43c73d1..7b55c9c 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 181e612..f4b8557 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 9583461..f9fc1db 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 170f84e..555be46 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 ae4fbcf..4696e4b 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 4318608..f770a74 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 3f830c9..473a120 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 59940a3..d73f2141 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 cafccf5..353479b 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 11fb50e..73a0512 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 86fe49c..035cd0c 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 60dbcd9..e017924 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 859d04a..0380ffc 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 b7f49980..c95aee3 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 39e3d5da2..f1d2dfa 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 d2aa32c..e328fcc 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 99809d3..d84d0e1 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 c8c2e45..eb6f507 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 c59ac02..6acd5f6 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 7612906..30fdc24d 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 7d86d83..79529a9 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 80f1cf8..421b22a 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 0dbf369..8926c2e 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 b3cf16b..40586ae 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 c2b36b7..f36de9d 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 0243599..edac53e 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 518e851..feb2027 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 74d3751..14f8758 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 8a29efd..cd02969c 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 caa801d..20dd3b9 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 a5373ab..baaf1a6 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 e9e5585..9c1e5038 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 4eb0ced..eac1234 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 d4b4d12..b56da36 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 d1da74e..5378442 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 59a6e30..8d24214 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 b1a7472..0360636 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 baa2604..8d4fe9b 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 f02b58c..4c65300 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 e94f2d3..1ff5fa8 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 da46662..c913c17 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 9fcf2d1..21e5d0d 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 9b2b6ab..28871ef 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 44af8b6..e68e818 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 beda8ee..060f6f8 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 9d72fcd..a86eadc 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 674eac3..6710bf6 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 030633b..184ef9d 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 b380199..2c481f10 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 a486797..a10e375 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 d484405..8333fd1 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 df78cc9..fcfdb7b 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 282694d..b11c196 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 f80e832..c39fdd3 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 3dcd619..d4620e6 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 10e19cd..96545fe 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 3dcd619..d4620e6 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 e27603a..e60af5c 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 a1da51e..5063898 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 5c9f4d9..8f1835e 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 4735866..ef87a33 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 9118c95..1284a8c 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 6036a17..451168f6 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 2020f91..dfb518d 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 cd334a3..099059c 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 b16bbcd..c184505 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 02e06fa..86aa8a7 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 ecd7e94..90f21a0 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 b1debfd..e3cd9de 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 a6a6b50..4f5fde6 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 7e34e4b..529ea74 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 34618cd..800bd1d 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 caf0ca4..6caed2e 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 e22c1dc..36b0794 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 d6bd190..ff3132d 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 9336c17..ce6f0b8 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 e92b7f0..7d40ca1 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 124d17a..f193855 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 8ffb7a4..e22a359 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 4c941fd..60289c1 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 @@
<!-- 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/data/etc/com.android.settings.xml b/data/etc/com.android.settings.xml
index cd68503..7a4b6bc 100644
--- a/data/etc/com.android.settings.xml
+++ b/data/etc/com.android.settings.xml
@@ -68,5 +68,6 @@
<permission name="android.permission.SEND_SAFETY_CENTER_UPDATE" />
<permission name="android.permission.LIST_ENABLED_CREDENTIAL_PROVIDERS" />
<permission name="android.permission.SATELLITE_COMMUNICATION" />
+ <permission name="android.permission.READ_SYSTEM_GRAMMATICAL_GENDER" />
</privapp-permissions>
</permissions>
diff --git a/libs/WindowManager/Jetpack/tests/unittest/src/androidx/window/extensions/embedding/DividerPresenterTest.java b/libs/WindowManager/Jetpack/tests/unittest/src/androidx/window/extensions/embedding/DividerPresenterTest.java
index de0171d..49cfeb6 100644
--- a/libs/WindowManager/Jetpack/tests/unittest/src/androidx/window/extensions/embedding/DividerPresenterTest.java
+++ b/libs/WindowManager/Jetpack/tests/unittest/src/androidx/window/extensions/embedding/DividerPresenterTest.java
@@ -59,7 +59,8 @@
import org.junit.Test;
import org.junit.runner.RunWith;
import org.mockito.Mock;
-import org.mockito.MockitoAnnotations;
+import org.mockito.junit.MockitoJUnit;
+import org.mockito.junit.MockitoRule;
import java.util.concurrent.Executor;
@@ -74,6 +75,9 @@
@RunWith(AndroidJUnit4.class)
public class DividerPresenterTest {
@Rule
+ public MockitoRule rule = MockitoJUnit.rule();
+
+ @Rule
public final SetFlagsRule mSetFlagRule = new SetFlagsRule();
private static final int MOCK_TASK_ID = 1234;
@@ -118,7 +122,6 @@
@Before
public void setUp() {
- MockitoAnnotations.initMocks(this);
mSetFlagRule.enableFlags(Flags.FLAG_ACTIVITY_EMBEDDING_INTERACTIVE_DIVIDER_FLAG);
when(mTaskContainer.getTaskId()).thenReturn(MOCK_TASK_ID);
diff --git a/libs/WindowManager/Jetpack/tests/unittest/src/androidx/window/extensions/embedding/JetpackTaskFragmentOrganizerTest.java b/libs/WindowManager/Jetpack/tests/unittest/src/androidx/window/extensions/embedding/JetpackTaskFragmentOrganizerTest.java
index 6f37e9c..76e6a0f 100644
--- a/libs/WindowManager/Jetpack/tests/unittest/src/androidx/window/extensions/embedding/JetpackTaskFragmentOrganizerTest.java
+++ b/libs/WindowManager/Jetpack/tests/unittest/src/androidx/window/extensions/embedding/JetpackTaskFragmentOrganizerTest.java
@@ -42,10 +42,12 @@
import androidx.test.filters.SmallTest;
import org.junit.Before;
+import org.junit.Rule;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.mockito.Mock;
-import org.mockito.MockitoAnnotations;
+import org.mockito.junit.MockitoJUnit;
+import org.mockito.junit.MockitoRule;
import java.util.ArrayList;
@@ -61,6 +63,9 @@
@SmallTest
@RunWith(AndroidJUnit4.class)
public class JetpackTaskFragmentOrganizerTest {
+ @Rule
+ public MockitoRule rule = MockitoJUnit.rule();
+
@Mock
private WindowContainerTransaction mTransaction;
@Mock
@@ -73,7 +78,6 @@
@Before
public void setup() {
- MockitoAnnotations.initMocks(this);
mOrganizer = new JetpackTaskFragmentOrganizer(Runnable::run, mCallback);
mOrganizer.registerOrganizer();
spyOn(mOrganizer);
diff --git a/libs/WindowManager/Jetpack/tests/unittest/src/androidx/window/extensions/embedding/OverlayPresentationTest.java b/libs/WindowManager/Jetpack/tests/unittest/src/androidx/window/extensions/embedding/OverlayPresentationTest.java
index b1b1984..50abdfd 100644
--- a/libs/WindowManager/Jetpack/tests/unittest/src/androidx/window/extensions/embedding/OverlayPresentationTest.java
+++ b/libs/WindowManager/Jetpack/tests/unittest/src/androidx/window/extensions/embedding/OverlayPresentationTest.java
@@ -81,7 +81,8 @@
import org.junit.Test;
import org.junit.runner.RunWith;
import org.mockito.Mock;
-import org.mockito.MockitoAnnotations;
+import org.mockito.junit.MockitoJUnit;
+import org.mockito.junit.MockitoRule;
import java.util.ArrayList;
import java.util.List;
@@ -98,6 +99,8 @@
@SmallTest
@RunWith(AndroidJUnit4.class)
public class OverlayPresentationTest {
+ @Rule
+ public MockitoRule rule = MockitoJUnit.rule();
@Rule
public final SetFlagsRule mSetFlagRule = new SetFlagsRule();
@@ -126,7 +129,6 @@
@Before
public void setUp() {
- MockitoAnnotations.initMocks(this);
doReturn(new WindowLayoutInfo(new ArrayList<>())).when(mWindowLayoutComponent)
.getCurrentWindowLayoutInfo(anyInt(), any());
DeviceStateManagerFoldingFeatureProducer producer =
diff --git a/libs/WindowManager/Jetpack/tests/unittest/src/androidx/window/extensions/embedding/SplitControllerTest.java b/libs/WindowManager/Jetpack/tests/unittest/src/androidx/window/extensions/embedding/SplitControllerTest.java
index 3441c2b..8bc3a30 100644
--- a/libs/WindowManager/Jetpack/tests/unittest/src/androidx/window/extensions/embedding/SplitControllerTest.java
+++ b/libs/WindowManager/Jetpack/tests/unittest/src/androidx/window/extensions/embedding/SplitControllerTest.java
@@ -111,7 +111,8 @@
import org.junit.runner.RunWith;
import org.mockito.ArgumentCaptor;
import org.mockito.Mock;
-import org.mockito.MockitoAnnotations;
+import org.mockito.junit.MockitoJUnit;
+import org.mockito.junit.MockitoRule;
import java.util.ArrayList;
import java.util.Collections;
@@ -137,6 +138,9 @@
new ComponentName("test", "placeholder"));
@Rule
+ public MockitoRule rule = MockitoJUnit.rule();
+
+ @Rule
public final SetFlagsRule mSetFlagRule = new SetFlagsRule();
private Activity mActivity;
@@ -166,7 +170,6 @@
@Before
public void setUp() {
- MockitoAnnotations.initMocks(this);
doReturn(new WindowLayoutInfo(new ArrayList<>())).when(mWindowLayoutComponent)
.getCurrentWindowLayoutInfo(anyInt(), any());
DeviceStateManagerFoldingFeatureProducer producer =
diff --git a/libs/WindowManager/Jetpack/tests/unittest/src/androidx/window/extensions/embedding/SplitPresenterTest.java b/libs/WindowManager/Jetpack/tests/unittest/src/androidx/window/extensions/embedding/SplitPresenterTest.java
index 62d8aa3..c677484 100644
--- a/libs/WindowManager/Jetpack/tests/unittest/src/androidx/window/extensions/embedding/SplitPresenterTest.java
+++ b/libs/WindowManager/Jetpack/tests/unittest/src/androidx/window/extensions/embedding/SplitPresenterTest.java
@@ -85,10 +85,12 @@
import androidx.window.extensions.layout.WindowLayoutInfo;
import org.junit.Before;
+import org.junit.Rule;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.mockito.Mock;
-import org.mockito.MockitoAnnotations;
+import org.mockito.junit.MockitoJUnit;
+import org.mockito.junit.MockitoRule;
import java.util.ArrayList;
@@ -106,6 +108,10 @@
public class SplitPresenterTest {
private Activity mActivity;
+
+ @Rule
+ public MockitoRule rule = MockitoJUnit.rule();
+
@Mock
private Resources mActivityResources;
@Mock
@@ -119,7 +125,6 @@
@Before
public void setUp() {
- MockitoAnnotations.initMocks(this);
doReturn(new WindowLayoutInfo(new ArrayList<>())).when(mWindowLayoutComponent)
.getCurrentWindowLayoutInfo(anyInt(), any());
DeviceStateManagerFoldingFeatureProducer producer =
diff --git a/libs/WindowManager/Jetpack/tests/unittest/src/androidx/window/extensions/embedding/TaskContainerTest.java b/libs/WindowManager/Jetpack/tests/unittest/src/androidx/window/extensions/embedding/TaskContainerTest.java
index a5995a3..8913b22 100644
--- a/libs/WindowManager/Jetpack/tests/unittest/src/androidx/window/extensions/embedding/TaskContainerTest.java
+++ b/libs/WindowManager/Jetpack/tests/unittest/src/androidx/window/extensions/embedding/TaskContainerTest.java
@@ -42,11 +42,12 @@
import androidx.test.ext.junit.runners.AndroidJUnit4;
import androidx.test.filters.SmallTest;
-import org.junit.Before;
+import org.junit.Rule;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.mockito.Mock;
-import org.mockito.MockitoAnnotations;
+import org.mockito.junit.MockitoJUnit;
+import org.mockito.junit.MockitoRule;
import java.util.List;
@@ -60,14 +61,12 @@
@SmallTest
@RunWith(AndroidJUnit4.class)
public class TaskContainerTest {
+ @Rule
+ public MockitoRule rule = MockitoJUnit.rule();
+
@Mock
private SplitController mController;
- @Before
- public void setup() {
- MockitoAnnotations.initMocks(this);
- }
-
@Test
public void testGetWindowingModeForSplitTaskFragment() {
final TaskContainer taskContainer = createTestTaskContainer();
diff --git a/libs/WindowManager/Jetpack/tests/unittest/src/androidx/window/extensions/embedding/TaskFragmentAnimationControllerTest.java b/libs/WindowManager/Jetpack/tests/unittest/src/androidx/window/extensions/embedding/TaskFragmentAnimationControllerTest.java
index 379ea0c..a1e9f08 100644
--- a/libs/WindowManager/Jetpack/tests/unittest/src/androidx/window/extensions/embedding/TaskFragmentAnimationControllerTest.java
+++ b/libs/WindowManager/Jetpack/tests/unittest/src/androidx/window/extensions/embedding/TaskFragmentAnimationControllerTest.java
@@ -27,10 +27,12 @@
import androidx.test.filters.SmallTest;
import org.junit.Before;
+import org.junit.Rule;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.mockito.Mock;
-import org.mockito.MockitoAnnotations;
+import org.mockito.junit.MockitoJUnit;
+import org.mockito.junit.MockitoRule;
/**
* Test class for {@link TaskFragmentAnimationController}.
@@ -42,13 +44,15 @@
@SmallTest
@RunWith(AndroidJUnit4.class)
public class TaskFragmentAnimationControllerTest {
+ @Rule
+ public MockitoRule rule = MockitoJUnit.rule();
+
@Mock
private TaskFragmentOrganizer mOrganizer;
private TaskFragmentAnimationController mAnimationController;
@Before
public void setup() {
- MockitoAnnotations.initMocks(this);
mAnimationController = new TaskFragmentAnimationController(mOrganizer);
}
diff --git a/libs/WindowManager/Jetpack/tests/unittest/src/androidx/window/extensions/embedding/TaskFragmentContainerTest.java b/libs/WindowManager/Jetpack/tests/unittest/src/androidx/window/extensions/embedding/TaskFragmentContainerTest.java
index 0af4179..abfc9c8 100644
--- a/libs/WindowManager/Jetpack/tests/unittest/src/androidx/window/extensions/embedding/TaskFragmentContainerTest.java
+++ b/libs/WindowManager/Jetpack/tests/unittest/src/androidx/window/extensions/embedding/TaskFragmentContainerTest.java
@@ -51,10 +51,12 @@
import com.google.android.collect.Lists;
import org.junit.Before;
+import org.junit.Rule;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.mockito.Mock;
-import org.mockito.MockitoAnnotations;
+import org.mockito.junit.MockitoJUnit;
+import org.mockito.junit.MockitoRule;
import java.util.ArrayList;
import java.util.List;
@@ -71,6 +73,9 @@
@SmallTest
@RunWith(AndroidJUnit4.class)
public class TaskFragmentContainerTest {
+ @Rule
+ public MockitoRule rule = MockitoJUnit.rule();
+
@Mock
private SplitPresenter mPresenter;
private SplitController mController;
@@ -83,7 +88,6 @@
@Before
public void setup() {
- MockitoAnnotations.initMocks(this);
DeviceStateManagerFoldingFeatureProducer producer =
mock(DeviceStateManagerFoldingFeatureProducer.class);
WindowLayoutComponentImpl component = mock(WindowLayoutComponentImpl.class);
diff --git a/libs/WindowManager/Jetpack/tests/unittest/src/androidx/window/extensions/embedding/TransactionManagerTest.java b/libs/WindowManager/Jetpack/tests/unittest/src/androidx/window/extensions/embedding/TransactionManagerTest.java
index 459b6d2..2598dd6 100644
--- a/libs/WindowManager/Jetpack/tests/unittest/src/androidx/window/extensions/embedding/TransactionManagerTest.java
+++ b/libs/WindowManager/Jetpack/tests/unittest/src/androidx/window/extensions/embedding/TransactionManagerTest.java
@@ -41,10 +41,12 @@
import androidx.window.extensions.embedding.TransactionManager.TransactionRecord;
import org.junit.Before;
+import org.junit.Rule;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.mockito.Mock;
-import org.mockito.MockitoAnnotations;
+import org.mockito.junit.MockitoJUnit;
+import org.mockito.junit.MockitoRule;
/**
* Test class for {@link TransactionManager}.
@@ -56,6 +58,8 @@
@SmallTest
@RunWith(AndroidJUnit4.class)
public class TransactionManagerTest {
+ @Rule
+ public MockitoRule rule = MockitoJUnit.rule();
@Mock
private TaskFragmentOrganizer mOrganizer;
@@ -63,7 +67,6 @@
@Before
public void setup() {
- MockitoAnnotations.initMocks(this);
mTransactionManager = new TransactionManager(mOrganizer);
}
diff --git a/libs/WindowManager/Shell/res/values-de/strings.xml b/libs/WindowManager/Shell/res/values-de/strings.xml
index 7b5c471..bcdc2a9 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 ff77d3b..18d21eb 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 e23c1ff..971e146 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 407fbbb..fe0b74c 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 d8d0d87..3244837 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.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 @@
}
@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 7cb5660..0799fe3 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 @@
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 @@
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 @@
}
finishCallback = null
removeScrimLayer()
+ isLetterboxed = false
}
private fun applyTransform(leash: SurfaceControl?, rect: RectF, alpha: Float) {
@@ -274,10 +283,11 @@
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 86571cf..5c292f1 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 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 a0986fa..2b0bd32 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 dbf7186..4e5c2fa 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 @@
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 @@
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 7c28099..8fb4bdb 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 @@
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/dagger/WMShellModule.java b/libs/WindowManager/Shell/src/com/android/wm/shell/dagger/WMShellModule.java
index 1408ead..26e7acb 100644
--- a/libs/WindowManager/Shell/src/com/android/wm/shell/dagger/WMShellModule.java
+++ b/libs/WindowManager/Shell/src/com/android/wm/shell/dagger/WMShellModule.java
@@ -29,6 +29,7 @@
import com.android.internal.logging.UiEventLogger;
import com.android.internal.statusbar.IStatusBarService;
import com.android.launcher3.icons.IconProvider;
+import com.android.window.flags.Flags;
import com.android.wm.shell.RootTaskDisplayAreaOrganizer;
import com.android.wm.shell.ShellTaskOrganizer;
import com.android.wm.shell.WindowManagerShellWrapper;
@@ -59,6 +60,7 @@
import com.android.wm.shell.desktopmode.DesktopModeStatus;
import com.android.wm.shell.desktopmode.DesktopModeTaskRepository;
import com.android.wm.shell.desktopmode.DesktopTasksController;
+import com.android.wm.shell.desktopmode.DesktopTasksLimiter;
import com.android.wm.shell.desktopmode.DesktopTasksTransitionObserver;
import com.android.wm.shell.desktopmode.DragToDesktopTransitionHandler;
import com.android.wm.shell.desktopmode.EnterDesktopTaskTransitionHandler;
@@ -517,23 +519,39 @@
LaunchAdjacentController launchAdjacentController,
RecentsTransitionHandler recentsTransitionHandler,
MultiInstanceHelper multiInstanceHelper,
- @ShellMainThread ShellExecutor mainExecutor
- ) {
+ @ShellMainThread ShellExecutor mainExecutor,
+ Optional<DesktopTasksLimiter> desktopTasksLimiter) {
return new DesktopTasksController(context, shellInit, shellCommandHandler, shellController,
displayController, shellTaskOrganizer, syncQueue, rootTaskDisplayAreaOrganizer,
dragAndDropController, transitions, enterDesktopTransitionHandler,
exitDesktopTransitionHandler, toggleResizeDesktopTaskTransitionHandler,
dragToDesktopTransitionHandler, desktopModeTaskRepository,
desktopModeLoggerTransitionObserver, launchAdjacentController,
- recentsTransitionHandler, multiInstanceHelper, mainExecutor);
+ recentsTransitionHandler, multiInstanceHelper, mainExecutor, desktopTasksLimiter);
}
@WMSingleton
@Provides
+ static Optional<DesktopTasksLimiter> provideDesktopTasksLimiter(
+ Transitions transitions,
+ @DynamicOverride DesktopModeTaskRepository desktopModeTaskRepository,
+ ShellTaskOrganizer shellTaskOrganizer) {
+ if (!DesktopModeStatus.isEnabled() || !Flags.enableDesktopWindowingTaskLimit()) {
+ return Optional.empty();
+ }
+ return Optional.of(
+ new DesktopTasksLimiter(
+ transitions, desktopModeTaskRepository, shellTaskOrganizer));
+ }
+
+
+ @WMSingleton
+ @Provides
static DragToDesktopTransitionHandler provideDragToDesktopTransitionHandler(
Context context,
Transitions transitions,
- RootTaskDisplayAreaOrganizer rootTaskDisplayAreaOrganizer) {
+ RootTaskDisplayAreaOrganizer rootTaskDisplayAreaOrganizer,
+ Optional<DesktopTasksLimiter> desktopTasksLimiter) {
return new DragToDesktopTransitionHandler(context, transitions,
rootTaskDisplayAreaOrganizer);
}
@@ -541,7 +559,8 @@
@WMSingleton
@Provides
static EnterDesktopTaskTransitionHandler provideEnterDesktopModeTaskTransitionHandler(
- Transitions transitions) {
+ Transitions transitions,
+ Optional<DesktopTasksLimiter> desktopTasksLimiter) {
return new EnterDesktopTaskTransitionHandler(transitions);
}
diff --git a/libs/WindowManager/Shell/src/com/android/wm/shell/desktopmode/DesktopModeStatus.java b/libs/WindowManager/Shell/src/com/android/wm/shell/desktopmode/DesktopModeStatus.java
index 32c22c0..fcddcad 100644
--- a/libs/WindowManager/Shell/src/com/android/wm/shell/desktopmode/DesktopModeStatus.java
+++ b/libs/WindowManager/Shell/src/com/android/wm/shell/desktopmode/DesktopModeStatus.java
@@ -77,6 +77,22 @@
"persist.wm.debug.desktop_mode_enforce_device_restrictions", true);
/**
+ * Default value for {@code MAX_TASK_LIMIT}.
+ */
+ @VisibleForTesting
+ public static final int DEFAULT_MAX_TASK_LIMIT = 4;
+
+ // TODO(b/335131008): add a config-overlay field for the max number of tasks in Desktop Mode
+ /**
+ * Flag declaring the maximum number of Tasks to show in Desktop Mode at any one time.
+ *
+ * <p> The limit does NOT affect Picture-in-Picture, Bubbles, or System Modals (like a screen
+ * recording window, or Bluetooth pairing window).
+ */
+ private static final int MAX_TASK_LIMIT = SystemProperties.getInt(
+ "persist.wm.debug.desktop_max_task_limit", DEFAULT_MAX_TASK_LIMIT);
+
+ /**
* Return {@code true} if desktop windowing is enabled
*/
public static boolean isEnabled() {
@@ -124,6 +140,13 @@
}
/**
+ * Return the maximum limit on the number of Tasks to show in Desktop Mode at any one time.
+ */
+ static int getMaxTaskLimit() {
+ return MAX_TASK_LIMIT;
+ }
+
+ /**
* Return {@code true} if the current device supports desktop mode.
*/
@VisibleForTesting
diff --git a/libs/WindowManager/Shell/src/com/android/wm/shell/desktopmode/DesktopModeTaskRepository.kt b/libs/WindowManager/Shell/src/com/android/wm/shell/desktopmode/DesktopModeTaskRepository.kt
index 50cea01..2d508b2 100644
--- a/libs/WindowManager/Shell/src/com/android/wm/shell/desktopmode/DesktopModeTaskRepository.kt
+++ b/libs/WindowManager/Shell/src/com/android/wm/shell/desktopmode/DesktopModeTaskRepository.kt
@@ -47,6 +47,7 @@
*/
val activeTasks: ArraySet<Int> = ArraySet(),
val visibleTasks: ArraySet<Int> = ArraySet(),
+ val minimizedTasks: ArraySet<Int> = ArraySet(),
var stashed: Boolean = false
)
@@ -202,6 +203,13 @@
}
}
+ /** Return whether the given Task is minimized. */
+ fun isMinimizedTask(taskId: Int): Boolean {
+ return displayData.valueIterator().asSequence().any { data ->
+ data.minimizedTasks.contains(taskId)
+ }
+ }
+
/**
* Check if a task with the given [taskId] is the only active task on its display
*/
@@ -219,6 +227,25 @@
}
/**
+ * Returns whether Desktop Mode is currently showing any tasks, i.e. whether any Desktop Tasks
+ * are visible.
+ */
+ fun isDesktopModeShowing(displayId: Int): Boolean = getVisibleTaskCount(displayId) > 0
+
+ /**
+ * Returns a list of Tasks IDs representing all active non-minimized Tasks on the given display,
+ * ordered from front to back.
+ */
+ fun getActiveNonMinimizedTasksOrderedFrontToBack(displayId: Int): List<Int> {
+ val activeTasks = getActiveTasks(displayId)
+ val allTasksInZOrder = getFreeformTasksInZOrder()
+ return activeTasks
+ // Don't show already minimized Tasks
+ .filter { taskId -> !isMinimizedTask(taskId) }
+ .sortedBy { taskId -> allTasksInZOrder.indexOf(taskId) }
+ }
+
+ /**
* Get a list of freeform tasks, ordered from top-bottom (top at index 0).
*/
// TODO(b/278084491): pass in display id
@@ -255,6 +282,7 @@
val prevCount = getVisibleTaskCount(displayId)
if (visible) {
displayData.getOrCreate(displayId).visibleTasks.add(taskId)
+ unminimizeTask(displayId, taskId)
} else {
displayData[displayId]?.visibleTasks?.remove(taskId)
}
@@ -312,6 +340,24 @@
freeformTasksInZOrder.add(0, taskId)
}
+ /** Mark a Task as minimized. */
+ fun minimizeTask(displayId: Int, taskId: Int) {
+ KtProtoLog.v(
+ WM_SHELL_DESKTOP_MODE,
+ "DesktopModeTaskRepository: minimize Task: display=%d, task=%d",
+ displayId, taskId)
+ displayData.getOrCreate(displayId).minimizedTasks.add(taskId)
+ }
+
+ /** Mark a Task as non-minimized. */
+ fun unminimizeTask(displayId: Int, taskId: Int) {
+ KtProtoLog.v(
+ WM_SHELL_DESKTOP_MODE,
+ "DesktopModeTaskRepository: unminimize Task: display=%d, task=%d",
+ displayId, taskId)
+ displayData[displayId]?.minimizedTasks?.remove(taskId)
+ }
+
/**
* Remove the task from the ordered list.
*/
@@ -325,7 +371,7 @@
boundsBeforeMaximizeByTaskId.remove(taskId)
KtProtoLog.d(
WM_SHELL_DESKTOP_MODE,
- "DesktopTaskRepo: remaining freeform tasks: " + freeformTasksInZOrder.toDumpString()
+ "DesktopTaskRepo: remaining freeform tasks: %s", freeformTasksInZOrder.toDumpString(),
)
}
diff --git a/libs/WindowManager/Shell/src/com/android/wm/shell/desktopmode/DesktopTasksController.kt b/libs/WindowManager/Shell/src/com/android/wm/shell/desktopmode/DesktopTasksController.kt
index 068661a..0a9e5d0 100644
--- a/libs/WindowManager/Shell/src/com/android/wm/shell/desktopmode/DesktopTasksController.kt
+++ b/libs/WindowManager/Shell/src/com/android/wm/shell/desktopmode/DesktopTasksController.kt
@@ -88,6 +88,7 @@
import com.android.wm.shell.windowdecor.extension.isFreeform
import com.android.wm.shell.windowdecor.extension.isFullscreen
import java.io.PrintWriter
+import java.util.Optional
import java.util.concurrent.Executor
import java.util.function.Consumer
@@ -113,7 +114,8 @@
private val launchAdjacentController: LaunchAdjacentController,
private val recentsTransitionHandler: RecentsTransitionHandler,
private val multiInstanceHelper: MultiInstanceHelper,
- @ShellMainThread private val mainExecutor: ShellExecutor
+ @ShellMainThread private val mainExecutor: ShellExecutor,
+ private val desktopTasksLimiter: Optional<DesktopTasksLimiter>,
) : RemoteCallable<DesktopTasksController>, Transitions.TransitionHandler,
DragAndDropController.DragAndDropListener {
@@ -341,11 +343,13 @@
)
exitSplitIfApplicable(wct, task)
// Bring other apps to front first
- bringDesktopAppsToFront(task.displayId, wct)
+ val taskToMinimize =
+ bringDesktopAppsToFrontBeforeShowingNewTask(task.displayId, wct, task.taskId)
addMoveToDesktopChanges(wct, task)
if (Transitions.ENABLE_SHELL_TRANSITIONS) {
- enterDesktopTaskTransitionHandler.moveToDesktop(wct)
+ val transition = enterDesktopTaskTransitionHandler.moveToDesktop(wct)
+ addPendingMinimizeTransition(transition, taskToMinimize)
} else {
shellTaskOrganizer.applyTransaction(wct)
}
@@ -382,10 +386,14 @@
)
val wct = WindowContainerTransaction()
exitSplitIfApplicable(wct, taskInfo)
- bringDesktopAppsToFront(taskInfo.displayId, wct)
+ moveHomeTaskToFront(wct)
+ val taskToMinimize =
+ bringDesktopAppsToFrontBeforeShowingNewTask(
+ taskInfo.displayId, wct, taskInfo.taskId)
addMoveToDesktopChanges(wct, taskInfo)
wct.setBounds(taskInfo.token, freeformBounds)
- dragToDesktopTransitionHandler.finishDragToDesktopTransition(wct)
+ val transition = dragToDesktopTransitionHandler.finishDragToDesktopTransition(wct)
+ transition?.let { addPendingMinimizeTransition(it, taskToMinimize) }
}
/**
@@ -507,8 +515,10 @@
val wct = WindowContainerTransaction()
wct.reorder(taskInfo.token, true)
+ val taskToMinimize = addAndGetMinimizeChangesIfNeeded(taskInfo.displayId, wct, taskInfo)
if (Transitions.ENABLE_SHELL_TRANSITIONS) {
- transitions.startTransition(TRANSIT_TO_FRONT, wct, null /* handler */)
+ val transition = transitions.startTransition(TRANSIT_TO_FRONT, wct, null /* handler */)
+ addPendingMinimizeTransition(transition, taskToMinimize)
} else {
shellTaskOrganizer.applyTransaction(wct)
}
@@ -688,9 +698,20 @@
?: WINDOWING_MODE_UNDEFINED
}
- private fun bringDesktopAppsToFront(displayId: Int, wct: WindowContainerTransaction) {
- KtProtoLog.v(WM_SHELL_DESKTOP_MODE, "DesktopTasksController: bringDesktopAppsToFront")
- val activeTasks = desktopModeTaskRepository.getActiveTasks(displayId)
+ private fun bringDesktopAppsToFrontBeforeShowingNewTask(
+ displayId: Int,
+ wct: WindowContainerTransaction,
+ newTaskIdInFront: Int
+ ): RunningTaskInfo? = bringDesktopAppsToFront(displayId, wct, newTaskIdInFront)
+
+ private fun bringDesktopAppsToFront(
+ displayId: Int,
+ wct: WindowContainerTransaction,
+ newTaskIdInFront: Int? = null
+ ): RunningTaskInfo? {
+ KtProtoLog.v(WM_SHELL_DESKTOP_MODE,
+ "DesktopTasksController: bringDesktopAppsToFront, newTaskIdInFront=%s",
+ newTaskIdInFront ?: "null")
if (Flags.enableDesktopWindowingWallpaperActivity()) {
// Add translucent wallpaper activity to show the wallpaper underneath
@@ -700,13 +721,21 @@
moveHomeTaskToFront(wct)
}
- // Then move other tasks on top of it
- val allTasksInZOrder = desktopModeTaskRepository.getFreeformTasksInZOrder()
- activeTasks
- // Sort descending as the top task is at index 0. It should be ordered to top last
- .sortedByDescending { taskId -> allTasksInZOrder.indexOf(taskId) }
- .mapNotNull { taskId -> shellTaskOrganizer.getRunningTaskInfo(taskId) }
- .forEach { task -> wct.reorder(task.token, true /* onTop */) }
+ val nonMinimizedTasksOrderedFrontToBack =
+ desktopModeTaskRepository.getActiveNonMinimizedTasksOrderedFrontToBack(displayId)
+ // If we're adding a new Task we might need to minimize an old one
+ val taskToMinimize: RunningTaskInfo? =
+ if (newTaskIdInFront != null && desktopTasksLimiter.isPresent) {
+ desktopTasksLimiter.get().getTaskToMinimizeIfNeeded(
+ nonMinimizedTasksOrderedFrontToBack, newTaskIdInFront)
+ } else { null }
+ nonMinimizedTasksOrderedFrontToBack
+ // If there is a Task to minimize, let it stay behind the Home Task
+ .filter { taskId -> taskId != taskToMinimize?.taskId }
+ .mapNotNull { taskId -> shellTaskOrganizer.getRunningTaskInfo(taskId) }
+ .reversed() // Start from the back so the front task is brought forward last
+ .forEach { task -> wct.reorder(task.token, true /* onTop */) }
+ return taskToMinimize
}
private fun moveHomeTaskToFront(wct: WindowContainerTransaction) {
@@ -824,13 +853,13 @@
when {
request.type == TRANSIT_TO_BACK -> handleBackNavigation(task)
// If display has tasks stashed, handle as stashed launch
- task.isStashed -> handleStashedTaskLaunch(task)
+ task.isStashed -> handleStashedTaskLaunch(task, transition)
// Check if the task has a top transparent activity
shouldLaunchAsModal(task) -> handleTransparentTaskLaunch(task)
// Check if fullscreen task should be updated
- task.isFullscreen -> handleFullscreenTaskLaunch(task)
+ task.isFullscreen -> handleFullscreenTaskLaunch(task, transition)
// Check if freeform task should be updated
- task.isFreeform -> handleFreeformTaskLaunch(task)
+ task.isFreeform -> handleFreeformTaskLaunch(task, transition)
else -> {
null
}
@@ -878,10 +907,12 @@
} ?: false
}
- private fun handleFreeformTaskLaunch(task: RunningTaskInfo): WindowContainerTransaction? {
+ private fun handleFreeformTaskLaunch(
+ task: RunningTaskInfo,
+ transition: IBinder
+ ): WindowContainerTransaction? {
KtProtoLog.v(WM_SHELL_DESKTOP_MODE, "DesktopTasksController: handleFreeformTaskLaunch")
- val activeTasks = desktopModeTaskRepository.getActiveTasks(task.displayId)
- if (activeTasks.none { desktopModeTaskRepository.isVisibleTask(it) }) {
+ if (!desktopModeTaskRepository.isDesktopModeShowing(task.displayId)) {
KtProtoLog.d(
WM_SHELL_DESKTOP_MODE,
"DesktopTasksController: switch freeform task to fullscreen oon transition" +
@@ -892,13 +923,23 @@
addMoveToFullscreenChanges(wct, task)
}
}
+ // Desktop Mode is showing and we're launching a new Task - we might need to minimize
+ // a Task.
+ val wct = WindowContainerTransaction()
+ val taskToMinimize = addAndGetMinimizeChangesIfNeeded(task.displayId, wct, task)
+ if (taskToMinimize != null) {
+ addPendingMinimizeTransition(transition, taskToMinimize)
+ return wct
+ }
return null
}
- private fun handleFullscreenTaskLaunch(task: RunningTaskInfo): WindowContainerTransaction? {
+ private fun handleFullscreenTaskLaunch(
+ task: RunningTaskInfo,
+ transition: IBinder
+ ): WindowContainerTransaction? {
KtProtoLog.v(WM_SHELL_DESKTOP_MODE, "DesktopTasksController: handleFullscreenTaskLaunch")
- val activeTasks = desktopModeTaskRepository.getActiveTasks(task.displayId)
- if (activeTasks.any { desktopModeTaskRepository.isVisibleTask(it) }) {
+ if (desktopModeTaskRepository.isDesktopModeShowing(task.displayId)) {
KtProtoLog.d(
WM_SHELL_DESKTOP_MODE,
"DesktopTasksController: switch fullscreen task to freeform on transition" +
@@ -907,21 +948,30 @@
)
return WindowContainerTransaction().also { wct ->
addMoveToDesktopChanges(wct, task)
+ // Desktop Mode is already showing and we're launching a new Task - we might need to
+ // minimize another Task.
+ val taskToMinimize = addAndGetMinimizeChangesIfNeeded(task.displayId, wct, task)
+ addPendingMinimizeTransition(transition, taskToMinimize)
}
}
return null
}
- private fun handleStashedTaskLaunch(task: RunningTaskInfo): WindowContainerTransaction {
+ private fun handleStashedTaskLaunch(
+ task: RunningTaskInfo,
+ transition: IBinder
+ ): WindowContainerTransaction {
KtProtoLog.d(
WM_SHELL_DESKTOP_MODE,
"DesktopTasksController: launch apps with stashed on transition taskId=%d",
task.taskId
)
val wct = WindowContainerTransaction()
- bringDesktopAppsToFront(task.displayId, wct)
+ val taskToMinimize =
+ bringDesktopAppsToFrontBeforeShowingNewTask(task.displayId, wct, task.taskId)
addMoveToDesktopChanges(wct, task)
desktopModeTaskRepository.setStashed(task.displayId, false)
+ addPendingMinimizeTransition(transition, taskToMinimize)
return wct
}
@@ -1002,6 +1052,28 @@
wct.setDensityDpi(taskInfo.token, getDefaultDensityDpi())
}
+ /** Returns the ID of the Task that will be minimized, or null if no task will be minimized. */
+ private fun addAndGetMinimizeChangesIfNeeded(
+ displayId: Int,
+ wct: WindowContainerTransaction,
+ newTaskInfo: RunningTaskInfo
+ ): RunningTaskInfo? {
+ if (!desktopTasksLimiter.isPresent) return null
+ return desktopTasksLimiter.get().addAndGetMinimizeTaskChangesIfNeeded(
+ displayId, wct, newTaskInfo)
+ }
+
+ private fun addPendingMinimizeTransition(
+ transition: IBinder,
+ taskToMinimize: RunningTaskInfo?
+ ) {
+ if (taskToMinimize == null) return
+ desktopTasksLimiter.ifPresent {
+ it.addPendingMinimizeChange(
+ transition, taskToMinimize.displayId, taskToMinimize.taskId)
+ }
+ }
+
/** Enter split by using the focused desktop task in given `displayId`. */
fun enterSplit(
displayId: Int,
diff --git a/libs/WindowManager/Shell/src/com/android/wm/shell/desktopmode/DesktopTasksLimiter.kt b/libs/WindowManager/Shell/src/com/android/wm/shell/desktopmode/DesktopTasksLimiter.kt
new file mode 100644
index 0000000..3404d37
--- /dev/null
+++ b/libs/WindowManager/Shell/src/com/android/wm/shell/desktopmode/DesktopTasksLimiter.kt
@@ -0,0 +1,217 @@
+/*
+ * 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.desktopmode
+
+import android.app.ActivityManager.RunningTaskInfo
+import android.os.IBinder
+import android.view.SurfaceControl
+import android.view.WindowManager.TRANSIT_TO_BACK
+import android.window.TransitionInfo
+import android.window.WindowContainerTransaction
+import androidx.annotation.VisibleForTesting
+import com.android.wm.shell.ShellTaskOrganizer
+import com.android.wm.shell.protolog.ShellProtoLogGroup
+import com.android.wm.shell.transition.Transitions
+import com.android.wm.shell.transition.Transitions.TransitionObserver
+import com.android.wm.shell.util.KtProtoLog
+
+/**
+ * Limits the number of tasks shown in Desktop Mode.
+ *
+ * This class should only be used if
+ * [com.android.window.flags.Flags.enableDesktopWindowingTaskLimit()] is true.
+ */
+class DesktopTasksLimiter (
+ transitions: Transitions,
+ private val taskRepository: DesktopModeTaskRepository,
+ private val shellTaskOrganizer: ShellTaskOrganizer,
+) {
+ private val minimizeTransitionObserver = MinimizeTransitionObserver()
+
+ init {
+ transitions.registerObserver(minimizeTransitionObserver)
+ }
+
+ private data class TaskDetails (val displayId: Int, val taskId: Int)
+
+ // TODO(b/333018485): replace this observer when implementing the minimize-animation
+ private inner class MinimizeTransitionObserver : TransitionObserver {
+ private val mPendingTransitionTokensAndTasks = mutableMapOf<IBinder, TaskDetails>()
+
+ fun addPendingTransitionToken(transition: IBinder, taskDetails: TaskDetails) {
+ mPendingTransitionTokensAndTasks[transition] = taskDetails
+ }
+
+ override fun onTransitionReady(
+ transition: IBinder,
+ info: TransitionInfo,
+ startTransaction: SurfaceControl.Transaction,
+ finishTransaction: SurfaceControl.Transaction
+ ) {
+ val taskToMinimize = mPendingTransitionTokensAndTasks.remove(transition) ?: return
+
+ if (!taskRepository.isActiveTask(taskToMinimize.taskId)) return
+
+ if (!isTaskReorderedToBackOrInvisible(info, taskToMinimize)) {
+ KtProtoLog.v(
+ ShellProtoLogGroup.WM_SHELL_DESKTOP_MODE,
+ "DesktopTasksLimiter: task %d is not reordered to back nor invis",
+ taskToMinimize.taskId)
+ return
+ }
+ this@DesktopTasksLimiter.markTaskMinimized(
+ taskToMinimize.displayId, taskToMinimize.taskId)
+ }
+
+ /**
+ * Returns whether the given Task is being reordered to the back in the given transition, or
+ * is already invisible.
+ *
+ * <p> This check can be used to double-check that a task was indeed minimized before
+ * marking it as such.
+ */
+ private fun isTaskReorderedToBackOrInvisible(
+ info: TransitionInfo,
+ taskDetails: TaskDetails
+ ): Boolean {
+ val taskChange = info.changes.find { change ->
+ change.taskInfo?.taskId == taskDetails.taskId }
+ if (taskChange == null) {
+ return !taskRepository.isVisibleTask(taskDetails.taskId)
+ }
+ return taskChange.mode == TRANSIT_TO_BACK
+ }
+
+ override fun onTransitionStarting(transition: IBinder) {}
+
+ override fun onTransitionMerged(merged: IBinder, playing: IBinder) {
+ mPendingTransitionTokensAndTasks.remove(merged)?.let { taskToTransfer ->
+ mPendingTransitionTokensAndTasks[playing] = taskToTransfer
+ }
+ }
+
+ override fun onTransitionFinished(transition: IBinder, aborted: Boolean) {
+ KtProtoLog.v(
+ ShellProtoLogGroup.WM_SHELL_DESKTOP_MODE,
+ "DesktopTasksLimiter: transition %s finished", transition)
+ mPendingTransitionTokensAndTasks.remove(transition)
+ }
+ }
+
+ /**
+ * Mark a task as minimized, this should only be done after the corresponding transition has
+ * finished so we don't minimize the task if the transition fails.
+ */
+ private fun markTaskMinimized(displayId: Int, taskId: Int) {
+ KtProtoLog.v(
+ ShellProtoLogGroup.WM_SHELL_DESKTOP_MODE,
+ "DesktopTasksLimiter: marking %d as minimized", taskId)
+ taskRepository.minimizeTask(displayId, taskId)
+ }
+
+ /**
+ * Add a minimize-transition to [wct] if adding [newFrontTaskInfo] brings us over the task
+ * limit.
+ *
+ * @param transition the transition that the minimize-transition will be appended to, or null if
+ * the transition will be started later.
+ * @return the ID of the minimized task, or null if no task is being minimized.
+ */
+ fun addAndGetMinimizeTaskChangesIfNeeded(
+ displayId: Int,
+ wct: WindowContainerTransaction,
+ newFrontTaskInfo: RunningTaskInfo,
+ ): RunningTaskInfo? {
+ KtProtoLog.v(
+ ShellProtoLogGroup.WM_SHELL_DESKTOP_MODE,
+ "DesktopTasksLimiter: addMinimizeBackTaskChangesIfNeeded, newFrontTask=%d",
+ newFrontTaskInfo.taskId)
+ val newTaskListOrderedFrontToBack = createOrderedTaskListWithGivenTaskInFront(
+ taskRepository.getActiveNonMinimizedTasksOrderedFrontToBack(displayId),
+ newFrontTaskInfo.taskId)
+ val taskToMinimize = getTaskToMinimizeIfNeeded(newTaskListOrderedFrontToBack)
+ if (taskToMinimize != null) {
+ wct.reorder(taskToMinimize.token, false /* onTop */)
+ return taskToMinimize
+ }
+ return null
+ }
+
+ /**
+ * Add a pending minimize transition change, to update the list of minimized apps once the
+ * transition goes through.
+ */
+ fun addPendingMinimizeChange(transition: IBinder, displayId: Int, taskId: Int) {
+ minimizeTransitionObserver.addPendingTransitionToken(
+ transition, TaskDetails(displayId, taskId))
+ }
+
+ /**
+ * Returns the maximum number of tasks that should ever be displayed at the same time in Desktop
+ * Mode.
+ */
+ fun getMaxTaskLimit(): Int = DesktopModeStatus.getMaxTaskLimit()
+
+ /**
+ * Returns the Task to minimize given 1. a list of visible tasks ordered from front to back and
+ * 2. a new task placed in front of all the others.
+ */
+ fun getTaskToMinimizeIfNeeded(
+ visibleFreeformTaskIdsOrderedFrontToBack: List<Int>,
+ newTaskIdInFront: Int
+ ): RunningTaskInfo? {
+ return getTaskToMinimizeIfNeeded(
+ createOrderedTaskListWithGivenTaskInFront(
+ visibleFreeformTaskIdsOrderedFrontToBack, newTaskIdInFront))
+ }
+
+ /** Returns the Task to minimize given a list of visible tasks ordered from front to back. */
+ fun getTaskToMinimizeIfNeeded(
+ visibleFreeformTaskIdsOrderedFrontToBack: List<Int>
+ ): RunningTaskInfo? {
+ if (visibleFreeformTaskIdsOrderedFrontToBack.size <= getMaxTaskLimit()) {
+ KtProtoLog.v(
+ ShellProtoLogGroup.WM_SHELL_DESKTOP_MODE,
+ "DesktopTasksLimiter: no need to minimize; tasks below limit")
+ // No need to minimize anything
+ return null
+ }
+ val taskToMinimize =
+ shellTaskOrganizer.getRunningTaskInfo(
+ visibleFreeformTaskIdsOrderedFrontToBack.last())
+ if (taskToMinimize == null) {
+ KtProtoLog.e(
+ ShellProtoLogGroup.WM_SHELL_DESKTOP_MODE,
+ "DesktopTasksLimiter: taskToMinimize == null")
+ return null
+ }
+ return taskToMinimize
+ }
+
+ private fun createOrderedTaskListWithGivenTaskInFront(
+ existingTaskIdsOrderedFrontToBack: List<Int>,
+ newTaskId: Int
+ ): List<Int> {
+ return listOf(newTaskId) +
+ existingTaskIdsOrderedFrontToBack.filter { taskId -> taskId != newTaskId }
+ }
+
+ @VisibleForTesting
+ fun getTransitionObserver(): TransitionObserver {
+ return minimizeTransitionObserver
+ }
+}
\ No newline at end of file
diff --git a/libs/WindowManager/Shell/src/com/android/wm/shell/desktopmode/DragToDesktopTransitionHandler.kt b/libs/WindowManager/Shell/src/com/android/wm/shell/desktopmode/DragToDesktopTransitionHandler.kt
index 0061d03..e341f2d 100644
--- a/libs/WindowManager/Shell/src/com/android/wm/shell/desktopmode/DragToDesktopTransitionHandler.kt
+++ b/libs/WindowManager/Shell/src/com/android/wm/shell/desktopmode/DragToDesktopTransitionHandler.kt
@@ -150,20 +150,20 @@
* windowing mode changes to the dragged task. This is called when the dragged task is released
* inside the desktop drop zone.
*/
- fun finishDragToDesktopTransition(wct: WindowContainerTransaction) {
+ fun finishDragToDesktopTransition(wct: WindowContainerTransaction): IBinder? {
if (!inProgress) {
// Don't attempt to finish a drag to desktop transition since there is no transition in
// progress which means that the drag to desktop transition was never successfully
// started.
- return
+ return null
}
if (requireTransitionState().startAborted) {
// Don't attempt to complete the drag-to-desktop since the start transition didn't
// succeed as expected. Just reset the state as if nothing happened.
clearState()
- return
+ return null
}
- transitions.startTransition(TRANSIT_DESKTOP_MODE_END_DRAG_TO_DESKTOP, wct, this)
+ return transitions.startTransition(TRANSIT_DESKTOP_MODE_END_DRAG_TO_DESKTOP, wct, this)
}
/**
diff --git a/libs/WindowManager/Shell/src/com/android/wm/shell/desktopmode/EnterDesktopTaskTransitionHandler.java b/libs/WindowManager/Shell/src/com/android/wm/shell/desktopmode/EnterDesktopTaskTransitionHandler.java
index 79bb540..74b8f83 100644
--- a/libs/WindowManager/Shell/src/com/android/wm/shell/desktopmode/EnterDesktopTaskTransitionHandler.java
+++ b/libs/WindowManager/Shell/src/com/android/wm/shell/desktopmode/EnterDesktopTaskTransitionHandler.java
@@ -78,10 +78,12 @@
/**
* Starts Transition of type TRANSIT_MOVE_TO_DESKTOP
* @param wct WindowContainerTransaction for transition
+ * @return the token representing the started transition
*/
- public void moveToDesktop(@NonNull WindowContainerTransaction wct) {
+ public IBinder moveToDesktop(@NonNull WindowContainerTransaction wct) {
final IBinder token = mTransitions.startTransition(TRANSIT_MOVE_TO_DESKTOP, wct, this);
mPendingTransitionTokens.add(token);
+ return token;
}
@Override
diff --git a/libs/WindowManager/Shell/src/com/android/wm/shell/freeform/FreeformTaskListener.java b/libs/WindowManager/Shell/src/com/android/wm/shell/freeform/FreeformTaskListener.java
index f2bdcae..6fea203 100644
--- a/libs/WindowManager/Shell/src/com/android/wm/shell/freeform/FreeformTaskListener.java
+++ b/libs/WindowManager/Shell/src/com/android/wm/shell/freeform/FreeformTaskListener.java
@@ -95,6 +95,7 @@
if (DesktopModeStatus.isEnabled()) {
mDesktopModeTaskRepository.ifPresent(repository -> {
repository.addOrMoveFreeformTaskToTop(taskInfo.taskId);
+ repository.unminimizeTask(taskInfo.displayId, taskInfo.taskId);
if (taskInfo.isVisible) {
if (repository.addActiveTask(taskInfo.displayId, taskInfo.taskId)) {
ProtoLog.v(ShellProtoLogGroup.WM_SHELL_DESKTOP_MODE,
@@ -116,6 +117,7 @@
if (DesktopModeStatus.isEnabled()) {
mDesktopModeTaskRepository.ifPresent(repository -> {
repository.removeFreeformTask(taskInfo.taskId);
+ repository.unminimizeTask(taskInfo.displayId, taskInfo.taskId);
if (repository.removeActiveTask(taskInfo.taskId)) {
ProtoLog.v(ShellProtoLogGroup.WM_SHELL_DESKTOP_MODE,
"Removing active freeform task: #%d", taskInfo.taskId);
@@ -162,6 +164,7 @@
if (DesktopModeStatus.isEnabled() && taskInfo.isFocused) {
mDesktopModeTaskRepository.ifPresent(repository -> {
repository.addOrMoveFreeformTaskToTop(taskInfo.taskId);
+ repository.unminimizeTask(taskInfo.displayId, taskInfo.taskId);
});
}
}
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 4c47737..eb845db 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 @@
.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 d60f5a6..10b7619 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 @@
@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 9adb67c..2d6ba6e 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 @@
.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 @@
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 0000000..73a5a23
--- /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 0000000..4c781d3
--- /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 0000000..d99d875
--- /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 0000000..0403b4f
--- /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 0000000..345bc5e
--- /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 9c1a88e..82c070c 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 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 @@
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 @@
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 @@
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 @@
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 @@
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 fef81af..afae653 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.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 @@
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 dd358e7..cd3e8cb 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.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 @@
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 4f261cd..5209d0e 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.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 @@
}
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 38d6ea1..0231612 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.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 @@
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 81ba4b3..94e168e 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 @@
}
@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/WindowManager/Shell/tests/unittest/src/com/android/wm/shell/desktopmode/DesktopModeTaskRepositoryTest.kt b/libs/WindowManager/Shell/tests/unittest/src/com/android/wm/shell/desktopmode/DesktopModeTaskRepositoryTest.kt
index b2b54ac..dca7be1 100644
--- a/libs/WindowManager/Shell/tests/unittest/src/com/android/wm/shell/desktopmode/DesktopModeTaskRepositoryTest.kt
+++ b/libs/WindowManager/Shell/tests/unittest/src/com/android/wm/shell/desktopmode/DesktopModeTaskRepositoryTest.kt
@@ -483,6 +483,102 @@
assertThat(repo.removeBoundsBeforeMaximize(taskId)).isNull()
}
+ @Test
+ fun minimizeTaskNotCalled_noTasksMinimized() {
+ assertThat(repo.isMinimizedTask(taskId = 0)).isFalse()
+ assertThat(repo.isMinimizedTask(taskId = 1)).isFalse()
+ }
+
+ @Test
+ fun minimizeTask_onlyThatTaskIsMinimized() {
+ repo.minimizeTask(displayId = 0, taskId = 0)
+
+ assertThat(repo.isMinimizedTask(taskId = 0)).isTrue()
+ assertThat(repo.isMinimizedTask(taskId = 1)).isFalse()
+ assertThat(repo.isMinimizedTask(taskId = 2)).isFalse()
+ }
+
+ @Test
+ fun unminimizeTask_taskNoLongerMinimized() {
+ repo.minimizeTask(displayId = 0, taskId = 0)
+ repo.unminimizeTask(displayId = 0, taskId = 0)
+
+ assertThat(repo.isMinimizedTask(taskId = 0)).isFalse()
+ assertThat(repo.isMinimizedTask(taskId = 1)).isFalse()
+ assertThat(repo.isMinimizedTask(taskId = 2)).isFalse()
+ }
+
+ @Test
+ fun unminimizeTask_nonExistentTask_doesntCrash() {
+ repo.unminimizeTask(displayId = 0, taskId = 0)
+
+ assertThat(repo.isMinimizedTask(taskId = 0)).isFalse()
+ assertThat(repo.isMinimizedTask(taskId = 1)).isFalse()
+ assertThat(repo.isMinimizedTask(taskId = 2)).isFalse()
+ }
+
+
+ @Test
+ fun updateVisibleFreeformTasks_toVisible_taskIsUnminimized() {
+ repo.minimizeTask(displayId = 10, taskId = 2)
+
+ repo.updateVisibleFreeformTasks(displayId = 10, taskId = 2, visible = true)
+
+ assertThat(repo.isMinimizedTask(taskId = 2)).isFalse()
+ }
+
+ @Test
+ fun isDesktopModeShowing_noActiveTasks_returnsFalse() {
+ assertThat(repo.isDesktopModeShowing(displayId = 0)).isFalse()
+ }
+
+ @Test
+ fun isDesktopModeShowing_noTasksVisible_returnsFalse() {
+ repo.addActiveTask(displayId = 0, taskId = 1)
+ repo.addActiveTask(displayId = 0, taskId = 2)
+
+ assertThat(repo.isDesktopModeShowing(displayId = 0)).isFalse()
+ }
+
+ @Test
+ fun isDesktopModeShowing_tasksActiveAndVisible_returnsTrue() {
+ repo.addActiveTask(displayId = 0, taskId = 1)
+ repo.addActiveTask(displayId = 0, taskId = 2)
+ repo.updateVisibleFreeformTasks(displayId = 0, taskId = 1, visible = true)
+
+ assertThat(repo.isDesktopModeShowing(displayId = 0)).isTrue()
+ }
+
+ @Test
+ fun getActiveNonMinimizedTasksOrderedFrontToBack_returnsFreeformTasksInCorrectOrder() {
+ repo.addActiveTask(displayId = 0, taskId = 1)
+ repo.addActiveTask(displayId = 0, taskId = 2)
+ repo.addActiveTask(displayId = 0, taskId = 3)
+ // The front-most task will be the one added last through addOrMoveFreeformTaskToTop
+ repo.addOrMoveFreeformTaskToTop(taskId = 3)
+ repo.addOrMoveFreeformTaskToTop(taskId = 2)
+ repo.addOrMoveFreeformTaskToTop(taskId = 1)
+
+ assertThat(repo.getActiveNonMinimizedTasksOrderedFrontToBack(displayId = 0)).isEqualTo(
+ listOf(1, 2, 3))
+ }
+
+ @Test
+ fun getActiveNonMinimizedTasksOrderedFrontToBack_minimizedTaskNotIncluded() {
+ repo.addActiveTask(displayId = 0, taskId = 1)
+ repo.addActiveTask(displayId = 0, taskId = 2)
+ repo.addActiveTask(displayId = 0, taskId = 3)
+ // The front-most task will be the one added last through addOrMoveFreeformTaskToTop
+ repo.addOrMoveFreeformTaskToTop(taskId = 3)
+ repo.addOrMoveFreeformTaskToTop(taskId = 2)
+ repo.addOrMoveFreeformTaskToTop(taskId = 1)
+ repo.minimizeTask(displayId = 0, taskId = 2)
+
+ assertThat(repo.getActiveNonMinimizedTasksOrderedFrontToBack(displayId = 0)).isEqualTo(
+ listOf(1, 3))
+ }
+
+
class TestListener : DesktopModeTaskRepository.ActiveTasksListener {
var activeChangesOnDefaultDisplay = 0
var activeChangesOnSecondaryDisplay = 0
diff --git a/libs/WindowManager/Shell/tests/unittest/src/com/android/wm/shell/desktopmode/DesktopTasksControllerTest.kt b/libs/WindowManager/Shell/tests/unittest/src/com/android/wm/shell/desktopmode/DesktopTasksControllerTest.kt
index 64f6041..ad4b720 100644
--- a/libs/WindowManager/Shell/tests/unittest/src/com/android/wm/shell/desktopmode/DesktopTasksControllerTest.kt
+++ b/libs/WindowManager/Shell/tests/unittest/src/com/android/wm/shell/desktopmode/DesktopTasksControllerTest.kt
@@ -105,6 +105,7 @@
import org.mockito.kotlin.atLeastOnce
import org.mockito.kotlin.capture
import org.mockito.quality.Strictness
+import java.util.Optional
import org.mockito.Mockito.`when` as whenever
/**
@@ -145,6 +146,7 @@
private lateinit var controller: DesktopTasksController
private lateinit var shellInit: ShellInit
private lateinit var desktopModeTaskRepository: DesktopModeTaskRepository
+ private lateinit var desktopTasksLimiter: DesktopTasksLimiter
private lateinit var recentsTransitionStateListener: RecentsTransitionStateListener
private val shellExecutor = TestShellExecutor()
@@ -160,9 +162,12 @@
shellInit = Mockito.spy(ShellInit(testExecutor))
desktopModeTaskRepository = DesktopModeTaskRepository()
+ desktopTasksLimiter =
+ DesktopTasksLimiter(transitions, desktopModeTaskRepository, shellTaskOrganizer)
whenever(shellTaskOrganizer.getRunningTasks(anyInt())).thenAnswer { runningTasks }
whenever(transitions.startTransition(anyInt(), any(), isNull())).thenAnswer { Binder() }
+ whenever(enterDesktopTransitionHandler.moveToDesktop(any())).thenAnswer { Binder() }
whenever(displayController.getDisplayLayout(anyInt())).thenReturn(displayLayout)
whenever(displayLayout.getStableBounds(any())).thenAnswer { i ->
(i.arguments.first() as Rect).set(STABLE_BOUNDS)
@@ -203,7 +208,8 @@
launchAdjacentController,
recentsTransitionHandler,
multiInstanceHelper,
- shellExecutor
+ shellExecutor,
+ Optional.of(desktopTasksLimiter),
)
}
@@ -409,6 +415,25 @@
}
@Test
+ fun showDesktopApps_dontReorderMinimizedTask() {
+ val homeTask = setUpHomeTask()
+ val freeformTask = setUpFreeformTask()
+ val minimizedTask = setUpFreeformTask()
+ markTaskHidden(freeformTask)
+ markTaskHidden(minimizedTask)
+ desktopModeTaskRepository.minimizeTask(DEFAULT_DISPLAY, minimizedTask.taskId)
+
+ controller.showDesktopApps(DEFAULT_DISPLAY, RemoteTransition(TestRemoteTransition()))
+
+ val wct = getLatestWct(
+ type = TRANSIT_TO_FRONT, handlerClass = OneShotRemoteHandler::class.java)
+ assertThat(wct.hierarchyOps).hasSize(2)
+ // Reorder home and freeform task to top, don't reorder the minimized task
+ wct.assertReorderAt(index = 0, homeTask, toTop = true)
+ wct.assertReorderAt(index = 1, freeformTask, toTop = true)
+ }
+
+ @Test
fun getVisibleTaskCount_noTasks_returnsZero() {
assertThat(controller.getVisibleTaskCount(DEFAULT_DISPLAY)).isEqualTo(0)
}
@@ -606,6 +631,24 @@
}
@Test
+ fun moveToDesktop_bringsTasksOverLimit_dontShowBackTask() {
+ val taskLimit = desktopTasksLimiter.getMaxTaskLimit()
+ val homeTask = setUpHomeTask()
+ val freeformTasks = (1..taskLimit).map { _ -> setUpFreeformTask() }
+ val newTask = setUpFullscreenTask()
+
+ controller.moveToDesktop(newTask)
+
+ val wct = getLatestMoveToDesktopWct()
+ assertThat(wct.hierarchyOps.size).isEqualTo(taskLimit + 1) // visible tasks + home
+ wct.assertReorderAt(0, homeTask)
+ for (i in 1..<taskLimit) { // Skipping freeformTasks[0]
+ wct.assertReorderAt(index = i, task = freeformTasks[i])
+ }
+ wct.assertReorderAt(taskLimit, newTask)
+ }
+
+ @Test
fun moveToFullscreen_tdaFullscreen_windowingModeSetToUndefined() {
val task = setUpFreeformTask()
val tda = rootTaskDisplayAreaOrganizer.getDisplayAreaInfo(DEFAULT_DISPLAY)!!
@@ -659,6 +702,20 @@
}
@Test
+ fun moveTaskToFront_bringsTasksOverLimit_minimizesBackTask() {
+ val taskLimit = desktopTasksLimiter.getMaxTaskLimit()
+ setUpHomeTask()
+ val freeformTasks = (1..taskLimit + 1).map { _ -> setUpFreeformTask() }
+
+ controller.moveTaskToFront(freeformTasks[0])
+
+ val wct = getLatestWct(type = TRANSIT_TO_FRONT)
+ assertThat(wct.hierarchyOps.size).isEqualTo(2) // move-to-front + minimize
+ wct.assertReorderAt(0, freeformTasks[0], toTop = true)
+ wct.assertReorderAt(1, freeformTasks[1], toTop = false)
+ }
+
+ @Test
fun moveToNextDisplay_noOtherDisplays() {
whenever(rootTaskDisplayAreaOrganizer.displayIds).thenReturn(intArrayOf(DEFAULT_DISPLAY))
val task = setUpFreeformTask(displayId = DEFAULT_DISPLAY)
@@ -777,6 +834,38 @@
}
@Test
+ fun handleRequest_fullscreenTaskToFreeform_underTaskLimit_dontMinimize() {
+ assumeTrue(ENABLE_SHELL_TRANSITIONS)
+
+ val freeformTask = setUpFreeformTask()
+ markTaskVisible(freeformTask)
+ val fullscreenTask = createFullscreenTask()
+
+ val wct = controller.handleRequest(Binder(), createTransition(fullscreenTask))
+
+ // Make sure we only reorder the new task to top (we don't reorder the old task to bottom)
+ assertThat(wct?.hierarchyOps?.size).isEqualTo(1)
+ wct!!.assertReorderAt(0, fullscreenTask, toTop = true)
+ }
+
+ @Test
+ fun handleRequest_fullscreenTaskToFreeform_bringsTasksOverLimit_otherTaskIsMinimized() {
+ assumeTrue(ENABLE_SHELL_TRANSITIONS)
+
+ val taskLimit = desktopTasksLimiter.getMaxTaskLimit()
+ val freeformTasks = (1..taskLimit).map { _ -> setUpFreeformTask() }
+ freeformTasks.forEach { markTaskVisible(it) }
+ val fullscreenTask = createFullscreenTask()
+
+ val wct = controller.handleRequest(Binder(), createTransition(fullscreenTask))
+
+ // Make sure we reorder the new task to top, and the back task to the bottom
+ assertThat(wct!!.hierarchyOps.size).isEqualTo(2)
+ wct!!.assertReorderAt(0, fullscreenTask, toTop = true)
+ wct!!.assertReorderAt(1, freeformTasks[0], toTop = false)
+ }
+
+ @Test
fun handleRequest_fullscreenTask_freeformNotVisible_returnNull() {
assumeTrue(ENABLE_SHELL_TRANSITIONS)
@@ -841,6 +930,22 @@
}
@Test
+ fun handleRequest_freeformTask_freeformVisible_aboveTaskLimit_minimize() {
+ assumeTrue(ENABLE_SHELL_TRANSITIONS)
+
+ val taskLimit = desktopTasksLimiter.getMaxTaskLimit()
+ val freeformTasks = (1..taskLimit).map { _ -> setUpFreeformTask() }
+ freeformTasks.forEach { markTaskVisible(it) }
+ val newFreeformTask = createFreeformTask()
+
+ val wct =
+ controller.handleRequest(Binder(), createTransition(newFreeformTask, TRANSIT_OPEN))
+
+ assertThat(wct?.hierarchyOps?.size).isEqualTo(1)
+ wct!!.assertReorderAt(0, freeformTasks[0], toTop = false) // Reorder to the bottom
+ }
+
+ @Test
fun handleRequest_freeformTask_freeformNotVisible_returnSwitchToFullscreenWCT() {
assumeTrue(ENABLE_SHELL_TRANSITIONS)
@@ -1352,11 +1457,16 @@
.isGreaterThan(index)
}
-private fun WindowContainerTransaction.assertReorderAt(index: Int, task: RunningTaskInfo) {
+private fun WindowContainerTransaction.assertReorderAt(
+ index: Int,
+ task: RunningTaskInfo,
+ toTop: Boolean? = null
+) {
assertIndexInBounds(index)
val op = hierarchyOps[index]
assertThat(op.type).isEqualTo(HIERARCHY_OP_TYPE_REORDER)
assertThat(op.container).isEqualTo(task.token.asBinder())
+ toTop?.let { assertThat(op.toTop).isEqualTo(it) }
}
private fun WindowContainerTransaction.assertReorderSequence(vararg tasks: RunningTaskInfo) {
diff --git a/libs/WindowManager/Shell/tests/unittest/src/com/android/wm/shell/desktopmode/DesktopTasksLimiterTest.kt b/libs/WindowManager/Shell/tests/unittest/src/com/android/wm/shell/desktopmode/DesktopTasksLimiterTest.kt
new file mode 100644
index 0000000..38ea034
--- /dev/null
+++ b/libs/WindowManager/Shell/tests/unittest/src/com/android/wm/shell/desktopmode/DesktopTasksLimiterTest.kt
@@ -0,0 +1,317 @@
+/*
+ * 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.desktopmode
+
+import android.app.ActivityManager.RunningTaskInfo
+import android.os.Binder
+import android.platform.test.flag.junit.SetFlagsRule
+import android.testing.AndroidTestingRunner
+import android.view.Display.DEFAULT_DISPLAY
+import android.view.WindowManager.TRANSIT_OPEN
+import android.view.WindowManager.TRANSIT_TO_BACK
+import android.window.WindowContainerTransaction
+import android.window.WindowContainerTransaction.HierarchyOp.HIERARCHY_OP_TYPE_REORDER
+import androidx.test.filters.SmallTest
+import com.android.dx.mockito.inline.extended.ExtendedMockito
+import com.android.dx.mockito.inline.extended.StaticMockitoSession
+import com.android.wm.shell.ShellTaskOrganizer
+import com.android.wm.shell.ShellTestCase
+import com.android.wm.shell.desktopmode.DesktopTestHelpers.Companion.createFreeformTask
+import com.android.wm.shell.transition.TransitionInfoBuilder
+import com.android.wm.shell.transition.Transitions
+import com.android.wm.shell.util.StubTransaction
+import com.google.common.truth.Truth.assertThat
+import org.junit.After
+import org.junit.Before
+import org.junit.Rule
+import org.junit.Test
+import org.junit.runner.RunWith
+import org.mockito.Mock
+import org.mockito.Mockito.`when`
+import org.mockito.quality.Strictness
+
+
+/**
+ * Test class for {@link DesktopTasksLimiter}
+ *
+ * Usage: atest WMShellUnitTests:DesktopTasksLimiterTest
+ */
+@SmallTest
+@RunWith(AndroidTestingRunner::class)
+class DesktopTasksLimiterTest : ShellTestCase() {
+
+ @JvmField
+ @Rule
+ val setFlagsRule = SetFlagsRule()
+
+ @Mock lateinit var shellTaskOrganizer: ShellTaskOrganizer
+ @Mock lateinit var transitions: Transitions
+
+ private lateinit var mockitoSession: StaticMockitoSession
+ private lateinit var desktopTasksLimiter: DesktopTasksLimiter
+ private lateinit var desktopTaskRepo: DesktopModeTaskRepository
+
+ @Before
+ fun setUp() {
+ mockitoSession = ExtendedMockito.mockitoSession().strictness(Strictness.LENIENT)
+ .spyStatic(DesktopModeStatus::class.java).startMocking()
+ `when`(DesktopModeStatus.isEnabled()).thenReturn(true)
+
+ desktopTaskRepo = DesktopModeTaskRepository()
+
+ desktopTasksLimiter = DesktopTasksLimiter(
+ transitions, desktopTaskRepo, shellTaskOrganizer)
+ }
+
+ @After
+ fun tearDown() {
+ mockitoSession.finishMocking()
+ }
+
+ // Currently, the task limit can be overridden through an adb flag. This test ensures the limit
+ // hasn't been overridden.
+ @Test
+ fun getMaxTaskLimit_isSameAsConstant() {
+ assertThat(desktopTasksLimiter.getMaxTaskLimit()).isEqualTo(
+ DesktopModeStatus.DEFAULT_MAX_TASK_LIMIT)
+ }
+
+ @Test
+ fun addPendingMinimizeTransition_taskIsNotMinimized() {
+ val task = setUpFreeformTask()
+ markTaskHidden(task)
+
+ desktopTasksLimiter.addPendingMinimizeChange(Binder(), displayId = 1, taskId = task.taskId)
+
+ assertThat(desktopTaskRepo.isMinimizedTask(taskId = task.taskId)).isFalse()
+ }
+
+ @Test
+ fun onTransitionReady_noPendingTransition_taskIsNotMinimized() {
+ val task = setUpFreeformTask()
+ markTaskHidden(task)
+
+ desktopTasksLimiter.getTransitionObserver().onTransitionReady(
+ Binder() /* transition */,
+ TransitionInfoBuilder(TRANSIT_OPEN).addChange(TRANSIT_TO_BACK, task).build(),
+ StubTransaction() /* startTransaction */,
+ StubTransaction() /* finishTransaction */)
+
+ assertThat(desktopTaskRepo.isMinimizedTask(taskId = task.taskId)).isFalse()
+ }
+
+ @Test
+ fun onTransitionReady_differentPendingTransition_taskIsNotMinimized() {
+ val pendingTransition = Binder()
+ val taskTransition = Binder()
+ val task = setUpFreeformTask()
+ markTaskHidden(task)
+ desktopTasksLimiter.addPendingMinimizeChange(
+ pendingTransition, displayId = DEFAULT_DISPLAY, taskId = task.taskId)
+
+ desktopTasksLimiter.getTransitionObserver().onTransitionReady(
+ taskTransition /* transition */,
+ TransitionInfoBuilder(TRANSIT_OPEN).addChange(TRANSIT_TO_BACK, task).build(),
+ StubTransaction() /* startTransaction */,
+ StubTransaction() /* finishTransaction */)
+
+ assertThat(desktopTaskRepo.isMinimizedTask(taskId = task.taskId)).isFalse()
+ }
+
+ @Test
+ fun onTransitionReady_pendingTransition_noTaskChange_taskVisible_taskIsNotMinimized() {
+ val transition = Binder()
+ val task = setUpFreeformTask()
+ markTaskVisible(task)
+ desktopTasksLimiter.addPendingMinimizeChange(
+ transition, displayId = DEFAULT_DISPLAY, taskId = task.taskId)
+
+ desktopTasksLimiter.getTransitionObserver().onTransitionReady(
+ transition,
+ TransitionInfoBuilder(TRANSIT_OPEN).build(),
+ StubTransaction() /* startTransaction */,
+ StubTransaction() /* finishTransaction */)
+
+ assertThat(desktopTaskRepo.isMinimizedTask(taskId = task.taskId)).isFalse()
+ }
+
+ @Test
+ fun onTransitionReady_pendingTransition_noTaskChange_taskInvisible_taskIsMinimized() {
+ val transition = Binder()
+ val task = setUpFreeformTask()
+ markTaskHidden(task)
+ desktopTasksLimiter.addPendingMinimizeChange(
+ transition, displayId = DEFAULT_DISPLAY, taskId = task.taskId)
+
+ desktopTasksLimiter.getTransitionObserver().onTransitionReady(
+ transition,
+ TransitionInfoBuilder(TRANSIT_OPEN).build(),
+ StubTransaction() /* startTransaction */,
+ StubTransaction() /* finishTransaction */)
+
+ assertThat(desktopTaskRepo.isMinimizedTask(taskId = task.taskId)).isTrue()
+ }
+
+ @Test
+ fun onTransitionReady_pendingTransition_changeTaskToBack_taskIsMinimized() {
+ val transition = Binder()
+ val task = setUpFreeformTask()
+ desktopTasksLimiter.addPendingMinimizeChange(
+ transition, displayId = DEFAULT_DISPLAY, taskId = task.taskId)
+
+ desktopTasksLimiter.getTransitionObserver().onTransitionReady(
+ transition,
+ TransitionInfoBuilder(TRANSIT_OPEN).addChange(TRANSIT_TO_BACK, task).build(),
+ StubTransaction() /* startTransaction */,
+ StubTransaction() /* finishTransaction */)
+
+ assertThat(desktopTaskRepo.isMinimizedTask(taskId = task.taskId)).isTrue()
+ }
+
+ @Test
+ fun onTransitionReady_transitionMergedFromPending_taskIsMinimized() {
+ val mergedTransition = Binder()
+ val newTransition = Binder()
+ val task = setUpFreeformTask()
+ desktopTasksLimiter.addPendingMinimizeChange(
+ mergedTransition, displayId = DEFAULT_DISPLAY, taskId = task.taskId)
+ desktopTasksLimiter.getTransitionObserver().onTransitionMerged(
+ mergedTransition, newTransition)
+
+ desktopTasksLimiter.getTransitionObserver().onTransitionReady(
+ newTransition,
+ TransitionInfoBuilder(TRANSIT_OPEN).addChange(TRANSIT_TO_BACK, task).build(),
+ StubTransaction() /* startTransaction */,
+ StubTransaction() /* finishTransaction */)
+
+ assertThat(desktopTaskRepo.isMinimizedTask(taskId = task.taskId)).isTrue()
+ }
+
+ @Test
+ fun addAndGetMinimizeTaskChangesIfNeeded_tasksWithinLimit_noTaskMinimized() {
+ val taskLimit = desktopTasksLimiter.getMaxTaskLimit()
+ (1..<taskLimit).forEach { _ -> setUpFreeformTask() }
+
+ val wct = WindowContainerTransaction()
+ val minimizedTaskId =
+ desktopTasksLimiter.addAndGetMinimizeTaskChangesIfNeeded(
+ displayId = DEFAULT_DISPLAY,
+ wct = wct,
+ newFrontTaskInfo = setUpFreeformTask())
+
+ assertThat(minimizedTaskId).isNull()
+ assertThat(wct.hierarchyOps).isEmpty() // No reordering operations added
+ }
+
+ @Test
+ fun addAndGetMinimizeTaskChangesIfNeeded_tasksAboveLimit_backTaskMinimized() {
+ val taskLimit = desktopTasksLimiter.getMaxTaskLimit()
+ // The following list will be ordered bottom -> top, as the last task is moved to top last.
+ val tasks = (1..taskLimit).map { setUpFreeformTask() }
+
+ val wct = WindowContainerTransaction()
+ val minimizedTaskId =
+ desktopTasksLimiter.addAndGetMinimizeTaskChangesIfNeeded(
+ displayId = DEFAULT_DISPLAY,
+ wct = wct,
+ newFrontTaskInfo = setUpFreeformTask())
+
+ assertThat(minimizedTaskId).isEqualTo(tasks.first())
+ assertThat(wct.hierarchyOps.size).isEqualTo(1)
+ assertThat(wct.hierarchyOps[0].type).isEqualTo(HIERARCHY_OP_TYPE_REORDER)
+ assertThat(wct.hierarchyOps[0].toTop).isFalse() // Reorder to bottom
+ }
+
+ @Test
+ fun addAndGetMinimizeTaskChangesIfNeeded_nonMinimizedTasksWithinLimit_noTaskMinimized() {
+ val taskLimit = desktopTasksLimiter.getMaxTaskLimit()
+ val tasks = (1..taskLimit).map { setUpFreeformTask() }
+ desktopTaskRepo.minimizeTask(displayId = DEFAULT_DISPLAY, taskId = tasks[0].taskId)
+
+ val wct = WindowContainerTransaction()
+ val minimizedTaskId =
+ desktopTasksLimiter.addAndGetMinimizeTaskChangesIfNeeded(
+ displayId = 0,
+ wct = wct,
+ newFrontTaskInfo = setUpFreeformTask())
+
+ assertThat(minimizedTaskId).isNull()
+ assertThat(wct.hierarchyOps).isEmpty() // No reordering operations added
+ }
+
+ @Test
+ fun getTaskToMinimizeIfNeeded_tasksWithinLimit_returnsNull() {
+ val taskLimit = desktopTasksLimiter.getMaxTaskLimit()
+ val tasks = (1..taskLimit).map { setUpFreeformTask() }
+
+ val minimizedTask = desktopTasksLimiter.getTaskToMinimizeIfNeeded(
+ visibleFreeformTaskIdsOrderedFrontToBack = tasks.map { it.taskId })
+
+ assertThat(minimizedTask).isNull()
+ }
+
+ @Test
+ fun getTaskToMinimizeIfNeeded_tasksAboveLimit_returnsBackTask() {
+ val taskLimit = desktopTasksLimiter.getMaxTaskLimit()
+ val tasks = (1..taskLimit + 1).map { setUpFreeformTask() }
+
+ val minimizedTask = desktopTasksLimiter.getTaskToMinimizeIfNeeded(
+ visibleFreeformTaskIdsOrderedFrontToBack = tasks.map { it.taskId })
+
+ // first == front, last == back
+ assertThat(minimizedTask).isEqualTo(tasks.last())
+ }
+
+ @Test
+ fun getTaskToMinimizeIfNeeded_withNewTask_tasksAboveLimit_returnsBackTask() {
+ val taskLimit = desktopTasksLimiter.getMaxTaskLimit()
+ val tasks = (1..taskLimit).map { setUpFreeformTask() }
+
+ val minimizedTask = desktopTasksLimiter.getTaskToMinimizeIfNeeded(
+ visibleFreeformTaskIdsOrderedFrontToBack = tasks.map { it.taskId },
+ newTaskIdInFront = setUpFreeformTask().taskId)
+
+ // first == front, last == back
+ assertThat(minimizedTask).isEqualTo(tasks.last())
+ }
+
+ private fun setUpFreeformTask(
+ displayId: Int = DEFAULT_DISPLAY,
+ ): RunningTaskInfo {
+ val task = createFreeformTask(displayId)
+ `when`(shellTaskOrganizer.getRunningTaskInfo(task.taskId)).thenReturn(task)
+ desktopTaskRepo.addActiveTask(displayId, task.taskId)
+ desktopTaskRepo.addOrMoveFreeformTaskToTop(task.taskId)
+ return task
+ }
+
+ private fun markTaskVisible(task: RunningTaskInfo) {
+ desktopTaskRepo.updateVisibleFreeformTasks(
+ task.displayId,
+ task.taskId,
+ visible = true
+ )
+ }
+
+ private fun markTaskHidden(task: RunningTaskInfo) {
+ desktopTaskRepo.updateVisibleFreeformTasks(
+ task.displayId,
+ task.taskId,
+ visible = false
+ )
+ }
+}
diff --git a/libs/hwui/SkiaInterpolator.cpp b/libs/hwui/SkiaInterpolator.cpp
index c67b135..5a45ad9 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 3ebf7d1..0a30c6c 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 @@
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 @@
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 66e0896..8bb11ba 100644
--- a/libs/hwui/renderthread/CanvasContext.cpp
+++ b/libs/hwui/renderthread/CanvasContext.cpp
@@ -1010,7 +1010,15 @@
}
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 f6c5792..6a560b3 100644
--- a/libs/hwui/utils/Color.cpp
+++ b/libs/hwui/utils/Color.cpp
@@ -403,7 +403,7 @@
}
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 eb7cd01..5ba35ac 100644
--- a/location/Android.bp
+++ b/location/Android.bp
@@ -26,6 +26,7 @@
"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 f5deb2b..10da632 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 85e9f65..61afd26 100644
--- a/location/api/current.txt
+++ b/location/api/current.txt
@@ -412,8 +412,8 @@
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 @@
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 254d74a..f6e76a2 100644
--- a/location/api/system-current.txt
+++ b/location/api/system-current.txt
@@ -113,13 +113,13 @@
}
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.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 @@
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 @@
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 d6d4989..4981029 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 5bf1b4e..bf6ec96 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 8d6982e..91c4f11 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 b165809..9a9a073 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 1731e5e..97971e1 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 4f9917b..8a13c03 100644
--- a/media/jni/android_media_MediaCodec.cpp
+++ b/media/jni/android_media_MediaCodec.cpp
@@ -2099,9 +2099,14 @@
}
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 2bb0ec5..9d927ec 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 882afca..fbb35e2 100644
--- a/native/android/performance_hint.cpp
+++ b/native/android/performance_hint.cpp
@@ -59,7 +59,8 @@
~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 @@
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 @@
// 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 @@
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 @@
}
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 @@
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 bfbe34e..974e6e6 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 @@
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 @@
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 @@
ON_CALL(*mMockSession, reportActualWorkDuration2(_)).WillByDefault([] {
return ScopedAStatus::ok();
});
-
return APerformanceHint_createSession(manager, tids.data(), tids.size(), targetDuration);
}
@@ -178,6 +186,14 @@
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 778f07c..73b29db 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 a5bb34f..c8801bb 100644
--- a/packages/CompanionDeviceManager/src/com/android/companiondevicemanager/CompanionDeviceDiscoveryService.java
+++ b/packages/CompanionDeviceManager/src/com/android/companiondevicemanager/CompanionDeviceDiscoveryService.java
@@ -188,12 +188,7 @@
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 @@
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 15fdc52..cddbb6b 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 b17293d..b0bac45 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 4ee0788..dcf98a0 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 7e141c2..ab1c640 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 cde9112..c5939da 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 1623ec4..db7b8b5 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 23c021e..ddc8304 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 0b8ade7..c302ea2 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 6a79b11..a5b8c9b 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 76fc0a7..46ec564 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 6d3a676..23ed34c1 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 28762e7..0f96a9c 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 a3ff390..64f52cd 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 b61b81c..14e68a1 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 9897443..fbcdc94 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 b1c3506..f77581d 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 1afd5f6..cc55b66 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 3fb3d55..f5cb357 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 1afd5f6..cc55b66 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 1afd5f6..cc55b66 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 b642c87..9841f19 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 e007ab7..2a190a4 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 e82f331..ef54dcb 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 a4c3438..582a0d0 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 2f62ba3..4edf87d 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 6266ed2..ab2ebb0 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 838d6d9..806085a 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 834dffe..4e4e02f 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 1c86c9b..05c3473 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 a95f6b9..9a3430f 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 ed08128..23204c8 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 16f04c5..c829c6b 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 2c10c21..5facb15 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 46b80da..14153c0 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 2a8784c..af97aa7 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 3eac6e9..7564afa 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 9fd552b..cc405b4 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 0d6f839..94f90e2b 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 7d24825..a7aa023 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 16e3195..8664ef6 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 a852f1c..208b816 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 03eb9d2..97506ec 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 279474f..a7a1cf2 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 2f090e4..2d46093 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 f2ead85..0465c13 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 4e3fed1..49f946d 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 e0f8839..efb0cbe 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 5e0fbe0..b476e2c 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 f56d7f1..b3a733b 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 ec4df56..e7e8185 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 f7d74fe..49a58f7 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 093baab..987d003 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 cc52617..3a2e73a 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 62a7deb..ebf4ee4 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 aa08aa7..cf224da 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 8cf3444..9fbb7ec 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 161a16d..a353784 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 6707ff0..a7c7145 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 9781c49..1e2bbe8 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 a5aceb7..1caec50 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 eca8699..8840eee 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 b508af9..2a1b6a6 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 8b6b2b2..a81a8ef 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 b508af9..2a1b6a6 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 ccbf228..2fd84cf 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 c9c8dcc..690af93 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 0acc655..f5696f7 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 c2626ea..4029c53 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 79c8c72..c9c1091 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 722bee6..73ac0b3 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 58110aa..a87636b 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 331b124..4f0cd12 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 888b01c..e5480a4 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 ba1eb60..85080a4 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 e2e362b..59b86eb 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 876371a..e8058e8 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 163e93a..ebc2f4d 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 b11ca07..cf6b2e3 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 cbc67d9..6b0590a 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 67cf20a..ff3f0d3 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 ae7f06e..7bb974a 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 2b59857..aa253a4 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 9b7ae0d..42dbfaf 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 4ff00c3..56e0b90 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 c8bd87d..59d0607 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 7e6300b5..2cc6f40 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 4109079..50ebdd5 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.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 @@
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 @@
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 5d0c022..72bb640 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 0171442..3cd707f 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 39a12b7..332fd1c 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 64aa7f6..a7ede75 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 ed04b94..573e325 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 7b9651c..1510708 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 e176c7e..c03fd6d 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 4388ec1..8c70b0d 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 b9bab69..297f351 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 1610d26..c471c44 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 eb43247..d43fe36 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 ab64e24..0ffa3ce 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 9a00126..6f8f171 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 642fc5c..7a6cbe8 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 3d7c603..2cc6a8c 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 44dfd60..e4e4791 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 88978f6..563fe4a 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 00979e5..f8cf6c6 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 1fe885d..6ea08d3 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 f1b433b..e3c4a7a 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 a0c3c1a..4f761a4 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 1b84841..be56620 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/Spa/spa/src/com/android/settingslib/spa/widget/preference/ListPreference.kt b/packages/SettingsLib/Spa/spa/src/com/android/settingslib/spa/widget/preference/ListPreference.kt
index 1a04bb8..73ee5d1 100644
--- a/packages/SettingsLib/Spa/spa/src/com/android/settingslib/spa/widget/preference/ListPreference.kt
+++ b/packages/SettingsLib/Spa/spa/src/com/android/settingslib/spa/widget/preference/ListPreference.kt
@@ -22,8 +22,10 @@
import androidx.compose.foundation.layout.fillMaxWidth
import androidx.compose.foundation.layout.padding
import androidx.compose.foundation.layout.width
+import androidx.compose.foundation.rememberScrollState
import androidx.compose.foundation.selection.selectable
import androidx.compose.foundation.selection.selectableGroup
+import androidx.compose.foundation.verticalScroll
import androidx.compose.material3.RadioButton
import androidx.compose.runtime.Composable
import androidx.compose.runtime.IntState
@@ -86,7 +88,7 @@
title = model.title,
onDismissRequest = { dialogOpened = false },
) {
- Column(modifier = Modifier.selectableGroup()) {
+ Column(modifier = Modifier.selectableGroup().verticalScroll(rememberScrollState())) {
for (option in model.options) {
Radio(option, model.selectedId.intValue, model.enabled()) {
dialogOpened = false
diff --git a/packages/SettingsLib/res/values-af/strings.xml b/packages/SettingsLib/res/values-af/strings.xml
index e4be79b..dde6041 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 b5ea37f..0ec52d9 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 9324252..e97f999 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 02e5f69..22aa147 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 8a6c26c..9ea570f 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 e74e5c3..ade0b33 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 bfd7d9c..e059091 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 846cc99..11de54b 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 c422b73..ef0b524 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 0d41022..9a2b89b 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 cbc8be1..2d4fefc 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 2366c13..441455c 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 a64aff3..50b60df 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 c6a8706..6bdcbd8 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 850b6f3..31fa3df 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 2f72f01..255a6538 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 0437a14..0437a00 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 f8307e2..a0d8fb9 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 c61cf2e..33c673a 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 74087e5..8910d2e 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 2054136..2545abf 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 9996577..6aa0700 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 fbbed92..a67839a 100644
--- a/packages/SettingsLib/res/values/strings.xml
+++ b/packages/SettingsLib/res/values/strings.xml
@@ -197,19 +197,19 @@
<string name="bluetooth_connected_no_headset_no_a2dp_battery_level">Connected (no phone or media), battery <xliff:g id="battery_level_as_percentage">%1$s</xliff:g><xliff:g id="active_device">%2$s</xliff:g></string>
<!-- Connected devices settings. Message when Bluetooth is connected and active, showing remote device status and battery level. [CHAR LIMIT=NONE] -->
- <string name="bluetooth_active_battery_level">Active, <xliff:g id="battery_level_as_percentage">%1$s</xliff:g> battery</string>
+ <string name="bluetooth_active_battery_level">Active. <xliff:g id="battery_level_as_percentage">%1$s</xliff:g> battery.</string>
<!-- Connected devices settings. Message when Bluetooth is connected and active, showing remote device status and battery level for untethered headset. [CHAR LIMIT=NONE] -->
- <string name="bluetooth_active_battery_level_untethered">Active, L: <xliff:g id="battery_level_as_percentage" example="25%">%1$s</xliff:g> battery, R: <xliff:g id="battery_level_as_percentage" example="25%">%2$s</xliff:g> battery</string>
+ <string name="bluetooth_active_battery_level_untethered">Active. L: <xliff:g id="battery_level_as_percentage" example="25%">%1$s</xliff:g>, R: <xliff:g id="battery_level_as_percentage" example="25%">%2$s</xliff:g> battery.</string>
<!-- Connected devices settings. Message when Bluetooth is connected but not in use, showing remote device battery level. [CHAR LIMIT=NONE] -->
<string name="bluetooth_battery_level"><xliff:g id="battery_level_as_percentage">%1$s</xliff:g> battery</string>
<!-- Connected devices settings. Message on TV when Bluetooth is connected but not in use, showing remote device battery level. [CHAR LIMIT=NONE] -->
<string name="tv_bluetooth_battery_level">Battery <xliff:g id="battery_level_as_percentage">%1$s</xliff:g></string>
<!-- Connected devices settings. Message when Bluetooth is connected but not in use, showing remote device battery level for untethered headset. [CHAR LIMIT=NONE] -->
- <string name="bluetooth_battery_level_untethered">L: <xliff:g id="battery_level_as_percentage" example="25%">%1$s</xliff:g> battery, R: <xliff:g id="battery_level_as_percentage" example="25%">%2$s</xliff:g> battery</string>
+ <string name="bluetooth_battery_level_untethered">L: <xliff:g id="battery_level_as_percentage" example="25%">%1$s</xliff:g>, R: <xliff:g id="battery_level_as_percentage" example="25%">%2$s</xliff:g> battery.</string>
<!-- Connected devices settings. Message when Bluetooth is connected but not in use, showing remote device battery level for the left part of the untethered headset. [CHAR LIMIT=NONE] -->
- <string name="bluetooth_battery_level_untethered_left">Left <xliff:g id="battery_level_as_percentage" example="25%">%1$s</xliff:g></string>
+ <string name="bluetooth_battery_level_untethered_left">Left: <xliff:g id="battery_level_as_percentage" example="25%">%1$s</xliff:g> battery</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. [CHAR LIMIT=NONE] -->
- <string name="bluetooth_battery_level_untethered_right">Right <xliff:g id="battery_level_as_percentage" example="25%">%1$s</xliff:g></string>
+ <string name="bluetooth_battery_level_untethered_right">Right: <xliff:g id="battery_level_as_percentage" example="25%">%1$s</xliff:g> battery</string>
<!-- Connected devices settings. Message when Bluetooth is connected and active but no battery information, showing remote device status. [CHAR LIMIT=NONE] -->
<string name="bluetooth_active_no_battery_level">Active</string>
<!-- Connected devices settings. Message shown when bluetooth device is disconnected but is a known, previously connected device [CHAR LIMIT=NONE] -->
@@ -223,17 +223,19 @@
<string name="bluetooth_hearing_aid_left_and_right_active">Active, left and right</string>
<!-- Connected devices settings. Message when Bluetooth is connected and active for media only, showing remote device status and battery level. [CHAR LIMIT=NONE] -->
- <string name="bluetooth_active_media_only_battery_level">Active (media only), <xliff:g id="battery_level_as_percentage">%1$s</xliff:g> battery</string>
+ <string name="bluetooth_active_media_only_battery_level">Active (media only). <xliff:g id="battery_level_as_percentage">%1$s</xliff:g> battery.</string>
<!-- Connected devices settings. Message when Bluetooth is connected and active for media only, showing remote device status and battery level for untethered headset. [CHAR LIMIT=NONE] -->
- <string name="bluetooth_active_media_only_battery_level_untethered">Active (media only), L: <xliff:g id="battery_level_as_percentage" example="25%">%1$s</xliff:g> battery, R: <xliff:g id="battery_level_as_percentage" example="25%">%2$s</xliff:g> battery</string>
+ <string name="bluetooth_active_media_only_battery_level_untethered">Active (media only). L: <xliff:g id="battery_level_as_percentage" example="25%">%1$s</xliff:g>, R: <xliff:g id="battery_level_as_percentage" example="25%">%2$s</xliff:g> battery.</string>
<!-- Connected devices settings. Message when Bluetooth is connected but not in use, showing remote device battery level, supports audio sharing. [CHAR LIMIT=NONE] -->
- <string name="bluetooth_battery_level_lea_support">Connected (supports audio sharing), <xliff:g id="battery_level_as_percentage">%1$s</xliff:g> battery</string>
+ <string name="bluetooth_battery_level_lea_support">Connected (supports audio sharing). <xliff:g id="battery_level_as_percentage">%1$s</xliff:g> battery.</string>
<!-- Connected devices settings. Message when Bluetooth is connected but not in use, showing remote device battery level for untethered headset, supports audio sharing. [CHAR LIMIT=NONE] -->
- <string name="bluetooth_battery_level_untethered_lea_support">Connected (supports audio sharing), L: <xliff:g id="battery_level_as_percentage" example="25%">%1$s</xliff:g> battery, R: <xliff:g id="battery_level_as_percentage" example="25%">%2$s</xliff:g> battery</string>
+ <string name="bluetooth_battery_level_untethered_lea_support">Connected (supports audio sharing). L: <xliff:g id="battery_level_as_percentage" example="25%">%1$s</xliff:g>, R: <xliff:g id="battery_level_as_percentage" example="25%">%2$s</xliff:g> battery.</string>
<!-- Connected devices settings. Message when Bluetooth is connected but not in use, showing remote device battery level for the left part of the untethered headset, supports audio sharing. [CHAR LIMIT=NONE] -->
- <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>
+ <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> battery.</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>
+ <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> battery.</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 563f02d..c2506d3 100644
--- a/packages/SettingsLib/src/com/android/settingslib/Utils.java
+++ b/packages/SettingsLib/src/com/android/settingslib/Utils.java
@@ -765,7 +765,11 @@
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 a906875..3dffb27 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 @@
/** 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 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 04516eb..36a9ecf 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 @@
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.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.Pair;
import androidx.annotation.NonNull;
+import androidx.annotation.Nullable;
import androidx.annotation.VisibleForTesting;
import com.android.internal.util.ArrayUtils;
@@ -102,6 +105,7 @@
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 @@
.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 @@
}
/**
- * 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 @@
}
}
- 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 @@
|| 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 @@
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 9df23aa..a6b1dd3 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 @@
+ ", sourceId = "
+ sourceId);
}
- updateFallbackActiveDeviceIfNeeded();
}
@Override
@@ -314,7 +313,18 @@
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 @@
+ ", state = "
+ state);
}
+ if (BluetoothUtils.isConnected(state)) {
+ updateFallbackActiveDeviceIfNeeded();
+ }
}
};
@@ -1056,7 +1069,9 @@
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 @@
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 @@
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/tests/robotests/src/com/android/settingslib/bluetooth/CachedBluetoothDeviceTest.java b/packages/SettingsLib/tests/robotests/src/com/android/settingslib/bluetooth/CachedBluetoothDeviceTest.java
index 646e9eb..c13c493 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.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.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.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 @@
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 @@
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 @@
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();
@@ -346,12 +373,13 @@
// Set device as Active for A2DP and test connection state summary
mCachedDevice.onActiveDeviceChanged(true, BluetoothProfile.A2DP);
- assertThat(mCachedDevice.getConnectionSummary()).isEqualTo("Active");
+ assertThat(mCachedDevice.getConnectionSummary())
+ .isEqualTo(mContext.getString(R.string.bluetooth_active_no_battery_level));
// Test with battery level
mBatteryLevel = 10;
- assertThat(mCachedDevice.getConnectionSummary()).isEqualTo(
- "Active, 10% battery");
+ assertThat(mCachedDevice.getConnectionSummary())
+ .isEqualTo(mContext.getString(R.string.bluetooth_active_battery_level, "10%"));
// Set A2DP profile to be disconnected and test connection state summary
updateProfileStatus(mA2dpProfile, BluetoothProfile.STATE_DISCONNECTED);
@@ -362,7 +390,8 @@
// Set A2DP profile to be connected, Active and test connection state summary
updateProfileStatus(mA2dpProfile, BluetoothProfile.STATE_CONNECTED);
mCachedDevice.onActiveDeviceChanged(true, BluetoothProfile.A2DP);
- assertThat(mCachedDevice.getConnectionSummary()).isEqualTo("Active");
+ assertThat(mCachedDevice.getConnectionSummary())
+ .isEqualTo(mContext.getString(R.string.bluetooth_active_no_battery_level));
// Set A2DP profile to be disconnected and test connection state summary
updateProfileStatus(mA2dpProfile, BluetoothProfile.STATE_DISCONNECTED);
@@ -517,11 +546,13 @@
mCachedDevice.onAudioModeChanged();
mAudioManager.setMode(AudioManager.MODE_IN_CALL);
mCachedDevice.onActiveDeviceChanged(true, BluetoothProfile.HEADSET);
- assertThat(mCachedDevice.getConnectionSummary()).isEqualTo("Active");
+ assertThat(mCachedDevice.getConnectionSummary())
+ .isEqualTo(mContext.getString(R.string.bluetooth_active_no_battery_level));
// Test with battery level
mBatteryLevel = 10;
- assertThat(mCachedDevice.getConnectionSummary()).isEqualTo("Active, 10% battery");
+ assertThat(mCachedDevice.getConnectionSummary())
+ .isEqualTo(mContext.getString(R.string.bluetooth_active_battery_level, "10%"));
// Set HFP profile to be disconnected and test connection state summary
updateProfileStatus(mHfpProfile, BluetoothProfile.STATE_DISCONNECTED);
@@ -532,7 +563,8 @@
// Set HFP profile to be connected, Active and test connection state summary
updateProfileStatus(mHfpProfile, BluetoothProfile.STATE_CONNECTED);
mCachedDevice.onActiveDeviceChanged(true, BluetoothProfile.HEADSET);
- assertThat(mCachedDevice.getConnectionSummary()).isEqualTo("Active");
+ assertThat(mCachedDevice.getConnectionSummary())
+ .isEqualTo(mContext.getString(R.string.bluetooth_active_no_battery_level));
// Set HFP profile to be disconnected and test connection state summary
updateProfileStatus(mHfpProfile, BluetoothProfile.STATE_DISCONNECTED);
@@ -904,7 +936,8 @@
mCachedDevice.addMemberDevice(mSubCachedDevice);
doAnswer((invocation) -> lowerBatteryLevel).when(mSubCachedDevice).getBatteryLevel();
- assertThat(mCachedDevice.getConnectionSummary()).isEqualTo("Active, 30% battery");
+ assertThat(mCachedDevice.getConnectionSummary())
+ .isEqualTo(mContext.getString(R.string.bluetooth_active_battery_level, "30%"));
}
@Test
@@ -935,7 +968,8 @@
doAnswer((invocation) -> BluetoothDevice.BATTERY_LEVEL_UNKNOWN).when(
mSubCachedDevice).getBatteryLevel();
- assertThat(mCachedDevice.getConnectionSummary()).isEqualTo("Active, 70% battery");
+ assertThat(mCachedDevice.getConnectionSummary())
+ .isEqualTo(mContext.getString(R.string.bluetooth_active_battery_level, "70%"));
}
@Test
@@ -992,26 +1026,27 @@
// Set device as Active for A2DP and HFP and test connection state summary
mCachedDevice.onActiveDeviceChanged(true, BluetoothProfile.A2DP);
mCachedDevice.onActiveDeviceChanged(true, BluetoothProfile.HEADSET);
- assertThat(mCachedDevice.getConnectionSummary()).isEqualTo("Active");
+ assertThat(mCachedDevice.getConnectionSummary())
+ .isEqualTo(mContext.getString(R.string.bluetooth_active_no_battery_level));
// Test with battery level
mBatteryLevel = 10;
- assertThat(mCachedDevice.getConnectionSummary()).isEqualTo(
- "Active, 10% battery");
+ assertThat(mCachedDevice.getConnectionSummary())
+ .isEqualTo(mContext.getString(R.string.bluetooth_active_battery_level, "10%"));
// Disconnect A2DP only and test connection state summary
mCachedDevice.onActiveDeviceChanged(false, BluetoothProfile.A2DP);
updateProfileStatus(mA2dpProfile, BluetoothProfile.STATE_DISCONNECTED);
- assertThat(mCachedDevice.getConnectionSummary()).isEqualTo(
- "10% battery");
+ assertThat(mCachedDevice.getConnectionSummary())
+ .isEqualTo(mContext.getString(R.string.bluetooth_battery_level, "10%"));
// Disconnect HFP only and test connection state summary
mCachedDevice.onActiveDeviceChanged(false, BluetoothProfile.HEADSET);
updateProfileStatus(mHfpProfile, BluetoothProfile.STATE_DISCONNECTED);
updateProfileStatus(mA2dpProfile, BluetoothProfile.STATE_CONNECTED);
mCachedDevice.onActiveDeviceChanged(true, BluetoothProfile.A2DP);
- assertThat(mCachedDevice.getConnectionSummary()).isEqualTo(
- "Active, 10% battery");
+ assertThat(mCachedDevice.getConnectionSummary())
+ .isEqualTo(mContext.getString(R.string.bluetooth_active_battery_level, "10%"));
// Test with BluetoothDevice.BATTERY_LEVEL_UNKNOWN battery level
mBatteryLevel = BluetoothDevice.BATTERY_LEVEL_UNKNOWN;
@@ -1020,7 +1055,8 @@
updateProfileStatus(mHfpProfile, BluetoothProfile.STATE_CONNECTED);
mCachedDevice.onActiveDeviceChanged(true, BluetoothProfile.A2DP);
mCachedDevice.onActiveDeviceChanged(true, BluetoothProfile.HEADSET);
- assertThat(mCachedDevice.getConnectionSummary()).isEqualTo("Active");
+ assertThat(mCachedDevice.getConnectionSummary())
+ .isEqualTo(mContext.getString(R.string.bluetooth_active_no_battery_level));
// Set A2DP and HFP profiles to be disconnected and test connection state summary
updateProfileStatus(mA2dpProfile, BluetoothProfile.STATE_DISCONNECTED);
@@ -1158,8 +1194,10 @@
when(mDevice.getMetadata(BluetoothDevice.METADATA_UNTETHERED_RIGHT_BATTERY)).thenReturn(
TWS_BATTERY_RIGHT.getBytes());
- assertThat(mCachedDevice.getConnectionSummary()).isEqualTo(
- "L: 15% battery, R: 25% battery");
+ assertThat(mCachedDevice.getConnectionSummary())
+ .isEqualTo(
+ mContext.getString(
+ R.string.bluetooth_battery_level_untethered, "15%", "25%"));
}
@Test
@@ -1175,8 +1213,12 @@
when(mDevice.getMetadata(BluetoothDevice.METADATA_UNTETHERED_RIGHT_BATTERY)).thenReturn(
TWS_BATTERY_RIGHT.getBytes());
- assertThat(mCachedDevice.getTvConnectionSummary().toString()).isEqualTo(
- "Left 15% Right 25%");
+ assertThat(mCachedDevice.getTvConnectionSummary().toString())
+ .isEqualTo(
+ mContext.getString(R.string.bluetooth_battery_level_untethered_left, "15%")
+ + " "
+ + mContext.getString(
+ R.string.bluetooth_battery_level_untethered_right, "25%"));
}
@Test
@@ -1185,19 +1227,23 @@
updateProfileStatus(mHfpProfile, BluetoothProfile.STATE_CONNECTED);
updateProfileStatus(mHearingAidProfile, BluetoothProfile.STATE_CONNECTED);
when(mDevice.getBondState()).thenReturn(BluetoothDevice.BOND_BONDED);
- when(mDevice.getMetadata(BluetoothDevice.METADATA_IS_UNTETHERED_HEADSET)).thenReturn(
- "true".getBytes());
- when(mDevice.getMetadata(BluetoothDevice.METADATA_UNTETHERED_LEFT_BATTERY)).thenReturn(
- TWS_BATTERY_LEFT.getBytes());
- when(mDevice.getMetadata(BluetoothDevice.METADATA_UNTETHERED_RIGHT_BATTERY)).thenReturn(
- TWS_BATTERY_RIGHT.getBytes());
+ when(mDevice.getMetadata(BluetoothDevice.METADATA_IS_UNTETHERED_HEADSET))
+ .thenReturn("true".getBytes());
+ when(mDevice.getMetadata(BluetoothDevice.METADATA_UNTETHERED_LEFT_BATTERY))
+ .thenReturn(TWS_BATTERY_LEFT.getBytes());
+ when(mDevice.getMetadata(BluetoothDevice.METADATA_UNTETHERED_RIGHT_BATTERY))
+ .thenReturn(TWS_BATTERY_RIGHT.getBytes());
int lowBatteryColor = mContext.getColor(LOW_BATTERY_COLOR);
+ String leftBattery =
+ mContext.getString(R.string.bluetooth_battery_level_untethered_left, "15%");
+ String rightBattery =
+ mContext.getString(R.string.bluetooth_battery_level_untethered_right, "25%");
// Default low battery threshold, only left battery is low
CharSequence summary = mCachedDevice.getTvConnectionSummary(LOW_BATTERY_COLOR);
- assertForegroundColorSpan(summary, 0, 0, 8, lowBatteryColor);
- assertThat(summary.toString()).isEqualTo("Left 15% Right 25%");
+ assertForegroundColorSpan(summary, 0, 0, leftBattery.length(), lowBatteryColor);
+ assertThat(summary.toString()).isEqualTo(leftBattery + " " + rightBattery);
// Lower threshold, neither battery should be low
when(mDevice.getMetadata(BluetoothDevice.METADATA_UNTETHERED_LEFT_LOW_BATTERY_THRESHOLD))
@@ -1206,8 +1252,7 @@
.thenReturn(TWS_LOW_BATTERY_THRESHOLD_LOW.getBytes());
summary = mCachedDevice.getTvConnectionSummary(LOW_BATTERY_COLOR);
assertNoForegroundColorSpans(summary);
- assertThat(summary.toString()).isEqualTo("Left 15% Right 25%");
-
+ assertThat(summary.toString()).isEqualTo(leftBattery + " " + rightBattery);
// Higher Threshold, both batteries are low
when(mDevice.getMetadata(BluetoothDevice.METADATA_UNTETHERED_LEFT_LOW_BATTERY_THRESHOLD))
@@ -1215,9 +1260,14 @@
when(mDevice.getMetadata(BluetoothDevice.METADATA_UNTETHERED_RIGHT_LOW_BATTERY_THRESHOLD))
.thenReturn(TWS_LOW_BATTERY_THRESHOLD_HIGH.getBytes());
summary = mCachedDevice.getTvConnectionSummary(LOW_BATTERY_COLOR);
- assertForegroundColorSpan(summary, 0, 0, 8, lowBatteryColor);
- assertForegroundColorSpan(summary, 1, 9, 18, lowBatteryColor);
- assertThat(summary.toString()).isEqualTo("Left 15% Right 25%");
+ assertForegroundColorSpan(summary, 0, 0, leftBattery.length(), lowBatteryColor);
+ assertForegroundColorSpan(
+ summary,
+ 1,
+ leftBattery.length() + 1,
+ leftBattery.length() + rightBattery.length() + 1,
+ lowBatteryColor);
+ assertThat(summary.toString()).isEqualTo(leftBattery + " " + rightBattery);
}
private void assertNoForegroundColorSpans(CharSequence charSequence) {
@@ -1245,32 +1295,39 @@
// Test without battery level
// Set PAN profile to be connected and test connection state summary
updateProfileStatus(mPanProfile, BluetoothProfile.STATE_CONNECTED);
- assertThat(mCachedDevice.getCarConnectionSummary()).isEqualTo("Connected");
+ assertThat(mCachedDevice.getCarConnectionSummary())
+ .isEqualTo(mContext.getString(R.string.bluetooth_connected, ""));
// Set PAN profile to be disconnected and test connection state summary
updateProfileStatus(mPanProfile, BluetoothProfile.STATE_DISCONNECTED);
- assertThat(mCachedDevice.getCarConnectionSummary()).isEqualTo("Disconnected");
+ assertThat(mCachedDevice.getCarConnectionSummary())
+ .isEqualTo(mContext.getString(R.string.bluetooth_disconnected, ""));
// Test with battery level
mBatteryLevel = 10;
// Set PAN profile to be connected and test connection state summary
updateProfileStatus(mPanProfile, BluetoothProfile.STATE_CONNECTED);
- assertThat(mCachedDevice.getCarConnectionSummary()).isEqualTo("Connected, battery 10%");
+ assertThat(mCachedDevice.getCarConnectionSummary())
+ .isEqualTo(
+ mContext.getString(R.string.bluetooth_connected_battery_level, "10%", ""));
// Set PAN profile to be disconnected and test connection state summary
updateProfileStatus(mPanProfile, BluetoothProfile.STATE_DISCONNECTED);
- assertThat(mCachedDevice.getCarConnectionSummary()).isEqualTo("Disconnected");
+ assertThat(mCachedDevice.getCarConnectionSummary())
+ .isEqualTo(mContext.getString(R.string.bluetooth_disconnected, ""));
// Test with BluetoothDevice.BATTERY_LEVEL_UNKNOWN battery level
mBatteryLevel = BluetoothDevice.BATTERY_LEVEL_UNKNOWN;
// Set PAN profile to be connected and test connection state summary
updateProfileStatus(mPanProfile, BluetoothProfile.STATE_CONNECTED);
- assertThat(mCachedDevice.getCarConnectionSummary()).isEqualTo("Connected");
+ assertThat(mCachedDevice.getCarConnectionSummary())
+ .isEqualTo(mContext.getString(R.string.bluetooth_connected, ""));
// Set PAN profile to be disconnected and test connection state summary
updateProfileStatus(mPanProfile, BluetoothProfile.STATE_DISCONNECTED);
- assertThat(mCachedDevice.getCarConnectionSummary()).isEqualTo("Disconnected");
+ assertThat(mCachedDevice.getCarConnectionSummary())
+ .isEqualTo(mContext.getString(R.string.bluetooth_disconnected, ""));
}
@Test
@@ -1281,27 +1338,38 @@
updateProfileStatus(mHfpProfile, BluetoothProfile.STATE_CONNECTED);
updateProfileStatus(mA2dpProfile, BluetoothProfile.STATE_CONNECTED);
updateProfileStatus(mPanProfile, BluetoothProfile.STATE_CONNECTED);
- assertThat(mCachedDevice.getCarConnectionSummary()).isEqualTo("Connected, battery 10%");
+ assertThat(mCachedDevice.getCarConnectionSummary())
+ .isEqualTo(
+ mContext.getString(R.string.bluetooth_connected_battery_level, "10%", ""));
// Disconnect HFP only and test connection state summary
updateProfileStatus(mHfpProfile, BluetoothProfile.STATE_DISCONNECTED);
- assertThat(mCachedDevice.getCarConnectionSummary()).isEqualTo(
- "Connected (no phone), battery 10%");
+ assertThat(mCachedDevice.getCarConnectionSummary())
+ .isEqualTo(
+ mContext.getString(
+ R.string.bluetooth_connected_no_headset_battery_level, "10%", ""));
// Disconnect A2DP only and test connection state summary
updateProfileStatus(mHfpProfile, BluetoothProfile.STATE_CONNECTED);
updateProfileStatus(mA2dpProfile, BluetoothProfile.STATE_DISCONNECTED);
- assertThat(mCachedDevice.getCarConnectionSummary()).isEqualTo(
- "Connected (no media), battery 10%");
+ assertThat(mCachedDevice.getCarConnectionSummary())
+ .isEqualTo(
+ mContext.getString(
+ R.string.bluetooth_connected_no_a2dp_battery_level, "10%", ""));
// Disconnect both HFP and A2DP and test connection state summary
updateProfileStatus(mHfpProfile, BluetoothProfile.STATE_DISCONNECTED);
- assertThat(mCachedDevice.getCarConnectionSummary()).isEqualTo(
- "Connected (no phone or media), battery 10%");
+ assertThat(mCachedDevice.getCarConnectionSummary())
+ .isEqualTo(
+ mContext.getString(
+ R.string.bluetooth_connected_no_headset_no_a2dp_battery_level,
+ "10%",
+ ""));
// Disconnect all profiles and test connection state summary
updateProfileStatus(mPanProfile, BluetoothProfile.STATE_DISCONNECTED);
- assertThat(mCachedDevice.getCarConnectionSummary()).isEqualTo("Disconnected");
+ assertThat(mCachedDevice.getCarConnectionSummary())
+ .isEqualTo(mContext.getString(R.string.bluetooth_disconnected));
}
@Test
@@ -1853,6 +1921,91 @@
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/SystemUI/accessibility/accessibilitymenu/res/values-or/strings.xml b/packages/SystemUI/accessibility/accessibilitymenu/res/values-or/strings.xml
index 3a40b9f..0310c86 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 4f7a43e..49ae821 100644
--- a/packages/SystemUI/compose/core/Android.bp
+++ b/packages/SystemUI/compose/core/Android.bp
@@ -38,6 +38,7 @@
"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 0000000..9ce6cd1
--- /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 76bd4ec..8144d15 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 @@
/** 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 @@
) {
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 eb389e6..7095875 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 @@
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 @@
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 @@
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 d3e4553..f0d356c 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 @@
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 579e837..985d3a1 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.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.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 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 @@
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 @@
scrimCornerRadius,
screenCornerRadius,
{ expansionFraction },
- layoutState.isTransitioningBetween(Scenes.Gone, Scenes.Shade)
+ layoutState.isNotificationScrimTransitioning(),
)
.let { scrimRounding.value.toRoundedCornerShape(it) }
clip = true
@@ -288,7 +281,7 @@
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 @@
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 @@
)
}
+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 a376834..fc32440 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.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.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.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 @@
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 @@
) {
QuickSettingsScene(
viewModel = viewModel,
+ notificationsPlaceholderViewModel = notificationsPlaceholderViewModel,
createTintedIconManager = tintedIconManagerFactory::create,
createBatteryMeterViewController = batteryMeterViewControllerFactory::create,
statusBarIconController = statusBarIconController,
@@ -117,6 +126,7 @@
@Composable
private fun SceneScope.QuickSettingsScene(
viewModel: QuickSettingsSceneViewModel,
+ notificationsPlaceholderViewModel: NotificationsPlaceholderViewModel,
createTintedIconManager: (ViewGroup, StatusBarLocation) -> TintedIconManager,
createBatteryMeterViewController: (ViewGroup, StatusBarLocation) -> BatteryMeterViewController,
statusBarIconController: StatusBarIconController,
@@ -135,8 +145,17 @@
)
// 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 @@
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 fe6701c..7af9b7b 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 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 @@
) {
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 5bd1583..851719d 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 9b59708..a0f410a 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 962d822..319438c 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 48ab68a..f078b8c 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 @@
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 ffb6f31..a9e5be9 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.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 @@
)
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 0000000..e0a6310
--- /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 0000000..2f59217
--- /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 c6c6f57..516e140 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 @@
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 84b1a4b..944d6ef 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.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 @@
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 a8a1d88..f4009ee 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 @@
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 @@
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 418c6bb..7fb5a4d 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 @@
): 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 2c109a3..6bc397e 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 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 @@
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 @@
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 @@
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 fb46a34..6745fbe 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 @@
}
@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 @@
)
.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 a496292..c56e919 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 @@
@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 37a6ac6..af48802 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.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.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 @@
}
@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 @@
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 c88e432..26b56a1 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 @@
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.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 @@
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 @@
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 @@
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 @@
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 @@
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 @@
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 @@
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 @@
}
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 3497183..4907359 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 @@
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.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 @@
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 @@
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 @@
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 @@
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 @@
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 @@
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 f685058..e39511f 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 @@
}
@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 @@
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 @@
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 @@
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 @@
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 c15776e..a2991fd 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.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.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 @@
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 @@
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 @@
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 @@
assertThat(hasActiveMediaOrRecommendation).isFalse()
assertThat(hasActiveMedia).isFalse()
assertThat(hasAnyMedia).isFalse()
- assertThat(sortedMedia).isEmpty()
}
@Test
@@ -138,28 +128,26 @@
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 @@
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 0000000..4a9d0d1
--- /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 0000000..4b5fecd
--- /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 3727c11..719828c 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 @@
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.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 @@
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 @@
}
@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 @@
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 @@
}
@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 65fd101..a889007 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 @@
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 63f4816..871ce6d 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 @@
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 @@
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 ea95aab..5c30379 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.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 @@
sceneInteractor = sceneInteractor,
falsingInteractor = kosmos.falsingInteractor,
powerInteractor = kosmos.powerInteractor,
+ scenes = kosmos.scenes,
)
}
@@ -214,4 +217,23 @@
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 26f342a..468c39d 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 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.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 5b33ecb..96b2b7a 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 @@
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.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 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 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 }
- val underTest = kosmos.shadeInteractorImpl
+ 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 @@
}
@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 @@
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 @@
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 @@
}
@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 0ae95e7..109cd05 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 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 @@
@OptIn(ExperimentalCoroutinesApi::class)
@SmallTest
@RunWith(AndroidJUnit4::class)
+@DisableSceneContainer
class ShadeInteractorLegacyImplTest : SysuiTestCase() {
val kosmos = testKosmos()
val testScope = kosmos.testScope
@@ -95,6 +97,22 @@
}
@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 8c9036a..e1908b9 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.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.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 @@
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 29f286f..7420ea0 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 @@
}
@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 @@
}
@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 7c130be..db8e14c1 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 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.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 @@
}
}
+ @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 a8a75c0..f66e75a 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.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.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 @@
);
}
+ @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 96d1c0d..03a39f8 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.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.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 @@
}
@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 @@
}
@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 587a5a0..715be07 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 825ece85..ffe269a 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 0e1bed8..1fd58e8 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 3709a900..71b69d5 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 0a7250a..0d94655 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 3311588..f193274 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 741cc41..03f427e 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 583ffaf..d56f023 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 50b407f..1fabf52 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 3a28329..d4ffad3 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 ec704b8..b1b3ac1 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 fd77f14..aad6a91 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 aeb0ef0..fde008e 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 891f836..cb35d12 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 5c721a1..5f511dd 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 510dba9..55c5553 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 a881536..be273e5 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 d2af8a6..10fe331 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 836eefa..4290264 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 d2af8a6..10fe331 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 d2af8a6..10fe331 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 77ef52e..bd578d7 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 c33213a..4bdb951 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 1dc93fde..6b4f370 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 fea407d..ab57fca 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 41de1d4..496c40b 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 8e72450..d8f7f21 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 2935d2e..243384f 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 bd53d85..6bd9755 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 109e767..45a11b5 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 06c984a..efcd21d 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 c9a5662..b446543 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 b2b2037..740629e 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 64c35b8..ad590f1 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 96c3e83..9dea01e 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 00c3318..5ef3219 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 826fc1a4..f6ef98f 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 1a0b3f2..6bbfc1a 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 d7e5cdc..c60b57b 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 bed2fc7..b162d39 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 f403308..19d6e88 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 d9483ec..f42d2d7 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 36ae88a..0ead6f8 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 c7868db..0661c76 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 42d655e..ad43b0d 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 3c34f8d..2b6551e 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 ad9d2f7..df94537 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 eb9e1eb..e646c57 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 63971ab..016641e 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 4b7507d..a0c39da 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 ba29ee6..9ed27e8 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 8e9392c..7943043 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 aab22b3..a3e1bc2 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 071935a..a40af1b 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 95d4237..fb5efc8 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 7941935..42bcfa6 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 59afb3e..6dbad083 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 3ab647f..a17c395 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 e85a1da..6f72225 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 77ed062..753d32e 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 0cc753b..3efb8a0 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 814d321..c82f777 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 17fde25..f4d99e9 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 dfb7695..9a7f7f8 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 17fde25..f4d99e9 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 2af8013..e397afb 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 16fe331..6d19ed0 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 458d9ee..8c9d51b 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 c8c2ee5..091936c 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 0302199..26ccd1b 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 8e621ce..644b815 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 a1825bf..d92331f 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 abb5d09..39ac9f9 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 392a74d..f5f2772 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 dfc00df..61fb064 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 518883f..de0ac18 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 77f506c..73ba8b4 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 922bf88..69e16e5 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 35f13de..b3a86ac 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 0d97121..cd8d92f 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 888be9c..81ac854 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 6581db5..a3c7f9d 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 cce810e..d00390e 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 f683133..acaf549 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 e6fcb7f..8275699 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 b02bf81..393b242 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 a4d66a4..4fc0134 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 82395e4..df57f2a 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 790a843..47e4b49 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.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 javax.inject.Inject;
-import kotlinx.coroutines.DisposableHandle;
-
/**
* Injectable controller for {@link KeyguardClockSwitch}.
*/
@@ -593,7 +593,7 @@
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 fb88f0e..ba869bd 100644
--- a/packages/SystemUI/src/com/android/systemui/SystemUIApplication.java
+++ b/packages/SystemUI/src/com/android/systemui/SystemUIApplication.java
@@ -204,7 +204,7 @@
*/
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 @@
* <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 @@
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 dd71bc7..cb458ef 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 @@
/** 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 71d719d..4ac43bc 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.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 @@
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 5f4b394..f20fafc 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.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 @@
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 5c1ca64..662974d 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 @@
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 @@
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 @@
// 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 6c29bce..7087752 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.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 @@
*
* @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 @@
val shouldForceSmallClock: Boolean
- fun setClockSize(@ClockSize size: Int)
+ fun setClockSize(size: ClockSize)
}
@SysUISingleton
@@ -89,14 +89,15 @@
) : 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 @@
// 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 b8ceab3..2c869bf 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 @@
) {
override fun start() {
+ listenForDreamingToAlternateBouncer()
listenForDreamingToOccluded()
listenForDreamingToGoneWhenDismissable()
listenForDreamingToGoneFromBiometricUnlock()
@@ -75,6 +76,16 @@
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 720baec..da4f85e 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.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 @@
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 @@
*/
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 f7f60a5..142b1a0 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 @@
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 @@
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 @@
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 @@
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 @@
}
}
} 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 67b5745..bb633b5 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 @@
@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 e456a55..2850165 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 @@
) {
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 0000000..b661297
--- /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 3440440..7ca2eba 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 @@
* @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 6b8e896..52d7519 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.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.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 @@
constraintLayout.repeatWhenAttached {
repeatOnLifecycle(Lifecycle.State.CREATED) {
launch("$TAG#viewModel.blueprint") {
- viewModel.blueprint.collect { blueprint ->
- Trace.beginSection("KeyguardBlueprintViewBinder#applyBlueprint")
- val prevBluePrint = viewModel.currentBluePrint
+ 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)
+ }
- 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
+ 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 @@
logAlphaVisibilityOfAppliedConstraintSet(cs, clockViewModel)
cs.applyTo(constraintLayout)
}
- Trace.endSection()
}
}
}
@@ -235,4 +232,9 @@
"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 7178e1b..ed5d53c 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.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 @@
keyguardClockInteractor.clockEventController.registerListeners(keyguardRootView)
}
}
+
keyguardRootView.repeatWhenAttached {
repeatOnLifecycle(Lifecycle.State.CREATED) {
launch {
@@ -62,17 +62,19 @@
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 @@
}
}
}
+
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 @@
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 @@
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 3ff32bf..8386628 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 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 @@
// 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 88d9074..4b75b80 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.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 @@
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 cc54920..ccc48b5 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.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 @@
view: ViewGroup,
viewModel: KeyguardRootViewModel,
configuration: ConfigurationState,
- occludingAppDeviceEntryMessageViewModel: OccludingAppDeviceEntryMessageViewModel,
- chipbarCoordinator: ChipbarCoordinator,
+ occludingAppDeviceEntryMessageViewModel: OccludingAppDeviceEntryMessageViewModel?,
+ chipbarCoordinator: ChipbarCoordinator?,
screenOffAnimationController: ScreenOffAnimationController,
shadeInteractor: ShadeInteractor,
clockInteractor: KeyguardClockInteractor,
@@ -121,11 +122,7 @@
}
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 @@
)
}
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 78a1fcf..ef29270 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.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 @@
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 @@
val blueprintInteractor: Lazy<KeyguardBlueprintInteractor>,
) : KeyguardSection() {
override fun addViews(constraintLayout: ConstraintLayout) {}
-
override fun bindData(constraintLayout: ConstraintLayout) {
if (!MigrateClocksToBlueprint.isEnabled) {
return
@@ -106,21 +105,18 @@
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 @@
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 91f76a4..0bc60c4 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 @@
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 @@
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 @@
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 @@
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 @@
) : 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 d4844e2..644bea0 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 @@
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.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 @@
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 edd3318..b1f1898 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 @@
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 a6d3312..1f544c1 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 @@
@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 @@
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 @@
)
/** 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 7300152..3a825f2 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 @@
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 528b14c..0a84886 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 @@
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 @@
val clockViewModel: KeyguardClockViewModel,
) {
- val selectedClockSize: StateFlow<SettingsClockSize> = interactor.selectedClockSize
+ val selectedClockSize: StateFlow<ClockSizeSetting> = interactor.selectedClockSize
val shouldHideSmartspace: Flow<Boolean> =
combine(
@@ -48,8 +48,8 @@
// 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 9e7dbd4..dc053aa 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 @@
}
/* 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 ecad148..c98f3b0 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 @@
@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 @@
)
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 @@
)
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 7e57cf4..8ee3adc 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 @@
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 @@
}
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 @@
)
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
+ fun setRecommendationsLoadingState(smartspaceMediaLoadingModel: SmartspaceMediaLoadingModel) {
+ val isPrioritized =
+ when (smartspaceMediaLoadingModel) {
+ is SmartspaceMediaLoadingModel.Loaded -> smartspaceMediaLoadingModel.isPrioritized
+ else -> false
}
- is SmartspaceMediaLoadingModel.Removed -> {
- isPrioritized = false
- key = smartspaceMediaLoadingModel.key
- }
- SmartspaceMediaLoadingModel.Unknown -> {
- isPrioritized = false
- key = null
- }
- }
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 b04e938..dc2c651 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.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.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 @@
(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 @@
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 @@
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 74cd2fe..c0bb628 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.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 0000000..d568600
--- /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 83e2765..562fe7a 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 bd42a4d..170f1f7 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 @@
/** 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 6c1e536..90ddadf 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 @@
/** 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 d15d45a..eb716d4c 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 @@
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 0000000..952b134
--- /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 0000000..c356ae2
--- /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 0000000..303a5e9
--- /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 0000000..253f194
--- /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 d74506d..52e49d6 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.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 @@
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/QSContainerImpl.java b/packages/SystemUI/src/com/android/systemui/qs/QSContainerImpl.java
index 042fb63f..4ee2db7 100644
--- a/packages/SystemUI/src/com/android/systemui/qs/QSContainerImpl.java
+++ b/packages/SystemUI/src/com/android/systemui/qs/QSContainerImpl.java
@@ -75,10 +75,6 @@
@Override
protected void onFinishInflate() {
super.onFinishInflate();
- // set layer to make alpha animation of brightness slider nicer - otherwise elements
- // of slider are animated separately and it doesn't look good. See b/329244723
- setLayerType(LAYER_TYPE_HARDWARE, null);
-
mQSPanelContainer = findViewById(R.id.expanded_qs_scroll_view);
mQSPanel = findViewById(R.id.quick_settings_panel);
mHeader = findViewById(R.id.header);
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 ab0b0b7..c1986fa 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 @@
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.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 0239455..8ced222 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 @@
)
/**
- * 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 4774eb3..98b4ab8 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 @@
// 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 231b284..ef7829f 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 @@
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 @@
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 @@
/** 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 254c133..e2dc092 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.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 @@
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 @@
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 @@
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 @@
)
}
+ 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 2c17873..f3c421e 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.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 @@
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 b7a03ef..16e23c5 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.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 @@
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 @@
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 0000000..f288960
--- /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 5f835b3..b8b9ce5 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.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/settings/brightness/BrightnessSliderView.java b/packages/SystemUI/src/com/android/systemui/settings/brightness/BrightnessSliderView.java
index e051dab..92006a4 100644
--- a/packages/SystemUI/src/com/android/systemui/settings/brightness/BrightnessSliderView.java
+++ b/packages/SystemUI/src/com/android/systemui/settings/brightness/BrightnessSliderView.java
@@ -63,6 +63,7 @@
@Override
protected void onFinishInflate() {
super.onFinishInflate();
+ setLayerType(LAYER_TYPE_HARDWARE, null);
mSlider = requireViewById(R.id.slider);
mSlider.setAccessibilityLabel(getContentDescription().toString());
diff --git a/packages/SystemUI/src/com/android/systemui/shade/GlanceableHubContainerController.kt b/packages/SystemUI/src/com/android/systemui/shade/GlanceableHubContainerController.kt
index 8f6b9d0..a8481cd 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.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 @@
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/row/NotificationBackgroundView.java b/packages/SystemUI/src/com/android/systemui/statusbar/notification/row/NotificationBackgroundView.java
index ed3a38d..d0db514 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 @@
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 @@
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,16 +293,30 @@
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. */
public void setExpandAnimationSize(int width, int height) {
mExpandAnimationHeight = height;
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 8a1a4f1..fd67586 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 @@
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 @@
}
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 @@
}
}
- 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 5e719b1..d8a16ce 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 @@
};
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 516ec31..4ae5e69 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.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 @@
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 @@
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 @@
/** 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 ca19da5..bf3b2c9 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 @@
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 @@
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/pipeline/dagger/StatusBarPipelineModule.kt b/packages/SystemUI/src/com/android/systemui/statusbar/pipeline/dagger/StatusBarPipelineModule.kt
index 6e24412..4129b3a 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 @@
@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 f573530..36c23d3 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 @@
// 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 0d53277..40bb67f 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.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 @@
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 @@
MediaProjectionManager mediaProjectionManager,
IActivityManager activityManager,
PackageManager packageManager,
+ TelephonyManager telephonyManager,
@Main Handler mainHandler,
@Background Executor bgExecutor,
SensitiveNotificationProtectionControllerLogger logger) {
@@ -191,26 +196,18 @@
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 @@
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 @@
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 @@
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 2b3fb70..68bb6c3 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 @@
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 @@
*/
interface SystemBarUtilsProxy {
fun getStatusBarHeight(): Int
+ fun getStatusBarHeaderHeightKeyguard(): Int
}
class SystemBarUtilsProxyImpl
@@ -37,6 +40,13 @@
@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 10137a0..2314f01 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 @@
.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 7861ded..3953188 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 @@
/**
* 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 693a835..b300885 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 @@
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 @@
* ```
*/
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 @@
* 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 d52e911..9aac8e2 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.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 @@
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 @@
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 f534ba5..8435a03 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.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 @@
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 4270236..ac5823e 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 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 @@
@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 @@
@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 @@
@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 @@
@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 085b70e..671b09b 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 @@
}
@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 @@
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 @@
// 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 @@
// 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 @@
// 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 @@
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 @@
}
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 5e3a142..2f650c4 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 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 @@
@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 @@
@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 @@
@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 @@
@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 9aee5b6..616aac7 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 @@
@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 @@
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 @@
@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 c47f0bc..ba2efe6 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,245 +23,298 @@
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 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 SMALL_CLOCK_TOP_NON_SPLIT_SHADE =
- context.resources.getDimensionPixelSize(R.dimen.keyguard_clock_top_margin) +
- Utils.getStatusBarHeaderHeightKeyguard(context)
+ 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_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 CLOCK_FADE_TRANSLATION_Y
+ get() = context.resources.getDimensionPixelSize(customR.dimen.small_clock_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 =
- 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 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)
- }
-
- @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)
- }
-
- @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)
- }
-
- @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)
- }
-
- @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)
- }
-
- @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)
- }
-
- @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))
- }
-
- @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))
- }
-
- @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
- )
+ 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)
+ }
)
- }
- 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
+ kosmos = testKosmos()
+ with(kosmos) {
+ underTest =
+ ClockSection(
+ keyguardClockInteractor,
+ keyguardClockViewModel,
+ context,
+ keyguardSmartspaceViewModel,
+ { keyguardBlueprintInteractor },
+ )
}
}
+ @Test
+ 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() =
+ 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() =
+ 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() =
+ 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() =
+ 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() =
+ 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() =
+ 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() =
+ 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() =
+ 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 assertLargeClockTop(cs: ConstraintSet, expectedLargeClockTopMargin: Int) {
val largeClockConstraint = cs.getConstraint(R.id.lockscreen_clock_view_large)
assertThat(largeClockConstraint.layout.topToTop).isEqualTo(ConstraintSet.PARENT_ID)
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 01754c4..1d98dc3 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 @@
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.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 @@
@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 a08e491..af785c2 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.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 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 @@
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 8f73811..b3cfcf2 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.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 @@
@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 @@
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 @@
// 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 @@
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 @@
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 @@
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 @@
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 @@
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 @@
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 @@
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 @@
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 @@
// 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 @@
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 @@
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 @@
eq(100),
eq(true)
)
- assertThat(mediaDataLoadedStates).isEqualTo(mediaDataLoadingModel)
assertThat(
hasActiveMediaOrRecommendation(
selectedUserEntries,
@@ -766,7 +788,7 @@
)
.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 @@
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 @@
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 @@
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 @@
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 @@
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 @@
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 @@
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 @@
.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 @@
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 @@
eq(100),
eq(true)
)
- assertThat(mediaDataLoadedStates).isEqualTo(mediaLoadedStatesModel)
+ assertThat(sortedMedia?.values).containsExactly(controlCommonModel, recsCommonModel)
assertThat(
hasActiveMediaOrRecommendation(
selectedUserEntries,
@@ -985,7 +1017,6 @@
)
.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 @@
@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 @@
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 @@
// 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 ee03236..fd9daf8 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.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 @@
}
}
+ @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 7b73528c..efd7f99 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.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 @@
/** 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 358709f..3e20f68 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.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 @@
@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 @@
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 4ace163..2127057 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.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 @@
@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 @@
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 @@
mediaProjectionManager,
activityManager,
packageManager,
+ telephonyManager,
mockExecutorHandler(executor),
executor,
logger
@@ -407,6 +413,26 @@
}
@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 @@
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 353d970..9dcd946 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 @@
// 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 @@
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 bff10a1..1200866 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 @@
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 9ec1481..5f9f6b4 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 @@
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 4f2310f..5e5f8cb 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 @@
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 8954231..90a93f4 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/src/com/android/systemui/keyguard/shared/model/SettingsClockSize.kt b/packages/SystemUI/tests/utils/src/com/android/systemui/keyguard/data/repository/KeyguardSmartspaceRepositoryKosmos.kt
similarity index 69%
copy from packages/SystemUI/src/com/android/systemui/keyguard/shared/model/SettingsClockSize.kt
copy to packages/SystemUI/tests/utils/src/com/android/systemui/keyguard/data/repository/KeyguardSmartspaceRepositoryKosmos.kt
index c6b0f58..dc7103f 100644
--- a/packages/SystemUI/src/com/android/systemui/keyguard/shared/model/SettingsClockSize.kt
+++ b/packages/SystemUI/tests/utils/src/com/android/systemui/keyguard/data/repository/KeyguardSmartspaceRepositoryKosmos.kt
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2023 The Android Open Source Project
+ * 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.
@@ -12,12 +12,10 @@
* 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.data.repository
-enum class SettingsClockSize {
- DYNAMIC,
- SMALL,
-}
+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 87d6c17..5256ce4 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.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 @@
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 0000000..b5d5d64
--- /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
similarity index 71%
rename from packages/SystemUI/src/com/android/systemui/keyguard/shared/model/SettingsClockSize.kt
rename to packages/SystemUI/tests/utils/src/com/android/systemui/keyguard/ui/binder/KeyguardBlueprintViewBinderKosmos.kt
index c6b0f58..24d2c2f 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
-enum class SettingsClockSize {
- DYNAMIC,
- SMALL,
-}
+import android.os.fakeExecutorHandler
+import com.android.systemui.kosmos.Kosmos
+
+val Kosmos.keyguardBlueprintViewBinder by
+ Kosmos.Fixture { KeyguardBlueprintViewBinder(fakeExecutorHandler) }
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/viewmodel/KeyguardBlueprintViewModelKosmos.kt
similarity index 67%
copy from packages/SystemUI/src/com/android/systemui/keyguard/shared/model/SettingsClockSize.kt
copy to packages/SystemUI/tests/utils/src/com/android/systemui/keyguard/ui/viewmodel/KeyguardBlueprintViewModelKosmos.kt
index c6b0f58..63b87c0 100644
--- a/packages/SystemUI/src/com/android/systemui/keyguard/shared/model/SettingsClockSize.kt
+++ b/packages/SystemUI/tests/utils/src/com/android/systemui/keyguard/ui/viewmodel/KeyguardBlueprintViewModelKosmos.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.viewmodel
-enum class SettingsClockSize {
- DYNAMIC,
- SMALL,
-}
+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 a048d3c..6d46694 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 @@
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 0000000..d33d594
--- /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 0000000..461eaa2
--- /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 0000000..9a181cd
--- /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 2f3d3c3..b3fb15f 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 @@
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 2cdf76d..7f6a7bd 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 @@
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 @@
)
}
+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 0000000..eeaa9db
--- /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 0000000..a47b2e8
--- /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 0000000..9eeb345
--- /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 d38baba..7e993b4 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 f24037d..dce22f8b 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 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 @@
* 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 590a1ef..0c3d40d 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 c130cee..1dc3b73 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 c96688c..7ceb3bb 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.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.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 @@
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 ce9d180..044a064 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.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 @@
/**
* 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 3a38406..cd1ef88 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 @@
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 @@
+ ", 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 @@
}
}
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 @@
}
}
+ @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 0353d5a..5f0071d 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 @@
String op = nextArg(args, argIndex);
argIndex++;
- if ("--help".equals(op)) {
+ if ("--help".equals(op) || "-h".equals(op)) {
showDumpUsage(pw);
return;
}
@@ -1548,19 +1548,17 @@
}
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);
- }
- }
- return;
- }
- showDumpUsage(pw);
+ // 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);
+ }
+ }
}
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 3c25835..9b72288 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 @@
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 @@
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 @@
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 @@
throw e;
}
} catch (DeviceCreationException e) {
- InputManagerGlobal.getInstance().removeUniqueIdAssociationByPort(phys);
+ InputManagerGlobal.getInstance().removeUniqueIdAssociation(phys);
throw e;
}
diff --git a/services/contextualsearch/flags/flags.aconfig b/services/contextualsearch/flags/flags.aconfig
new file mode 100644
index 0000000..6d2da06
--- /dev/null
+++ b/services/contextualsearch/flags/flags.aconfig
@@ -0,0 +1,10 @@
+package: "com.android.server.contextualsearch.flags"
+container: "system"
+
+flag {
+ name: "enable_exclude_persistent_ui"
+ namespace: "machine_learning"
+ description: "Excluding persistent UI from contextual search screenshot."
+ is_fixed_read_only: true
+ bug: "333312675"
+}
\ No newline at end of file
diff --git a/services/contextualsearch/java/com/android/server/contextualsearch/ContextualSearchManagerService.java b/services/contextualsearch/java/com/android/server/contextualsearch/ContextualSearchManagerService.java
index 16a9933..fdd1025 100644
--- a/services/contextualsearch/java/com/android/server/contextualsearch/ContextualSearchManagerService.java
+++ b/services/contextualsearch/java/com/android/server/contextualsearch/ContextualSearchManagerService.java
@@ -23,6 +23,11 @@
import static android.content.Intent.FLAG_ACTIVITY_NO_USER_ACTION;
import static android.content.pm.PackageManager.MATCH_FACTORY_ONLY;
import static android.content.pm.PackageManager.PERMISSION_GRANTED;
+import static android.view.WindowManager.LayoutParams.TYPE_NAVIGATION_BAR;
+import static android.view.WindowManager.LayoutParams.TYPE_NAVIGATION_BAR_PANEL;
+import static android.view.WindowManager.LayoutParams.TYPE_STATUS_BAR;
+
+import static com.android.server.contextualsearch.flags.Flags.enableExcludePersistentUi;
import android.annotation.NonNull;
import android.annotation.Nullable;
@@ -66,6 +71,7 @@
import java.util.ArrayList;
import java.util.List;
import java.util.Objects;
+import java.util.Set;
public class ContextualSearchManagerService extends SystemService {
@@ -192,7 +198,13 @@
}
final ScreenCapture.ScreenshotHardwareBuffer shb;
if (mWmInternal != null) {
- shb = mWmInternal.takeAssistScreenshot();
+ if (enableExcludePersistentUi()) {
+ shb = mWmInternal.takeAssistScreenshot(
+ Set.of(TYPE_STATUS_BAR, TYPE_NAVIGATION_BAR, TYPE_NAVIGATION_BAR_PANEL));
+ } else {
+ shb = mWmInternal.takeAssistScreenshot(/* windowTypesToExclude= */ Set.of());
+ }
+
} else {
shb = null;
}
diff --git a/services/core/Android.bp b/services/core/Android.bp
index e095fa3..300b147 100644
--- a/services/core/Android.bp
+++ b/services/core/Android.bp
@@ -234,7 +234,6 @@
"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 26e9bf5..2fa0be2 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 @@
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 6612319..a1d75b2 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.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 @@
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 @@
/** @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 1f89ca7..8b64538 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 @@
"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 0673013..54e4571 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 3737d6f..0e81eb9 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 @@
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 d9947dd..dc2eff4 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 @@
mApiCallNumber = 0;
}
- void addApiCall(String str) {
+ synchronized void addApiCall(String str) {
mApiCalls[mCurr] = str;
mCurr++;
mCurr %= mSize;
@@ -243,7 +243,7 @@
}
@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 c68ef9b..a7dd243 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 @@
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 b0fbab6..0000000
--- 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 58cc560..067a1c9 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 606a6be..16a45cd 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 10b5eff..e43d086 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 73df594..f32c11d 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 @@
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 @@
/**
* 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 @@
/**
* 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 @@
}
@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 @@
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 @@
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 @@
// Native callback
@SuppressWarnings("unused")
- private String[] getInputUniqueIdAssociationsByPort() {
+ private String[] getInputUniqueIdAssociations() {
final Map<String, String> associations;
synchronized (mAssociationsLock) {
- associations = new HashMap<>(mUniqueIdAssociationsByPort);
- }
-
- return flatten(associations);
- }
-
- // Native callback
- @SuppressWarnings("unused")
- private String[] getInputUniqueIdAssociationsByDescriptor() {
- 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 dbbbed3..d132449 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 @@
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 dbdac41..7956e03 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 @@
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 808e296..7bd47f5 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 @@
@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/media/MediaServerUtils.java b/services/core/java/com/android/server/media/MediaServerUtils.java
index 6a954d6..f16d426 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 @@
}
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 ebea05d..bff3d39 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_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_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.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.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 @@
// 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 @@
| 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 @@
}
}
}
+ 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 @@
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 @@
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 @@
@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 @@
}
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 @@
&& (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 @@
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 c69bead..e75d0a3 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.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 @@
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 20b7fd4..4a3812b 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 @@
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 2859871..af3db6c 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 @@
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 af339df..8f6aa95 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 @@
}
}
+ @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 2005b17..6a25f64 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 @@
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 @@
}
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 @@
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 d035084..66ecd6e 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 @@
}
}
+ @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 9484d0d..5f04a0b 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 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.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 @@
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 @@
// 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 @@
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 @@
}
}
-
/**
* 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 b664e39..309a448 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 @@
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 @@
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 c091b8e..eb91a72 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 101983e..6e17fd3 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.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.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 @@
@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 @@
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 @@
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 @@
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 @@
@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 @@
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 @@
}
}
}
- 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 37f0450..5a5f7ef 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 @@
* 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 3094b18..8d378a0 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 @@
* 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 @@
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 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 2afbcd6..84dc1d7 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 19f3449..6ec557a 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.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.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 54e932a..f925b5f 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_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.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 @@
mLetterboxUiController.dump(pw, prefix);
pw.println(prefix + "mCameraCompatControlState="
- + AppCompatTaskInfo.cameraCompatControlStateToString(mCameraCompatControlState));
+ + cameraCompatControlStateToString(mCameraCompatControlState));
pw.println(prefix + "mCameraCompatControlEnabled=" + mCameraCompatControlEnabled);
}
@@ -4658,6 +4658,12 @@
// at #postWindowRemoveCleanupLocked
return false;
}
+ // Do not transfer if the orientation doesn't match, redraw starting window while it is
+ // on top will cause flicker.
+ if (fromActivity.getRequestedConfigurationOrientation()
+ != getRequestedConfigurationOrientation()) {
+ return false;
+ }
// In this case, the starting icon has already been displayed, so start
// letting windows get shown immediately without any more transitions.
if (fromActivity.mVisible) {
@@ -8363,7 +8369,7 @@
* 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 +8384,11 @@
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/ActivityStarter.java b/services/core/java/com/android/server/wm/ActivityStarter.java
index 08baf3b..3303367 100644
--- a/services/core/java/com/android/server/wm/ActivityStarter.java
+++ b/services/core/java/com/android/server/wm/ActivityStarter.java
@@ -1728,7 +1728,7 @@
// Get top task at beginning because the order may be changed when reusing existing task.
final Task prevTopRootTask = mPreferredTaskDisplayArea.getFocusedRootTask();
final Task prevTopTask = prevTopRootTask != null ? prevTopRootTask.getTopLeafTask() : null;
- final Task reusedTask = getReusableTask();
+ final Task reusedTask = resolveReusableTask();
// If requested, freeze the task list
if (mOptions != null && mOptions.freezeRecentTasksReordering()
@@ -2729,7 +2729,7 @@
* Decide whether the new activity should be inserted into an existing task. Returns null
* if not or an ActivityRecord with the task into which the new activity should be added.
*/
- private Task getReusableTask() {
+ private Task resolveReusableTask() {
// If a target task is specified, try to reuse that one
if (mOptions != null && mOptions.getLaunchTaskId() != INVALID_TASK_ID) {
Task launchTask = mRootWindowContainer.anyTaskForId(mOptions.getLaunchTaskId());
@@ -2757,7 +2757,14 @@
// There can be one and only one instance of single instance activity in the
// history, and it is always in its own unique task, so we do a special search.
intentActivity = mRootWindowContainer.findActivity(mIntent, mStartActivity.info,
- mStartActivity.isActivityTypeHome());
+ false /* compareIntentFilters */);
+ // Removes the existing singleInstance Activity if we're starting it as home
+ // activity, while the existing one is not.
+ if (intentActivity != null && mStartActivity.isActivityTypeHome()
+ && !intentActivity.isActivityTypeHome()) {
+ intentActivity.destroyIfPossible("Removes redundant singleInstance");
+ intentActivity = null;
+ }
} else if ((mLaunchFlags & FLAG_ACTIVITY_LAUNCH_ADJACENT) != 0) {
// For the launch adjacent case we only want to put the activity in an existing
// task if the activity already exists in the history.
diff --git a/services/core/java/com/android/server/wm/ConfigurationContainer.java b/services/core/java/com/android/server/wm/ConfigurationContainer.java
index be7c18c..31754bf 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 @@
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 00d42e0..95ec75c 100644
--- a/services/core/java/com/android/server/wm/DisplayContent.java
+++ b/services/core/java/com/android/server/wm/DisplayContent.java
@@ -246,6 +246,7 @@
import android.window.DisplayWindowPolicyController;
import android.window.IDisplayAreaOrganizer;
import android.window.ScreenCapture;
+import android.window.ScreenCapture.LayerCaptureArgs;
import android.window.SystemPerformanceHinter;
import android.window.TransitionRequestInfo;
@@ -2456,7 +2457,6 @@
config.windowConfiguration.setBounds(mTmpRect);
config.windowConfiguration.setMaxBounds(mTmpRect);
config.windowConfiguration.setWindowingMode(getWindowingMode());
- config.windowConfiguration.setDisplayWindowingMode(getWindowingMode());
computeScreenAppConfiguration(config, dw, dh, displayInfo.rotation);
@@ -2834,11 +2834,6 @@
}
}
- @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 +2951,6 @@
void onDisplayChanged(DisplayContent dc) {
super.onDisplayChanged(dc);
updateSystemGestureExclusionLimit();
- updateKeepClearAreas();
}
void updateSystemGestureExclusionLimit() {
@@ -4035,7 +4029,6 @@
}
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
@@ -5232,7 +5225,7 @@
/**
* Creates a LayerCaptureArgs object to represent the entire DisplayContent
*/
- ScreenCapture.LayerCaptureArgs getLayerCaptureArgs() {
+ LayerCaptureArgs getLayerCaptureArgs(Set<Integer> windowTypesToExclude) {
if (!mWmService.mPolicy.isScreenOn()) {
if (DEBUG_SCREENSHOT) {
Slog.i(TAG_WM, "Attempted to take screenshot while display was off.");
@@ -5242,8 +5235,23 @@
getBounds(mTmpRect);
mTmpRect.offsetTo(0, 0);
- return new ScreenCapture.LayerCaptureArgs.Builder(getSurfaceControl())
- .setSourceCrop(mTmpRect).build();
+ LayerCaptureArgs.Builder builder = new LayerCaptureArgs.Builder(getSurfaceControl())
+ .setSourceCrop(mTmpRect);
+
+ if (!windowTypesToExclude.isEmpty()) {
+ ArrayList<SurfaceControl> surfaceControls = new ArrayList<>();
+ forAllWindows(
+ window -> {
+ if (windowTypesToExclude.contains(window.getWindowType())) {
+ surfaceControls.add(window.mSurfaceControl);
+ }
+ }, true
+ );
+ if (!surfaceControls.isEmpty()) {
+ builder.setExcludeLayers(surfaceControls.toArray(new SurfaceControl[0]));
+ }
+ }
+ return builder.build();
}
@Override
@@ -6156,6 +6164,7 @@
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 2dbb370..092ff3d 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 @@
}
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 3a04bcd..dfee164 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 @@
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 390a7cf..9d3ffa9 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.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 @@
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 90a3b253..2c27b98 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 @@
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 fc85af5..7a8bea0 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 @@
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 74dad91..b24d53b 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/Transition.java b/services/core/java/com/android/server/wm/Transition.java
index 1b380aa..664019a 100644
--- a/services/core/java/com/android/server/wm/Transition.java
+++ b/services/core/java/com/android/server/wm/Transition.java
@@ -112,7 +112,6 @@
import java.util.ArrayList;
import java.util.List;
import java.util.Objects;
-import java.util.concurrent.Executor;
import java.util.function.Predicate;
/**
@@ -3254,9 +3253,15 @@
// Whether this is in a Task with embedded activity.
flags |= FLAG_IN_TASK_WITH_EMBEDDED_ACTIVITY;
}
- if (parentTask.forAllActivities(ActivityRecord::hasStartingWindow)) {
- // The starting window should cover all windows inside the leaf Task.
- flags |= FLAG_IS_BEHIND_STARTING_WINDOW;
+ final ActivityRecord starting = parentTask.topActivityContainsStartingWindow();
+ if (starting != null) {
+ if (starting == record || (starting.mStartingData != null
+ && starting.mStartingData.mAssociatedTask != null)) {
+ flags |= FLAG_IS_BEHIND_STARTING_WINDOW;
+ } else if (record != null && parentTask.mChildren.indexOf(record)
+ < parentTask.mChildren.indexOf(starting)) {
+ flags |= FLAG_IS_BEHIND_STARTING_WINDOW;
+ }
}
if (isWindowFillingTask(wc, parentTask)) {
// Whether the container fills its parent Task bounds.
diff --git a/services/core/java/com/android/server/wm/WindowManagerInternal.java b/services/core/java/com/android/server/wm/WindowManagerInternal.java
index 7e2ffd4..407b5d5 100644
--- a/services/core/java/com/android/server/wm/WindowManagerInternal.java
+++ b/services/core/java/com/android/server/wm/WindowManagerInternal.java
@@ -50,6 +50,7 @@
import android.view.WindowManager.DisplayImePolicy;
import android.view.inputmethod.ImeTracker;
import android.window.ScreenCapture;
+import android.window.ScreenCapture.ScreenshotHardwareBuffer;
import com.android.internal.policy.KeyInterceptionInfo;
import com.android.server.input.InputManagerService;
@@ -1073,8 +1074,9 @@
public abstract boolean moveFocusToAdjacentEmbeddedActivityIfNeeded();
/**
- * Returns an instance of {@link ScreenCapture.ScreenshotHardwareBuffer} containing the current
+ * Returns an instance of {@link ScreenshotHardwareBuffer} containing the current
* screenshot.
*/
- public abstract ScreenCapture.ScreenshotHardwareBuffer takeAssistScreenshot();
+ public abstract ScreenshotHardwareBuffer takeAssistScreenshot(
+ Set<Integer> windowTypesToExclude);
}
diff --git a/services/core/java/com/android/server/wm/WindowManagerService.java b/services/core/java/com/android/server/wm/WindowManagerService.java
index 1496ae0..07e534c 100644
--- a/services/core/java/com/android/server/wm/WindowManagerService.java
+++ b/services/core/java/com/android/server/wm/WindowManagerService.java
@@ -320,6 +320,7 @@
import android.window.ITrustedPresentationListener;
import android.window.InputTransferToken;
import android.window.ScreenCapture;
+import android.window.ScreenCapture.ScreenshotHardwareBuffer;
import android.window.SystemPerformanceHinter;
import android.window.TaskSnapshot;
import android.window.TrustedPresentationThresholds;
@@ -384,6 +385,7 @@
import java.util.NoSuchElementException;
import java.util.Objects;
import java.util.Optional;
+import java.util.Set;
import java.util.concurrent.CountDownLatch;
import java.util.concurrent.TimeUnit;
import java.util.function.Function;
@@ -4172,7 +4174,7 @@
}
@Nullable
- private ScreenCapture.ScreenshotHardwareBuffer takeAssistScreenshot() {
+ private ScreenshotHardwareBuffer takeAssistScreenshot(Set<Integer> windowTypesToExclude) {
if (!checkCallingPermission(READ_FRAME_BUFFER, "requestAssistScreenshot()")) {
throw new SecurityException("Requires READ_FRAME_BUFFER permission");
}
@@ -4187,11 +4189,11 @@
}
captureArgs = null;
} else {
- captureArgs = displayContent.getLayerCaptureArgs();
+ captureArgs = displayContent.getLayerCaptureArgs(windowTypesToExclude);
}
}
- final ScreenCapture.ScreenshotHardwareBuffer screenshotBuffer;
+ final ScreenshotHardwareBuffer screenshotBuffer;
if (captureArgs != null) {
ScreenCapture.SynchronousScreenCaptureListener syncScreenCapture =
ScreenCapture.createSyncCaptureListener();
@@ -4217,7 +4219,8 @@
*/
@Override
public boolean requestAssistScreenshot(final IAssistDataReceiver receiver) {
- final ScreenCapture.ScreenshotHardwareBuffer shb = takeAssistScreenshot();
+ final ScreenshotHardwareBuffer shb =
+ takeAssistScreenshot(/* windowTypesToExclude= */ Set.of());
final Bitmap bm = shb != null ? shb.asBitmap() : null;
FgThread.getHandler().post(() -> {
try {
@@ -4272,7 +4275,7 @@
mTmpRect.offsetTo(0, 0);
final SurfaceControl sc = task.getSurfaceControl();
- final ScreenCapture.ScreenshotHardwareBuffer buffer = ScreenCapture.captureLayers(
+ final ScreenshotHardwareBuffer buffer = ScreenCapture.captureLayers(
layerCaptureArgsBuilder.setLayer(sc).setSourceCrop(mTmpRect).build());
if (buffer == null) {
Slog.w(TAG, "Could not get screenshot buffer for taskId: " + taskId);
@@ -8807,9 +8810,9 @@
}
@Override
- public ScreenCapture.ScreenshotHardwareBuffer takeAssistScreenshot() {
+ public ScreenshotHardwareBuffer takeAssistScreenshot(Set<Integer> windowTypesToExclude) {
// WMS.takeAssistScreenshot takes care of the locking.
- return WindowManagerService.this.takeAssistScreenshot();
+ return WindowManagerService.this.takeAssistScreenshot(windowTypesToExclude);
}
}
diff --git a/services/core/java/com/android/server/wm/WindowOrganizerController.java b/services/core/java/com/android/server/wm/WindowOrganizerController.java
index 4180475..7afd34c 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 @@
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 5b8ef19..be18835 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 @@
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 @@
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 @@
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 @@
{"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 2f880ba..88c47f3 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 @@
jmethodID getVirtualKeyQuietTimeMillis;
jmethodID getExcludedDeviceNames;
jmethodID getInputPortAssociations;
- jmethodID getInputUniqueIdAssociationsByPort;
- jmethodID getInputUniqueIdAssociationsByDescriptor;
+ jmethodID getInputUniqueIdAssociations;
jmethodID getDeviceTypeAssociations;
jmethodID getKeyboardLayoutAssociations;
jmethodID getHoverTapTimeout;
@@ -635,13 +634,10 @@
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 @@
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 7e083ba..be235b3b 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 @@
@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 @@
// 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 @@
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 @@
});
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 @@
userHandle, /* parent= */ false);
int max = strictestAdmin != null
? strictestAdmin.maximumFailedPasswordsForWipe : 0;
+
if (max > 0 && policy.mFailedPasswordAttempts >= max) {
wipeData = true;
}
@@ -18398,6 +18417,14 @@
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 @@
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 @@
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 @@
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 95c4407..cc5573b 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 @@
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 bc8643f..daeaa98 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 @@
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 @@
@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 @@
@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 @@
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 @@
@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 @@
}
@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 901f24d..9f07aa8 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 @@
}
@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 4b578af..854bc0f 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 00c8ed1..74e854e4 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 @@
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 @@
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 @@
.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 510e7c4..5902caa 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.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 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.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 @@
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 @@
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 @@
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 @@
}
@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 @@
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 testCreateHintSession() throws Exception {
+ 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 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 @@
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 @@
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 @@
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 @@
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 @@
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 @@
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 @@
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 @@
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 @@
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 @@
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 @@
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 @@
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 @@
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 ae36839..983e694 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.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 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 @@
.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 @@
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 011f2e3..ce7a0a0 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.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.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.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.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.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.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 @@
@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 @@
}
@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 @@
}
@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 @@
}
@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 @@
// 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 130a8ca..f572e7a 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_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.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 @@
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 f724510..8add2f9 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 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 43f24750..5adfafb 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 @@
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 @@
}
@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 e42acba..30eb5ef 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 @@
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 9697c65..000162a 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 @@
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 @@
// 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 @@
}
@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 002a3d5..65a81c4 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 @@
// 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 4837fcb..a90a158 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 @@
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 @@
}
@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/TransitionTests.java b/services/tests/wmtests/src/com/android/server/wm/TransitionTests.java
index 42fe3a7..3288788 100644
--- a/services/tests/wmtests/src/com/android/server/wm/TransitionTests.java
+++ b/services/tests/wmtests/src/com/android/server/wm/TransitionTests.java
@@ -23,6 +23,7 @@
import static android.content.pm.ActivityInfo.SCREEN_ORIENTATION_NOSENSOR;
import static android.content.pm.ActivityInfo.SCREEN_ORIENTATION_UNSET;
import static android.view.WindowManager.LayoutParams.ROTATION_ANIMATION_SEAMLESS;
+import static android.view.WindowManager.LayoutParams.TYPE_APPLICATION_STARTING;
import static android.view.WindowManager.LayoutParams.TYPE_BASE_APPLICATION;
import static android.view.WindowManager.LayoutParams.TYPE_INPUT_METHOD;
import static android.view.WindowManager.LayoutParams.TYPE_NAVIGATION_BAR;
@@ -1665,7 +1666,11 @@
final Task task = createTask(mDisplayContent);
final ActivityRecord activity0 = createActivityRecord(task);
final ActivityRecord activity1 = createActivityRecord(task);
- doReturn(true).when(activity1).hasStartingWindow();
+ final WindowManager.LayoutParams attrs =
+ new WindowManager.LayoutParams(TYPE_APPLICATION_STARTING);
+ final TestWindowState startingWindow = createWindowState(attrs, activity1);
+ activity1.mStartingData = mock(StartingData.class);
+ activity1.addWindow(startingWindow);
// Start states.
changes.put(activity0,
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 38aac7c..eca51ae 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 @@
/** 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/services/voiceinteraction/java/com/android/server/voiceinteraction/VoiceInteractionManagerService.java b/services/voiceinteraction/java/com/android/server/voiceinteraction/VoiceInteractionManagerService.java
index 9729c68..e5d7b40e 100644
--- a/services/voiceinteraction/java/com/android/server/voiceinteraction/VoiceInteractionManagerService.java
+++ b/services/voiceinteraction/java/com/android/server/voiceinteraction/VoiceInteractionManagerService.java
@@ -127,6 +127,7 @@
import java.util.List;
import java.util.Locale;
import java.util.Objects;
+import java.util.Set;
import java.util.concurrent.Executor;
/**
@@ -2739,7 +2740,7 @@
}
}
final ScreenCapture.ScreenshotHardwareBuffer shb =
- mWmInternal.takeAssistScreenshot();
+ mWmInternal.takeAssistScreenshot(/* windowTypesToExclude= */ Set.of());
final Bitmap bm = shb != null ? shb.asBitmap() : null;
// Now that everything is fetched, putting it in the launchIntent.
if (bm != null) {
diff --git a/tests/FsVerityTest/FsVerityTestApp/src/com/android/fsverity/Helper.java b/tests/FsVerityTest/FsVerityTestApp/src/com/android/fsverity/Helper.java
index 2ed4fec..c52be7c 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 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 @@
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 8d2b927..f6f766a 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 @@
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.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 android.view.Display
+import android.view.PointerIcon
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.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 @@
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 6c4e4c3..3c734bc 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"