Merge "Restore bounds when returning from maximized window bounds" into main
diff --git a/AconfigFlags.bp b/AconfigFlags.bp
index 233fb8a..65feadb 100644
--- a/AconfigFlags.bp
+++ b/AconfigFlags.bp
@@ -158,6 +158,7 @@
aconfig_declarations {
name: "com.android.window.flags.window-aconfig",
package: "com.android.window.flags",
+ container: "system",
srcs: ["core/java/android/window/flags/*.aconfig"],
}
@@ -171,6 +172,7 @@
aconfig_declarations {
name: "android.hardware.devicestate.feature.flags-aconfig",
package: "android.hardware.devicestate.feature.flags",
+ container: "system",
srcs: ["core/java/android/hardware/devicestate/feature/*.aconfig"],
}
@@ -184,6 +186,7 @@
aconfig_declarations {
name: "com.android.hardware.input.input-aconfig",
package: "com.android.hardware.input",
+ container: "system",
srcs: ["core/java/android/hardware/input/*.aconfig"],
}
@@ -203,6 +206,7 @@
aconfig_declarations {
name: "com.android.text.flags-aconfig",
package: "com.android.text.flags",
+ container: "system",
srcs: ["core/java/android/text/flags/*.aconfig"],
}
@@ -221,6 +225,7 @@
aconfig_declarations {
name: "android.location.flags-aconfig",
package: "android.location.flags",
+ container: "system",
srcs: [
"location/java/android/location/flags/*.aconfig",
],
@@ -242,6 +247,7 @@
aconfig_declarations {
name: "android.nfc.flags-aconfig",
package: "android.nfc",
+ container: "system",
srcs: ["nfc/java/android/nfc/*.aconfig"],
}
@@ -272,6 +278,7 @@
aconfig_declarations {
name: "android.security.flags-aconfig",
package: "android.security",
+ container: "system",
srcs: ["core/java/android/security/*.aconfig"],
}
@@ -292,6 +299,7 @@
aconfig_declarations {
name: "android.app.usage.flags-aconfig",
package: "android.app.usage",
+ container: "system",
srcs: ["core/java/android/app/usage/*.aconfig"],
}
@@ -374,6 +382,7 @@
aconfig_declarations {
name: "android.companion.virtualdevice.flags-aconfig",
package: "android.companion.virtualdevice.flags",
+ container: "system",
srcs: ["core/java/android/companion/virtual/flags/*.aconfig"],
}
@@ -386,6 +395,7 @@
aconfig_declarations {
name: "android.companion.virtual.flags-aconfig",
package: "android.companion.virtual.flags",
+ container: "system",
srcs: ["core/java/android/companion/virtual/*.aconfig"],
}
@@ -393,6 +403,7 @@
aconfig_declarations {
name: "android.view.inputmethod.flags-aconfig",
package: "android.view.inputmethod",
+ container: "system",
srcs: ["core/java/android/view/inputmethod/flags.aconfig"],
}
@@ -406,6 +417,7 @@
aconfig_declarations {
name: "android.os.vibrator.flags-aconfig",
package: "android.os.vibrator",
+ container: "system",
srcs: ["core/java/android/os/vibrator/*.aconfig"],
}
@@ -419,6 +431,7 @@
aconfig_declarations {
name: "android.view.flags-aconfig",
package: "android.view.flags",
+ container: "system",
srcs: ["core/java/android/view/flags/*.aconfig"],
}
@@ -437,6 +450,7 @@
aconfig_declarations {
name: "android.view.accessibility.flags-aconfig",
package: "android.view.accessibility",
+ container: "system",
srcs: ["core/java/android/view/accessibility/flags/*.aconfig"],
}
@@ -455,6 +469,7 @@
aconfig_declarations {
name: "android.hardware.flags-aconfig",
package: "android.hardware.flags",
+ container: "system",
srcs: ["core/java/android/hardware/flags/*.aconfig"],
}
@@ -468,6 +483,7 @@
aconfig_declarations {
name: "android.widget.flags-aconfig",
package: "android.widget.flags",
+ container: "system",
srcs: ["core/java/android/widget/flags/*.aconfig"],
}
@@ -487,6 +503,7 @@
aconfig_declarations {
name: "android.content.pm.flags-aconfig",
package: "android.content.pm",
+ container: "system",
srcs: ["core/java/android/content/pm/flags.aconfig"],
}
@@ -507,6 +524,7 @@
aconfig_declarations {
name: "android.content.res.flags-aconfig",
package: "android.content.res",
+ container: "system",
srcs: ["core/java/android/content/res/*.aconfig"],
}
@@ -527,6 +545,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"],
}
@@ -547,6 +566,7 @@
aconfig_declarations {
name: "com.android.media.flags.editing-aconfig",
package: "com.android.media.editing.flags",
+ container: "system",
srcs: [
"media/java/android/media/flags/editing.aconfig",
],
@@ -562,6 +582,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",
],
@@ -577,6 +598,7 @@
aconfig_declarations {
name: "android.media.tv.flags-aconfig",
package: "android.media.tv.flags",
+ container: "system",
srcs: ["media/java/android/media/tv/flags/media_tv.aconfig"],
}
@@ -590,6 +612,7 @@
aconfig_declarations {
name: "android.app.ondeviceintelligence-aconfig",
package: "android.app.ondeviceintelligence.flags",
+ container: "system",
srcs: ["core/java/android/app/ondeviceintelligence/flags/ondevice_intelligence.aconfig"],
}
@@ -603,6 +626,7 @@
aconfig_declarations {
name: "android.permission.flags-aconfig",
package: "android.permission.flags",
+ container: "system",
srcs: ["core/java/android/permission/flags.aconfig"],
}
@@ -622,6 +646,7 @@
aconfig_declarations {
name: "android.database.sqlite-aconfig",
package: "android.database.sqlite",
+ container: "system",
srcs: ["core/java/android/database/sqlite/*.aconfig"],
}
@@ -641,6 +666,7 @@
aconfig_declarations {
name: "android.hardware.biometrics.flags-aconfig",
package: "android.hardware.biometrics",
+ container: "system",
srcs: ["core/java/android/hardware/biometrics/flags.aconfig"],
}
@@ -692,6 +718,7 @@
aconfig_declarations {
name: "android.multiuser.flags-aconfig",
package: "android.multiuser",
+ container: "system",
srcs: ["core/java/android/content/pm/multiuser.aconfig"],
}
@@ -705,6 +732,7 @@
aconfig_declarations {
name: "android.app.flags-aconfig",
package: "android.app",
+ container: "system",
srcs: ["core/java/android/app/*.aconfig"],
}
@@ -718,6 +746,7 @@
aconfig_declarations {
name: "android.hardware.radio.flags-aconfig",
package: "android.hardware.radio",
+ container: "system",
srcs: ["core/java/android/hardware/radio/*.aconfig"],
}
@@ -731,6 +760,7 @@
aconfig_declarations {
name: "android.credentials.flags-aconfig",
package: "android.credentials.flags",
+ container: "system",
srcs: ["core/java/android/credentials/flags.aconfig"],
exportable: true,
}
@@ -752,6 +782,7 @@
aconfig_declarations {
name: "android.view.contentprotection.flags-aconfig",
package: "android.view.contentprotection.flags",
+ container: "system",
srcs: ["core/java/android/view/contentprotection/flags/*.aconfig"],
}
@@ -765,6 +796,7 @@
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"],
}
@@ -778,6 +810,7 @@
aconfig_declarations {
name: "android.service.appprediction.flags-aconfig",
package: "android.service.appprediction.flags",
+ container: "system",
srcs: ["core/java/android/service/appprediction/flags/*.aconfig"],
}
@@ -791,6 +824,7 @@
aconfig_declarations {
name: "android.service.controls.flags-aconfig",
package: "android.service.controls.flags",
+ container: "system",
srcs: ["core/java/android/service/controls/flags/*.aconfig"],
}
@@ -804,6 +838,7 @@
aconfig_declarations {
name: "android.service.voice.flags-aconfig",
package: "android.service.voice.flags",
+ container: "system",
srcs: ["core/java/android/service/voice/flags/*.aconfig"],
}
@@ -817,6 +852,7 @@
aconfig_declarations {
name: "android.service.autofill.flags-aconfig",
package: "android.service.autofill",
+ container: "system",
srcs: [
"services/autofill/bugfixes.aconfig",
"services/autofill/features.aconfig",
@@ -833,6 +869,7 @@
aconfig_declarations {
name: "android.companion.flags-aconfig",
package: "android.companion",
+ container: "system",
srcs: ["core/java/android/companion/*.aconfig"],
}
@@ -846,6 +883,7 @@
aconfig_declarations {
name: "android.net.platform.flags-aconfig",
package: "android.net.platform.flags",
+ container: "system",
srcs: ["core/java/android/net/flags.aconfig"],
visibility: [":__subpackages__"],
}
@@ -854,6 +892,7 @@
aconfig_declarations {
name: "com.android.net.thread.platform.flags-aconfig",
package: "com.android.net.thread.platform.flags",
+ container: "system",
srcs: ["core/java/android/net/thread/flags.aconfig"],
}
@@ -874,6 +913,7 @@
aconfig_declarations {
name: "android.media.playback.flags-aconfig",
package: "com.android.media.playback.flags",
+ container: "system",
srcs: ["media/jni/playback_flags.aconfig"],
}
@@ -892,6 +932,7 @@
aconfig_declarations {
name: "android.net.vcn.flags-aconfig",
package: "android.net.vcn",
+ container: "system",
srcs: ["core/java/android/net/vcn/*.aconfig"],
}
@@ -905,6 +946,7 @@
aconfig_declarations {
name: "device_policy_aconfig_flags",
package: "android.app.admin.flags",
+ container: "system",
srcs: [
"core/java/android/app/admin/flags/flags.aconfig",
],
@@ -932,6 +974,7 @@
aconfig_declarations {
name: "android.service.chooser.flags-aconfig",
package: "android.service.chooser",
+ container: "system",
srcs: ["core/java/android/service/chooser/flags.aconfig"],
}
@@ -950,6 +993,7 @@
aconfig_declarations {
name: "framework-jobscheduler-job.flags-aconfig",
package: "android.app.job",
+ container: "system",
srcs: ["apex/jobscheduler/framework/aconfig/job.aconfig"],
}
@@ -963,6 +1007,7 @@
aconfig_declarations {
name: "android.service.dreams.flags-aconfig",
package: "android.service.dreams",
+ container: "system",
srcs: ["core/java/android/service/dreams/flags.aconfig"],
}
@@ -1003,6 +1048,7 @@
aconfig_declarations {
name: "android.app.contextualsearch.flags-aconfig",
package: "android.app.contextualsearch.flags",
+ container: "system",
srcs: ["core/java/android/app/contextualsearch/flags.aconfig"],
}
@@ -1016,6 +1062,7 @@
aconfig_declarations {
name: "android.app.smartspace.flags-aconfig",
package: "android.app.smartspace.flags",
+ container: "system",
srcs: ["core/java/android/app/smartspace/flags.aconfig"],
}
@@ -1036,6 +1083,7 @@
aconfig_declarations {
name: "android.view.contentcapture.flags-aconfig",
package: "android.view.contentcapture.flags",
+ container: "system",
srcs: ["core/java/android/view/contentcapture/flags/*.aconfig"],
}
@@ -1049,6 +1097,7 @@
aconfig_declarations {
name: "android.hardware.usb.flags-aconfig",
package: "android.hardware.usb.flags",
+ container: "system",
srcs: ["core/java/android/hardware/usb/flags/*.aconfig"],
}
@@ -1069,6 +1118,7 @@
aconfig_declarations {
name: "android.tracing.flags-aconfig",
package: "android.tracing",
+ container: "system",
srcs: ["core/java/android/tracing/flags.aconfig"],
}
@@ -1087,6 +1137,7 @@
aconfig_declarations {
name: "android.appwidget.flags-aconfig",
package: "android.appwidget.flags",
+ container: "system",
srcs: ["core/java/android/appwidget/flags.aconfig"],
}
@@ -1100,6 +1151,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"],
}
@@ -1113,6 +1165,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",
@@ -1129,6 +1182,7 @@
aconfig_declarations {
name: "android.provider.flags-aconfig",
package: "android.provider",
+ container: "system",
srcs: ["core/java/android/provider/*.aconfig"],
}
@@ -1149,6 +1203,7 @@
aconfig_declarations {
name: "android.speech.flags-aconfig",
package: "android.speech.flags",
+ container: "system",
srcs: ["core/java/android/speech/flags/*.aconfig"],
}
@@ -1169,6 +1224,7 @@
aconfig_declarations {
name: "android.content.flags-aconfig",
package: "android.content.flags",
+ container: "system",
srcs: ["core/java/android/content/flags/flags.aconfig"],
}
@@ -1182,6 +1238,7 @@
aconfig_declarations {
name: "android.adaptiveauth.flags-aconfig",
package: "android.adaptiveauth",
+ container: "system",
srcs: ["core/java/android/adaptiveauth/*.aconfig"],
}
@@ -1195,6 +1252,7 @@
aconfig_declarations {
name: "android.crashrecovery.flags-aconfig",
package: "android.crashrecovery.flags",
+ container: "system",
srcs: ["packages/CrashRecovery/aconfig/flags.aconfig"],
}
@@ -1215,6 +1273,7 @@
aconfig_declarations {
name: "android.net.wifi.flags-aconfig",
package: "android.net.wifi.flags",
+ container: "system",
srcs: ["wifi/*.aconfig"],
}
@@ -1233,6 +1292,7 @@
aconfig_declarations {
name: "android.app.wearable.flags-aconfig",
package: "android.app.wearable",
+ container: "system",
srcs: ["core/java/android/app/wearable/*.aconfig"],
}
@@ -1245,6 +1305,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"],
}
@@ -1265,6 +1326,7 @@
aconfig_declarations {
name: "android.systemserver.flags-aconfig",
package: "android.server",
+ container: "system",
srcs: ["services/java/com/android/server/flags.aconfig"],
}
diff --git a/Android.bp b/Android.bp
index f6bfe65..4f715f8 100644
--- a/Android.bp
+++ b/Android.bp
@@ -150,7 +150,6 @@
":framework-javastream-protos",
":statslog-framework-java-gen", // FrameworkStatsLog.java
":audio_policy_configuration_V7_0",
- ":perfetto_trace_javastream_protos",
],
}
@@ -425,6 +424,7 @@
"audiopolicy-aidl-java",
"sounddose-aidl-java",
"modules-utils-expresslog",
+ "perfetto_trace_javastream_protos_jarjar",
],
}
@@ -664,6 +664,16 @@
visibility: ["//frameworks/base/api"],
}
+java_library {
+ name: "perfetto_trace_javastream_protos_jarjar",
+ srcs: [
+ ":perfetto_trace_javastream_protos",
+ ],
+ jarjar_rules: ":framework-jarjar-rules",
+ sdk_version: "core_platform",
+ installable: false,
+}
+
build = [
"AconfigFlags.bp",
"ProtoLibraries.bp",
diff --git a/Ravenwood.bp b/Ravenwood.bp
index c3b22c4..7c7c0e2 100644
--- a/Ravenwood.bp
+++ b/Ravenwood.bp
@@ -168,6 +168,7 @@
"services.core.ravenwood",
],
jarjar_rules: ":ravenwood-services-jarjar-rules",
+ visibility: ["//visibility:private"],
}
java_library {
@@ -179,6 +180,7 @@
"services.core.ravenwood",
],
jarjar_rules: ":ravenwood-services-jarjar-rules",
+ visibility: ["//visibility:private"],
}
java_library {
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/api/coverage/tools/ExtractFlaggedApis.kt b/api/coverage/tools/ExtractFlaggedApis.kt
index caa1929..d5adfd0 100644
--- a/api/coverage/tools/ExtractFlaggedApis.kt
+++ b/api/coverage/tools/ExtractFlaggedApis.kt
@@ -16,51 +16,69 @@
package android.platform.coverage
+import com.android.tools.metalava.model.ClassItem
+import com.android.tools.metalava.model.MethodItem
import com.android.tools.metalava.model.text.ApiFile
import java.io.File
import java.io.FileWriter
/** Usage: extract-flagged-apis <api text file> <output .pb file> */
fun main(args: Array<String>) {
- var cb = ApiFile.parseApi(listOf(File(args[0])))
- var builder = FlagApiMap.newBuilder()
+ val cb = ApiFile.parseApi(listOf(File(args[0])))
+ val builder = FlagApiMap.newBuilder()
for (pkg in cb.getPackages().packages) {
- var packageName = pkg.qualifiedName()
+ val packageName = pkg.qualifiedName()
pkg.allClasses()
.filter { it.methods().size > 0 }
.forEach {
- for (method in it.methods()) {
- val flagValue =
- method.modifiers
- .findAnnotation("android.annotation.FlaggedApi")
- ?.findAttribute("value")
- ?.value
- ?.value()
- if (flagValue != null && flagValue is String) {
- var api =
- JavaMethod.newBuilder()
- .setPackageName(packageName)
- .setClassName(it.fullName())
- .setMethodName(method.name())
- for (param in method.parameters()) {
- api.addParameters(param.type().toTypeString())
- }
- if (builder.containsFlagToApi(flagValue)) {
- var updatedApis =
- builder
- .getFlagToApiOrThrow(flagValue)
- .toBuilder()
- .addJavaMethods(api)
- .build()
- builder.putFlagToApi(flagValue, updatedApis)
- } else {
- var apis = FlaggedApis.newBuilder().addJavaMethods(api).build()
- builder.putFlagToApi(flagValue, apis)
- }
- }
- }
+ extractFlaggedApisFromClass(it, it.methods(), packageName, builder)
+ extractFlaggedApisFromClass(it, it.constructors(), packageName, builder)
}
}
val flagApiMap = builder.build()
FileWriter(args[1]).use { it.write(flagApiMap.toString()) }
}
+
+fun extractFlaggedApisFromClass(
+ classItem: ClassItem,
+ methods: List<MethodItem>,
+ packageName: String,
+ builder: FlagApiMap.Builder
+) {
+ val classFlag =
+ classItem.modifiers
+ .findAnnotation("android.annotation.FlaggedApi")
+ ?.findAttribute("value")
+ ?.value
+ ?.value() as? String
+ for (method in methods) {
+ val methodFlag =
+ method.modifiers
+ .findAnnotation("android.annotation.FlaggedApi")
+ ?.findAttribute("value")
+ ?.value
+ ?.value() as? String
+ ?: classFlag
+ val api =
+ JavaMethod.newBuilder()
+ .setPackageName(packageName)
+ .setClassName(classItem.fullName())
+ .setMethodName(method.name())
+ for (param in method.parameters()) {
+ api.addParameters(param.type().toTypeString())
+ }
+ if (methodFlag != null) {
+ addFlaggedApi(builder, api, methodFlag)
+ }
+ }
+}
+
+fun addFlaggedApi(builder: FlagApiMap.Builder, api: JavaMethod.Builder, flag: String) {
+ if (builder.containsFlagToApi(flag)) {
+ val updatedApis = builder.getFlagToApiOrThrow(flag).toBuilder().addJavaMethods(api).build()
+ builder.putFlagToApi(flag, updatedApis)
+ } else {
+ val apis = FlaggedApis.newBuilder().addJavaMethods(api).build()
+ builder.putFlagToApi(flag, apis)
+ }
+}
diff --git a/cmds/bmgr/src/com/android/commands/bmgr/Bmgr.java b/cmds/bmgr/src/com/android/commands/bmgr/Bmgr.java
index 0d3dc49..6310d32 100644
--- a/cmds/bmgr/src/com/android/commands/bmgr/Bmgr.java
+++ b/cmds/bmgr/src/com/android/commands/bmgr/Bmgr.java
@@ -1280,6 +1280,24 @@
return "START_PACKAGE_RESTORE";
case BackupManagerMonitor.LOG_EVENT_ID_AGENT_FAILURE:
return "AGENT_FAILURE";
+ case BackupManagerMonitor.LOG_EVENT_ID_RESTORE_AT_INSTALL_INVOKED:
+ return "RESTORE_AT_INSTALL_INVOKED";
+ case BackupManagerMonitor.LOG_EVENT_ID_SKIP_RESTORE_AT_INSTALL:
+ return "SKIP_RESTORE_AT_INSTALL";
+ case BackupManagerMonitor.LOG_EVENT_ID_PACKAGE_ACCEPTED_FOR_RESTORE:
+ return "PACKAGE_ACCEPTED_FOR_RESTORE";
+ case BackupManagerMonitor.LOG_EVENT_ID_RESTORE_DATA_DOES_NOT_BELONG_TO_PACKAGE:
+ return "RESTORE_DATA_DOES_NOT_BELONG_TO_PACKAGE";
+ case BackupManagerMonitor.LOG_EVENT_ID_UNABLE_TO_CREATE_AGENT_FOR_RESTORE:
+ return "UNABLE_TO_CREATE_AGENT_FOR_RESTORE";
+ case BackupManagerMonitor.LOG_EVENT_ID_AGENT_CRASHED_BEFORE_RESTORE_DATA_IS_SENT:
+ return "AGENT_CRASHED_BEFORE_RESTORE_DATA_IS_SEN";
+ case BackupManagerMonitor.LOG_EVENT_ID_FAILED_TO_SEND_DATA_TO_AGENT_DURING_RESTORE:
+ return "FAILED_TO_SEND_DATA_TO_AGENT_DURING_RESTORE";
+ case BackupManagerMonitor.LOG_EVENT_ID_AGENT_FAILURE_DURING_RESTORE:
+ return "AGENT_FAILURE_DURING_RESTORE";
+ case BackupManagerMonitor.LOG_EVENT_ID_FAILED_TO_READ_DATA_FROM_TRANSPORT:
+ return "FAILED_TO_READ_DATA_FROM_TRANSPORT";
default:
return "UNKNOWN_ID";
}
diff --git a/core/api/test-current.txt b/core/api/test-current.txt
index 40ee57e..f36aeab 100644
--- a/core/api/test-current.txt
+++ b/core/api/test-current.txt
@@ -486,12 +486,16 @@
}
public final class UiAutomation {
+ method public void addOverridePermissionState(int, @NonNull String, int);
+ method public void clearAllOverridePermissionStates();
+ method public void clearOverridePermissionStates(int);
method public void destroy();
method @NonNull public java.util.Set<java.lang.String> getAdoptedShellPermissions();
method @Deprecated public boolean grantRuntimePermission(String, String, android.os.UserHandle);
method public boolean injectInputEvent(@NonNull android.view.InputEvent, boolean, boolean);
method public void injectInputEventToInputFilter(@NonNull android.view.InputEvent);
method public boolean isNodeInCache(@NonNull android.view.accessibility.AccessibilityNodeInfo);
+ method public void removeOverridePermissionState(int, @NonNull String);
method @Deprecated public boolean revokeRuntimePermission(String, String, android.os.UserHandle);
method public void syncInputTransactions();
method public void syncInputTransactions(boolean);
diff --git a/core/java/Android.bp b/core/java/Android.bp
index db5888e..fae411d 100644
--- a/core/java/Android.bp
+++ b/core/java/Android.bp
@@ -582,7 +582,9 @@
srcs: [
"com/android/internal/protolog/ProtoLogImpl.java",
"com/android/internal/protolog/ProtoLogViewerConfigReader.java",
- ":perfetto_trace_javastream_protos",
+ ],
+ static_libs: [
+ "perfetto_trace_javastream_protos_jarjar",
],
}
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/AppOpsManagerInternal.java b/core/java/android/app/AppOpsManagerInternal.java
index 8daee58..f8a8f5d 100644
--- a/core/java/android/app/AppOpsManagerInternal.java
+++ b/core/java/android/app/AppOpsManagerInternal.java
@@ -53,9 +53,10 @@
* @param superImpl The super implementation.
* @return The app op check result.
*/
- int checkOperation(int code, int uid, String packageName, @Nullable String attributionTag,
- int virtualDeviceId, boolean raw, HexFunction<Integer, Integer, String, String,
- Integer, Boolean, Integer> superImpl);
+ int checkOperation(int code, int uid, @Nullable String packageName,
+ @Nullable String attributionTag, int virtualDeviceId, boolean raw,
+ @NonNull HexFunction<Integer, Integer, String, String, Integer, Boolean, Integer>
+ superImpl);
/**
* Allows overriding check audio operation behavior.
@@ -67,8 +68,8 @@
* @param superImpl The super implementation.
* @return The app op check result.
*/
- int checkAudioOperation(int code, int usage, int uid, String packageName,
- QuadFunction<Integer, Integer, Integer, String, Integer> superImpl);
+ int checkAudioOperation(int code, int usage, int uid, @Nullable String packageName,
+ @NonNull QuadFunction<Integer, Integer, Integer, String, Integer> superImpl);
/**
* Allows overriding note operation behavior.
@@ -125,7 +126,7 @@
* @param superImpl The super implementation.
* @return The app op note result.
*/
- SyncNotedAppOp startOperation(IBinder token, int code, int uid,
+ SyncNotedAppOp startOperation(@NonNull IBinder token, int code, int uid,
@Nullable String packageName, @Nullable String attributionTag, int virtualDeviceId,
boolean startIfModeDefault, boolean shouldCollectAsyncNotedOp,
@Nullable String message, boolean shouldCollectMessage,
@@ -152,8 +153,9 @@
*/
SyncNotedAppOp startProxyOperation(@NonNull IBinder clientId, int code,
@NonNull AttributionSource attributionSource, boolean startIfModeDefault,
- boolean shouldCollectAsyncNotedOp, String message, boolean shouldCollectMessage,
- boolean skipProxyOperation, @AttributionFlags int proxyAttributionFlags,
+ boolean shouldCollectAsyncNotedOp, @Nullable String message,
+ boolean shouldCollectMessage, boolean skipProxyOperation,
+ @AttributionFlags int proxyAttributionFlags,
@AttributionFlags int proxiedAttributionFlags, int attributionChainId,
@NonNull UndecFunction<IBinder, Integer, AttributionSource, Boolean,
Boolean, String, Boolean, Boolean, Integer, Integer, Integer,
diff --git a/core/java/android/app/IActivityManager.aidl b/core/java/android/app/IActivityManager.aidl
index 84bc6ce..85611e8 100644
--- a/core/java/android/app/IActivityManager.aidl
+++ b/core/java/android/app/IActivityManager.aidl
@@ -970,4 +970,40 @@
* time in the past.
*/
long getUidLastIdleElapsedTime(int uid, in String callingPackage);
+
+ /**
+ * Adds permission to be overridden to the given state. Must be called from root user.
+ *
+ * @param originatingUid The UID of the instrumented app that initialized the override
+ * @param uid The UID of the app whose permission will be overridden
+ * @param permission The permission whose state will be overridden
+ * @param result The state to override the permission to
+ *
+ * @see PackageManager.PermissionResult
+ */
+ void addOverridePermissionState(int originatingUid, int uid, String permission, int result);
+
+ /**
+ * Removes overridden permission. Must be called from root user.
+ *
+ * @param originatingUid The UID of the instrumented app that initialized the override
+ * @param uid The UID of the app whose permission is overridden
+ * @param permission The permission whose state will no longer be overridden
+ */
+ void removeOverridePermissionState(int originatingUid, int uid, String permission);
+
+ /**
+ * Clears all overridden permissions for the given UID. Must be called from root user.
+ *
+ * @param originatingUid The UID of the instrumented app that initialized the override
+ * @param uid The UID of the app whose permissions will no longer be overridden
+ */
+ void clearOverridePermissionStates(int originatingUid, int uid);
+
+ /**
+ * Clears all overridden permissions on the device. Must be called from root user.
+ *
+ * @param originatingUid The UID of the instrumented app that initialized the override
+ */
+ void clearAllOverridePermissionStates(int originatingUid);
}
diff --git a/core/java/android/app/IUiAutomationConnection.aidl b/core/java/android/app/IUiAutomationConnection.aidl
index 63cae63..69c3bd3 100644
--- a/core/java/android/app/IUiAutomationConnection.aidl
+++ b/core/java/android/app/IUiAutomationConnection.aidl
@@ -62,4 +62,8 @@
void executeShellCommandWithStderr(String command, in ParcelFileDescriptor sink,
in ParcelFileDescriptor source, in ParcelFileDescriptor stderrSink);
List<String> getAdoptedShellPermissions();
+ void addOverridePermissionState(int uid, String permission, int result);
+ void removeOverridePermissionState(int uid, String permission);
+ void clearOverridePermissionStates(int uid);
+ void clearAllOverridePermissionStates();
}
diff --git a/core/java/android/app/NotificationChannel.java b/core/java/android/app/NotificationChannel.java
index 7c803eb..193c524 100644
--- a/core/java/android/app/NotificationChannel.java
+++ b/core/java/android/app/NotificationChannel.java
@@ -434,6 +434,40 @@
/**
* @hide
*/
+ public NotificationChannel copy() {
+ NotificationChannel copy = new NotificationChannel(mId, mName, mImportance);
+ copy.setDescription(mDesc);
+ copy.setBypassDnd(mBypassDnd);
+ copy.setLockscreenVisibility(mLockscreenVisibility);
+ copy.setSound(mSound, mAudioAttributes);
+ copy.setLightColor(mLightColor);
+ copy.enableLights(mLights);
+ copy.setVibrationPattern(mVibrationPattern);
+ if (Flags.notificationChannelVibrationEffectApi()) {
+ copy.setVibrationEffect(mVibrationEffect);
+ }
+ copy.lockFields(mUserLockedFields);
+ copy.setUserVisibleTaskShown(mUserVisibleTaskShown);
+ copy.enableVibration(mVibrationEnabled);
+ copy.setShowBadge(mShowBadge);
+ copy.setDeleted(mDeleted);
+ copy.setGroup(mGroup);
+ copy.setBlockable(mBlockableSystem);
+ copy.setAllowBubbles(mAllowBubbles);
+ copy.setOriginalImportance(mOriginalImportance);
+ copy.setConversationId(mParentId, mConversationId);
+ copy.setDemoted(mDemoted);
+ copy.setImportantConversation(mImportantConvo);
+ copy.setDeletedTimeMs(mDeletedTime);
+ copy.setImportanceLockedByCriticalDeviceFunction(mImportanceLockedDefaultApp);
+ copy.setLastNotificationUpdateTimeMs(mLastNotificationUpdateTimeMs);
+
+ return copy;
+ }
+
+ /**
+ * @hide
+ */
@TestApi
public void lockFields(int field) {
mUserLockedFields |= field;
diff --git a/core/java/android/app/UiAutomation.java b/core/java/android/app/UiAutomation.java
index b0edc3d..348d4d8f 100644
--- a/core/java/android/app/UiAutomation.java
+++ b/core/java/android/app/UiAutomation.java
@@ -33,6 +33,7 @@
import android.annotation.TestApi;
import android.compat.annotation.UnsupportedAppUsage;
import android.content.Context;
+import android.content.pm.PackageManager;
import android.graphics.Bitmap;
import android.graphics.Point;
import android.graphics.Rect;
@@ -653,6 +654,81 @@
}
/**
+ * Adds permission to be overridden to the given state. UiAutomation must be connected to
+ * root user.
+ *
+ * @param uid The UID of the app whose permission will be overridden
+ * @param permission The permission whose state will be overridden
+ * @param result The state to override the permission to
+ *
+ * @see PackageManager#PERMISSION_GRANTED
+ * @see PackageManager#PERMISSION_DENIED
+ *
+ * @hide
+ */
+ @TestApi
+ @SuppressLint("UnflaggedApi")
+ public void addOverridePermissionState(int uid, @NonNull String permission,
+ @PackageManager.PermissionResult int result) {
+ try {
+ mUiAutomationConnection.addOverridePermissionState(uid, permission, result);
+ } catch (RemoteException re) {
+ re.rethrowFromSystemServer();
+ }
+ }
+
+ /**
+ * Removes overridden permission. UiAutomation must be connected to root user.
+ *
+ * @param uid The UID of the app whose permission is overridden
+ * @param permission The permission whose state will no longer be overridden
+ *
+ * @hide
+ */
+ @TestApi
+ @SuppressLint("UnflaggedApi")
+ public void removeOverridePermissionState(int uid, @NonNull String permission) {
+ try {
+ mUiAutomationConnection.removeOverridePermissionState(uid, permission);
+ } catch (RemoteException re) {
+ re.rethrowFromSystemServer();
+ }
+ }
+
+ /**
+ * Clears all overridden permissions for the given UID. UiAutomation must be connected to
+ * root user.
+ *
+ * @param uid The UID of the app whose permissions will no longer be overridden
+ *
+ * @hide
+ */
+ @TestApi
+ @SuppressLint("UnflaggedApi")
+ public void clearOverridePermissionStates(int uid) {
+ try {
+ mUiAutomationConnection.clearOverridePermissionStates(uid);
+ } catch (RemoteException re) {
+ re.rethrowFromSystemServer();
+ }
+ }
+
+ /**
+ * Clears all overridden permissions on the device. UiAutomation must be connected to root user.
+ *
+ * @hide
+ */
+ @TestApi
+ @SuppressLint("UnflaggedApi")
+ public void clearAllOverridePermissionStates() {
+ try {
+ mUiAutomationConnection.clearAllOverridePermissionStates();
+ } catch (RemoteException re) {
+ re.rethrowFromSystemServer();
+ }
+ }
+
+ /**
* Performs a global action. Such an action can be performed at any moment
* regardless of the current application or user location in that application.
* For example going back, going home, opening recents, etc.
diff --git a/core/java/android/app/UiAutomationConnection.java b/core/java/android/app/UiAutomationConnection.java
index 33e260f..3c4bd9e 100644
--- a/core/java/android/app/UiAutomationConnection.java
+++ b/core/java/android/app/UiAutomationConnection.java
@@ -437,6 +437,71 @@
}
}
+ @Override
+ public void addOverridePermissionState(int uid, String permission, int result)
+ throws RemoteException {
+ synchronized (mLock) {
+ throwIfCalledByNotTrustedUidLocked();
+ throwIfShutdownLocked();
+ throwIfNotConnectedLocked();
+ }
+ final int callingUid = Binder.getCallingUid();
+ final long identity = Binder.clearCallingIdentity();
+ try {
+ mActivityManager.addOverridePermissionState(callingUid, uid, permission, result);
+ } finally {
+ Binder.restoreCallingIdentity(identity);
+ }
+ }
+
+ @Override
+ public void removeOverridePermissionState(int uid, String permission) throws RemoteException {
+ synchronized (mLock) {
+ throwIfCalledByNotTrustedUidLocked();
+ throwIfShutdownLocked();
+ throwIfNotConnectedLocked();
+ }
+ final int callingUid = Binder.getCallingUid();
+ final long identity = Binder.clearCallingIdentity();
+ try {
+ mActivityManager.removeOverridePermissionState(callingUid, uid, permission);
+ } finally {
+ Binder.restoreCallingIdentity(identity);
+ }
+ }
+
+ @Override
+ public void clearOverridePermissionStates(int uid) throws RemoteException {
+ synchronized (mLock) {
+ throwIfCalledByNotTrustedUidLocked();
+ throwIfShutdownLocked();
+ throwIfNotConnectedLocked();
+ }
+ final int callingUid = Binder.getCallingUid();
+ final long identity = Binder.clearCallingIdentity();
+ try {
+ mActivityManager.clearOverridePermissionStates(callingUid, uid);
+ } finally {
+ Binder.restoreCallingIdentity(identity);
+ }
+ }
+
+ @Override
+ public void clearAllOverridePermissionStates() throws RemoteException {
+ synchronized (mLock) {
+ throwIfCalledByNotTrustedUidLocked();
+ throwIfShutdownLocked();
+ throwIfNotConnectedLocked();
+ }
+ final int callingUid = Binder.getCallingUid();
+ final long identity = Binder.clearCallingIdentity();
+ try {
+ mActivityManager.clearAllOverridePermissionStates(callingUid);
+ } finally {
+ Binder.restoreCallingIdentity(identity);
+ }
+ }
+
public class Repeater implements Runnable {
// Continuously read readFrom and write back to writeTo until EOF is encountered
private final InputStream readFrom;
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 25697c5..1425063 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"
@@ -42,6 +43,14 @@
}
flag {
+ name: "cross_user_suspension_enabled_ro"
+ namespace: "enterprise"
+ description: "Allow holders of INTERACT_ACROSS_USERS_FULL to suspend apps in different users."
+ bug: "263464464"
+ is_fixed_read_only: true
+}
+
+flag {
name: "dedicated_device_control_enabled"
namespace: "enterprise"
description: "Allow the device management role holder to control which platform features are available on dedicated devices."
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/backup/BackupManagerMonitor.java b/core/java/android/app/backup/BackupManagerMonitor.java
index c66478f..e741bc2 100644
--- a/core/java/android/app/backup/BackupManagerMonitor.java
+++ b/core/java/android/app/backup/BackupManagerMonitor.java
@@ -269,6 +269,33 @@
/** V to U restore attempt, allowlist and denlist are set
@hide */
public static final int LOG_EVENT_ID_V_TO_U_RESTORE_SET_LIST = 72;
+ /** As part of package install, {@link PackageManager} invoked restore.
+ @hide */
+ public static final int LOG_EVENT_ID_RESTORE_AT_INSTALL_INVOKED = 73;
+ /** Skipping restore at package install
+ @hide */
+ public static final int LOG_EVENT_ID_SKIP_RESTORE_AT_INSTALL = 74;
+ /** Package is eligible and is accepted for restore
+ @hide */
+ public static final int LOG_EVENT_ID_PACKAGE_ACCEPTED_FOR_RESTORE = 75;
+ /** Restore data doesn't belong to the package for which restore is started
+ @hide */
+ public static final int LOG_EVENT_ID_RESTORE_DATA_DOES_NOT_BELONG_TO_PACKAGE = 76;
+ /** Unable to create BackupAgent for package for restore
+ @hide */
+ public static final int LOG_EVENT_ID_UNABLE_TO_CREATE_AGENT_FOR_RESTORE = 77;
+ /** BackupAgent crashed after creation but before accepting any data
+ @hide */
+ public static final int LOG_EVENT_ID_AGENT_CRASHED_BEFORE_RESTORE_DATA_IS_SENT = 78;
+ /** Failure in streaming restore data to BackupAgent
+ @hide */
+ public static final int LOG_EVENT_ID_FAILED_TO_SEND_DATA_TO_AGENT_DURING_RESTORE = 79;
+ /** BackupAgent related failure during restore
+ @hide */
+ public static final int LOG_EVENT_ID_AGENT_FAILURE_DURING_RESTORE = 80;
+ /** Failure in reading data from TransportPackage during restore
+ @hide */
+ public static final int LOG_EVENT_ID_FAILED_TO_READ_DATA_FROM_TRANSPORT = 81;
/**
* This method will be called each time something important happens on BackupManager.
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 a2cf672..0082732 100644
--- a/core/java/android/app/notification.aconfig
+++ b/core/java/android/app/notification.aconfig
@@ -1,4 +1,5 @@
package: "android.app"
+container: "system"
flag {
name: "modes_api"
@@ -88,4 +89,25 @@
namespace: "systemui"
description: "Changes notification sort order to be by time within a section"
bug: "330193582"
+}
+
+flag {
+ name: "restrict_audio_attributes_call"
+ namespace: "systemui"
+ description: "Only CallStyle notifs can use USAGE_NOTIFICATION_RINGTONE"
+ bug: "331793339"
+}
+
+flag {
+ name: "restrict_audio_attributes_alarm"
+ namespace: "systemui"
+ description: "Only alarm category notifs can use USAGE_ALARM"
+ bug: "331793339"
+}
+
+flag {
+ name: "restrict_audio_attributes_media"
+ namespace: "systemui"
+ description: "No notifs can use USAGE_UNKNOWN or USAGE_MEDIA"
+ bug: "331793339"
}
\ No newline at end of file
diff --git a/core/java/android/app/ondeviceintelligence/IDownloadCallback.aidl b/core/java/android/app/ondeviceintelligence/IDownloadCallback.aidl
index 8fc269e..2d7ea1a 100644
--- a/core/java/android/app/ondeviceintelligence/IDownloadCallback.aidl
+++ b/core/java/android/app/ondeviceintelligence/IDownloadCallback.aidl
@@ -23,7 +23,7 @@
*
* @hide
*/
-interface IDownloadCallback {
+oneway interface IDownloadCallback {
void onDownloadStarted(long bytesToDownload) = 1;
void onDownloadProgress(long bytesDownloaded) = 2;
void onDownloadFailed(int failureStatus, String errorMessage, in PersistableBundle errorParams) = 3;
diff --git a/core/java/android/app/ondeviceintelligence/IFeatureCallback.aidl b/core/java/android/app/ondeviceintelligence/IFeatureCallback.aidl
index 93a84ec..2e05692 100644
--- a/core/java/android/app/ondeviceintelligence/IFeatureCallback.aidl
+++ b/core/java/android/app/ondeviceintelligence/IFeatureCallback.aidl
@@ -8,7 +8,7 @@
*
* @hide
*/
-interface IFeatureCallback {
+oneway interface IFeatureCallback {
void onSuccess(in Feature result) = 1;
void onFailure(int errorCode, in String errorMessage, in PersistableBundle errorParams) = 2;
}
diff --git a/core/java/android/app/ondeviceintelligence/IFeatureDetailsCallback.aidl b/core/java/android/app/ondeviceintelligence/IFeatureDetailsCallback.aidl
index d950290..8688028 100644
--- a/core/java/android/app/ondeviceintelligence/IFeatureDetailsCallback.aidl
+++ b/core/java/android/app/ondeviceintelligence/IFeatureDetailsCallback.aidl
@@ -8,7 +8,7 @@
*
* @hide
*/
-interface IFeatureDetailsCallback {
+oneway interface IFeatureDetailsCallback {
void onSuccess(in FeatureDetails result) = 1;
void onFailure(int errorCode, in String errorMessage, in PersistableBundle errorParams) = 2;
}
diff --git a/core/java/android/app/ondeviceintelligence/IListFeaturesCallback.aidl b/core/java/android/app/ondeviceintelligence/IListFeaturesCallback.aidl
index 374cb71..7e5eb57 100644
--- a/core/java/android/app/ondeviceintelligence/IListFeaturesCallback.aidl
+++ b/core/java/android/app/ondeviceintelligence/IListFeaturesCallback.aidl
@@ -9,7 +9,7 @@
*
* @hide
*/
-interface IListFeaturesCallback {
+oneway interface IListFeaturesCallback {
void onSuccess(in List<Feature> result) = 1;
void onFailure(int errorCode, in String errorMessage, in PersistableBundle errorParams) = 2;
}
diff --git a/core/java/android/app/ondeviceintelligence/IOnDeviceIntelligenceManager.aidl b/core/java/android/app/ondeviceintelligence/IOnDeviceIntelligenceManager.aidl
index 8bf288a..470b1ec 100644
--- a/core/java/android/app/ondeviceintelligence/IOnDeviceIntelligenceManager.aidl
+++ b/core/java/android/app/ondeviceintelligence/IOnDeviceIntelligenceManager.aidl
@@ -39,7 +39,7 @@
*
* @hide
*/
- interface IOnDeviceIntelligenceManager {
+interface IOnDeviceIntelligenceManager {
@JavaPassthrough(annotation="@android.annotation.RequiresPermission(android.Manifest.permission.USE_ON_DEVICE_INTELLIGENCE)")
void getVersion(in RemoteCallback remoteCallback) = 1;
diff --git a/core/java/android/app/ondeviceintelligence/IResponseCallback.aidl b/core/java/android/app/ondeviceintelligence/IResponseCallback.aidl
index 45963d2..270b600 100644
--- a/core/java/android/app/ondeviceintelligence/IResponseCallback.aidl
+++ b/core/java/android/app/ondeviceintelligence/IResponseCallback.aidl
@@ -9,7 +9,7 @@
*
* @hide
*/
-interface IResponseCallback {
+oneway interface IResponseCallback {
void onSuccess(in Bundle resultBundle) = 1;
void onFailure(int errorCode, in String errorMessage, in PersistableBundle errorParams) = 2;
void onDataAugmentRequest(in Bundle processedContent, in RemoteCallback responseCallback) = 3;
diff --git a/core/java/android/app/ondeviceintelligence/IStreamingResponseCallback.aidl b/core/java/android/app/ondeviceintelligence/IStreamingResponseCallback.aidl
index 671abe3..3e90240 100644
--- a/core/java/android/app/ondeviceintelligence/IStreamingResponseCallback.aidl
+++ b/core/java/android/app/ondeviceintelligence/IStreamingResponseCallback.aidl
@@ -10,7 +10,7 @@
*
* @hide
*/
-interface IStreamingResponseCallback {
+oneway interface IStreamingResponseCallback {
void onNewContent(in Bundle processedResult) = 1;
void onSuccess(in Bundle result) = 2;
void onFailure(int errorCode, in String errorMessage, in PersistableBundle errorParams) = 3;
diff --git a/core/java/android/app/ondeviceintelligence/ITokenInfoCallback.aidl b/core/java/android/app/ondeviceintelligence/ITokenInfoCallback.aidl
index 9219a89..958bef0 100644
--- a/core/java/android/app/ondeviceintelligence/ITokenInfoCallback.aidl
+++ b/core/java/android/app/ondeviceintelligence/ITokenInfoCallback.aidl
@@ -8,7 +8,7 @@
*
* @hide
*/
-interface ITokenInfoCallback {
+oneway interface ITokenInfoCallback {
void onSuccess(in TokenInfo tokenInfo) = 1;
void onFailure(int errorCode, in String errorMessage, in PersistableBundle errorParams) = 2;
}
diff --git a/core/java/android/app/ondeviceintelligence/OnDeviceIntelligenceManager.java b/core/java/android/app/ondeviceintelligence/OnDeviceIntelligenceManager.java
index bc50d2e4..5e1c1e0 100644
--- a/core/java/android/app/ondeviceintelligence/OnDeviceIntelligenceManager.java
+++ b/core/java/android/app/ondeviceintelligence/OnDeviceIntelligenceManager.java
@@ -365,7 +365,6 @@
* associated params.
*/
@RequiresPermission(Manifest.permission.USE_ON_DEVICE_INTELLIGENCE)
-
public void processRequest(@NonNull Feature feature, @NonNull @InferenceParams Bundle request,
@RequestType int requestType,
@Nullable CancellationSignal cancellationSignal,
@@ -423,16 +422,16 @@
* when the final response contains an enhanced aggregation of the contents already
* streamed.
*
- * @param feature feature associated with the request.
- * @param request request and associated params represented by the Bundle
- * data.
- * @param requestType type of request being sent for processing the content.
- * @param cancellationSignal signal to invoke cancellation.
- * @param processingSignal signal to send custom signals in the
- * remote implementation.
- * @param streamingResponseCallback streaming callback to populate the response content and
- * associated params.
- * @param callbackExecutor executor to run the callback on.
+ * @param feature feature associated with the request.
+ * @param request request and associated params represented by the Bundle
+ * data.
+ * @param requestType type of request being sent for processing the content.
+ * @param cancellationSignal signal to invoke cancellation.
+ * @param processingSignal signal to send custom signals in the
+ * remote implementation.
+ * @param streamingProcessingCallback streaming callback to populate the response content and
+ * associated params.
+ * @param callbackExecutor executor to run the callback on.
*/
@RequiresPermission(Manifest.permission.USE_ON_DEVICE_INTELLIGENCE)
public void processRequestStreaming(@NonNull Feature feature,
@@ -528,19 +527,18 @@
/**
* {@link Bundle}s annotated with this type will be validated that they are in-effect read-only
- * when passed to inference service via Binder IPC. Following restrictions apply :
+ * when passed via Binder IPC. Following restrictions apply :
* <ul>
+ * <li> No Nested Bundles are allowed.</li>
+ * <li> {@link PersistableBundle}s are allowed.</li>
* <li> Any primitive types or their collections can be added as usual.</li>
* <li>IBinder objects should *not* be added.</li>
* <li>Parcelable data which has no active-objects, should be added as
* {@link Bundle#putByteArray}</li>
* <li>Parcelables have active-objects, only following types will be allowed</li>
* <ul>
- * <li>{@link Bitmap} set as {@link Bitmap#setImmutable()}</li>
- * <li>{@link android.database.CursorWindow}</li>
* <li>{@link android.os.ParcelFileDescriptor} opened in
* {@link android.os.ParcelFileDescriptor#MODE_READ_ONLY}</li>
- * <li>{@link android.os.SharedMemory} set to {@link OsConstants#PROT_READ}</li>
* </ul>
* </ul>
*
@@ -550,9 +548,40 @@
* @hide
*/
@Target({ElementType.PARAMETER, ElementType.FIELD})
+ public @interface StateParams {
+ }
+
+ /**
+ * This is an extension of {@link StateParams} but for purpose of inference few other types are
+ * also allowed as read-only, as listed below.
+ *
+ * <li>{@link Bitmap} set as immutable.</li>
+ * <li>{@link android.database.CursorWindow}</li>
+ * <li>{@link android.os.SharedMemory} set to {@link OsConstants#PROT_READ}</li>
+ * </ul>
+ * </ul>
+ *
+ * In all other scenarios the system-server might throw a
+ * {@link android.os.BadParcelableException} if the Bundle validation fails.
+ *
+ * @hide
+ */
+ @Target({ElementType.PARAMETER, ElementType.FIELD, ElementType.TYPE_USE})
public @interface InferenceParams {
}
+ /**
+ * This is an extension of {@link StateParams} with the exception that it allows writing
+ * {@link Bitmap} as part of the response.
+ *
+ * In all other scenarios the system-server might throw a
+ * {@link android.os.BadParcelableException} if the Bundle validation fails.
+ *
+ * @hide
+ */
+ @Target({ElementType.PARAMETER, ElementType.FIELD})
+ public @interface ResponseParams {
+ }
@Nullable
private static AndroidFuture<IBinder> configureRemoteCancellationFuture(
diff --git a/core/java/android/app/ondeviceintelligence/ProcessingCallback.java b/core/java/android/app/ondeviceintelligence/ProcessingCallback.java
index 4d936ea..e50d6b1 100644
--- a/core/java/android/app/ondeviceintelligence/ProcessingCallback.java
+++ b/core/java/android/app/ondeviceintelligence/ProcessingCallback.java
@@ -23,6 +23,7 @@
import android.annotation.SystemApi;
import android.os.Bundle;
import android.app.ondeviceintelligence.OnDeviceIntelligenceManager.InferenceParams;
+import android.app.ondeviceintelligence.OnDeviceIntelligenceManager.ResponseParams;
import java.util.function.Consumer;
@@ -43,7 +44,7 @@
*
* @param result Response to be passed as a result.
*/
- void onResult(@NonNull @InferenceParams Bundle result);
+ void onResult(@NonNull @ResponseParams Bundle result);
/**
* Called when the request processing fails. The failure details are indicated by the
@@ -64,8 +65,8 @@
* expected to be non-null or EMPTY when there is no response.
*/
default void onDataAugmentRequest(
- @NonNull @InferenceParams Bundle processedContent,
- @NonNull Consumer<Bundle> contentConsumer) {
+ @NonNull @ResponseParams Bundle processedContent,
+ @NonNull Consumer<@InferenceParams Bundle> contentConsumer) {
contentConsumer.accept(Bundle.EMPTY);
}
}
diff --git a/core/java/android/app/ondeviceintelligence/StreamingProcessingCallback.java b/core/java/android/app/ondeviceintelligence/StreamingProcessingCallback.java
index 41f1807..7ee2af7 100644
--- a/core/java/android/app/ondeviceintelligence/StreamingProcessingCallback.java
+++ b/core/java/android/app/ondeviceintelligence/StreamingProcessingCallback.java
@@ -22,7 +22,7 @@
import android.annotation.NonNull;
import android.annotation.SystemApi;
import android.os.Bundle;
-import android.app.ondeviceintelligence.OnDeviceIntelligenceManager.InferenceParams;
+import android.app.ondeviceintelligence.OnDeviceIntelligenceManager.ResponseParams;
/**
* Streaming variant of {@link ProcessingCallback} to populate response while processing a given
@@ -37,5 +37,5 @@
* Callback that would be invoked when a part of the response i.e. some response is
* already processed, and needs to be passed onto the caller.
*/
- void onPartialResult(@NonNull @InferenceParams Bundle partialResult);
+ void onPartialResult(@NonNull @ResponseParams Bundle partialResult);
}
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/OWNERS b/core/java/android/appwidget/OWNERS
index 554b0de..1910833 100644
--- a/core/java/android/appwidget/OWNERS
+++ b/core/java/android/appwidget/OWNERS
@@ -1,4 +1,5 @@
-pinyaoting@google.com
+fengjial@google.com
sihua@google.com
+pinyaoting@google.com
suprabh@google.com
sunnygoyal@google.com
diff --git a/core/java/android/appwidget/flags.aconfig b/core/java/android/appwidget/flags.aconfig
index 4511954..3bcc7c7 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/VirtualDeviceManager.java b/core/java/android/companion/virtual/VirtualDeviceManager.java
index ec59cf6..ed55a3f 100644
--- a/core/java/android/companion/virtual/VirtualDeviceManager.java
+++ b/core/java/android/companion/virtual/VirtualDeviceManager.java
@@ -66,6 +66,7 @@
import android.os.RemoteException;
import android.util.ArraySet;
import android.util.Log;
+import android.view.Display;
import android.view.Surface;
import android.view.WindowManager;
@@ -338,6 +339,10 @@
@TestApi
public @VirtualDeviceParams.DevicePolicy int getDevicePolicy(
int deviceId, @VirtualDeviceParams.PolicyType int policyType) {
+ if (deviceId == Context.DEVICE_ID_DEFAULT) {
+ // Avoid unnecessary binder call, for default device, policy will be always default.
+ return VirtualDeviceParams.DEVICE_POLICY_DEFAULT;
+ }
if (mService == null) {
Log.w(TAG, "Failed to retrieve device policy; no virtual device manager service.");
return VirtualDeviceParams.DEVICE_POLICY_DEFAULT;
@@ -357,6 +362,10 @@
@SuppressLint("UnflaggedApi") // @TestApi without associated feature.
@TestApi
public int getDeviceIdForDisplayId(int displayId) {
+ if (displayId == Display.DEFAULT_DISPLAY || displayId == Display.INVALID_DISPLAY) {
+ // Avoid unnecessary binder call for default / invalid display id.
+ return Context.DEVICE_ID_DEFAULT;
+ }
if (mService == null) {
Log.w(TAG, "Failed to retrieve virtual devices; no virtual device manager service.");
return Context.DEVICE_ID_DEFAULT;
diff --git a/core/java/android/companion/virtual/flags.aconfig b/core/java/android/companion/virtual/flags.aconfig
index a6a4f5e..18c81a2 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/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 4963a4f..0c0da31 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/camera2/CameraCharacteristics.java b/core/java/android/hardware/camera2/CameraCharacteristics.java
index ea7f8c4c..c6a8762 100644
--- a/core/java/android/hardware/camera2/CameraCharacteristics.java
+++ b/core/java/android/hardware/camera2/CameraCharacteristics.java
@@ -19,8 +19,6 @@
import android.annotation.FlaggedApi;
import android.annotation.NonNull;
import android.annotation.Nullable;
-import android.companion.virtual.VirtualDeviceManager;
-import android.companion.virtual.camera.VirtualCameraConfig;
import android.compat.annotation.UnsupportedAppUsage;
import android.hardware.camera2.impl.CameraMetadataNative;
import android.hardware.camera2.impl.ExtensionKey;
@@ -5349,10 +5347,9 @@
* <p>Id of the device that owns this camera.</p>
* <p>In case of a virtual camera, this would be the id of the virtual device
* owning the camera. For any other camera, this key would not be present.
- * Callers should assume {@link android.content.Context#DEVICE_ID_DEFAULT}
+ * Callers should assume {@link android.content.Context#DEVICE_ID_DEFAULT }
* in case this key is not present.</p>
* <p><b>Optional</b> - The value for this key may be {@code null} on some devices.</p>
- * @see VirtualDeviceManager.VirtualDevice#createVirtualCamera(VirtualCameraConfig)
* @hide
*/
public static final Key<Integer> INFO_DEVICE_ID =
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/hdmi/HdmiControlManager.java b/core/java/android/hardware/hdmi/HdmiControlManager.java
index 09741e52..ac043d3 100644
--- a/core/java/android/hardware/hdmi/HdmiControlManager.java
+++ b/core/java/android/hardware/hdmi/HdmiControlManager.java
@@ -139,6 +139,16 @@
public static final String EXTRA_LOCALE = "android.hardware.hdmi.extra.LOCALE";
/**
+ * Broadcast Action: Active Source status was recovered by the device.
+ * <p>Send when device becomes the current active source such that the activity
+ * HdmiCecActiveSourceLostActivity can be finished and cleared from the screen.
+ * <p>Requires {@link android.Manifest.permission#HDMI_CEC} to receive.
+ * @hide
+ */
+ @SdkConstant(SdkConstantType.BROADCAST_INTENT_ACTION)
+ public static final String ACTION_ON_ACTIVE_SOURCE_RECOVERED_DISMISS_UI =
+ "android.hardware.hdmi.action.ON_ACTIVE_SOURCE_RECOVERED_DISMISS_UI";
+ /**
* Volume value for mute state.
*/
public static final int AVR_VOLUME_MUTED = 101;
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/net/IVpnManager.aidl b/core/java/android/net/IVpnManager.aidl
index f302378..5149967 100644
--- a/core/java/android/net/IVpnManager.aidl
+++ b/core/java/android/net/IVpnManager.aidl
@@ -60,6 +60,12 @@
LegacyVpnInfo getLegacyVpnInfo(int userId);
boolean updateLockdownVpn();
+ /** Profile store APIs */
+ byte[] getFromVpnProfileStore(String name);
+ boolean putIntoVpnProfileStore(String name, in byte[] blob);
+ boolean removeFromVpnProfileStore(String name);
+ String[] listFromVpnProfileStore(String prefix);
+
/** General system APIs */
VpnConfig getVpnConfig(int userId);
void factoryReset();
diff --git a/core/java/android/net/VpnManager.java b/core/java/android/net/VpnManager.java
index ff47f3f..c50bc56 100644
--- a/core/java/android/net/VpnManager.java
+++ b/core/java/android/net/VpnManager.java
@@ -717,4 +717,81 @@
throw e.rethrowFromSystemServer();
}
}
+
+ /**
+ * Get the vpn profile owned by the calling uid with the given name from the vpn database.
+ *
+ * <p>Note this method should not be used for platform VPN profiles. </p>
+ *
+ * @param name The name of the profile to retrieve.
+ * @return the unstructured blob for the matching vpn profile.
+ * Returns null if no profile with a matching name was found.
+ * @hide
+ */
+ @Nullable
+ public byte[] getFromVpnProfileStore(@NonNull String name) {
+ try {
+ return mService.getFromVpnProfileStore(name);
+ } catch (RemoteException e) {
+ throw e.rethrowFromSystemServer();
+ }
+ }
+
+ /**
+ * Put the given vpn profile owned by the calling uid with the given name into the vpn database.
+ * Existing profiles with the same name will be replaced.
+ *
+ * <p>Note this method should not be used for platform VPN profiles.
+ * To update a platform VPN, use provisionVpnProfile() instead. </p>
+ *
+ * @param name The name of the profile to put.
+ * @param blob The profile.
+ * @return true if the profile was successfully added. False otherwise.
+ * @hide
+ */
+ public boolean putIntoVpnProfileStore(@NonNull String name, @NonNull byte[] blob) {
+ try {
+ return mService.putIntoVpnProfileStore(name, blob);
+ } catch (RemoteException e) {
+ throw e.rethrowFromSystemServer();
+ }
+ }
+
+ /**
+ * Removes the vpn profile owned by the calling uid with the given name from the vpn database.
+ *
+ * <p>Note this method should not be used for platform VPN profiles.
+ * To remove a platform VPN, use deleteVpnProfile() instead.</p>
+ *
+ * @param name The name of the profile to be removed.
+ * @return true if a profile was removed. False if no profile with a matching name was found.
+ * @hide
+ */
+ public boolean removeFromVpnProfileStore(@NonNull String name) {
+ try {
+ return mService.removeFromVpnProfileStore(name);
+ } catch (RemoteException e) {
+ throw e.rethrowFromSystemServer();
+ }
+ }
+
+ /**
+ * Returns a list of the name suffixes of the vpn profiles owned by the calling uid in the vpn
+ * database matching the given prefix, sorted in ascending order.
+ *
+ * <p>Note this method should not be used for platform VPN profiles. </p>
+ *
+ * @param prefix The prefix to match.
+ * @return an array of strings representing the name suffixes stored in the profile database
+ * matching the given prefix. The return value may be empty but never null.
+ * @hide
+ */
+ @NonNull
+ public String[] listFromVpnProfileStore(@NonNull String prefix) {
+ try {
+ return mService.listFromVpnProfileStore(prefix);
+ } catch (RemoteException e) {
+ throw e.rethrowFromSystemServer();
+ }
+ }
}
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 e64823a..15d671d 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/Debug.java b/core/java/android/os/Debug.java
index 04d6f61..f785cca 100644
--- a/core/java/android/os/Debug.java
+++ b/core/java/android/os/Debug.java
@@ -210,6 +210,7 @@
@UnsupportedAppUsage(maxTargetSdk = Build.VERSION_CODES.R, trackingBug = 170729553)
public boolean hasSwappedOutPss;
+ // LINT.IfChange
/** @hide */
public static final int HEAP_UNKNOWN = 0;
/** @hide */
@@ -311,6 +312,7 @@
public static final int OTHER_ART_APP = 30;
/** @hide */
public static final int OTHER_ART_BOOT = 31;
+ // LINT.ThenChange(/system/memory/libmeminfo/include/meminfo/androidprocheaps.h)
/** @hide */
public static final int OTHER_DVK_STAT_ART_START = OTHER_ART_APP - NUM_OTHER_STATS;
/** @hide */
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 3e4454f..92bbadc 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 aa2f85d..b7d421a 100644
--- a/core/java/android/provider/Settings.java
+++ b/core/java/android/provider/Settings.java
@@ -10225,6 +10225,13 @@
"screensaver_complications_enabled";
/**
+ * Defines the enabled state for the glanceable hub.
+ *
+ * @hide
+ */
+ public static final String GLANCEABLE_HUB_ENABLED = "glanceable_hub_enabled";
+
+ /**
* Whether home controls are enabled to be shown over the screensaver by the user.
*
* @hide
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/AutofillServiceInfo.java b/core/java/android/service/autofill/AutofillServiceInfo.java
index 83f9662..0e67477 100644
--- a/core/java/android/service/autofill/AutofillServiceInfo.java
+++ b/core/java/android/service/autofill/AutofillServiceInfo.java
@@ -312,6 +312,7 @@
final ServiceInfo serviceInfo = resolveInfo.serviceInfo;
try {
if (serviceInfo != null && isCredentialManagerAutofillService(
+ context,
serviceInfo.getComponentName())) {
// Skip this service as it is for internal use only
continue;
@@ -325,11 +326,23 @@
return services;
}
- private static boolean isCredentialManagerAutofillService(ComponentName componentName) {
+ private static boolean isCredentialManagerAutofillService(Context context,
+ ComponentName componentName) {
if (componentName == null) {
return false;
}
- return componentName.equals(CREDMAN_SERVICE_COMPONENT_NAME);
+ ComponentName credAutofillService = null;
+ String credentialManagerAutofillCompName = context.getResources().getString(
+ R.string.config_defaultCredentialManagerAutofillService);
+ if (credentialManagerAutofillCompName != null && !credentialManagerAutofillCompName
+ .isEmpty()) {
+ credAutofillService = ComponentName.unflattenFromString(
+ credentialManagerAutofillCompName);
+ } else {
+ Log.w(TAG, "Invalid CredentialAutofillService");
+ }
+
+ return componentName.equals(credAutofillService);
}
@Override
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 91a713e..2e16a03 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..b0c55a9 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"
diff --git a/core/java/android/service/ondeviceintelligence/IOnDeviceIntelligenceService.aidl b/core/java/android/service/ondeviceintelligence/IOnDeviceIntelligenceService.aidl
index a708718..45c4350 100644
--- a/core/java/android/service/ondeviceintelligence/IOnDeviceIntelligenceService.aidl
+++ b/core/java/android/service/ondeviceintelligence/IOnDeviceIntelligenceService.aidl
@@ -42,7 +42,7 @@
void getReadOnlyFileDescriptor(in String fileName, in AndroidFuture<ParcelFileDescriptor> future);
void getReadOnlyFeatureFileDescriptorMap(in Feature feature, in RemoteCallback remoteCallback);
void requestFeatureDownload(int callerUid, in Feature feature,
- in AndroidFuture<ICancellationSignal> cancellationSignal,
+ in AndroidFuture cancellationSignal,
in IDownloadCallback downloadCallback);
void registerRemoteServices(in IRemoteProcessingService remoteProcessingService);
void notifyInferenceServiceConnected();
diff --git a/core/java/android/service/ondeviceintelligence/IOnDeviceSandboxedInferenceService.aidl b/core/java/android/service/ondeviceintelligence/IOnDeviceSandboxedInferenceService.aidl
index 4213a09..2aa17c4 100644
--- a/core/java/android/service/ondeviceintelligence/IOnDeviceSandboxedInferenceService.aidl
+++ b/core/java/android/service/ondeviceintelligence/IOnDeviceSandboxedInferenceService.aidl
@@ -36,15 +36,15 @@
oneway interface IOnDeviceSandboxedInferenceService {
void registerRemoteStorageService(in IRemoteStorageService storageService);
void requestTokenInfo(int callerUid, in Feature feature, in Bundle request,
- in AndroidFuture<ICancellationSignal> cancellationSignal,
+ in AndroidFuture cancellationSignal,
in ITokenInfoCallback tokenInfoCallback);
void processRequest(int callerUid, in Feature feature, in Bundle request, in int requestType,
- in AndroidFuture<ICancellationSignal> cancellationSignal,
- in AndroidFuture<IProcessingSignal> processingSignal,
+ in AndroidFuture cancellationSignal,
+ in AndroidFuture processingSignal,
in IResponseCallback callback);
void processRequestStreaming(int callerUid, in Feature feature, in Bundle request, in int requestType,
- in AndroidFuture<ICancellationSignal> cancellationSignal,
- in AndroidFuture<IProcessingSignal> processingSignal,
+ in AndroidFuture cancellationSignal,
+ in AndroidFuture processingSignal,
in IStreamingResponseCallback callback);
void updateProcessingState(in Bundle processingState,
in IProcessingUpdateStatusCallback callback);
diff --git a/core/java/android/service/ondeviceintelligence/OnDeviceIntelligenceService.java b/core/java/android/service/ondeviceintelligence/OnDeviceIntelligenceService.java
index 5dc540a..793e58a 100644
--- a/core/java/android/service/ondeviceintelligence/OnDeviceIntelligenceService.java
+++ b/core/java/android/service/ondeviceintelligence/OnDeviceIntelligenceService.java
@@ -35,7 +35,7 @@
import android.app.ondeviceintelligence.IListFeaturesCallback;
import android.app.ondeviceintelligence.OnDeviceIntelligenceException;
import android.app.ondeviceintelligence.OnDeviceIntelligenceManager;
-import android.app.ondeviceintelligence.OnDeviceIntelligenceManager.InferenceParams;
+import android.app.ondeviceintelligence.OnDeviceIntelligenceManager.StateParams;
import android.content.Intent;
import android.os.Binder;
import android.os.Bundle;
@@ -245,13 +245,13 @@
* service if there is a state change to be performed. State change could be config updates,
* performing initialization or cleanup tasks in the remote inference service.
* The Bundle passed in here is expected to be read-only and will be rejected if it has any
- * writable fields as detailed under {@link InferenceParams}.
+ * writable fields as detailed under {@link StateParams}.
*
* @param processingState the updated state to be applied.
* @param callbackExecutor executor to the run status callback on.
* @param statusReceiver receiver to get status of the update state operation.
*/
- public final void updateProcessingState(@NonNull @InferenceParams Bundle processingState,
+ public final void updateProcessingState(@NonNull @StateParams Bundle processingState,
@NonNull @CallbackExecutor Executor callbackExecutor,
@NonNull OutcomeReceiver<PersistableBundle, OnDeviceIntelligenceException> statusReceiver) {
Objects.requireNonNull(callbackExecutor);
diff --git a/core/java/android/service/ondeviceintelligence/OnDeviceSandboxedInferenceService.java b/core/java/android/service/ondeviceintelligence/OnDeviceSandboxedInferenceService.java
index 96c45ee..29a6db6 100644
--- a/core/java/android/service/ondeviceintelligence/OnDeviceSandboxedInferenceService.java
+++ b/core/java/android/service/ondeviceintelligence/OnDeviceSandboxedInferenceService.java
@@ -35,6 +35,7 @@
import android.app.ondeviceintelligence.OnDeviceIntelligenceException;
import android.app.ondeviceintelligence.OnDeviceIntelligenceManager;
import android.app.ondeviceintelligence.OnDeviceIntelligenceManager.InferenceParams;
+import android.app.ondeviceintelligence.OnDeviceIntelligenceManager.StateParams;
import android.app.ondeviceintelligence.ProcessingCallback;
import android.app.ondeviceintelligence.ProcessingSignal;
import android.app.ondeviceintelligence.StreamingProcessingCallback;
@@ -293,7 +294,7 @@
* @param callback callback to populate the update status and if there are params
* associated with the status.
*/
- public abstract void onUpdateProcessingState(@NonNull @InferenceParams Bundle processingState,
+ public abstract void onUpdateProcessingState(@NonNull @StateParams Bundle processingState,
@NonNull OutcomeReceiver<PersistableBundle,
OnDeviceIntelligenceException> callback);
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 8e1ac63..559fa96 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 cedba85..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"
@@ -14,3 +15,10 @@
bug: "276432490"
is_fixed_read_only: true
}
+
+flag {
+ name: "perfetto_ime_tracing"
+ namespace: "windowing_tools"
+ description: "Migrate IME tracing to Perfetto"
+ bug: "276433199"
+}
diff --git a/core/java/android/view/View.java b/core/java/android/view/View.java
index a82c9a8..bd8e9c6 100644
--- a/core/java/android/view/View.java
+++ b/core/java/android/view/View.java
@@ -43,6 +43,7 @@
import static android.view.flags.Flags.toolkitFrameRateBySizeReadOnly;
import static android.view.flags.Flags.toolkitFrameRateDefaultNormalReadOnly;
import static android.view.flags.Flags.toolkitFrameRateSmallUsesPercentReadOnly;
+import static android.view.flags.Flags.toolkitFrameRateViewEnablingReadOnly;
import static android.view.flags.Flags.toolkitMetricsForFrameRateDecision;
import static android.view.flags.Flags.toolkitSetFrameRateReadOnly;
import static android.view.flags.Flags.viewVelocityApi;
@@ -2439,6 +2440,8 @@
private static final boolean sToolkitFrameRateSmallUsesPercentReadOnlyFlagValue =
toolkitFrameRateSmallUsesPercentReadOnly();
+ private static final boolean sToolkitFrameRateViewEnablingReadOnlyFlagValue =
+ toolkitFrameRateViewEnablingReadOnly();
// Used to set frame rate compatibility.
@Surface.FrameRateCompatibility int mFrameRateCompatibility =
@@ -20794,7 +20797,8 @@
}
// For VRR to vote the preferred frame rate
- if (sToolkitSetFrameRateReadOnlyFlagValue) {
+ if (sToolkitSetFrameRateReadOnlyFlagValue
+ && sToolkitFrameRateViewEnablingReadOnlyFlagValue) {
votePreferredFrameRate();
}
@@ -20901,7 +20905,8 @@
protected void damageInParent() {
if (mParent != null && mAttachInfo != null) {
// For VRR to vote the preferred frame rate
- if (sToolkitSetFrameRateReadOnlyFlagValue) {
+ if (sToolkitSetFrameRateReadOnlyFlagValue
+ && sToolkitFrameRateViewEnablingReadOnlyFlagValue) {
votePreferredFrameRate();
}
mParent.onDescendantInvalidated(this, this);
@@ -23592,7 +23597,8 @@
}
mPrivateFlags4 = (mPrivateFlags4 & ~PFLAG4_HAS_MOVED) | PFLAG4_HAS_DRAWN;
- if (sToolkitSetFrameRateReadOnlyFlagValue) {
+ if (sToolkitSetFrameRateReadOnlyFlagValue
+ && sToolkitFrameRateViewEnablingReadOnlyFlagValue) {
updateInfrequentCount();
}
@@ -25508,7 +25514,7 @@
}
private void sizeChange(int newWidth, int newHeight, int oldWidth, int oldHeight) {
- if (mAttachInfo != null) {
+ if (mAttachInfo != null && sToolkitFrameRateViewEnablingReadOnlyFlagValue) {
boolean isSmall;
if (sToolkitFrameRateSmallUsesPercentReadOnlyFlagValue) {
int size = newWidth * newHeight;
diff --git a/core/java/android/view/accessibility/flags/accessibility_flags.aconfig b/core/java/android/view/accessibility/flags/accessibility_flags.aconfig
index eefc72b..f4aef22 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 442f1da..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"
@@ -102,4 +103,12 @@
description: "Feature flag to enable the functionality of the dVRR feature"
bug: "239979904"
is_fixed_read_only: true
+}
+
+flag {
+ name: "toolkit_frame_rate_view_enabling_read_only"
+ namespace: "toolkit"
+ description: "Feature flag to enable the functionality on views for the dVRR feature"
+ bug: "239979904"
+ is_fixed_read_only: true
}
\ No newline at end of file
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 c482f8b..e8e02ec 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 be74a65..4c3a290 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 e60fa15..b530e71 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/flags/accessibility.aconfig b/core/java/android/window/flags/accessibility.aconfig
index 2d1cbb5..c123541 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 b9d74e1..0a4d253 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 dea9497..aa92af2 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 a5c209d..4402ac7 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 4b3d8e8..80265ec 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/app/SuspendedAppActivity.java b/core/java/com/android/internal/app/SuspendedAppActivity.java
index 6620156..7a8a47e 100644
--- a/core/java/com/android/internal/app/SuspendedAppActivity.java
+++ b/core/java/com/android/internal/app/SuspendedAppActivity.java
@@ -16,7 +16,7 @@
package com.android.internal.app;
-import static android.app.admin.flags.Flags.crossUserSuspensionEnabled;
+import static android.app.admin.flags.Flags.crossUserSuspensionEnabledRo;
import static android.content.pm.PackageManager.MATCH_DIRECT_BOOT_AWARE;
import static android.content.pm.PackageManager.MATCH_DIRECT_BOOT_UNAWARE;
import static android.content.pm.SuspendDialogInfo.BUTTON_ACTION_MORE_DETAILS;
@@ -234,7 +234,7 @@
}
mSuspendedPackage = intent.getStringExtra(EXTRA_SUSPENDED_PACKAGE);
mSuspendingPackage = intent.getStringExtra(EXTRA_SUSPENDING_PACKAGE);
- if (crossUserSuspensionEnabled()) {
+ if (crossUserSuspensionEnabledRo()) {
mSuspendingUserId = intent.getIntExtra(EXTRA_SUSPENDING_USER, mUserId);
} else {
mSuspendingUserId = mUserId;
@@ -373,7 +373,7 @@
.putExtra(Intent.EXTRA_USER_ID, userId)
.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK
| Intent.FLAG_ACTIVITY_EXCLUDE_FROM_RECENTS);
- if (crossUserSuspensionEnabled() && suspendingPackage != null) {
+ if (crossUserSuspensionEnabledRo() && suspendingPackage != null) {
intent.putExtra(EXTRA_SUSPENDING_USER, suspendingPackage.userId);
}
return intent;
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/java/com/android/internal/protolog/PerfettoProtoLogImpl.java b/core/java/com/android/internal/protolog/PerfettoProtoLogImpl.java
index 4ead82f..561ca21 100644
--- a/core/java/com/android/internal/protolog/PerfettoProtoLogImpl.java
+++ b/core/java/com/android/internal/protolog/PerfettoProtoLogImpl.java
@@ -16,33 +16,34 @@
package com.android.internal.protolog;
-import static perfetto.protos.PerfettoTrace.InternedData.PROTOLOG_STACKTRACE;
-import static perfetto.protos.PerfettoTrace.InternedData.PROTOLOG_STRING_ARGS;
-import static perfetto.protos.PerfettoTrace.InternedString.IID;
-import static perfetto.protos.PerfettoTrace.InternedString.STR;
-import static perfetto.protos.PerfettoTrace.ProtoLogMessage.BOOLEAN_PARAMS;
-import static perfetto.protos.PerfettoTrace.ProtoLogMessage.DOUBLE_PARAMS;
-import static perfetto.protos.PerfettoTrace.ProtoLogMessage.MESSAGE_ID;
-import static perfetto.protos.PerfettoTrace.ProtoLogMessage.SINT64_PARAMS;
-import static perfetto.protos.PerfettoTrace.ProtoLogMessage.STACKTRACE_IID;
-import static perfetto.protos.PerfettoTrace.ProtoLogMessage.STR_PARAM_IIDS;
-import static perfetto.protos.PerfettoTrace.ProtoLogViewerConfig.GROUPS;
-import static perfetto.protos.PerfettoTrace.ProtoLogViewerConfig.Group.ID;
-import static perfetto.protos.PerfettoTrace.ProtoLogViewerConfig.Group.NAME;
-import static perfetto.protos.PerfettoTrace.ProtoLogViewerConfig.Group.TAG;
-import static perfetto.protos.PerfettoTrace.ProtoLogViewerConfig.MESSAGES;
-import static perfetto.protos.PerfettoTrace.ProtoLogViewerConfig.MessageData.GROUP_ID;
-import static perfetto.protos.PerfettoTrace.ProtoLogViewerConfig.MessageData.LEVEL;
-import static perfetto.protos.PerfettoTrace.ProtoLogViewerConfig.MessageData.MESSAGE;
-import static perfetto.protos.PerfettoTrace.TracePacket.INTERNED_DATA;
-import static perfetto.protos.PerfettoTrace.TracePacket.PROTOLOG_MESSAGE;
-import static perfetto.protos.PerfettoTrace.TracePacket.PROTOLOG_VIEWER_CONFIG;
-import static perfetto.protos.PerfettoTrace.TracePacket.SEQUENCE_FLAGS;
-import static perfetto.protos.PerfettoTrace.TracePacket.SEQ_INCREMENTAL_STATE_CLEARED;
-import static perfetto.protos.PerfettoTrace.TracePacket.SEQ_NEEDS_INCREMENTAL_STATE;
-import static perfetto.protos.PerfettoTrace.TracePacket.TIMESTAMP;
+import static android.internal.perfetto.protos.PerfettoTrace.InternedData.PROTOLOG_STACKTRACE;
+import static android.internal.perfetto.protos.PerfettoTrace.InternedData.PROTOLOG_STRING_ARGS;
+import static android.internal.perfetto.protos.PerfettoTrace.InternedString.IID;
+import static android.internal.perfetto.protos.PerfettoTrace.InternedString.STR;
+import static android.internal.perfetto.protos.PerfettoTrace.ProtoLogMessage.BOOLEAN_PARAMS;
+import static android.internal.perfetto.protos.PerfettoTrace.ProtoLogMessage.DOUBLE_PARAMS;
+import static android.internal.perfetto.protos.PerfettoTrace.ProtoLogMessage.MESSAGE_ID;
+import static android.internal.perfetto.protos.PerfettoTrace.ProtoLogMessage.SINT64_PARAMS;
+import static android.internal.perfetto.protos.PerfettoTrace.ProtoLogMessage.STACKTRACE_IID;
+import static android.internal.perfetto.protos.PerfettoTrace.ProtoLogMessage.STR_PARAM_IIDS;
+import static android.internal.perfetto.protos.PerfettoTrace.ProtoLogViewerConfig.GROUPS;
+import static android.internal.perfetto.protos.PerfettoTrace.ProtoLogViewerConfig.Group.ID;
+import static android.internal.perfetto.protos.PerfettoTrace.ProtoLogViewerConfig.Group.NAME;
+import static android.internal.perfetto.protos.PerfettoTrace.ProtoLogViewerConfig.Group.TAG;
+import static android.internal.perfetto.protos.PerfettoTrace.ProtoLogViewerConfig.MESSAGES;
+import static android.internal.perfetto.protos.PerfettoTrace.ProtoLogViewerConfig.MessageData.GROUP_ID;
+import static android.internal.perfetto.protos.PerfettoTrace.ProtoLogViewerConfig.MessageData.LEVEL;
+import static android.internal.perfetto.protos.PerfettoTrace.ProtoLogViewerConfig.MessageData.MESSAGE;
+import static android.internal.perfetto.protos.PerfettoTrace.TracePacket.INTERNED_DATA;
+import static android.internal.perfetto.protos.PerfettoTrace.TracePacket.PROTOLOG_MESSAGE;
+import static android.internal.perfetto.protos.PerfettoTrace.TracePacket.PROTOLOG_VIEWER_CONFIG;
+import static android.internal.perfetto.protos.PerfettoTrace.TracePacket.SEQUENCE_FLAGS;
+import static android.internal.perfetto.protos.PerfettoTrace.TracePacket.SEQ_INCREMENTAL_STATE_CLEARED;
+import static android.internal.perfetto.protos.PerfettoTrace.TracePacket.SEQ_NEEDS_INCREMENTAL_STATE;
+import static android.internal.perfetto.protos.PerfettoTrace.TracePacket.TIMESTAMP;
import android.annotation.Nullable;
+import android.internal.perfetto.protos.PerfettoTrace.ProtoLogViewerConfig.MessageData;
import android.os.ShellCommand;
import android.os.SystemClock;
import android.os.Trace;
@@ -74,8 +75,6 @@
import java.util.concurrent.Executors;
import java.util.concurrent.atomic.AtomicInteger;
-import perfetto.protos.PerfettoTrace.ProtoLogViewerConfig.MessageData;
-
/**
* A service for the ProtoLog logging system.
*/
diff --git a/core/java/com/android/internal/protolog/ProtoLogDataSource.java b/core/java/com/android/internal/protolog/ProtoLogDataSource.java
index a8ff75d..a2d5e70 100644
--- a/core/java/com/android/internal/protolog/ProtoLogDataSource.java
+++ b/core/java/com/android/internal/protolog/ProtoLogDataSource.java
@@ -16,13 +16,14 @@
package com.android.internal.protolog;
-import static perfetto.protos.PerfettoTrace.DataSourceConfig.PROTOLOG_CONFIG;
-import static perfetto.protos.PerfettoTrace.ProtoLogConfig.GROUP_OVERRIDES;
-import static perfetto.protos.PerfettoTrace.ProtoLogConfig.TRACING_MODE;
-import static perfetto.protos.PerfettoTrace.ProtoLogGroup.COLLECT_STACKTRACE;
-import static perfetto.protos.PerfettoTrace.ProtoLogGroup.LOG_FROM;
-import static perfetto.protos.PerfettoTrace.ProtoLogGroup.GROUP_NAME;
+import static android.internal.perfetto.protos.PerfettoTrace.DataSourceConfig.PROTOLOG_CONFIG;
+import static android.internal.perfetto.protos.PerfettoTrace.ProtoLogConfig.GROUP_OVERRIDES;
+import static android.internal.perfetto.protos.PerfettoTrace.ProtoLogConfig.TRACING_MODE;
+import static android.internal.perfetto.protos.PerfettoTrace.ProtoLogGroup.COLLECT_STACKTRACE;
+import static android.internal.perfetto.protos.PerfettoTrace.ProtoLogGroup.GROUP_NAME;
+import static android.internal.perfetto.protos.PerfettoTrace.ProtoLogGroup.LOG_FROM;
+import android.internal.perfetto.protos.PerfettoTrace;
import android.tracing.perfetto.CreateIncrementalStateArgs;
import android.tracing.perfetto.CreateTlsStateArgs;
import android.tracing.perfetto.DataSource;
@@ -39,8 +40,6 @@
import java.util.HashMap;
import java.util.Map;
-import perfetto.protos.PerfettoTrace;
-
public class ProtoLogDataSource extends DataSource<ProtoLogDataSource.Instance,
ProtoLogDataSource.TlsState,
ProtoLogDataSource.IncrementalState> {
diff --git a/core/java/com/android/internal/protolog/ProtoLogViewerConfigReader.java b/core/java/com/android/internal/protolog/ProtoLogViewerConfigReader.java
index ae3d448..88a7b54 100644
--- a/core/java/com/android/internal/protolog/ProtoLogViewerConfigReader.java
+++ b/core/java/com/android/internal/protolog/ProtoLogViewerConfigReader.java
@@ -1,8 +1,8 @@
package com.android.internal.protolog;
-import static perfetto.protos.PerfettoTrace.ProtoLogViewerConfig.MESSAGES;
-import static perfetto.protos.PerfettoTrace.ProtoLogViewerConfig.MessageData.MESSAGE;
-import static perfetto.protos.PerfettoTrace.ProtoLogViewerConfig.MessageData.MESSAGE_ID;
+import static android.internal.perfetto.protos.PerfettoTrace.ProtoLogViewerConfig.MESSAGES;
+import static android.internal.perfetto.protos.PerfettoTrace.ProtoLogViewerConfig.MessageData.MESSAGE;
+import static android.internal.perfetto.protos.PerfettoTrace.ProtoLogViewerConfig.MessageData.MESSAGE_ID;
import android.util.ArrayMap;
import android.util.proto.ProtoInputStream;
diff --git a/core/java/com/android/internal/widget/remotecompose/player/RemoteComposePlayer.java b/core/java/com/android/internal/widget/remotecompose/player/RemoteComposePlayer.java
index cc1f3dd..7423a16 100644
--- a/core/java/com/android/internal/widget/remotecompose/player/RemoteComposePlayer.java
+++ b/core/java/com/android/internal/widget/remotecompose/player/RemoteComposePlayer.java
@@ -16,6 +16,7 @@
package com.android.internal.widget.remotecompose.player;
import android.content.Context;
+import android.graphics.Color;
import android.util.AttributeSet;
import android.util.Log;
import android.view.ViewGroup;
@@ -97,6 +98,7 @@
LayoutParams.MATCH_PARENT);
HorizontalScrollView horizontalScrollView =
new HorizontalScrollView(getContext());
+ horizontalScrollView.setBackgroundColor(Color.TRANSPARENT);
horizontalScrollView.setFillViewport(true);
horizontalScrollView.addView(mInner, layoutParamsInner);
LayoutParams layoutParams = new LayoutParams(
@@ -113,6 +115,7 @@
LayoutParams.MATCH_PARENT,
LayoutParams.WRAP_CONTENT);
ScrollView scrollView = new ScrollView(getContext());
+ scrollView.setBackgroundColor(Color.TRANSPARENT);
scrollView.setFillViewport(true);
scrollView.addView(mInner, layoutParamsInner);
LayoutParams layoutParams = new LayoutParams(
@@ -136,7 +139,9 @@
private void init(Context context, AttributeSet attrs, int defStyleAttr) {
LayoutParams layoutParams = new LayoutParams(LayoutParams.MATCH_PARENT,
LayoutParams.MATCH_PARENT);
+ setBackgroundColor(Color.TRANSPARENT);
mInner = new RemoteComposeCanvas(context, attrs, defStyleAttr);
+ mInner.setBackgroundColor(Color.TRANSPARENT);
addView(mInner, layoutParams);
}
diff --git a/core/jni/Android.bp b/core/jni/Android.bp
index fd4ff29..03b57d0 100644
--- a/core/jni/Android.bp
+++ b/core/jni/Android.bp
@@ -309,6 +309,7 @@
"libdebuggerd_client",
"libutils",
"libbinder",
+ "libbinderdebug",
"libbinder_ndk",
"libui",
"libgraphicsenv",
diff --git a/core/jni/android_os_Debug.cpp b/core/jni/android_os_Debug.cpp
index a98f947..3c2dccd 100644
--- a/core/jni/android_os_Debug.cpp
+++ b/core/jni/android_os_Debug.cpp
@@ -16,97 +16,51 @@
#define LOG_TAG "android.os.Debug"
+#include "android_os_Debug.h"
+
+#include <android-base/file.h>
+#include <android-base/logging.h>
+#include <android-base/properties.h>
+#include <android-base/strings.h>
#include <assert.h>
+#include <binderdebug/BinderDebug.h>
+#include <bionic/malloc.h>
#include <ctype.h>
+#include <debuggerd/client.h>
+#include <dmabufinfo/dmabuf_sysfs_stats.h>
+#include <dmabufinfo/dmabufinfo.h>
#include <errno.h>
#include <fcntl.h>
#include <inttypes.h>
+#include <log/log.h>
#include <malloc.h>
+#include <meminfo/androidprocheaps.h>
+#include <meminfo/procmeminfo.h>
+#include <meminfo/sysmeminfo.h>
+#include <memtrack/memtrack.h>
+#include <memunreachable/memunreachable.h>
+#include <nativehelper/JNIPlatformHelp.h>
+#include <nativehelper/ScopedUtfChars.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <sys/time.h>
#include <time.h>
#include <unistd.h>
+#include <utils/String8.h>
+#include <utils/misc.h>
+#include <vintf/KernelConfigs.h>
#include <iomanip>
#include <string>
#include <vector>
-#include <android-base/logging.h>
-#include <android-base/properties.h>
-#include <bionic/malloc.h>
-#include <debuggerd/client.h>
-#include <log/log.h>
-#include <utils/misc.h>
-#include <utils/String8.h>
-
-#include <nativehelper/JNIPlatformHelp.h>
-#include <nativehelper/ScopedUtfChars.h>
#include "jni.h"
-#include <dmabufinfo/dmabuf_sysfs_stats.h>
-#include <dmabufinfo/dmabufinfo.h>
-#include <meminfo/procmeminfo.h>
-#include <meminfo/sysmeminfo.h>
-#include <memtrack/memtrack.h>
-#include <memunreachable/memunreachable.h>
-#include <android-base/strings.h>
-#include "android_os_Debug.h"
-#include <vintf/KernelConfigs.h>
namespace android
{
-enum {
- HEAP_UNKNOWN,
- HEAP_DALVIK,
- HEAP_NATIVE,
-
- HEAP_DALVIK_OTHER,
- HEAP_STACK,
- HEAP_CURSOR,
- HEAP_ASHMEM,
- HEAP_GL_DEV,
- HEAP_UNKNOWN_DEV,
- HEAP_SO,
- HEAP_JAR,
- HEAP_APK,
- HEAP_TTF,
- HEAP_DEX,
- HEAP_OAT,
- HEAP_ART,
- HEAP_UNKNOWN_MAP,
- HEAP_GRAPHICS,
- HEAP_GL,
- HEAP_OTHER_MEMTRACK,
-
- // Dalvik extra sections (heap).
- HEAP_DALVIK_NORMAL,
- HEAP_DALVIK_LARGE,
- HEAP_DALVIK_ZYGOTE,
- HEAP_DALVIK_NON_MOVING,
-
- // Dalvik other extra sections.
- HEAP_DALVIK_OTHER_LINEARALLOC,
- HEAP_DALVIK_OTHER_ACCOUNTING,
- HEAP_DALVIK_OTHER_ZYGOTE_CODE_CACHE,
- HEAP_DALVIK_OTHER_APP_CODE_CACHE,
- HEAP_DALVIK_OTHER_COMPILER_METADATA,
- HEAP_DALVIK_OTHER_INDIRECT_REFERENCE_TABLE,
-
- // Boot vdex / app dex / app vdex
- HEAP_DEX_BOOT_VDEX,
- HEAP_DEX_APP_DEX,
- HEAP_DEX_APP_VDEX,
-
- // App art, boot art.
- HEAP_ART_APP,
- HEAP_ART_BOOT,
-
- _NUM_HEAP,
- _NUM_EXCLUSIVE_HEAP = HEAP_OTHER_MEMTRACK+1,
- _NUM_CORE_HEAP = HEAP_NATIVE+1
-};
+using namespace android::meminfo;
struct stat_fields {
jfieldID pss_field;
@@ -146,18 +100,6 @@
static jfieldID otherStats_field;
static jfieldID hasSwappedOutPss_field;
-struct stats_t {
- int pss;
- int swappablePss;
- int rss;
- int privateDirty;
- int sharedDirty;
- int privateClean;
- int sharedClean;
- int swappedOut;
- int swappedOutPss;
-};
-
#define BINDER_STATS "/proc/binder/stats"
static jlong android_os_Debug_getNativeHeapSize(JNIEnv *env, jobject clazz)
@@ -240,190 +182,14 @@
return err;
}
-static bool load_maps(int pid, stats_t* stats, bool* foundSwapPss)
-{
- *foundSwapPss = false;
- uint64_t prev_end = 0;
- int prev_heap = HEAP_UNKNOWN;
-
- std::string smaps_path = base::StringPrintf("/proc/%d/smaps", pid);
- auto vma_scan = [&](const meminfo::Vma& vma) {
- int which_heap = HEAP_UNKNOWN;
- int sub_heap = HEAP_UNKNOWN;
- bool is_swappable = false;
- std::string name;
- if (base::EndsWith(vma.name, " (deleted)")) {
- name = vma.name.substr(0, vma.name.size() - strlen(" (deleted)"));
- } else {
- name = vma.name;
- }
-
- uint32_t namesz = name.size();
- if (base::StartsWith(name, "[heap]")) {
- which_heap = HEAP_NATIVE;
- } else if (base::StartsWith(name, "[anon:libc_malloc]")) {
- which_heap = HEAP_NATIVE;
- } else if (base::StartsWith(name, "[anon:scudo:")) {
- which_heap = HEAP_NATIVE;
- } else if (base::StartsWith(name, "[anon:GWP-ASan")) {
- which_heap = HEAP_NATIVE;
- } else if (base::StartsWith(name, "[stack")) {
- which_heap = HEAP_STACK;
- } else if (base::StartsWith(name, "[anon:stack_and_tls:")) {
- which_heap = HEAP_STACK;
- } else if (base::EndsWith(name, ".so")) {
- which_heap = HEAP_SO;
- is_swappable = true;
- } else if (base::EndsWith(name, ".jar")) {
- which_heap = HEAP_JAR;
- is_swappable = true;
- } else if (base::EndsWith(name, ".apk")) {
- which_heap = HEAP_APK;
- is_swappable = true;
- } else if (base::EndsWith(name, ".ttf")) {
- which_heap = HEAP_TTF;
- is_swappable = true;
- } else if ((base::EndsWith(name, ".odex")) ||
- (namesz > 4 && strstr(name.c_str(), ".dex") != nullptr)) {
- which_heap = HEAP_DEX;
- sub_heap = HEAP_DEX_APP_DEX;
- is_swappable = true;
- } else if (base::EndsWith(name, ".vdex")) {
- which_heap = HEAP_DEX;
- // Handle system@framework@boot and system/framework/boot|apex
- if ((strstr(name.c_str(), "@boot") != nullptr) ||
- (strstr(name.c_str(), "/boot") != nullptr) ||
- (strstr(name.c_str(), "/apex") != nullptr)) {
- sub_heap = HEAP_DEX_BOOT_VDEX;
- } else {
- sub_heap = HEAP_DEX_APP_VDEX;
- }
- is_swappable = true;
- } else if (base::EndsWith(name, ".oat")) {
- which_heap = HEAP_OAT;
- is_swappable = true;
- } else if (base::EndsWith(name, ".art") || base::EndsWith(name, ".art]")) {
- which_heap = HEAP_ART;
- // Handle system@framework@boot* and system/framework/boot|apex*
- if ((strstr(name.c_str(), "@boot") != nullptr) ||
- (strstr(name.c_str(), "/boot") != nullptr) ||
- (strstr(name.c_str(), "/apex") != nullptr)) {
- sub_heap = HEAP_ART_BOOT;
- } else {
- sub_heap = HEAP_ART_APP;
- }
- is_swappable = true;
- } else if (base::StartsWith(name, "/dev/")) {
- which_heap = HEAP_UNKNOWN_DEV;
- if (base::StartsWith(name, "/dev/kgsl-3d0")) {
- which_heap = HEAP_GL_DEV;
- } else if (base::StartsWith(name, "/dev/ashmem/CursorWindow")) {
- which_heap = HEAP_CURSOR;
- } else if (base::StartsWith(name, "/dev/ashmem/jit-zygote-cache")) {
- which_heap = HEAP_DALVIK_OTHER;
- sub_heap = HEAP_DALVIK_OTHER_ZYGOTE_CODE_CACHE;
- } else if (base::StartsWith(name, "/dev/ashmem")) {
- which_heap = HEAP_ASHMEM;
- }
- } else if (base::StartsWith(name, "/memfd:jit-cache")) {
- which_heap = HEAP_DALVIK_OTHER;
- sub_heap = HEAP_DALVIK_OTHER_APP_CODE_CACHE;
- } else if (base::StartsWith(name, "/memfd:jit-zygote-cache")) {
- which_heap = HEAP_DALVIK_OTHER;
- sub_heap = HEAP_DALVIK_OTHER_ZYGOTE_CODE_CACHE;
- } else if (base::StartsWith(name, "[anon:")) {
- which_heap = HEAP_UNKNOWN;
- if (base::StartsWith(name, "[anon:dalvik-")) {
- which_heap = HEAP_DALVIK_OTHER;
- if (base::StartsWith(name, "[anon:dalvik-LinearAlloc")) {
- sub_heap = HEAP_DALVIK_OTHER_LINEARALLOC;
- } else if (base::StartsWith(name, "[anon:dalvik-alloc space") ||
- base::StartsWith(name, "[anon:dalvik-main space")) {
- // This is the regular Dalvik heap.
- which_heap = HEAP_DALVIK;
- sub_heap = HEAP_DALVIK_NORMAL;
- } else if (base::StartsWith(name,
- "[anon:dalvik-large object space") ||
- base::StartsWith(
- name, "[anon:dalvik-free list large object space")) {
- which_heap = HEAP_DALVIK;
- sub_heap = HEAP_DALVIK_LARGE;
- } else if (base::StartsWith(name, "[anon:dalvik-non moving space")) {
- which_heap = HEAP_DALVIK;
- sub_heap = HEAP_DALVIK_NON_MOVING;
- } else if (base::StartsWith(name, "[anon:dalvik-zygote space")) {
- which_heap = HEAP_DALVIK;
- sub_heap = HEAP_DALVIK_ZYGOTE;
- } else if (base::StartsWith(name, "[anon:dalvik-indirect ref")) {
- sub_heap = HEAP_DALVIK_OTHER_INDIRECT_REFERENCE_TABLE;
- } else if (base::StartsWith(name, "[anon:dalvik-jit-code-cache") ||
- base::StartsWith(name, "[anon:dalvik-data-code-cache")) {
- sub_heap = HEAP_DALVIK_OTHER_APP_CODE_CACHE;
- } else if (base::StartsWith(name, "[anon:dalvik-CompilerMetadata")) {
- sub_heap = HEAP_DALVIK_OTHER_COMPILER_METADATA;
- } else {
- sub_heap = HEAP_DALVIK_OTHER_ACCOUNTING; // Default to accounting.
- }
- }
- } else if (namesz > 0) {
- which_heap = HEAP_UNKNOWN_MAP;
- } else if (vma.start == prev_end && prev_heap == HEAP_SO) {
- // bss section of a shared library
- which_heap = HEAP_SO;
- }
-
- prev_end = vma.end;
- prev_heap = which_heap;
-
- const meminfo::MemUsage& usage = vma.usage;
- if (usage.swap_pss > 0 && *foundSwapPss != true) {
- *foundSwapPss = true;
- }
-
- uint64_t swapable_pss = 0;
- if (is_swappable && (usage.pss > 0)) {
- float sharing_proportion = 0.0;
- if ((usage.shared_clean > 0) || (usage.shared_dirty > 0)) {
- sharing_proportion = (usage.pss - usage.uss) / (usage.shared_clean + usage.shared_dirty);
- }
- swapable_pss = (sharing_proportion * usage.shared_clean) + usage.private_clean;
- }
-
- stats[which_heap].pss += usage.pss;
- stats[which_heap].swappablePss += swapable_pss;
- stats[which_heap].rss += usage.rss;
- stats[which_heap].privateDirty += usage.private_dirty;
- stats[which_heap].sharedDirty += usage.shared_dirty;
- stats[which_heap].privateClean += usage.private_clean;
- stats[which_heap].sharedClean += usage.shared_clean;
- stats[which_heap].swappedOut += usage.swap;
- stats[which_heap].swappedOutPss += usage.swap_pss;
- if (which_heap == HEAP_DALVIK || which_heap == HEAP_DALVIK_OTHER ||
- which_heap == HEAP_DEX || which_heap == HEAP_ART) {
- stats[sub_heap].pss += usage.pss;
- stats[sub_heap].swappablePss += swapable_pss;
- stats[sub_heap].rss += usage.rss;
- stats[sub_heap].privateDirty += usage.private_dirty;
- stats[sub_heap].sharedDirty += usage.shared_dirty;
- stats[sub_heap].privateClean += usage.private_clean;
- stats[sub_heap].sharedClean += usage.shared_clean;
- stats[sub_heap].swappedOut += usage.swap;
- stats[sub_heap].swappedOutPss += usage.swap_pss;
- }
- return true;
- };
-
- return meminfo::ForEachVmaFromFile(smaps_path, vma_scan);
-}
-
static jboolean android_os_Debug_getDirtyPagesPid(JNIEnv *env, jobject clazz,
jint pid, jobject object)
{
bool foundSwapPss;
- stats_t stats[_NUM_HEAP];
+ AndroidHeapStats stats[_NUM_HEAP];
memset(&stats, 0, sizeof(stats));
- if (!load_maps(pid, stats, &foundSwapPss)) {
+ if (!ExtractAndroidHeapStats(pid, stats, &foundSwapPss)) {
return JNI_FALSE;
}
@@ -815,6 +581,15 @@
return false;
}
+ std::string binderState;
+ android::status_t status = android::getBinderTransactions(pid, binderState);
+ if (status == android::OK) {
+ if (!android::base::WriteStringToFd(binderState, fd)) {
+ PLOG(ERROR) << "Failed to dump binder state info for pid: " << pid;
+ }
+ } else {
+ PLOG(ERROR) << "Failed to get binder state info for pid: " << pid << " status: " << status;
+ }
int res = dump_backtrace_to_file_timeout(pid, dumpType, timeoutSecs, fd);
if (fdatasync(fd.get()) != 0) {
PLOG(ERROR) << "Failed flushing trace.";
diff --git a/core/res/OWNERS b/core/res/OWNERS
index 6924248..4e61ff2 100644
--- a/core/res/OWNERS
+++ b/core/res/OWNERS
@@ -43,6 +43,9 @@
# Device Idle
per-file res/values/config_device_idle.xml = file:/apex/jobscheduler/OWNERS
+# Display Manager
+per-file res/values/config_display.xml = file:/services/core/java/com/android/server/display/OWNERS
+
# Wear
per-file res/*-watch/* = file:/WEAR_OWNERS
diff --git a/core/res/res/values-af/strings.xml b/core/res/res/values-af/strings.xml
index 7cd186f..63cd6b9 100644
--- a/core/res/res/values-af/strings.xml
+++ b/core/res/res/values-af/strings.xml
@@ -357,7 +357,7 @@
<string name="capability_desc_canTakeScreenshot" msgid="7762297374317934052">"Kan \'n skermkiekie neem."</string>
<string name="dream_preview_title" msgid="5570751491996100804">"Voorskou, <xliff:g id="DREAM_NAME">%1$s</xliff:g>"</string>
<string name="permlab_statusBar" msgid="8798267849526214017">"deaktiveer of verander statusbalk"</string>
- <string name="permdesc_statusBar" msgid="5809162768651019642">"Laat die program toe om die statusbalk te deaktiveer en stelselikone by te voeg of te verwyder."</string>
+ <string name="permdesc_statusBar" msgid="5809162768651019642">"Laat die app toe om die statusbalk te deaktiveer en stelselikone by te voeg of te verwyder."</string>
<string name="permlab_statusBarService" msgid="2523421018081437981">"wees die statusbalk"</string>
<string name="permdesc_statusBarService" msgid="6652917399085712557">"Laat die program toe om die statusbalk te wees."</string>
<string name="permlab_expandStatusBar" msgid="1184232794782141698">"vou statusbalk in of uit"</string>
@@ -2397,6 +2397,8 @@
<string name="profile_label_test" msgid="9168641926186071947">"Toets"</string>
<string name="profile_label_communal" msgid="8743921499944800427">"Gemeenskaplik"</string>
<string name="redacted_notification_action_title" msgid="6942924973335920935"></string>
+ <!-- no translation found for screen_not_shared_sensitive_content (7058419185079565001) -->
+ <skip />
<string name="satellite_notification_title" msgid="4026338973463121526">"Outomaties aan satelliet gekoppel"</string>
<string name="satellite_notification_summary" msgid="5207364139430767162">"Jy kan boodskappe stuur en ontvang sonder ’n selfoon- of wi-fi-netwerk"</string>
<string name="satellite_notification_open_message" msgid="4149234979688273729">"Maak Boodskappe oop"</string>
diff --git a/core/res/res/values-am/strings.xml b/core/res/res/values-am/strings.xml
index 66c5502..799a7ab 100644
--- a/core/res/res/values-am/strings.xml
+++ b/core/res/res/values-am/strings.xml
@@ -1929,12 +1929,9 @@
<string name="zen_mode_implicit_trigger_description" msgid="5714956693073007111">"በ<xliff:g id="APP_NAME">%1$s</xliff:g> የሚተዳደር"</string>
<string name="zen_mode_implicit_activated" msgid="2634285680776672994">"በርቷል"</string>
<string name="zen_mode_implicit_deactivated" msgid="8688441768371501750">"ጠፍቷል"</string>
- <!-- no translation found for zen_mode_trigger_summary_divider_text (7461583466043698862) -->
- <skip />
- <!-- no translation found for zen_mode_trigger_summary_range_symbol_combination (1804900738798069619) -->
- <skip />
- <!-- no translation found for zen_mode_trigger_event_calendar_any (2086784607921121803) -->
- <skip />
+ <string name="zen_mode_trigger_summary_divider_text" msgid="7461583466043698862">"፣ "</string>
+ <string name="zen_mode_trigger_summary_range_symbol_combination" msgid="1804900738798069619">"<xliff:g id="START">%1$s</xliff:g> - <xliff:g id="END">%2$s</xliff:g>"</string>
+ <string name="zen_mode_trigger_event_calendar_any" msgid="2086784607921121803">"ማንኛውም ቀን መቁጠሪያ"</string>
<string name="muted_by" msgid="91464083490094950">"<xliff:g id="THIRD_PARTY">%1$s</xliff:g> አንዳንድ ድምጾችን እየዘጋ ነው"</string>
<string name="system_error_wipe_data" msgid="5910572292172208493">"መሣሪያዎ ላይ የውስጣዊ ችግር አለ፣ የፋብሪካ ውሂብ ዳግም እስኪያስጀምሩት ድረስ ላይረጋጋ ይችላል።"</string>
<string name="system_error_manufacturer" msgid="703545241070116315">"መሣሪያዎ ላይ የውስጣዊ ችግር አለ። ዝርዝሮችን ለማግኘት አምራችዎን ያነጋግሩ።"</string>
@@ -2397,6 +2394,8 @@
<string name="profile_label_test" msgid="9168641926186071947">"ሙከራ"</string>
<string name="profile_label_communal" msgid="8743921499944800427">"የጋራ"</string>
<string name="redacted_notification_action_title" msgid="6942924973335920935"></string>
+ <!-- no translation found for screen_not_shared_sensitive_content (7058419185079565001) -->
+ <skip />
<string name="satellite_notification_title" msgid="4026338973463121526">"ከሳተላይት ጋር በራስ-ሰር ተገናኝቷል"</string>
<string name="satellite_notification_summary" msgid="5207364139430767162">"ያለ ሞባይል ወይም የWi-Fi አውታረ መረብ መልዕክቶችን መላክ እና መቀበል ይችላሉ"</string>
<string name="satellite_notification_open_message" msgid="4149234979688273729">"መልዕክቶች ይክፈቱ"</string>
diff --git a/core/res/res/values-ar/strings.xml b/core/res/res/values-ar/strings.xml
index 881fb29..fad2cd6 100644
--- a/core/res/res/values-ar/strings.xml
+++ b/core/res/res/values-ar/strings.xml
@@ -319,7 +319,7 @@
<string name="permgroupdesc_contacts" msgid="9163927941244182567">"الوصول إلى جهات اتصالك"</string>
<string name="permgrouplab_location" msgid="1858277002233964394">"الموقع الجغرافي"</string>
<string name="permgroupdesc_location" msgid="1995955142118450685">"الوصول إلى موقع هذا الجهاز"</string>
- <string name="permgrouplab_calendar" msgid="6426860926123033230">"التقويم"</string>
+ <string name="permgrouplab_calendar" msgid="6426860926123033230">"تقويم Google"</string>
<string name="permgroupdesc_calendar" msgid="6762751063361489379">"الوصول إلى تقويمك"</string>
<string name="permgrouplab_sms" msgid="795737735126084874">"SMS"</string>
<string name="permgroupdesc_sms" msgid="5726462398070064542">"إرسال رسائل قصيرة SMS وعرضها"</string>
@@ -1933,12 +1933,9 @@
<string name="zen_mode_implicit_trigger_description" msgid="5714956693073007111">"تحت إدارة \"<xliff:g id="APP_NAME">%1$s</xliff:g>\""</string>
<string name="zen_mode_implicit_activated" msgid="2634285680776672994">"مفعَّل"</string>
<string name="zen_mode_implicit_deactivated" msgid="8688441768371501750">"غير مفعَّل"</string>
- <!-- no translation found for zen_mode_trigger_summary_divider_text (7461583466043698862) -->
- <skip />
- <!-- no translation found for zen_mode_trigger_summary_range_symbol_combination (1804900738798069619) -->
- <skip />
- <!-- no translation found for zen_mode_trigger_event_calendar_any (2086784607921121803) -->
- <skip />
+ <string name="zen_mode_trigger_summary_divider_text" msgid="7461583466043698862">"، "</string>
+ <string name="zen_mode_trigger_summary_range_symbol_combination" msgid="1804900738798069619">"من <xliff:g id="START">%1$s</xliff:g> إلى <xliff:g id="END">%2$s</xliff:g>"</string>
+ <string name="zen_mode_trigger_event_calendar_any" msgid="2086784607921121803">"أي تقويم"</string>
<string name="muted_by" msgid="91464083490094950">"يعمل <xliff:g id="THIRD_PARTY">%1$s</xliff:g> على كتم بعض الأصوات."</string>
<string name="system_error_wipe_data" msgid="5910572292172208493">"حدثت مشكلة داخلية في جهازك، وقد لا يستقر وضعه حتى إجراء إعادة الضبط على الإعدادات الأصلية."</string>
<string name="system_error_manufacturer" msgid="703545241070116315">"حدثت مشكلة داخلية في جهازك. يمكنك الاتصال بالمصنِّع للحصول على تفاصيل."</string>
@@ -2000,7 +1997,7 @@
<string name="work_mode_emergency_call_button" msgid="6818855962881612322">"الطوارئ"</string>
<string name="set_up_screen_lock_title" msgid="8346083801616474030">"ضبط قفل شاشة"</string>
<string name="set_up_screen_lock_action_label" msgid="2687634803649209367">"ضبط قفل الشاشة"</string>
- <string name="private_space_set_up_screen_lock_message" msgid="1109956797005149814">"لاستخدام مساحتك الخاصة، يجب ضبط قفل شاشة على هذا الجهاز."</string>
+ <string name="private_space_set_up_screen_lock_message" msgid="1109956797005149814">"لاستخدام مساحتك الخاصة، يجب ضبط قفل شاشة على هذا الجهاز"</string>
<string name="app_blocked_title" msgid="7353262160455028160">"التطبيق غير متاح"</string>
<string name="app_blocked_message" msgid="542972921087873023">"تطبيق <xliff:g id="APP_NAME">%1$s</xliff:g> غير متاح الآن."</string>
<string name="app_streaming_blocked_title" msgid="6090945835898766139">"تطبيق <xliff:g id="ACTIVITY">%1$s</xliff:g> غير متاح"</string>
@@ -2401,6 +2398,8 @@
<string name="profile_label_test" msgid="9168641926186071947">"ملف شخصي تجريبي"</string>
<string name="profile_label_communal" msgid="8743921499944800427">"ملف شخصي مشترك"</string>
<string name="redacted_notification_action_title" msgid="6942924973335920935"></string>
+ <!-- no translation found for screen_not_shared_sensitive_content (7058419185079565001) -->
+ <skip />
<string name="satellite_notification_title" msgid="4026338973463121526">"تم الاتصال تلقائيًا بالقمر الصناعي"</string>
<string name="satellite_notification_summary" msgid="5207364139430767162">"يمكنك إرسال الرسائل واستلامها بدون شبكة الجوّال أو شبكة Wi-Fi."</string>
<string name="satellite_notification_open_message" msgid="4149234979688273729">"فتح تطبيق \"الرسائل\""</string>
diff --git a/core/res/res/values-as/strings.xml b/core/res/res/values-as/strings.xml
index aaf715b..8b3f832 100644
--- a/core/res/res/values-as/strings.xml
+++ b/core/res/res/values-as/strings.xml
@@ -1929,12 +1929,9 @@
<string name="zen_mode_implicit_trigger_description" msgid="5714956693073007111">"<xliff:g id="APP_NAME">%1$s</xliff:g>এ পৰিচালনা কৰা"</string>
<string name="zen_mode_implicit_activated" msgid="2634285680776672994">"অন আছে"</string>
<string name="zen_mode_implicit_deactivated" msgid="8688441768371501750">"অফ আছে"</string>
- <!-- no translation found for zen_mode_trigger_summary_divider_text (7461583466043698862) -->
- <skip />
- <!-- no translation found for zen_mode_trigger_summary_range_symbol_combination (1804900738798069619) -->
- <skip />
- <!-- no translation found for zen_mode_trigger_event_calendar_any (2086784607921121803) -->
- <skip />
+ <string name="zen_mode_trigger_summary_divider_text" msgid="7461583466043698862">", "</string>
+ <string name="zen_mode_trigger_summary_range_symbol_combination" msgid="1804900738798069619">"<xliff:g id="START">%1$s</xliff:g> - <xliff:g id="END">%2$s</xliff:g>"</string>
+ <string name="zen_mode_trigger_event_calendar_any" msgid="2086784607921121803">"যিকোনো কেলেণ্ডাৰ"</string>
<string name="muted_by" msgid="91464083490094950">"<xliff:g id="THIRD_PARTY">%1$s</xliff:g>এ কিছুমান ধ্বনি মিউট কৰি আছে"</string>
<string name="system_error_wipe_data" msgid="5910572292172208493">"আপোনাৰ ডিভাইচত এটা আভ্যন্তৰীণ সমস্যা আছে আৰু আপুনি ফেক্টৰী ডেটা ৰিছেট নকৰালৈকে ই সুস্থিৰভাৱে কাম নকৰিব পাৰে।"</string>
<string name="system_error_manufacturer" msgid="703545241070116315">"আপোনাৰ ডিভাইচত এটা আভ্যন্তৰীণ সমস্যা আছে। সবিশেষ জানিবৰ বাবে আপোনাৰ ডিভাইচ নির্মাতাৰ সৈতে যোগাযোগ কৰক।"</string>
@@ -2397,6 +2394,8 @@
<string name="profile_label_test" msgid="9168641926186071947">"পৰীক্ষা"</string>
<string name="profile_label_communal" msgid="8743921499944800427">"শ্বেয়াৰ কৰা"</string>
<string name="redacted_notification_action_title" msgid="6942924973335920935"></string>
+ <!-- no translation found for screen_not_shared_sensitive_content (7058419185079565001) -->
+ <skip />
<string name="satellite_notification_title" msgid="4026338973463121526">"উপগ্ৰহৰ সৈতে স্বয়ংক্ৰিয়ভাৱে সংযুক্ত হৈছে"</string>
<string name="satellite_notification_summary" msgid="5207364139430767162">"আপুনি ম’বাইল বা ৱাই-ফাই নেটৱৰ্কৰ জৰিয়তে পাঠ বাৰ্তা পঠিয়াব বা লাভ কৰিব পাৰে"</string>
<string name="satellite_notification_open_message" msgid="4149234979688273729">"Messages খোলক"</string>
diff --git a/core/res/res/values-az/strings.xml b/core/res/res/values-az/strings.xml
index 8a8b2fa..c0b886b 100644
--- a/core/res/res/values-az/strings.xml
+++ b/core/res/res/values-az/strings.xml
@@ -1929,12 +1929,9 @@
<string name="zen_mode_implicit_trigger_description" msgid="5714956693073007111">"<xliff:g id="APP_NAME">%1$s</xliff:g> idarə edir"</string>
<string name="zen_mode_implicit_activated" msgid="2634285680776672994">"Aktiv"</string>
<string name="zen_mode_implicit_deactivated" msgid="8688441768371501750">"Deaktiv"</string>
- <!-- no translation found for zen_mode_trigger_summary_divider_text (7461583466043698862) -->
- <skip />
- <!-- no translation found for zen_mode_trigger_summary_range_symbol_combination (1804900738798069619) -->
- <skip />
- <!-- no translation found for zen_mode_trigger_event_calendar_any (2086784607921121803) -->
- <skip />
+ <string name="zen_mode_trigger_summary_divider_text" msgid="7461583466043698862">", "</string>
+ <string name="zen_mode_trigger_summary_range_symbol_combination" msgid="1804900738798069619">"<xliff:g id="START">%1$s</xliff:g> - <xliff:g id="END">%2$s</xliff:g>"</string>
+ <string name="zen_mode_trigger_event_calendar_any" msgid="2086784607921121803">"İstənilən təqvim"</string>
<string name="muted_by" msgid="91464083490094950">"<xliff:g id="THIRD_PARTY">%1$s</xliff:g> bəzi səsləri səssiz rejimə salır"</string>
<string name="system_error_wipe_data" msgid="5910572292172208493">"Cihazınızın daxili problemi var və istehsalçı sıfırlanması olmayana qədər qeyri-stabil ola bilər."</string>
<string name="system_error_manufacturer" msgid="703545241070116315">"Cihazınızın daxili problemi var. Əlavə məlumat üçün istehsalçı ilə əlaqə saxlayın."</string>
@@ -2397,6 +2394,8 @@
<string name="profile_label_test" msgid="9168641926186071947">"Test"</string>
<string name="profile_label_communal" msgid="8743921499944800427">"Kommunal"</string>
<string name="redacted_notification_action_title" msgid="6942924973335920935"></string>
+ <!-- no translation found for screen_not_shared_sensitive_content (7058419185079565001) -->
+ <skip />
<string name="satellite_notification_title" msgid="4026338973463121526">"Peykə avtomatik qoşulub"</string>
<string name="satellite_notification_summary" msgid="5207364139430767162">"Mobil və ya Wi-Fi şəbəkəsi olmadan mesaj göndərə və qəbul edə bilərsiniz"</string>
<string name="satellite_notification_open_message" msgid="4149234979688273729">"Mesajı açı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 5f01266..a275cab 100644
--- a/core/res/res/values-b+sr+Latn/strings.xml
+++ b/core/res/res/values-b+sr+Latn/strings.xml
@@ -1930,12 +1930,9 @@
<string name="zen_mode_implicit_trigger_description" msgid="5714956693073007111">"Upravlja: <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
<string name="zen_mode_implicit_activated" msgid="2634285680776672994">"Uključeno"</string>
<string name="zen_mode_implicit_deactivated" msgid="8688441768371501750">"Isključeno"</string>
- <!-- no translation found for zen_mode_trigger_summary_divider_text (7461583466043698862) -->
- <skip />
- <!-- no translation found for zen_mode_trigger_summary_range_symbol_combination (1804900738798069619) -->
- <skip />
- <!-- no translation found for zen_mode_trigger_event_calendar_any (2086784607921121803) -->
- <skip />
+ <string name="zen_mode_trigger_summary_divider_text" msgid="7461583466043698862">", "</string>
+ <string name="zen_mode_trigger_summary_range_symbol_combination" msgid="1804900738798069619">"<xliff:g id="START">%1$s</xliff:g>–<xliff:g id="END">%2$s</xliff:g>"</string>
+ <string name="zen_mode_trigger_event_calendar_any" msgid="2086784607921121803">"Bilo koji kalendar"</string>
<string name="muted_by" msgid="91464083490094950">"<xliff:g id="THIRD_PARTY">%1$s</xliff:g> isključuje neke zvuke"</string>
<string name="system_error_wipe_data" msgid="5910572292172208493">"Došlo je do internog problema u vezi sa uređajem i možda će biti nestabilan dok ne obavite resetovanje na fabrička podešavanja."</string>
<string name="system_error_manufacturer" msgid="703545241070116315">"Došlo je do internog problema u vezi sa uređajem. Potražite detalje od proizvođača."</string>
@@ -2398,6 +2395,8 @@
<string name="profile_label_test" msgid="9168641926186071947">"Test"</string>
<string name="profile_label_communal" msgid="8743921499944800427">"Zajedničko"</string>
<string name="redacted_notification_action_title" msgid="6942924973335920935"></string>
+ <!-- no translation found for screen_not_shared_sensitive_content (7058419185079565001) -->
+ <skip />
<string name="satellite_notification_title" msgid="4026338973463121526">"Automatski povezano sa satelitom"</string>
<string name="satellite_notification_summary" msgid="5207364139430767162">"Možete da šaljete i primate poruke bez mobilne ili WiFi mreže"</string>
<string name="satellite_notification_open_message" msgid="4149234979688273729">"Otvori Messages"</string>
diff --git a/core/res/res/values-be/strings.xml b/core/res/res/values-be/strings.xml
index 8466034..c0d930f 100644
--- a/core/res/res/values-be/strings.xml
+++ b/core/res/res/values-be/strings.xml
@@ -1931,12 +1931,9 @@
<string name="zen_mode_implicit_trigger_description" msgid="5714956693073007111">"Пад кіраваннем праграмы \"<xliff:g id="APP_NAME">%1$s</xliff:g>\""</string>
<string name="zen_mode_implicit_activated" msgid="2634285680776672994">"Уключана"</string>
<string name="zen_mode_implicit_deactivated" msgid="8688441768371501750">"Выключана"</string>
- <!-- no translation found for zen_mode_trigger_summary_divider_text (7461583466043698862) -->
- <skip />
- <!-- no translation found for zen_mode_trigger_summary_range_symbol_combination (1804900738798069619) -->
- <skip />
- <!-- no translation found for zen_mode_trigger_event_calendar_any (2086784607921121803) -->
- <skip />
+ <string name="zen_mode_trigger_summary_divider_text" msgid="7461583466043698862">", "</string>
+ <string name="zen_mode_trigger_summary_range_symbol_combination" msgid="1804900738798069619">"<xliff:g id="START">%1$s</xliff:g>-<xliff:g id="END">%2$s</xliff:g>"</string>
+ <string name="zen_mode_trigger_event_calendar_any" msgid="2086784607921121803">"Любы каляндар"</string>
<string name="muted_by" msgid="91464083490094950">"<xliff:g id="THIRD_PARTY">%1$s</xliff:g> выключае некаторыя гукі"</string>
<string name="system_error_wipe_data" msgid="5910572292172208493">"На вашай прыладзе ўзнікла ўнутраная праблема, і яна можа працаваць нестабільна, пакуль вы не зробіце скід да заводскіх налад."</string>
<string name="system_error_manufacturer" msgid="703545241070116315">"На вашай прыладзе ўзнікла ўнутраная праблема. Для атрымання дадатковай інфармацыі звярніцеся да вытворцы."</string>
@@ -2399,6 +2396,8 @@
<string name="profile_label_test" msgid="9168641926186071947">"Тэставы"</string>
<string name="profile_label_communal" msgid="8743921499944800427">"Супольны"</string>
<string name="redacted_notification_action_title" msgid="6942924973335920935"></string>
+ <!-- no translation found for screen_not_shared_sensitive_content (7058419185079565001) -->
+ <skip />
<string name="satellite_notification_title" msgid="4026338973463121526">"Аўтаматычна падключана да сістэм спадарожнікавай сувязі"</string>
<string name="satellite_notification_summary" msgid="5207364139430767162">"Вы можаце адпраўляць і атрымліваць паведамленні без доступу да мабільнай сеткі або Wi-Fi"</string>
<string name="satellite_notification_open_message" msgid="4149234979688273729">"Адкрыць Паведамленні"</string>
diff --git a/core/res/res/values-bg/strings.xml b/core/res/res/values-bg/strings.xml
index 56b429a..5c793e5 100644
--- a/core/res/res/values-bg/strings.xml
+++ b/core/res/res/values-bg/strings.xml
@@ -1929,12 +1929,9 @@
<string name="zen_mode_implicit_trigger_description" msgid="5714956693073007111">"Управлява се от <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
<string name="zen_mode_implicit_activated" msgid="2634285680776672994">"Вкл."</string>
<string name="zen_mode_implicit_deactivated" msgid="8688441768371501750">"Изкл."</string>
- <!-- no translation found for zen_mode_trigger_summary_divider_text (7461583466043698862) -->
- <skip />
- <!-- no translation found for zen_mode_trigger_summary_range_symbol_combination (1804900738798069619) -->
- <skip />
- <!-- no translation found for zen_mode_trigger_event_calendar_any (2086784607921121803) -->
- <skip />
+ <string name="zen_mode_trigger_summary_divider_text" msgid="7461583466043698862">", "</string>
+ <string name="zen_mode_trigger_summary_range_symbol_combination" msgid="1804900738798069619">"<xliff:g id="START">%1$s</xliff:g> – <xliff:g id="END">%2$s</xliff:g>"</string>
+ <string name="zen_mode_trigger_event_calendar_any" msgid="2086784607921121803">"Всички календари"</string>
<string name="muted_by" msgid="91464083490094950">"<xliff:g id="THIRD_PARTY">%1$s</xliff:g> заглушава някои звуци"</string>
<string name="system_error_wipe_data" msgid="5910572292172208493">"Възникна вътрешен проблем с устройството ви. То може да е нестабилно, докато не възстановите фабричните настройки."</string>
<string name="system_error_manufacturer" msgid="703545241070116315">"Възникна вътрешен проблем с устройството ви. За подробности се свържете с производителя."</string>
@@ -2397,6 +2394,8 @@
<string name="profile_label_test" msgid="9168641926186071947">"Тестване"</string>
<string name="profile_label_communal" msgid="8743921499944800427">"Общи"</string>
<string name="redacted_notification_action_title" msgid="6942924973335920935"></string>
+ <!-- no translation found for screen_not_shared_sensitive_content (7058419185079565001) -->
+ <skip />
<string name="satellite_notification_title" msgid="4026338973463121526">"Автоматично установена връзка със сателит"</string>
<string name="satellite_notification_summary" msgid="5207364139430767162">"Можете да изпращате и получавате съобщения без мобилна или Wi-Fi мрежа"</string>
<string name="satellite_notification_open_message" msgid="4149234979688273729">"Отваряне на Messages"</string>
diff --git a/core/res/res/values-bn/strings.xml b/core/res/res/values-bn/strings.xml
index 97175364..8946607 100644
--- a/core/res/res/values-bn/strings.xml
+++ b/core/res/res/values-bn/strings.xml
@@ -1929,12 +1929,9 @@
<string name="zen_mode_implicit_trigger_description" msgid="5714956693073007111">"<xliff:g id="APP_NAME">%1$s</xliff:g> ম্যানেজ করে"</string>
<string name="zen_mode_implicit_activated" msgid="2634285680776672994">"চালু আছে"</string>
<string name="zen_mode_implicit_deactivated" msgid="8688441768371501750">"বন্ধ আছে"</string>
- <!-- no translation found for zen_mode_trigger_summary_divider_text (7461583466043698862) -->
- <skip />
- <!-- no translation found for zen_mode_trigger_summary_range_symbol_combination (1804900738798069619) -->
- <skip />
- <!-- no translation found for zen_mode_trigger_event_calendar_any (2086784607921121803) -->
- <skip />
+ <string name="zen_mode_trigger_summary_divider_text" msgid="7461583466043698862">", "</string>
+ <string name="zen_mode_trigger_summary_range_symbol_combination" msgid="1804900738798069619">"<xliff:g id="START">%1$s</xliff:g> - <xliff:g id="END">%2$s</xliff:g>"</string>
+ <string name="zen_mode_trigger_event_calendar_any" msgid="2086784607921121803">"যেকোনও ক্যালেন্ডার"</string>
<string name="muted_by" msgid="91464083490094950">"<xliff:g id="THIRD_PARTY">%1$s</xliff:g> কিছু সাউন্ডকে মিউট করে দিচ্ছে"</string>
<string name="system_error_wipe_data" msgid="5910572292172208493">"আপনার ডিভাইসে একটি অভ্যন্তরীন সমস্যা হয়েছে, এবং আপনি যতক্ষণ না পর্যন্ত এটিকে ফ্যাক্টরি ডেটা রিসেট করছেন ততক্ষণ এটি ঠিকভাবে কাজ নাও করতে পারে৷"</string>
<string name="system_error_manufacturer" msgid="703545241070116315">"আপনার ডিভাইসে একটি অভ্যন্তরীন সমস্যা হয়েছে৷ বিস্তারিত জানার জন্য প্রস্তুতকারকের সাথে যোগাযোগ করুন৷"</string>
@@ -2397,6 +2394,8 @@
<string name="profile_label_test" msgid="9168641926186071947">"পরীক্ষা"</string>
<string name="profile_label_communal" msgid="8743921499944800427">"কমিউনাল"</string>
<string name="redacted_notification_action_title" msgid="6942924973335920935"></string>
+ <!-- no translation found for screen_not_shared_sensitive_content (7058419185079565001) -->
+ <skip />
<string name="satellite_notification_title" msgid="4026338973463121526">"স্যাটেলাইটের সাথে অটোমেটিক কানেক্ট করা হয়েছে"</string>
<string name="satellite_notification_summary" msgid="5207364139430767162">"আপনি কোনও মেবাইল বা ওয়াই-ফাই নেটওয়ার্ক ছাড়াই মেসেজ পাঠাতে ও পেতে পারবেন"</string>
<string name="satellite_notification_open_message" msgid="4149234979688273729">"Messages খুলুন"</string>
diff --git a/core/res/res/values-bs/strings.xml b/core/res/res/values-bs/strings.xml
index 55a014b..2d08a22 100644
--- a/core/res/res/values-bs/strings.xml
+++ b/core/res/res/values-bs/strings.xml
@@ -1930,12 +1930,9 @@
<string name="zen_mode_implicit_trigger_description" msgid="5714956693073007111">"Upravlja <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
<string name="zen_mode_implicit_activated" msgid="2634285680776672994">"Uključeno"</string>
<string name="zen_mode_implicit_deactivated" msgid="8688441768371501750">"Isključeno"</string>
- <!-- no translation found for zen_mode_trigger_summary_divider_text (7461583466043698862) -->
- <skip />
- <!-- no translation found for zen_mode_trigger_summary_range_symbol_combination (1804900738798069619) -->
- <skip />
- <!-- no translation found for zen_mode_trigger_event_calendar_any (2086784607921121803) -->
- <skip />
+ <string name="zen_mode_trigger_summary_divider_text" msgid="7461583466043698862">", "</string>
+ <string name="zen_mode_trigger_summary_range_symbol_combination" msgid="1804900738798069619">"<xliff:g id="START">%1$s</xliff:g> – <xliff:g id="END">%2$s</xliff:g>"</string>
+ <string name="zen_mode_trigger_event_calendar_any" msgid="2086784607921121803">"Bilo koji kalendar"</string>
<string name="muted_by" msgid="91464083490094950">"<xliff:g id="THIRD_PARTY">%1$s</xliff:g> isključuje neke zvukove"</string>
<string name="system_error_wipe_data" msgid="5910572292172208493">"Postoji problem u vašem uređaju i može biti nestabilan dok ga ne vratite na fabričke postavke."</string>
<string name="system_error_manufacturer" msgid="703545241070116315">"Postoji problem u vašem uređaju. Za više informacija obratite se proizvođaču."</string>
@@ -2398,6 +2395,8 @@
<string name="profile_label_test" msgid="9168641926186071947">"Testno"</string>
<string name="profile_label_communal" msgid="8743921499944800427">"Opće"</string>
<string name="redacted_notification_action_title" msgid="6942924973335920935"></string>
+ <!-- no translation found for screen_not_shared_sensitive_content (7058419185079565001) -->
+ <skip />
<string name="satellite_notification_title" msgid="4026338973463121526">"Automatski je povezano sa satelitom"</string>
<string name="satellite_notification_summary" msgid="5207364139430767162">"Možete slati i primati poruke bez mobilne ili WiFi mreže"</string>
<string name="satellite_notification_open_message" msgid="4149234979688273729">"Otvorite Messages"</string>
diff --git a/core/res/res/values-ca/strings.xml b/core/res/res/values-ca/strings.xml
index 65b0f81..263d129 100644
--- a/core/res/res/values-ca/strings.xml
+++ b/core/res/res/values-ca/strings.xml
@@ -1930,12 +1930,9 @@
<string name="zen_mode_implicit_trigger_description" msgid="5714956693073007111">"Gestionat per <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
<string name="zen_mode_implicit_activated" msgid="2634285680776672994">"Activat"</string>
<string name="zen_mode_implicit_deactivated" msgid="8688441768371501750">"Desactivat"</string>
- <!-- no translation found for zen_mode_trigger_summary_divider_text (7461583466043698862) -->
- <skip />
- <!-- no translation found for zen_mode_trigger_summary_range_symbol_combination (1804900738798069619) -->
- <skip />
- <!-- no translation found for zen_mode_trigger_event_calendar_any (2086784607921121803) -->
- <skip />
+ <string name="zen_mode_trigger_summary_divider_text" msgid="7461583466043698862">", "</string>
+ <string name="zen_mode_trigger_summary_range_symbol_combination" msgid="1804900738798069619">"<xliff:g id="START">%1$s</xliff:g>-<xliff:g id="END">%2$s</xliff:g>"</string>
+ <string name="zen_mode_trigger_event_calendar_any" msgid="2086784607921121803">"Qualsevol calendari"</string>
<string name="muted_by" msgid="91464083490094950">"<xliff:g id="THIRD_PARTY">%1$s</xliff:g> està silenciant alguns sons"</string>
<string name="system_error_wipe_data" msgid="5910572292172208493">"S\'ha produït un error intern al dispositiu i és possible que funcioni de manera inestable fins que restableixis les dades de fàbrica."</string>
<string name="system_error_manufacturer" msgid="703545241070116315">"S\'ha produït un error intern al dispositiu. Contacta amb el fabricant del dispositiu per obtenir més informació."</string>
@@ -1997,7 +1994,7 @@
<string name="work_mode_emergency_call_button" msgid="6818855962881612322">"Emergència"</string>
<string name="set_up_screen_lock_title" msgid="8346083801616474030">"Defineix un bloqueig de pantalla"</string>
<string name="set_up_screen_lock_action_label" msgid="2687634803649209367">"Defineix un bloqueig de pantalla"</string>
- <string name="private_space_set_up_screen_lock_message" msgid="1109956797005149814">"Per utilitzar l\'espai privat, defineix un bloq. de pantalla"</string>
+ <string name="private_space_set_up_screen_lock_message" msgid="1109956797005149814">"Per utilitzar l\'espai privat, defineix un bloqueig de pantalla en aquest dispositiu"</string>
<string name="app_blocked_title" msgid="7353262160455028160">"L\'aplicació no està disponible"</string>
<string name="app_blocked_message" msgid="542972921087873023">"Ara mateix, <xliff:g id="APP_NAME">%1$s</xliff:g> no està disponible."</string>
<string name="app_streaming_blocked_title" msgid="6090945835898766139">"<xliff:g id="ACTIVITY">%1$s</xliff:g> no està disponible"</string>
@@ -2398,6 +2395,8 @@
<string name="profile_label_test" msgid="9168641926186071947">"Prova"</string>
<string name="profile_label_communal" msgid="8743921499944800427">"Compartit"</string>
<string name="redacted_notification_action_title" msgid="6942924973335920935"></string>
+ <!-- no translation found for screen_not_shared_sensitive_content (7058419185079565001) -->
+ <skip />
<string name="satellite_notification_title" msgid="4026338973463121526">"S\'ha connectat automàticament a un satèl·lit"</string>
<string name="satellite_notification_summary" msgid="5207364139430767162">"Pots enviar i rebre missatges sense una xarxa mòbil o Wi‑Fi"</string>
<string name="satellite_notification_open_message" msgid="4149234979688273729">"Obre Missatges"</string>
diff --git a/core/res/res/values-cs/strings.xml b/core/res/res/values-cs/strings.xml
index 798185c..a8ad543 100644
--- a/core/res/res/values-cs/strings.xml
+++ b/core/res/res/values-cs/strings.xml
@@ -1931,12 +1931,9 @@
<string name="zen_mode_implicit_trigger_description" msgid="5714956693073007111">"Spravováno aplikací <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
<string name="zen_mode_implicit_activated" msgid="2634285680776672994">"Zapnuto"</string>
<string name="zen_mode_implicit_deactivated" msgid="8688441768371501750">"Vypnuto"</string>
- <!-- no translation found for zen_mode_trigger_summary_divider_text (7461583466043698862) -->
- <skip />
- <!-- no translation found for zen_mode_trigger_summary_range_symbol_combination (1804900738798069619) -->
- <skip />
- <!-- no translation found for zen_mode_trigger_event_calendar_any (2086784607921121803) -->
- <skip />
+ <string name="zen_mode_trigger_summary_divider_text" msgid="7461583466043698862">", "</string>
+ <string name="zen_mode_trigger_summary_range_symbol_combination" msgid="1804900738798069619">"<xliff:g id="START">%1$s</xliff:g>–<xliff:g id="END">%2$s</xliff:g>"</string>
+ <string name="zen_mode_trigger_event_calendar_any" msgid="2086784607921121803">"V libovolném kalendáři"</string>
<string name="muted_by" msgid="91464083490094950">"<xliff:g id="THIRD_PARTY">%1$s</xliff:g> vypíná určité zvuky"</string>
<string name="system_error_wipe_data" msgid="5910572292172208493">"V zařízení došlo k internímu problému. Dokud neprovedete obnovení továrních dat, může být nestabilní."</string>
<string name="system_error_manufacturer" msgid="703545241070116315">"V zařízení došlo k internímu problému. Další informace vám sdělí výrobce."</string>
@@ -2399,6 +2396,8 @@
<string name="profile_label_test" msgid="9168641926186071947">"Test"</string>
<string name="profile_label_communal" msgid="8743921499944800427">"Komunální"</string>
<string name="redacted_notification_action_title" msgid="6942924973335920935"></string>
+ <!-- no translation found for screen_not_shared_sensitive_content (7058419185079565001) -->
+ <skip />
<string name="satellite_notification_title" msgid="4026338973463121526">"Automaticky připojeno k satelitu"</string>
<string name="satellite_notification_summary" msgid="5207364139430767162">"Zprávy můžete odesílat a přijímat bez mobilní sítě nebo sítě Wi-Fi"</string>
<string name="satellite_notification_open_message" msgid="4149234979688273729">"Otevřít Zprávy"</string>
diff --git a/core/res/res/values-da/strings.xml b/core/res/res/values-da/strings.xml
index 8559d40..59be3dd 100644
--- a/core/res/res/values-da/strings.xml
+++ b/core/res/res/values-da/strings.xml
@@ -827,7 +827,7 @@
<string name="permdesc_writeVerificationStateE2eeContactKeys" msgid="8453156829747427041">"Giver appen tilladelse til at opdatere tilstandene for verificering E2EE-kontaktnøgler, som ejes af andre apps"</string>
<string name="policylab_limitPassword" msgid="4851829918814422199">"Angiv regler for adgangskoder"</string>
<string name="policydesc_limitPassword" msgid="4105491021115793793">"Tjek længden samt tilladte tegn i adgangskoder og pinkoder til skærmlåsen."</string>
- <string name="policylab_watchLogin" msgid="7599669460083719504">"Overvåg forsøg på oplåsning af skærm"</string>
+ <string name="policylab_watchLogin" msgid="7599669460083719504">"Overvåge forsøg på oplåsning af skærm"</string>
<string name="policydesc_watchLogin" product="tablet" msgid="2388436408621909298">"Overvåg antallet af forkert indtastede adgangskoder, når du låser skærmen op, og lås din tablet, eller slet alle data i den, hvis der er indtastet for mange forkerte adgangskoder."</string>
<string name="policydesc_watchLogin" product="tv" msgid="2140588224468517507">"Registrer antallet af forkerte adgangskoder, der angives ved oplåsning af skærmen, og lås din Android TV-enhed, eller ryd alle dataene på din Android TV-enhed, hvis adgangskoden angives forkert for mange gange."</string>
<string name="policydesc_watchLogin" product="automotive" msgid="7011438994051251521">"Registrer antallet af forkert indtastede adgangskoder, når du låser skærmen op, og lås infotainmentsystemet, eller slet alle data i infotainmentsystemet, hvis der er indtastet for mange forkerte adgangskoder."</string>
@@ -1929,12 +1929,9 @@
<string name="zen_mode_implicit_trigger_description" msgid="5714956693073007111">"Administreres af <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
<string name="zen_mode_implicit_activated" msgid="2634285680776672994">"Til"</string>
<string name="zen_mode_implicit_deactivated" msgid="8688441768371501750">"Fra"</string>
- <!-- no translation found for zen_mode_trigger_summary_divider_text (7461583466043698862) -->
- <skip />
- <!-- no translation found for zen_mode_trigger_summary_range_symbol_combination (1804900738798069619) -->
- <skip />
- <!-- no translation found for zen_mode_trigger_event_calendar_any (2086784607921121803) -->
- <skip />
+ <string name="zen_mode_trigger_summary_divider_text" msgid="7461583466043698862">", "</string>
+ <string name="zen_mode_trigger_summary_range_symbol_combination" msgid="1804900738798069619">"<xliff:g id="START">%1$s</xliff:g>-<xliff:g id="END">%2$s</xliff:g>"</string>
+ <string name="zen_mode_trigger_event_calendar_any" msgid="2086784607921121803">"Alle kalendere"</string>
<string name="muted_by" msgid="91464083490094950">"<xliff:g id="THIRD_PARTY">%1$s</xliff:g> slår nogle lyde fra"</string>
<string name="system_error_wipe_data" msgid="5910572292172208493">"Der er et internt problem med enheden, og den vil muligvis være ustabil, indtil du gendanner fabriksdataene."</string>
<string name="system_error_manufacturer" msgid="703545241070116315">"Der er et internt problem med enheden. Kontakt producenten for at få yderligere oplysninger."</string>
@@ -2397,6 +2394,8 @@
<string name="profile_label_test" msgid="9168641926186071947">"Test"</string>
<string name="profile_label_communal" msgid="8743921499944800427">"Fælles"</string>
<string name="redacted_notification_action_title" msgid="6942924973335920935"></string>
+ <!-- no translation found for screen_not_shared_sensitive_content (7058419185079565001) -->
+ <skip />
<string name="satellite_notification_title" msgid="4026338973463121526">"Der blev automatisk oprettet forbindelse til satellit"</string>
<string name="satellite_notification_summary" msgid="5207364139430767162">"Du kan sende og modtage beskeder uden et mobil- eller Wi-Fi-netværk"</string>
<string name="satellite_notification_open_message" msgid="4149234979688273729">"Åbn Beskeder"</string>
diff --git a/core/res/res/values-de/strings.xml b/core/res/res/values-de/strings.xml
index a96bcfd..b4882fe 100644
--- a/core/res/res/values-de/strings.xml
+++ b/core/res/res/values-de/strings.xml
@@ -2397,6 +2397,8 @@
<string name="profile_label_test" msgid="9168641926186071947">"Test"</string>
<string name="profile_label_communal" msgid="8743921499944800427">"Gemeinsam genutzt"</string>
<string name="redacted_notification_action_title" msgid="6942924973335920935"></string>
+ <!-- no translation found for screen_not_shared_sensitive_content (7058419185079565001) -->
+ <skip />
<string name="satellite_notification_title" msgid="4026338973463121526">"Automatisch mit Satellit verbunden"</string>
<string name="satellite_notification_summary" msgid="5207364139430767162">"Du kannst Nachrichten ohne Mobilfunknetz oder WLAN senden und empfangen"</string>
<string name="satellite_notification_open_message" msgid="4149234979688273729">"Messages öffnen"</string>
diff --git a/core/res/res/values-el/strings.xml b/core/res/res/values-el/strings.xml
index eff6d4d..1b88a6a 100644
--- a/core/res/res/values-el/strings.xml
+++ b/core/res/res/values-el/strings.xml
@@ -1929,12 +1929,9 @@
<string name="zen_mode_implicit_trigger_description" msgid="5714956693073007111">"Διαχείριση από <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
<string name="zen_mode_implicit_activated" msgid="2634285680776672994">"Ενεργός"</string>
<string name="zen_mode_implicit_deactivated" msgid="8688441768371501750">"Ανενεργός"</string>
- <!-- no translation found for zen_mode_trigger_summary_divider_text (7461583466043698862) -->
- <skip />
- <!-- no translation found for zen_mode_trigger_summary_range_symbol_combination (1804900738798069619) -->
- <skip />
- <!-- no translation found for zen_mode_trigger_event_calendar_any (2086784607921121803) -->
- <skip />
+ <string name="zen_mode_trigger_summary_divider_text" msgid="7461583466043698862">", "</string>
+ <string name="zen_mode_trigger_summary_range_symbol_combination" msgid="1804900738798069619">"<xliff:g id="START">%1$s</xliff:g> - <xliff:g id="END">%2$s</xliff:g>"</string>
+ <string name="zen_mode_trigger_event_calendar_any" msgid="2086784607921121803">"Οποιοδήποτε ημερολόγιο"</string>
<string name="muted_by" msgid="91464083490094950">"Το τρίτο μέρος <xliff:g id="THIRD_PARTY">%1$s</xliff:g> θέτει ορισμένους ήχους σε σίγαση"</string>
<string name="system_error_wipe_data" msgid="5910572292172208493">"Υπάρχει ένα εσωτερικό πρόβλημα με τη συσκευή σας και ενδέχεται να είναι ασταθής μέχρι την επαναφορά των εργοστασιακών ρυθμίσεων."</string>
<string name="system_error_manufacturer" msgid="703545241070116315">"Υπάρχει ένα εσωτερικό πρόβλημα με τη συσκευή σας. Επικοινωνήστε με τον κατασκευαστή σας για λεπτομέρειες."</string>
@@ -2397,6 +2394,8 @@
<string name="profile_label_test" msgid="9168641926186071947">"Δοκιμή"</string>
<string name="profile_label_communal" msgid="8743921499944800427">"Κοινόχρηστο"</string>
<string name="redacted_notification_action_title" msgid="6942924973335920935"></string>
+ <!-- no translation found for screen_not_shared_sensitive_content (7058419185079565001) -->
+ <skip />
<string name="satellite_notification_title" msgid="4026338973463121526">"Συνδέθηκε αυτόματα με δορυφόρο"</string>
<string name="satellite_notification_summary" msgid="5207364139430767162">"Μπορείτε να στέλνετε και να λαμβάνετε μηνύματα χωρίς δίκτυο κινητής τηλεφωνίας ή Wi-Fi."</string>
<string name="satellite_notification_open_message" msgid="4149234979688273729">"Άνοιγμα Messages"</string>
diff --git a/core/res/res/values-en-rAU/strings.xml b/core/res/res/values-en-rAU/strings.xml
index c869c7e..5a6c620 100644
--- a/core/res/res/values-en-rAU/strings.xml
+++ b/core/res/res/values-en-rAU/strings.xml
@@ -2394,6 +2394,8 @@
<string name="profile_label_test" msgid="9168641926186071947">"Test"</string>
<string name="profile_label_communal" msgid="8743921499944800427">"Communal"</string>
<string name="redacted_notification_action_title" msgid="6942924973335920935"></string>
+ <!-- no translation found for screen_not_shared_sensitive_content (7058419185079565001) -->
+ <skip />
<string name="satellite_notification_title" msgid="4026338973463121526">"Auto-connected to satellite"</string>
<string name="satellite_notification_summary" msgid="5207364139430767162">"You can send and receive messages without a mobile or Wi-Fi network"</string>
<string name="satellite_notification_open_message" msgid="4149234979688273729">"Open Messages"</string>
diff --git a/core/res/res/values-en-rCA/strings.xml b/core/res/res/values-en-rCA/strings.xml
index b521bdb..86fe49c 100644
--- a/core/res/res/values-en-rCA/strings.xml
+++ b/core/res/res/values-en-rCA/strings.xml
@@ -2394,6 +2394,7 @@
<string name="profile_label_test" msgid="9168641926186071947">"Test"</string>
<string name="profile_label_communal" msgid="8743921499944800427">"Communal"</string>
<string name="redacted_notification_action_title" msgid="6942924973335920935"></string>
+ <string name="screen_not_shared_sensitive_content" msgid="7058419185079565001">"App content hidden from screen share for security"</string>
<string name="satellite_notification_title" msgid="4026338973463121526">"Auto connected to satellite"</string>
<string name="satellite_notification_summary" msgid="5207364139430767162">"You can send and receive messages without a mobile or Wi-Fi network"</string>
<string name="satellite_notification_open_message" msgid="4149234979688273729">"Open Messages"</string>
diff --git a/core/res/res/values-en-rGB/strings.xml b/core/res/res/values-en-rGB/strings.xml
index 542656d..4972e1b 100644
--- a/core/res/res/values-en-rGB/strings.xml
+++ b/core/res/res/values-en-rGB/strings.xml
@@ -2394,6 +2394,8 @@
<string name="profile_label_test" msgid="9168641926186071947">"Test"</string>
<string name="profile_label_communal" msgid="8743921499944800427">"Communal"</string>
<string name="redacted_notification_action_title" msgid="6942924973335920935"></string>
+ <!-- no translation found for screen_not_shared_sensitive_content (7058419185079565001) -->
+ <skip />
<string name="satellite_notification_title" msgid="4026338973463121526">"Auto-connected to satellite"</string>
<string name="satellite_notification_summary" msgid="5207364139430767162">"You can send and receive messages without a mobile or Wi-Fi network"</string>
<string name="satellite_notification_open_message" msgid="4149234979688273729">"Open Messages"</string>
diff --git a/core/res/res/values-en-rIN/strings.xml b/core/res/res/values-en-rIN/strings.xml
index 589e129..c35c2ff 100644
--- a/core/res/res/values-en-rIN/strings.xml
+++ b/core/res/res/values-en-rIN/strings.xml
@@ -2394,6 +2394,8 @@
<string name="profile_label_test" msgid="9168641926186071947">"Test"</string>
<string name="profile_label_communal" msgid="8743921499944800427">"Communal"</string>
<string name="redacted_notification_action_title" msgid="6942924973335920935"></string>
+ <!-- no translation found for screen_not_shared_sensitive_content (7058419185079565001) -->
+ <skip />
<string name="satellite_notification_title" msgid="4026338973463121526">"Auto-connected to satellite"</string>
<string name="satellite_notification_summary" msgid="5207364139430767162">"You can send and receive messages without a mobile or Wi-Fi network"</string>
<string name="satellite_notification_open_message" msgid="4149234979688273729">"Open Messages"</string>
diff --git a/core/res/res/values-en-rXC/strings.xml b/core/res/res/values-en-rXC/strings.xml
index c0465ee..b7f49980 100644
--- a/core/res/res/values-en-rXC/strings.xml
+++ b/core/res/res/values-en-rXC/strings.xml
@@ -2394,6 +2394,7 @@
<string name="profile_label_test" msgid="9168641926186071947">"Test"</string>
<string name="profile_label_communal" msgid="8743921499944800427">"Communal"</string>
<string name="redacted_notification_action_title" msgid="6942924973335920935"></string>
+ <string name="screen_not_shared_sensitive_content" msgid="7058419185079565001">"App content hidden from screen share for security"</string>
<string name="satellite_notification_title" msgid="4026338973463121526">"Auto connected to satellite"</string>
<string name="satellite_notification_summary" msgid="5207364139430767162">"You can send and receive messages without a mobile or Wi-Fi network"</string>
<string name="satellite_notification_open_message" msgid="4149234979688273729">"Open Messages"</string>
diff --git a/core/res/res/values-es-rUS/strings.xml b/core/res/res/values-es-rUS/strings.xml
index f361dd8..4f7f7a7 100644
--- a/core/res/res/values-es-rUS/strings.xml
+++ b/core/res/res/values-es-rUS/strings.xml
@@ -2395,6 +2395,8 @@
<string name="profile_label_test" msgid="9168641926186071947">"Probar"</string>
<string name="profile_label_communal" msgid="8743921499944800427">"Compartido"</string>
<string name="redacted_notification_action_title" msgid="6942924973335920935"></string>
+ <!-- no translation found for screen_not_shared_sensitive_content (7058419185079565001) -->
+ <skip />
<string name="satellite_notification_title" msgid="4026338973463121526">"Conexión automática a satélite"</string>
<string name="satellite_notification_summary" msgid="5207364139430767162">"Puedes enviar y recibir mensajes incluso si no tienes conexión a una red móvil o Wi-Fi"</string>
<string name="satellite_notification_open_message" msgid="4149234979688273729">"Abrir Mensajes"</string>
diff --git a/core/res/res/values-es/strings.xml b/core/res/res/values-es/strings.xml
index 87a369f..bf9d526 100644
--- a/core/res/res/values-es/strings.xml
+++ b/core/res/res/values-es/strings.xml
@@ -1930,12 +1930,9 @@
<string name="zen_mode_implicit_trigger_description" msgid="5714956693073007111">"Gestionado por <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
<string name="zen_mode_implicit_activated" msgid="2634285680776672994">"Activado"</string>
<string name="zen_mode_implicit_deactivated" msgid="8688441768371501750">"Desactivado"</string>
- <!-- no translation found for zen_mode_trigger_summary_divider_text (7461583466043698862) -->
- <skip />
- <!-- no translation found for zen_mode_trigger_summary_range_symbol_combination (1804900738798069619) -->
- <skip />
- <!-- no translation found for zen_mode_trigger_event_calendar_any (2086784607921121803) -->
- <skip />
+ <string name="zen_mode_trigger_summary_divider_text" msgid="7461583466043698862">", "</string>
+ <string name="zen_mode_trigger_summary_range_symbol_combination" msgid="1804900738798069619">"<xliff:g id="START">%1$s</xliff:g>-<xliff:g id="END">%2$s</xliff:g>"</string>
+ <string name="zen_mode_trigger_event_calendar_any" msgid="2086784607921121803">"Cualquier calendario"</string>
<string name="muted_by" msgid="91464083490094950">"<xliff:g id="THIRD_PARTY">%1$s</xliff:g> silencia algunos sonidos"</string>
<string name="system_error_wipe_data" msgid="5910572292172208493">"Se ha producido un problema interno en el dispositivo y es posible que este no sea estable hasta que restablezcas el estado de fábrica."</string>
<string name="system_error_manufacturer" msgid="703545241070116315">"Se ha producido un problema interno en el dispositivo. Ponte en contacto con el fabricante para obtener más información."</string>
@@ -2398,6 +2395,8 @@
<string name="profile_label_test" msgid="9168641926186071947">"Prueba"</string>
<string name="profile_label_communal" msgid="8743921499944800427">"Común"</string>
<string name="redacted_notification_action_title" msgid="6942924973335920935"></string>
+ <!-- no translation found for screen_not_shared_sensitive_content (7058419185079565001) -->
+ <skip />
<string name="satellite_notification_title" msgid="4026338973463121526">"Conectado automáticamente al satélite"</string>
<string name="satellite_notification_summary" msgid="5207364139430767162">"Puedes enviar y recibir mensajes sin una red móvil o Wi-Fi"</string>
<string name="satellite_notification_open_message" msgid="4149234979688273729">"Abre Mensajes"</string>
diff --git a/core/res/res/values-et/strings.xml b/core/res/res/values-et/strings.xml
index 3b844b2..cc82e47 100644
--- a/core/res/res/values-et/strings.xml
+++ b/core/res/res/values-et/strings.xml
@@ -1929,12 +1929,9 @@
<string name="zen_mode_implicit_trigger_description" msgid="5714956693073007111">"Haldab <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
<string name="zen_mode_implicit_activated" msgid="2634285680776672994">"Sees"</string>
<string name="zen_mode_implicit_deactivated" msgid="8688441768371501750">"Väljas"</string>
- <!-- no translation found for zen_mode_trigger_summary_divider_text (7461583466043698862) -->
- <skip />
- <!-- no translation found for zen_mode_trigger_summary_range_symbol_combination (1804900738798069619) -->
- <skip />
- <!-- no translation found for zen_mode_trigger_event_calendar_any (2086784607921121803) -->
- <skip />
+ <string name="zen_mode_trigger_summary_divider_text" msgid="7461583466043698862">", "</string>
+ <string name="zen_mode_trigger_summary_range_symbol_combination" msgid="1804900738798069619">"<xliff:g id="START">%1$s</xliff:g>–<xliff:g id="END">%2$s</xliff:g>"</string>
+ <string name="zen_mode_trigger_event_calendar_any" msgid="2086784607921121803">"Mis tahes kalender"</string>
<string name="muted_by" msgid="91464083490094950">"<xliff:g id="THIRD_PARTY">%1$s</xliff:g> vaigistab teatud helid"</string>
<string name="system_error_wipe_data" msgid="5910572292172208493">"Seadmes ilmnes sisemine probleem ja seade võib olla ebastabiilne seni, kuni lähtestate seadme tehase andmetele."</string>
<string name="system_error_manufacturer" msgid="703545241070116315">"Seadmes ilmnes sisemine probleem. Üksikasjaliku teabe saamiseks võtke ühendust tootjaga."</string>
@@ -2397,6 +2394,8 @@
<string name="profile_label_test" msgid="9168641926186071947">"Test"</string>
<string name="profile_label_communal" msgid="8743921499944800427">"Jagatud"</string>
<string name="redacted_notification_action_title" msgid="6942924973335920935"></string>
+ <!-- no translation found for screen_not_shared_sensitive_content (7058419185079565001) -->
+ <skip />
<string name="satellite_notification_title" msgid="4026338973463121526">"Satelliidiga loodi automaatselt ühendus"</string>
<string name="satellite_notification_summary" msgid="5207364139430767162">"Teil on võimalik sõnumeid saata ja vastu võtta ilma mobiilside- ja WiFi-võrguta"</string>
<string name="satellite_notification_open_message" msgid="4149234979688273729">"Ava rakendus Messages"</string>
diff --git a/core/res/res/values-eu/strings.xml b/core/res/res/values-eu/strings.xml
index 68ed75c..34c0663 100644
--- a/core/res/res/values-eu/strings.xml
+++ b/core/res/res/values-eu/strings.xml
@@ -1929,12 +1929,9 @@
<string name="zen_mode_implicit_trigger_description" msgid="5714956693073007111">"Kudeatzailea: <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
<string name="zen_mode_implicit_activated" msgid="2634285680776672994">"Aktibatuta"</string>
<string name="zen_mode_implicit_deactivated" msgid="8688441768371501750">"Desaktibatuta"</string>
- <!-- no translation found for zen_mode_trigger_summary_divider_text (7461583466043698862) -->
- <skip />
- <!-- no translation found for zen_mode_trigger_summary_range_symbol_combination (1804900738798069619) -->
- <skip />
- <!-- no translation found for zen_mode_trigger_event_calendar_any (2086784607921121803) -->
- <skip />
+ <string name="zen_mode_trigger_summary_divider_text" msgid="7461583466043698862">", "</string>
+ <string name="zen_mode_trigger_summary_range_symbol_combination" msgid="1804900738798069619">"<xliff:g id="START">%1$s</xliff:g>-<xliff:g id="END">%2$s</xliff:g>"</string>
+ <string name="zen_mode_trigger_event_calendar_any" msgid="2086784607921121803">"Edozein egutegi"</string>
<string name="muted_by" msgid="91464083490094950">"<xliff:g id="THIRD_PARTY">%1$s</xliff:g> soinu batzuk isilarazten ari da"</string>
<string name="system_error_wipe_data" msgid="5910572292172208493">"Barneko arazo bat dago zure gailuan eta agian ezegonkor egongo da jatorrizko datuak berrezartzen dituzun arte."</string>
<string name="system_error_manufacturer" msgid="703545241070116315">"Barneko arazo bat dago zure gailuan. Xehetasunak jakiteko, jarri fabrikatzailearekin harremanetan."</string>
@@ -2397,6 +2394,8 @@
<string name="profile_label_test" msgid="9168641926186071947">"Probakoa"</string>
<string name="profile_label_communal" msgid="8743921499944800427">"Partekatua"</string>
<string name="redacted_notification_action_title" msgid="6942924973335920935"></string>
+ <!-- no translation found for screen_not_shared_sensitive_content (7058419185079565001) -->
+ <skip />
<string name="satellite_notification_title" msgid="4026338973463121526">"Automatikoki konektatu da satelitera"</string>
<string name="satellite_notification_summary" msgid="5207364139430767162">"Mezuak bidal eta jaso ditzakezu sare mugikorrik edo wifi-sarerik gabe"</string>
<string name="satellite_notification_open_message" msgid="4149234979688273729">"Ireki Mezuak"</string>
diff --git a/core/res/res/values-fa/strings.xml b/core/res/res/values-fa/strings.xml
index d9e6907..4f2484e 100644
--- a/core/res/res/values-fa/strings.xml
+++ b/core/res/res/values-fa/strings.xml
@@ -1929,12 +1929,9 @@
<string name="zen_mode_implicit_trigger_description" msgid="5714956693073007111">"تحتمدیریت <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
<string name="zen_mode_implicit_activated" msgid="2634285680776672994">"روشن"</string>
<string name="zen_mode_implicit_deactivated" msgid="8688441768371501750">"خاموش"</string>
- <!-- no translation found for zen_mode_trigger_summary_divider_text (7461583466043698862) -->
- <skip />
- <!-- no translation found for zen_mode_trigger_summary_range_symbol_combination (1804900738798069619) -->
- <skip />
- <!-- no translation found for zen_mode_trigger_event_calendar_any (2086784607921121803) -->
- <skip />
+ <string name="zen_mode_trigger_summary_divider_text" msgid="7461583466043698862">"، "</string>
+ <string name="zen_mode_trigger_summary_range_symbol_combination" msgid="1804900738798069619">"<xliff:g id="START">%1$s</xliff:g> - <xliff:g id="END">%2$s</xliff:g>"</string>
+ <string name="zen_mode_trigger_event_calendar_any" msgid="2086784607921121803">"هر تقویمی"</string>
<string name="muted_by" msgid="91464083490094950">"<xliff:g id="THIRD_PARTY">%1$s</xliff:g> درحال قطع کردن بعضی از صداهاست"</string>
<string name="system_error_wipe_data" msgid="5910572292172208493">"دستگاهتان یک مشکل داخلی دارد، و ممکن است تا زمانی که بازنشانی دادههای کارخانه انجام نگیرد، بیثبات بماند."</string>
<string name="system_error_manufacturer" msgid="703545241070116315">"دستگاهتان یک مشکل داخلی دارد. برای جزئیات آن با سازندهتان تماس بگیرید."</string>
@@ -2397,6 +2394,8 @@
<string name="profile_label_test" msgid="9168641926186071947">"آزمایش"</string>
<string name="profile_label_communal" msgid="8743921499944800427">"عمومی"</string>
<string name="redacted_notification_action_title" msgid="6942924973335920935"></string>
+ <!-- no translation found for screen_not_shared_sensitive_content (7058419185079565001) -->
+ <skip />
<string name="satellite_notification_title" msgid="4026338973463121526">"بهطور خودکار به ماهواره متصل شد"</string>
<string name="satellite_notification_summary" msgid="5207364139430767162">"میتوانید بدون شبکه تلفن همراه یا Wi-Fi پیام ارسال و دریافت کنید"</string>
<string name="satellite_notification_open_message" msgid="4149234979688273729">"باز کردن «پیامها»"</string>
diff --git a/core/res/res/values-fi/strings.xml b/core/res/res/values-fi/strings.xml
index 24b414a..81b9848 100644
--- a/core/res/res/values-fi/strings.xml
+++ b/core/res/res/values-fi/strings.xml
@@ -1929,12 +1929,9 @@
<string name="zen_mode_implicit_trigger_description" msgid="5714956693073007111">"Ylläpitäjä: <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
<string name="zen_mode_implicit_activated" msgid="2634285680776672994">"Päällä"</string>
<string name="zen_mode_implicit_deactivated" msgid="8688441768371501750">"Pois päältä"</string>
- <!-- no translation found for zen_mode_trigger_summary_divider_text (7461583466043698862) -->
- <skip />
- <!-- no translation found for zen_mode_trigger_summary_range_symbol_combination (1804900738798069619) -->
- <skip />
- <!-- no translation found for zen_mode_trigger_event_calendar_any (2086784607921121803) -->
- <skip />
+ <string name="zen_mode_trigger_summary_divider_text" msgid="7461583466043698862">", "</string>
+ <string name="zen_mode_trigger_summary_range_symbol_combination" msgid="1804900738798069619">"<xliff:g id="START">%1$s</xliff:g>–<xliff:g id="END">%2$s</xliff:g>"</string>
+ <string name="zen_mode_trigger_event_calendar_any" msgid="2086784607921121803">"Kaikki kalenterit"</string>
<string name="muted_by" msgid="91464083490094950">"<xliff:g id="THIRD_PARTY">%1$s</xliff:g> mykistää joitakin ääniä"</string>
<string name="system_error_wipe_data" msgid="5910572292172208493">"Laitteellasi on sisäinen ongelma, joka aiheuttaa epävakautta. Voit korjata tilanteen palauttamalla tehdasasetukset."</string>
<string name="system_error_manufacturer" msgid="703545241070116315">"Laitteesi yhdistäminen ei onnistu sisäisen virheen takia. Saat lisätietoja valmistajalta."</string>
@@ -2397,6 +2394,8 @@
<string name="profile_label_test" msgid="9168641926186071947">"Testi"</string>
<string name="profile_label_communal" msgid="8743921499944800427">"Jaettu"</string>
<string name="redacted_notification_action_title" msgid="6942924973335920935"></string>
+ <!-- no translation found for screen_not_shared_sensitive_content (7058419185079565001) -->
+ <skip />
<string name="satellite_notification_title" msgid="4026338973463121526">"Yhdistetty automaattisesti satelliittiin"</string>
<string name="satellite_notification_summary" msgid="5207364139430767162">"Voit lähettää ja vastaanottaa viestejä ilman mobiili‑ tai Wi-Fi-verkkoa"</string>
<string name="satellite_notification_open_message" msgid="4149234979688273729">"Avaa Messages"</string>
diff --git a/core/res/res/values-fr-rCA/strings.xml b/core/res/res/values-fr-rCA/strings.xml
index d2f9b47..15d36f5 100644
--- a/core/res/res/values-fr-rCA/strings.xml
+++ b/core/res/res/values-fr-rCA/strings.xml
@@ -2398,6 +2398,8 @@
<string name="profile_label_test" msgid="9168641926186071947">"Test"</string>
<string name="profile_label_communal" msgid="8743921499944800427">"Commun"</string>
<string name="redacted_notification_action_title" msgid="6942924973335920935"></string>
+ <!-- no translation found for screen_not_shared_sensitive_content (7058419185079565001) -->
+ <skip />
<string name="satellite_notification_title" msgid="4026338973463121526">"Connecté au satellite automatiquement"</string>
<string name="satellite_notification_summary" msgid="5207364139430767162">"Vous pouvez envoyer et recevoir des messages sans avoir recours à un appareil mobile ou à un réseau Wi-Fi"</string>
<string name="satellite_notification_open_message" msgid="4149234979688273729">"Ouvrir Messages"</string>
diff --git a/core/res/res/values-fr/strings.xml b/core/res/res/values-fr/strings.xml
index cc9bf3f..0346822 100644
--- a/core/res/res/values-fr/strings.xml
+++ b/core/res/res/values-fr/strings.xml
@@ -1930,12 +1930,9 @@
<string name="zen_mode_implicit_trigger_description" msgid="5714956693073007111">"Géré par <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
<string name="zen_mode_implicit_activated" msgid="2634285680776672994">"Activé"</string>
<string name="zen_mode_implicit_deactivated" msgid="8688441768371501750">"Désactivé"</string>
- <!-- no translation found for zen_mode_trigger_summary_divider_text (7461583466043698862) -->
- <skip />
- <!-- no translation found for zen_mode_trigger_summary_range_symbol_combination (1804900738798069619) -->
- <skip />
- <!-- no translation found for zen_mode_trigger_event_calendar_any (2086784607921121803) -->
- <skip />
+ <string name="zen_mode_trigger_summary_divider_text" msgid="7461583466043698862">", "</string>
+ <string name="zen_mode_trigger_summary_range_symbol_combination" msgid="1804900738798069619">"<xliff:g id="START">%1$s</xliff:g> – <xliff:g id="END">%2$s</xliff:g>"</string>
+ <string name="zen_mode_trigger_event_calendar_any" msgid="2086784607921121803">"Tous les agendas"</string>
<string name="muted_by" msgid="91464083490094950">"<xliff:g id="THIRD_PARTY">%1$s</xliff:g> coupe certains sons"</string>
<string name="system_error_wipe_data" msgid="5910572292172208493">"Un problème interne lié à votre appareil est survenu. Ce dernier risque d\'être instable jusqu\'à ce que vous rétablissiez la configuration d\'usine."</string>
<string name="system_error_manufacturer" msgid="703545241070116315">"Un problème interne lié à votre appareil est survenu. Veuillez contacter le fabricant pour en savoir plus."</string>
@@ -2398,6 +2395,8 @@
<string name="profile_label_test" msgid="9168641926186071947">"Test"</string>
<string name="profile_label_communal" msgid="8743921499944800427">"Commun"</string>
<string name="redacted_notification_action_title" msgid="6942924973335920935"></string>
+ <!-- no translation found for screen_not_shared_sensitive_content (7058419185079565001) -->
+ <skip />
<string name="satellite_notification_title" msgid="4026338973463121526">"Connecté automatiquement au réseau satellite"</string>
<string name="satellite_notification_summary" msgid="5207364139430767162">"Vous pouvez envoyer et recevoir des messages sans connexion au réseau mobile ou Wi-Fi"</string>
<string name="satellite_notification_open_message" msgid="4149234979688273729">"Ouvrir Messages"</string>
diff --git a/core/res/res/values-gl/strings.xml b/core/res/res/values-gl/strings.xml
index 15d0720..fa48e96 100644
--- a/core/res/res/values-gl/strings.xml
+++ b/core/res/res/values-gl/strings.xml
@@ -1929,12 +1929,9 @@
<string name="zen_mode_implicit_trigger_description" msgid="5714956693073007111">"Xestionada por <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
<string name="zen_mode_implicit_activated" msgid="2634285680776672994">"Activada"</string>
<string name="zen_mode_implicit_deactivated" msgid="8688441768371501750">"Desactivada"</string>
- <!-- no translation found for zen_mode_trigger_summary_divider_text (7461583466043698862) -->
- <skip />
- <!-- no translation found for zen_mode_trigger_summary_range_symbol_combination (1804900738798069619) -->
- <skip />
- <!-- no translation found for zen_mode_trigger_event_calendar_any (2086784607921121803) -->
- <skip />
+ <string name="zen_mode_trigger_summary_divider_text" msgid="7461583466043698862">", "</string>
+ <string name="zen_mode_trigger_summary_range_symbol_combination" msgid="1804900738798069619">"<xliff:g id="START">%1$s</xliff:g> - <xliff:g id="END">%2$s</xliff:g>"</string>
+ <string name="zen_mode_trigger_event_calendar_any" msgid="2086784607921121803">"Calquera calendario"</string>
<string name="muted_by" msgid="91464083490094950">"<xliff:g id="THIRD_PARTY">%1$s</xliff:g> está silenciando algúns sons"</string>
<string name="system_error_wipe_data" msgid="5910572292172208493">"Produciuse un erro interno no teu dispositivo e quizais funcione de maneira inestable ata o restablecemento dos datos de fábrica."</string>
<string name="system_error_manufacturer" msgid="703545241070116315">"Produciuse un erro interno co teu dispositivo. Contacta co teu fabricante para obter máis información."</string>
@@ -2397,6 +2394,8 @@
<string name="profile_label_test" msgid="9168641926186071947">"Proba"</string>
<string name="profile_label_communal" msgid="8743921499944800427">"Compartido"</string>
<string name="redacted_notification_action_title" msgid="6942924973335920935"></string>
+ <!-- no translation found for screen_not_shared_sensitive_content (7058419185079565001) -->
+ <skip />
<string name="satellite_notification_title" msgid="4026338973463121526">"Conexión automática ao satélite"</string>
<string name="satellite_notification_summary" msgid="5207364139430767162">"Podes enviar e recibir mensaxes sen unha rede de telefonía móbil ou wifi"</string>
<string name="satellite_notification_open_message" msgid="4149234979688273729">"Abrir Mensaxes"</string>
diff --git a/core/res/res/values-gu/strings.xml b/core/res/res/values-gu/strings.xml
index df92802..fb202ba 100644
--- a/core/res/res/values-gu/strings.xml
+++ b/core/res/res/values-gu/strings.xml
@@ -1929,12 +1929,9 @@
<string name="zen_mode_implicit_trigger_description" msgid="5714956693073007111">"<xliff:g id="APP_NAME">%1$s</xliff:g> દ્વારા મેનેજ કરવામાં આવે છે"</string>
<string name="zen_mode_implicit_activated" msgid="2634285680776672994">"ચાલુ છે"</string>
<string name="zen_mode_implicit_deactivated" msgid="8688441768371501750">"બંધ છે"</string>
- <!-- no translation found for zen_mode_trigger_summary_divider_text (7461583466043698862) -->
- <skip />
- <!-- no translation found for zen_mode_trigger_summary_range_symbol_combination (1804900738798069619) -->
- <skip />
- <!-- no translation found for zen_mode_trigger_event_calendar_any (2086784607921121803) -->
- <skip />
+ <string name="zen_mode_trigger_summary_divider_text" msgid="7461583466043698862">", "</string>
+ <string name="zen_mode_trigger_summary_range_symbol_combination" msgid="1804900738798069619">"<xliff:g id="START">%1$s</xliff:g> - <xliff:g id="END">%2$s</xliff:g>"</string>
+ <string name="zen_mode_trigger_event_calendar_any" msgid="2086784607921121803">"કોઈપણ કૅલેન્ડર"</string>
<string name="muted_by" msgid="91464083490094950">"<xliff:g id="THIRD_PARTY">%1$s</xliff:g> અમુક અવાજોને મ્યૂટ કરે છે"</string>
<string name="system_error_wipe_data" msgid="5910572292172208493">"તમારા ઉપકરણમાં આંતરિક સમસ્યા છે અને જ્યાં સુધી તમે ફેક્ટરી ડેટા ફરીથી સેટ કરશો નહીં ત્યાં સુધી તે અસ્થિર રહી શકે છે."</string>
<string name="system_error_manufacturer" msgid="703545241070116315">"તમારા ઉપકરણમાં આંતરિક સમસ્યા છે. વિગતો માટે તમારા નિર્માતાનો સંપર્ક કરો."</string>
@@ -2397,6 +2394,8 @@
<string name="profile_label_test" msgid="9168641926186071947">"પરીક્ષણ કરો"</string>
<string name="profile_label_communal" msgid="8743921499944800427">"કૉમ્યુનલ"</string>
<string name="redacted_notification_action_title" msgid="6942924973335920935"></string>
+ <!-- no translation found for screen_not_shared_sensitive_content (7058419185079565001) -->
+ <skip />
<string name="satellite_notification_title" msgid="4026338973463121526">"સેટેલાઇટ સાથે ઑટોમૅટિક રીતે કનેક્ટેડ"</string>
<string name="satellite_notification_summary" msgid="5207364139430767162">"તમે મોબાઇલ અથવા વાઇ-ફાઇ નેટવર્ક વિના મેસેજ મોકલી અને પ્રાપ્ત કરી શકો છો"</string>
<string name="satellite_notification_open_message" msgid="4149234979688273729">"Messages ખોલો"</string>
diff --git a/core/res/res/values-hi/strings.xml b/core/res/res/values-hi/strings.xml
index e9f9df1..fd99d19 100644
--- a/core/res/res/values-hi/strings.xml
+++ b/core/res/res/values-hi/strings.xml
@@ -1929,12 +1929,9 @@
<string name="zen_mode_implicit_trigger_description" msgid="5714956693073007111">"मैनेज करने वाला ऐप्लिकेशन: <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
<string name="zen_mode_implicit_activated" msgid="2634285680776672994">"चालू है"</string>
<string name="zen_mode_implicit_deactivated" msgid="8688441768371501750">"बंद है"</string>
- <!-- no translation found for zen_mode_trigger_summary_divider_text (7461583466043698862) -->
- <skip />
- <!-- no translation found for zen_mode_trigger_summary_range_symbol_combination (1804900738798069619) -->
- <skip />
- <!-- no translation found for zen_mode_trigger_event_calendar_any (2086784607921121803) -->
- <skip />
+ <string name="zen_mode_trigger_summary_divider_text" msgid="7461583466043698862">", "</string>
+ <string name="zen_mode_trigger_summary_range_symbol_combination" msgid="1804900738798069619">"<xliff:g id="START">%1$s</xliff:g> - <xliff:g id="END">%2$s</xliff:g>"</string>
+ <string name="zen_mode_trigger_event_calendar_any" msgid="2086784607921121803">"कोई भी कैलेंडर"</string>
<string name="muted_by" msgid="91464083490094950">"<xliff:g id="THIRD_PARTY">%1$s</xliff:g> कुछ आवाज़ें म्यूट कर रहा है"</string>
<string name="system_error_wipe_data" msgid="5910572292172208493">"आपके डिवाइस में कोई अंदरूनी समस्या है और यह तब तक ठीक नहीं होगी जब तक आप फ़ैक्टरी डेटा रीसेट नहीं करते."</string>
<string name="system_error_manufacturer" msgid="703545241070116315">"आपके डिवाइस के साथ कोई आंतरिक गड़बड़ी हुई. विवरणों के लिए अपने निर्माता से संपर्क करें."</string>
@@ -2397,6 +2394,8 @@
<string name="profile_label_test" msgid="9168641926186071947">"टेस्ट"</string>
<string name="profile_label_communal" msgid="8743921499944800427">"कम्यूनिटी"</string>
<string name="redacted_notification_action_title" msgid="6942924973335920935"></string>
+ <!-- no translation found for screen_not_shared_sensitive_content (7058419185079565001) -->
+ <skip />
<string name="satellite_notification_title" msgid="4026338973463121526">"सैटलाइट से अपने-आप कनेक्ट हो गया"</string>
<string name="satellite_notification_summary" msgid="5207364139430767162">"मोबाइल या वाई-फ़ाई नेटवर्क के बिना भी मैसेज भेजे और पाए जा सकते हैं"</string>
<string name="satellite_notification_open_message" msgid="4149234979688273729">"Messages ऐप्लिकेशन खोलें"</string>
diff --git a/core/res/res/values-hr/strings.xml b/core/res/res/values-hr/strings.xml
index 4c322a2..5ac09ec 100644
--- a/core/res/res/values-hr/strings.xml
+++ b/core/res/res/values-hr/strings.xml
@@ -1930,12 +1930,9 @@
<string name="zen_mode_implicit_trigger_description" msgid="5714956693073007111">"Upravlja <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
<string name="zen_mode_implicit_activated" msgid="2634285680776672994">"Uključeno"</string>
<string name="zen_mode_implicit_deactivated" msgid="8688441768371501750">"Isključeno"</string>
- <!-- no translation found for zen_mode_trigger_summary_divider_text (7461583466043698862) -->
- <skip />
- <!-- no translation found for zen_mode_trigger_summary_range_symbol_combination (1804900738798069619) -->
- <skip />
- <!-- no translation found for zen_mode_trigger_event_calendar_any (2086784607921121803) -->
- <skip />
+ <string name="zen_mode_trigger_summary_divider_text" msgid="7461583466043698862">", "</string>
+ <string name="zen_mode_trigger_summary_range_symbol_combination" msgid="1804900738798069619">"<xliff:g id="START">%1$s</xliff:g> – <xliff:g id="END">%2$s</xliff:g>"</string>
+ <string name="zen_mode_trigger_event_calendar_any" msgid="2086784607921121803">"Bilo koji kalendar"</string>
<string name="muted_by" msgid="91464083490094950">"<xliff:g id="THIRD_PARTY">%1$s</xliff:g> isključuje neke zvukove"</string>
<string name="system_error_wipe_data" msgid="5910572292172208493">"Na vašem uređaju postoji interni problem i možda neće biti stabilan dok ga ne vratite na tvorničko stanje."</string>
<string name="system_error_manufacturer" msgid="703545241070116315">"Na vašem uređaju postoji interni problem. Obratite se proizvođaču za više pojedinosti."</string>
@@ -2398,6 +2395,8 @@
<string name="profile_label_test" msgid="9168641926186071947">"Test"</string>
<string name="profile_label_communal" msgid="8743921499944800427">"Zajedničko"</string>
<string name="redacted_notification_action_title" msgid="6942924973335920935"></string>
+ <!-- no translation found for screen_not_shared_sensitive_content (7058419185079565001) -->
+ <skip />
<string name="satellite_notification_title" msgid="4026338973463121526">"Automatski povezano sa satelitom"</string>
<string name="satellite_notification_summary" msgid="5207364139430767162">"Možete slati i primati poruke bez mobilne mreže ili Wi-Fi mreže"</string>
<string name="satellite_notification_open_message" msgid="4149234979688273729">"Otvori Poruke"</string>
diff --git a/core/res/res/values-hu/strings.xml b/core/res/res/values-hu/strings.xml
index 51798b7..06ca1b6 100644
--- a/core/res/res/values-hu/strings.xml
+++ b/core/res/res/values-hu/strings.xml
@@ -2394,6 +2394,8 @@
<string name="profile_label_test" msgid="9168641926186071947">"Teszt"</string>
<string name="profile_label_communal" msgid="8743921499944800427">"Közös"</string>
<string name="redacted_notification_action_title" msgid="6942924973335920935"></string>
+ <!-- no translation found for screen_not_shared_sensitive_content (7058419185079565001) -->
+ <skip />
<string name="satellite_notification_title" msgid="4026338973463121526">"Automatikusan csatlakozva a műholdhoz"</string>
<string name="satellite_notification_summary" msgid="5207364139430767162">"Küldhet és fogadhat üzeneteket mobil- és Wi-Fi-hálózat nélkül is"</string>
<string name="satellite_notification_open_message" msgid="4149234979688273729">"A Messages megnyitása"</string>
diff --git a/core/res/res/values-hy/strings.xml b/core/res/res/values-hy/strings.xml
index 61219e5..89e087e 100644
--- a/core/res/res/values-hy/strings.xml
+++ b/core/res/res/values-hy/strings.xml
@@ -1630,7 +1630,7 @@
<string name="validity_period" msgid="1717724283033175968">"Վավերականություն`"</string>
<string name="issued_on" msgid="5855489688152497307">"Թողարկվել է`"</string>
<string name="expires_on" msgid="1623640879705103121">"Սպառվում է`"</string>
- <string name="serial_number" msgid="3479576915806623429">"Հերթական համարը`"</string>
+ <string name="serial_number" msgid="3479576915806623429">"Հերթական համար`"</string>
<string name="fingerprints" msgid="148690767172613723">"Մատնահետքերը`"</string>
<string name="sha256_fingerprint" msgid="7103976380961964600">"SHA-256 մատնահետք`"</string>
<string name="sha1_fingerprint" msgid="2339915142825390774">"SHA-1 մատնահետք`"</string>
@@ -1929,12 +1929,9 @@
<string name="zen_mode_implicit_trigger_description" msgid="5714956693073007111">"Կառավարվում է <xliff:g id="APP_NAME">%1$s</xliff:g> հավելվածի կողմից"</string>
<string name="zen_mode_implicit_activated" msgid="2634285680776672994">"Միացված է"</string>
<string name="zen_mode_implicit_deactivated" msgid="8688441768371501750">"Անջատված է"</string>
- <!-- no translation found for zen_mode_trigger_summary_divider_text (7461583466043698862) -->
- <skip />
- <!-- no translation found for zen_mode_trigger_summary_range_symbol_combination (1804900738798069619) -->
- <skip />
- <!-- no translation found for zen_mode_trigger_event_calendar_any (2086784607921121803) -->
- <skip />
+ <string name="zen_mode_trigger_summary_divider_text" msgid="7461583466043698862">", "</string>
+ <string name="zen_mode_trigger_summary_range_symbol_combination" msgid="1804900738798069619">"<xliff:g id="START">%1$s</xliff:g>–<xliff:g id="END">%2$s</xliff:g>"</string>
+ <string name="zen_mode_trigger_event_calendar_any" msgid="2086784607921121803">"Ցանկացած օրացույց"</string>
<string name="muted_by" msgid="91464083490094950">"<xliff:g id="THIRD_PARTY">%1$s</xliff:g>-ն անջատում է որոշ ձայներ"</string>
<string name="system_error_wipe_data" msgid="5910572292172208493">"Սարքում ներքին խնդիր է առաջացել և այն կարող է կրկնվել, մինչև չվերականգնեք գործարանային կարգավորումները:"</string>
<string name="system_error_manufacturer" msgid="703545241070116315">"Սարքում ներքին խնդիր է առաջացել: Մանրամասների համար կապվեք արտադրողի հետ:"</string>
@@ -2397,6 +2394,8 @@
<string name="profile_label_test" msgid="9168641926186071947">"Փորձնական"</string>
<string name="profile_label_communal" msgid="8743921499944800427">"Ընդհանուր"</string>
<string name="redacted_notification_action_title" msgid="6942924973335920935"></string>
+ <!-- no translation found for screen_not_shared_sensitive_content (7058419185079565001) -->
+ <skip />
<string name="satellite_notification_title" msgid="4026338973463121526">"Ավտոմատ միացել է արբանյակին"</string>
<string name="satellite_notification_summary" msgid="5207364139430767162">"Դուք կարող եք ուղարկել և ստանալ հաղորդագրություններ՝ առանց բջջային կամ Wi-Fi կապի"</string>
<string name="satellite_notification_open_message" msgid="4149234979688273729">"Բացել Messages-ը"</string>
diff --git a/core/res/res/values-in/strings.xml b/core/res/res/values-in/strings.xml
index 75b2477..616b30b 100644
--- a/core/res/res/values-in/strings.xml
+++ b/core/res/res/values-in/strings.xml
@@ -1929,12 +1929,9 @@
<string name="zen_mode_implicit_trigger_description" msgid="5714956693073007111">"Dikelola oleh <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
<string name="zen_mode_implicit_activated" msgid="2634285680776672994">"Aktif"</string>
<string name="zen_mode_implicit_deactivated" msgid="8688441768371501750">"Nonaktif"</string>
- <!-- no translation found for zen_mode_trigger_summary_divider_text (7461583466043698862) -->
- <skip />
- <!-- no translation found for zen_mode_trigger_summary_range_symbol_combination (1804900738798069619) -->
- <skip />
- <!-- no translation found for zen_mode_trigger_event_calendar_any (2086784607921121803) -->
- <skip />
+ <string name="zen_mode_trigger_summary_divider_text" msgid="7461583466043698862">", "</string>
+ <string name="zen_mode_trigger_summary_range_symbol_combination" msgid="1804900738798069619">"<xliff:g id="START">%1$s</xliff:g> - <xliff:g id="END">%2$s</xliff:g>"</string>
+ <string name="zen_mode_trigger_event_calendar_any" msgid="2086784607921121803">"Kalender mana saja"</string>
<string name="muted_by" msgid="91464083490094950">"<xliff:g id="THIRD_PARTY">%1$s</xliff:g> mematikan beberapa suara"</string>
<string name="system_error_wipe_data" msgid="5910572292172208493">"Ada masalah dengan perangkat. Hal ini mungkin membuat perangkat jadi tidak stabil dan perlu dikembalikan ke setelan pabrik."</string>
<string name="system_error_manufacturer" msgid="703545241070116315">"Ada masalah dengan perangkat. Hubungi produsen perangkat untuk informasi selengkapnya."</string>
@@ -2397,6 +2394,8 @@
<string name="profile_label_test" msgid="9168641926186071947">"Pengujian"</string>
<string name="profile_label_communal" msgid="8743921499944800427">"Umum"</string>
<string name="redacted_notification_action_title" msgid="6942924973335920935"></string>
+ <!-- no translation found for screen_not_shared_sensitive_content (7058419185079565001) -->
+ <skip />
<string name="satellite_notification_title" msgid="4026338973463121526">"Menghubungkan otomatis ke satelit"</string>
<string name="satellite_notification_summary" msgid="5207364139430767162">"Anda dapat mengirim dan menerima pesan tanpa jaringan seluler atau Wi-Fi"</string>
<string name="satellite_notification_open_message" msgid="4149234979688273729">"Buka Message"</string>
diff --git a/core/res/res/values-is/strings.xml b/core/res/res/values-is/strings.xml
index c2e138a..5d55ba8 100644
--- a/core/res/res/values-is/strings.xml
+++ b/core/res/res/values-is/strings.xml
@@ -1929,12 +1929,9 @@
<string name="zen_mode_implicit_trigger_description" msgid="5714956693073007111">"Stýrt af <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
<string name="zen_mode_implicit_activated" msgid="2634285680776672994">"Kveikt"</string>
<string name="zen_mode_implicit_deactivated" msgid="8688441768371501750">"Slökkt"</string>
- <!-- no translation found for zen_mode_trigger_summary_divider_text (7461583466043698862) -->
- <skip />
- <!-- no translation found for zen_mode_trigger_summary_range_symbol_combination (1804900738798069619) -->
- <skip />
- <!-- no translation found for zen_mode_trigger_event_calendar_any (2086784607921121803) -->
- <skip />
+ <string name="zen_mode_trigger_summary_divider_text" msgid="7461583466043698862">", "</string>
+ <string name="zen_mode_trigger_summary_range_symbol_combination" msgid="1804900738798069619">"<xliff:g id="START">%1$s</xliff:g> - <xliff:g id="END">%2$s</xliff:g>"</string>
+ <string name="zen_mode_trigger_event_calendar_any" msgid="2086784607921121803">"Öll dagatöl"</string>
<string name="muted_by" msgid="91464083490094950">"<xliff:g id="THIRD_PARTY">%1$s</xliff:g> þaggar í einhverjum hljóðum"</string>
<string name="system_error_wipe_data" msgid="5910572292172208493">"Innra vandamál kom upp í tækinu og það kann að vera óstöðugt þangað til þú núllstillir það."</string>
<string name="system_error_manufacturer" msgid="703545241070116315">"Innra vandamál kom upp í tækinu. Hafðu samband við framleiðanda til að fá nánari upplýsingar."</string>
@@ -1977,7 +1974,7 @@
<string name="user_creation_account_exists" msgid="2239146360099708035">"Viltu leyfa <xliff:g id="APP">%1$s</xliff:g> að stofna nýjan notanda með <xliff:g id="ACCOUNT">%2$s</xliff:g> (notandi með þennan reikning er þegar fyrir hendi)?"</string>
<string name="user_creation_adding" msgid="7305185499667958364">"Leyfa <xliff:g id="APP">%1$s</xliff:g> að stofna nýjan notanda með <xliff:g id="ACCOUNT">%2$s</xliff:g> ?"</string>
<string name="supervised_user_creation_label" msgid="6884904353827427515">"Bæta við stýrðum notanda"</string>
- <string name="language_selection_title" msgid="52674936078683285">"Bæta við tungumáli"</string>
+ <string name="language_selection_title" msgid="52674936078683285">"Bæta tungumáli við"</string>
<string name="country_selection_title" msgid="5221495687299014379">"Svæðisval"</string>
<string name="search_language_hint" msgid="7004225294308793583">"Sláðu inn heiti tungumáls"</string>
<string name="language_picker_section_suggested" msgid="6556199184638990447">"Tillögur"</string>
@@ -1995,7 +1992,7 @@
<string name="work_mode_turn_on" msgid="5316648862401307800">"Ljúka hléi"</string>
<string name="work_mode_emergency_call_button" msgid="6818855962881612322">"Neyðartilvik"</string>
<string name="set_up_screen_lock_title" msgid="8346083801616474030">"Stilltu skjálás"</string>
- <string name="set_up_screen_lock_action_label" msgid="2687634803649209367">"Stilltu skjálás"</string>
+ <string name="set_up_screen_lock_action_label" msgid="2687634803649209367">"Stilla skjálás"</string>
<string name="private_space_set_up_screen_lock_message" msgid="1109956797005149814">"Stilltu skjálás í tækinu til að nota leynirými"</string>
<string name="app_blocked_title" msgid="7353262160455028160">"Forrit er ekki tiltækt"</string>
<string name="app_blocked_message" msgid="542972921087873023">"<xliff:g id="APP_NAME">%1$s</xliff:g> er ekki tiltækt núna."</string>
@@ -2397,6 +2394,8 @@
<string name="profile_label_test" msgid="9168641926186071947">"Prófun"</string>
<string name="profile_label_communal" msgid="8743921499944800427">"Sameiginlegt"</string>
<string name="redacted_notification_action_title" msgid="6942924973335920935"></string>
+ <!-- no translation found for screen_not_shared_sensitive_content (7058419185079565001) -->
+ <skip />
<string name="satellite_notification_title" msgid="4026338973463121526">"Tengdist sjálfkrafa við gervihnött"</string>
<string name="satellite_notification_summary" msgid="5207364139430767162">"Þú getur sent og móttekið skilaboð án tengingar við farsímakerfi eða Wi-Fi"</string>
<string name="satellite_notification_open_message" msgid="4149234979688273729">"Opna Messages"</string>
diff --git a/core/res/res/values-it/strings.xml b/core/res/res/values-it/strings.xml
index 3d187e9..9d8d74a 100644
--- a/core/res/res/values-it/strings.xml
+++ b/core/res/res/values-it/strings.xml
@@ -1930,12 +1930,9 @@
<string name="zen_mode_implicit_trigger_description" msgid="5714956693073007111">"Gestione: app <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
<string name="zen_mode_implicit_activated" msgid="2634285680776672994">"On"</string>
<string name="zen_mode_implicit_deactivated" msgid="8688441768371501750">"Off"</string>
- <!-- no translation found for zen_mode_trigger_summary_divider_text (7461583466043698862) -->
- <skip />
- <!-- no translation found for zen_mode_trigger_summary_range_symbol_combination (1804900738798069619) -->
- <skip />
- <!-- no translation found for zen_mode_trigger_event_calendar_any (2086784607921121803) -->
- <skip />
+ <string name="zen_mode_trigger_summary_divider_text" msgid="7461583466043698862">", "</string>
+ <string name="zen_mode_trigger_summary_range_symbol_combination" msgid="1804900738798069619">"<xliff:g id="START">%1$s</xliff:g> - <xliff:g id="END">%2$s</xliff:g>"</string>
+ <string name="zen_mode_trigger_event_calendar_any" msgid="2086784607921121803">"Qualsiasi calendario"</string>
<string name="muted_by" msgid="91464083490094950">"<xliff:g id="THIRD_PARTY">%1$s</xliff:g> sta disattivando alcuni suoni"</string>
<string name="system_error_wipe_data" msgid="5910572292172208493">"Si è verificato un problema interno con il dispositivo, che potrebbe essere instabile fino al ripristino dei dati di fabbrica."</string>
<string name="system_error_manufacturer" msgid="703545241070116315">"Si è verificato un problema interno con il dispositivo. Per informazioni dettagliate, contatta il produttore."</string>
@@ -2398,6 +2395,8 @@
<string name="profile_label_test" msgid="9168641926186071947">"Test"</string>
<string name="profile_label_communal" msgid="8743921499944800427">"Condiviso"</string>
<string name="redacted_notification_action_title" msgid="6942924973335920935"></string>
+ <!-- no translation found for screen_not_shared_sensitive_content (7058419185079565001) -->
+ <skip />
<string name="satellite_notification_title" msgid="4026338973463121526">"Connessione automatica al satellite"</string>
<string name="satellite_notification_summary" msgid="5207364139430767162">"Puoi inviare e ricevere messaggi senza una rete mobile o Wi-Fi"</string>
<string name="satellite_notification_open_message" msgid="4149234979688273729">"Apri Messaggi"</string>
diff --git a/core/res/res/values-iw/strings.xml b/core/res/res/values-iw/strings.xml
index ccfbd9c..c256de9 100644
--- a/core/res/res/values-iw/strings.xml
+++ b/core/res/res/values-iw/strings.xml
@@ -1930,12 +1930,9 @@
<string name="zen_mode_implicit_trigger_description" msgid="5714956693073007111">"בניהול של <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
<string name="zen_mode_implicit_activated" msgid="2634285680776672994">"מצב פעיל"</string>
<string name="zen_mode_implicit_deactivated" msgid="8688441768371501750">"מצב מושבת"</string>
- <!-- no translation found for zen_mode_trigger_summary_divider_text (7461583466043698862) -->
- <skip />
- <!-- no translation found for zen_mode_trigger_summary_range_symbol_combination (1804900738798069619) -->
- <skip />
- <!-- no translation found for zen_mode_trigger_event_calendar_any (2086784607921121803) -->
- <skip />
+ <string name="zen_mode_trigger_summary_divider_text" msgid="7461583466043698862">", "</string>
+ <string name="zen_mode_trigger_summary_range_symbol_combination" msgid="1804900738798069619">"<xliff:g id="START">%1$s</xliff:g> – <xliff:g id="END">%2$s</xliff:g>"</string>
+ <string name="zen_mode_trigger_event_calendar_any" msgid="2086784607921121803">"כל יומן"</string>
<string name="muted_by" msgid="91464083490094950">"חלק מהצלילים מושתקים על ידי <xliff:g id="THIRD_PARTY">%1$s</xliff:g>"</string>
<string name="system_error_wipe_data" msgid="5910572292172208493">"קיימת בעיה פנימית במכשיר שלך, וייתכן שהוא לא יתפקד כראוי עד שיבוצע איפוס לנתוני היצרן."</string>
<string name="system_error_manufacturer" msgid="703545241070116315">"קיימת בעיה פנימית במכשיר שלך. לקבלת פרטים, יש ליצור קשר עם היצרן."</string>
@@ -2398,6 +2395,8 @@
<string name="profile_label_test" msgid="9168641926186071947">"בדיקה"</string>
<string name="profile_label_communal" msgid="8743921499944800427">"שיתופי"</string>
<string name="redacted_notification_action_title" msgid="6942924973335920935"></string>
+ <!-- no translation found for screen_not_shared_sensitive_content (7058419185079565001) -->
+ <skip />
<string name="satellite_notification_title" msgid="4026338973463121526">"חיבור אוטומטי ללוויין"</string>
<string name="satellite_notification_summary" msgid="5207364139430767162">"אפשר לשלוח ולקבל הודעות ללא רשת סלולרית או רשת Wi-Fi"</string>
<string name="satellite_notification_open_message" msgid="4149234979688273729">"לפתיחת Messages"</string>
diff --git a/core/res/res/values-ja/strings.xml b/core/res/res/values-ja/strings.xml
index 6f9654d..eee2e3d 100644
--- a/core/res/res/values-ja/strings.xml
+++ b/core/res/res/values-ja/strings.xml
@@ -1929,12 +1929,9 @@
<string name="zen_mode_implicit_trigger_description" msgid="5714956693073007111">"<xliff:g id="APP_NAME">%1$s</xliff:g> によって管理されています"</string>
<string name="zen_mode_implicit_activated" msgid="2634285680776672994">"ON"</string>
<string name="zen_mode_implicit_deactivated" msgid="8688441768371501750">"OFF"</string>
- <!-- no translation found for zen_mode_trigger_summary_divider_text (7461583466043698862) -->
- <skip />
- <!-- no translation found for zen_mode_trigger_summary_range_symbol_combination (1804900738798069619) -->
- <skip />
- <!-- no translation found for zen_mode_trigger_event_calendar_any (2086784607921121803) -->
- <skip />
+ <string name="zen_mode_trigger_summary_divider_text" msgid="7461583466043698862">"、 "</string>
+ <string name="zen_mode_trigger_summary_range_symbol_combination" msgid="1804900738798069619">"<xliff:g id="START">%1$s</xliff:g>~<xliff:g id="END">%2$s</xliff:g>"</string>
+ <string name="zen_mode_trigger_event_calendar_any" msgid="2086784607921121803">"すべてのカレンダー"</string>
<string name="muted_by" msgid="91464083490094950">"<xliff:g id="THIRD_PARTY">%1$s</xliff:g> により一部の音はミュートに設定"</string>
<string name="system_error_wipe_data" msgid="5910572292172208493">"デバイスで内部的な問題が発生しました。データが初期化されるまで不安定になる可能性があります。"</string>
<string name="system_error_manufacturer" msgid="703545241070116315">"デバイスで内部的な問題が発生しました。詳しくはメーカーにお問い合わせください。"</string>
@@ -2376,8 +2373,8 @@
<string name="concurrent_display_notification_name" msgid="1526911253558311131">"デュアル スクリーン"</string>
<string name="concurrent_display_notification_active_title" msgid="4892473462327943673">"デュアル スクリーン: ON"</string>
<string name="concurrent_display_notification_active_content" msgid="5889355473710601270">"<xliff:g id="APP_NAME">%1$s</xliff:g>は 2 画面でコンテンツを表示しています"</string>
- <string name="concurrent_display_notification_thermal_title" msgid="5921609404644739229">"デバイスが熱くなりすぎています"</string>
- <string name="concurrent_display_notification_thermal_content" msgid="2075484836527609319">"スマートフォンが熱くなりすぎているため、デュアル スクリーンを使用できません"</string>
+ <string name="concurrent_display_notification_thermal_title" msgid="5921609404644739229">"デバイスが熱くなっています"</string>
+ <string name="concurrent_display_notification_thermal_content" msgid="2075484836527609319">"スマートフォンが熱いため、デュアル スクリーンを使用できません"</string>
<string name="concurrent_display_notification_power_save_title" msgid="1794569070730736281">"デュアル スクリーンを使用できません"</string>
<string name="concurrent_display_notification_power_save_content" msgid="2198116070583851493">"バッテリー セーバーが ON のため、デュアル スクリーンを使用できません。この動作は設定で OFF にできます。"</string>
<string name="device_state_notification_settings_button" msgid="691937505741872749">"設定に移動"</string>
@@ -2397,6 +2394,8 @@
<string name="profile_label_test" msgid="9168641926186071947">"テスト"</string>
<string name="profile_label_communal" msgid="8743921499944800427">"共用"</string>
<string name="redacted_notification_action_title" msgid="6942924973335920935"></string>
+ <!-- no translation found for screen_not_shared_sensitive_content (7058419185079565001) -->
+ <skip />
<string name="satellite_notification_title" msgid="4026338973463121526">"衛星に自動接続しました"</string>
<string name="satellite_notification_summary" msgid="5207364139430767162">"モバイル ネットワークや Wi-Fi ネットワークを使わずにメッセージを送受信できます"</string>
<string name="satellite_notification_open_message" msgid="4149234979688273729">"メッセージ アプリを開く"</string>
diff --git a/core/res/res/values-ka/strings.xml b/core/res/res/values-ka/strings.xml
index 0b7f197..ececd92 100644
--- a/core/res/res/values-ka/strings.xml
+++ b/core/res/res/values-ka/strings.xml
@@ -2394,6 +2394,8 @@
<string name="profile_label_test" msgid="9168641926186071947">"სატესტო"</string>
<string name="profile_label_communal" msgid="8743921499944800427">"საერთო"</string>
<string name="redacted_notification_action_title" msgid="6942924973335920935"></string>
+ <!-- no translation found for screen_not_shared_sensitive_content (7058419185079565001) -->
+ <skip />
<string name="satellite_notification_title" msgid="4026338973463121526">"სატელიტთან ავტომატურად დაკავშირებულია"</string>
<string name="satellite_notification_summary" msgid="5207364139430767162">"შეგიძლიათ გაგზავნოთ და მიიღოთ შეტყობინებები მობილური ან Wi-Fi ქსელის გარეშე"</string>
<string name="satellite_notification_open_message" msgid="4149234979688273729">"Messages-ის გახსნა"</string>
diff --git a/core/res/res/values-kk/strings.xml b/core/res/res/values-kk/strings.xml
index d935c53..38c6f77 100644
--- a/core/res/res/values-kk/strings.xml
+++ b/core/res/res/values-kk/strings.xml
@@ -1283,7 +1283,7 @@
<string name="android_upgrading_starting_apps" msgid="6206161195076057075">"Қолданбалар іске қосылуда."</string>
<string name="android_upgrading_complete" msgid="409800058018374746">"Қосуды аяқтауда."</string>
<string name="fp_power_button_enrollment_message" msgid="5648173517663246140">"Қуат түймесін бастыңыз. Бұл әдетте экранды өшіреді.\n\nСаусақ ізін реттеу үшін, оны жайлап түртіп көріңіз."</string>
- <string name="fp_power_button_enrollment_title" msgid="6976841690455338563">"Реттеуді аяқтау үшін экранды өшіріңіз"</string>
+ <string name="fp_power_button_enrollment_title" msgid="6976841690455338563">"Реттеуді аяқтау үшін экранды өшіріңіз."</string>
<string name="fp_power_button_enrollment_button_text" msgid="3199783266386029200">"Өшіру"</string>
<string name="fp_power_button_bp_title" msgid="5585506104526820067">"Саусақ ізін растауды жалғастырасыз ба?"</string>
<string name="fp_power_button_bp_message" msgid="2983163038168903393">"Қуат түймесін бастыңыз. Бұл әдетте экранды өшіреді.\n\nСаусақ ізін растау үшін, оны жайлап түртіп көріңіз."</string>
@@ -1561,7 +1561,7 @@
<string name="sync_really_delete" msgid="5657871730315579051">"Бұл нәрселер жойылсын"</string>
<string name="sync_undo_deletes" msgid="5786033331266418896">"Жойылғандарды кері орындау"</string>
<string name="sync_do_nothing" msgid="4528734662446469646">"Қазір ешқандай әрекет жасамаңыз"</string>
- <string name="choose_account_label" msgid="5557833752759831548">"Аккаунт таңдау"</string>
+ <string name="choose_account_label" msgid="5557833752759831548">"Аккаунт таңдаңыз"</string>
<string name="add_account_label" msgid="4067610644298737417">"Аккаунт қосу"</string>
<string name="add_account_button_label" msgid="322390749416414097">"Аккаунт қосу."</string>
<string name="number_picker_increment_button" msgid="7621013714795186298">"Арттыру"</string>
@@ -1929,12 +1929,9 @@
<string name="zen_mode_implicit_trigger_description" msgid="5714956693073007111">"<xliff:g id="APP_NAME">%1$s</xliff:g> басқарады."</string>
<string name="zen_mode_implicit_activated" msgid="2634285680776672994">"Қосулы"</string>
<string name="zen_mode_implicit_deactivated" msgid="8688441768371501750">"Өшірулі"</string>
- <!-- no translation found for zen_mode_trigger_summary_divider_text (7461583466043698862) -->
- <skip />
- <!-- no translation found for zen_mode_trigger_summary_range_symbol_combination (1804900738798069619) -->
- <skip />
- <!-- no translation found for zen_mode_trigger_event_calendar_any (2086784607921121803) -->
- <skip />
+ <string name="zen_mode_trigger_summary_divider_text" msgid="7461583466043698862">", "</string>
+ <string name="zen_mode_trigger_summary_range_symbol_combination" msgid="1804900738798069619">"<xliff:g id="START">%1$s</xliff:g> – <xliff:g id="END">%2$s</xliff:g>"</string>
+ <string name="zen_mode_trigger_event_calendar_any" msgid="2086784607921121803">"Кез келген күнтізбе"</string>
<string name="muted_by" msgid="91464083490094950">"<xliff:g id="THIRD_PARTY">%1$s</xliff:g> кейбір дыбыстарды өшіруде"</string>
<string name="system_error_wipe_data" msgid="5910572292172208493">"There\'s an internal problem with your device, and it may be unstable until you factory data reset."</string>
<string name="system_error_manufacturer" msgid="703545241070116315">"There\'s an internal problem with your device. Contact your manufacturer for details."</string>
@@ -2397,6 +2394,8 @@
<string name="profile_label_test" msgid="9168641926186071947">"Сынақ"</string>
<string name="profile_label_communal" msgid="8743921499944800427">"Жалпы"</string>
<string name="redacted_notification_action_title" msgid="6942924973335920935"></string>
+ <!-- no translation found for screen_not_shared_sensitive_content (7058419185079565001) -->
+ <skip />
<string name="satellite_notification_title" msgid="4026338973463121526">"Жерсерік қызметіне автоматты түрде қосылды"</string>
<string name="satellite_notification_summary" msgid="5207364139430767162">"Мобильдік не Wi-Fi желісіне қосылмастан хабар жібере аласыз және ала аласыз."</string>
<string name="satellite_notification_open_message" msgid="4149234979688273729">"Messages қолданбасын ашу"</string>
diff --git a/core/res/res/values-km/strings.xml b/core/res/res/values-km/strings.xml
index 6aa9277..6c0a195 100644
--- a/core/res/res/values-km/strings.xml
+++ b/core/res/res/values-km/strings.xml
@@ -1743,7 +1743,7 @@
<string name="color_inversion_feature_name" msgid="2672824491933264951">"ការបញ្ច្រាសពណ៌"</string>
<string name="color_correction_feature_name" msgid="7975133554160979214">"ការកែតម្រូវពណ៌"</string>
<string name="one_handed_mode_feature_name" msgid="2334330034828094891">"មុខងារប្រើដៃម្ខាង"</string>
- <string name="reduce_bright_colors_feature_name" msgid="3222994553174604132">"ពន្លឺតិចខ្លាំង"</string>
+ <string name="reduce_bright_colors_feature_name" msgid="3222994553174604132">"ងងឹតខ្លាំង"</string>
<string name="hearing_aids_feature_name" msgid="1125892105105852542">"ឧបករណ៍ជំនួយការស្ដាប់"</string>
<string name="accessibility_shortcut_enabling_service" msgid="5473495203759847687">"បានសង្កត់គ្រាប់ចុចកម្រិតសំឡេងជាប់។ បានបើក <xliff:g id="SERVICE_NAME">%1$s</xliff:g>។"</string>
<string name="accessibility_shortcut_disabling_service" msgid="8675244165062700619">"បានសង្កត់គ្រាប់ចុចកម្រិតសំឡេងជាប់។ បានបិទ <xliff:g id="SERVICE_NAME">%1$s</xliff:g>។"</string>
@@ -1929,12 +1929,9 @@
<string name="zen_mode_implicit_trigger_description" msgid="5714956693073007111">"គ្រប់គ្រងដោយ <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
<string name="zen_mode_implicit_activated" msgid="2634285680776672994">"បើក"</string>
<string name="zen_mode_implicit_deactivated" msgid="8688441768371501750">"បិទ"</string>
- <!-- no translation found for zen_mode_trigger_summary_divider_text (7461583466043698862) -->
- <skip />
- <!-- no translation found for zen_mode_trigger_summary_range_symbol_combination (1804900738798069619) -->
- <skip />
- <!-- no translation found for zen_mode_trigger_event_calendar_any (2086784607921121803) -->
- <skip />
+ <string name="zen_mode_trigger_summary_divider_text" msgid="7461583466043698862">", "</string>
+ <string name="zen_mode_trigger_summary_range_symbol_combination" msgid="1804900738798069619">"<xliff:g id="START">%1$s</xliff:g> - <xliff:g id="END">%2$s</xliff:g>"</string>
+ <string name="zen_mode_trigger_event_calendar_any" msgid="2086784607921121803">"ប្រតិទិនណាមួយ"</string>
<string name="muted_by" msgid="91464083490094950">"<xliff:g id="THIRD_PARTY">%1$s</xliff:g> កំពុងបិទសំឡេងមួយចំនួន"</string>
<string name="system_error_wipe_data" msgid="5910572292172208493">"មានបញ្ហាខាងក្នុងឧបករណ៍របស់អ្នក ហើយវាអ្នកមិនមានស្ថេរភាព រហូតទាល់តែអ្នកកំណត់ដូចដើមវិញទាំងស្រុង។"</string>
<string name="system_error_manufacturer" msgid="703545241070116315">"មានបញ្ហាខាងក្នុងឧបករណ៍របស់អ្នក ទំនាក់ទំនងក្រុមហ៊ុនផលិតឧបករណ៍របស់អ្នកសម្រាប់ព័ត៌មានបន្ថែម។"</string>
@@ -2397,6 +2394,8 @@
<string name="profile_label_test" msgid="9168641926186071947">"ការធ្វើតេស្ត"</string>
<string name="profile_label_communal" msgid="8743921499944800427">"ទូទៅ"</string>
<string name="redacted_notification_action_title" msgid="6942924973335920935"></string>
+ <!-- no translation found for screen_not_shared_sensitive_content (7058419185079565001) -->
+ <skip />
<string name="satellite_notification_title" msgid="4026338973463121526">"ភ្ជាប់ដោយស្វ័យប្រវត្តិទៅផ្កាយរណប"</string>
<string name="satellite_notification_summary" msgid="5207364139430767162">"អ្នកអាចផ្ញើ និងទទួលសារដោយមិនប្រើបណ្តាញទូរសព្ទចល័ត ឬ Wi-Fi"</string>
<string name="satellite_notification_open_message" msgid="4149234979688273729">"បើកកម្មវិធី Messages"</string>
diff --git a/core/res/res/values-kn/strings.xml b/core/res/res/values-kn/strings.xml
index 65babd0..faa46ba 100644
--- a/core/res/res/values-kn/strings.xml
+++ b/core/res/res/values-kn/strings.xml
@@ -1929,12 +1929,9 @@
<string name="zen_mode_implicit_trigger_description" msgid="5714956693073007111">"<xliff:g id="APP_NAME">%1$s</xliff:g> ಮೂಲಕ ನಿರ್ವಹಿಸಲಾಗಿದೆ"</string>
<string name="zen_mode_implicit_activated" msgid="2634285680776672994">"ಆನ್ ಆಗಿದೆ"</string>
<string name="zen_mode_implicit_deactivated" msgid="8688441768371501750">"ಆಫ್ ಆಗಿದೆ"</string>
- <!-- no translation found for zen_mode_trigger_summary_divider_text (7461583466043698862) -->
- <skip />
- <!-- no translation found for zen_mode_trigger_summary_range_symbol_combination (1804900738798069619) -->
- <skip />
- <!-- no translation found for zen_mode_trigger_event_calendar_any (2086784607921121803) -->
- <skip />
+ <string name="zen_mode_trigger_summary_divider_text" msgid="7461583466043698862">", "</string>
+ <string name="zen_mode_trigger_summary_range_symbol_combination" msgid="1804900738798069619">"<xliff:g id="START">%1$s</xliff:g> - <xliff:g id="END">%2$s</xliff:g>"</string>
+ <string name="zen_mode_trigger_event_calendar_any" msgid="2086784607921121803">"ಯಾವುದೇ ಕ್ಯಾಲೆಂಡರ್"</string>
<string name="muted_by" msgid="91464083490094950">"<xliff:g id="THIRD_PARTY">%1$s</xliff:g> ಧ್ವನಿ ಮ್ಯೂಟ್ ಮಾಡುತ್ತಿದ್ದಾರೆ"</string>
<string name="system_error_wipe_data" msgid="5910572292172208493">"ನಿಮ್ಮ ಸಾಧನದಲ್ಲಿ ಆಂತರಿಕ ಸಮಸ್ಯೆಯಿದೆ ಹಾಗೂ ನೀವು ಫ್ಯಾಕ್ಟರಿ ಡೇಟಾವನ್ನು ರೀಸೆಟ್ ಮಾಡುವವರೆಗೂ ಅದು ಅಸ್ಥಿರವಾಗಬಹುದು."</string>
<string name="system_error_manufacturer" msgid="703545241070116315">"ನಿಮ್ಮ ಸಾಧನದಲ್ಲಿ ಆಂತರಿಕ ಸಮಸ್ಯೆಯಿದೆ. ವಿವರಗಳಿಗಾಗಿ ನಿಮ್ಮ ತಯಾರಕರನ್ನು ಸಂಪರ್ಕಿಸಿ."</string>
@@ -2397,6 +2394,8 @@
<string name="profile_label_test" msgid="9168641926186071947">"ಪರೀಕ್ಷೆ"</string>
<string name="profile_label_communal" msgid="8743921499944800427">"ಸಮುದಾಯ"</string>
<string name="redacted_notification_action_title" msgid="6942924973335920935"></string>
+ <!-- no translation found for screen_not_shared_sensitive_content (7058419185079565001) -->
+ <skip />
<string name="satellite_notification_title" msgid="4026338973463121526">"ಸ್ಯಾಟಲೈಟ್ಗೆ ಸ್ವಯಂಚಾಲಿತವಾಗಿ ಕನೆಕ್ಟ್ ಆಗಿದೆ"</string>
<string name="satellite_notification_summary" msgid="5207364139430767162">"ನೀವು ಮೊಬೈಲ್ ಅಥವಾ ವೈ-ಫೈ ನೆಟ್ವರ್ಕ್ ಇಲ್ಲದೆಯೇ ಸಂದೇಶಗಳನ್ನು ಕಳುಹಿಸಬಹುದು ಮತ್ತು ಸ್ವೀಕರಿಸಬಹುದು"</string>
<string name="satellite_notification_open_message" msgid="4149234979688273729">"Messages ಅನ್ನು ತೆರೆಯಿರಿ"</string>
diff --git a/core/res/res/values-ko/strings.xml b/core/res/res/values-ko/strings.xml
index 191bb2c..9eaa414 100644
--- a/core/res/res/values-ko/strings.xml
+++ b/core/res/res/values-ko/strings.xml
@@ -1929,12 +1929,9 @@
<string name="zen_mode_implicit_trigger_description" msgid="5714956693073007111">"관리자: <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
<string name="zen_mode_implicit_activated" msgid="2634285680776672994">"사용"</string>
<string name="zen_mode_implicit_deactivated" msgid="8688441768371501750">"사용 중지"</string>
- <!-- no translation found for zen_mode_trigger_summary_divider_text (7461583466043698862) -->
- <skip />
- <!-- no translation found for zen_mode_trigger_summary_range_symbol_combination (1804900738798069619) -->
- <skip />
- <!-- no translation found for zen_mode_trigger_event_calendar_any (2086784607921121803) -->
- <skip />
+ <string name="zen_mode_trigger_summary_divider_text" msgid="7461583466043698862">", "</string>
+ <string name="zen_mode_trigger_summary_range_symbol_combination" msgid="1804900738798069619">"<xliff:g id="START">%1$s</xliff:g>~<xliff:g id="END">%2$s</xliff:g>"</string>
+ <string name="zen_mode_trigger_event_calendar_any" msgid="2086784607921121803">"모든 캘린더"</string>
<string name="muted_by" msgid="91464083490094950">"<xliff:g id="THIRD_PARTY">%1$s</xliff:g>(이)가 일부 소리를 음소거함"</string>
<string name="system_error_wipe_data" msgid="5910572292172208493">"사용 중인 기기 내부에 문제가 발생했습니다. 초기화할 때까지 불안정할 수 있습니다."</string>
<string name="system_error_manufacturer" msgid="703545241070116315">"사용 중인 기기 내부에 문제가 발생했습니다. 자세한 내용은 제조업체에 문의하세요."</string>
@@ -2397,6 +2394,8 @@
<string name="profile_label_test" msgid="9168641926186071947">"테스트"</string>
<string name="profile_label_communal" msgid="8743921499944800427">"공동"</string>
<string name="redacted_notification_action_title" msgid="6942924973335920935"></string>
+ <!-- no translation found for screen_not_shared_sensitive_content (7058419185079565001) -->
+ <skip />
<string name="satellite_notification_title" msgid="4026338973463121526">"위성에 자동 연결됨"</string>
<string name="satellite_notification_summary" msgid="5207364139430767162">"모바일 또는 Wi-Fi 네트워크 없이 메시지를 주고 받을 수 있습니다"</string>
<string name="satellite_notification_open_message" msgid="4149234979688273729">"메시지 열기"</string>
diff --git a/core/res/res/values-ky/strings.xml b/core/res/res/values-ky/strings.xml
index a6ba8cd..9efccff 100644
--- a/core/res/res/values-ky/strings.xml
+++ b/core/res/res/values-ky/strings.xml
@@ -1283,7 +1283,7 @@
<string name="android_upgrading_starting_apps" msgid="6206161195076057075">"Колдонмолорду иштетип баштоо"</string>
<string name="android_upgrading_complete" msgid="409800058018374746">"Жүктөлүүдө"</string>
<string name="fp_power_button_enrollment_message" msgid="5648173517663246140">"Кубат баскычын бастыңыз — адатта, бул экранды өчүрөт.\n\nМанжаңыздын изин жөндөп жатканда аны акырын басып көрүңүз."</string>
- <string name="fp_power_button_enrollment_title" msgid="6976841690455338563">"Кошуп бүтүрүү үчүн экранды өчүрүңүз"</string>
+ <string name="fp_power_button_enrollment_title" msgid="6976841690455338563">"Бүтүрүү үчүн экранды өчүрүңүз"</string>
<string name="fp_power_button_enrollment_button_text" msgid="3199783266386029200">"Өчүрүү"</string>
<string name="fp_power_button_bp_title" msgid="5585506104526820067">"Манжаңыздын изин ырастоону улантасызбы?"</string>
<string name="fp_power_button_bp_message" msgid="2983163038168903393">"Кубат баскычын бастыңыз — адатта, бул экранды өчүрөт.\n\nМанжаңыздын изин ырастоо үчүн аны акырын басып көрүңүз."</string>
@@ -2394,6 +2394,8 @@
<string name="profile_label_test" msgid="9168641926186071947">"Сыноо"</string>
<string name="profile_label_communal" msgid="8743921499944800427">"Жалпы"</string>
<string name="redacted_notification_action_title" msgid="6942924973335920935"></string>
+ <!-- no translation found for screen_not_shared_sensitive_content (7058419185079565001) -->
+ <skip />
<string name="satellite_notification_title" msgid="4026338973463121526">"Спутникке автоматтык түрдө туташтырылган"</string>
<string name="satellite_notification_summary" msgid="5207364139430767162">"Сиз мобилдик же Wi-Fi тармагы жок эле билдирүүлөрдү жөнөтүп, ала аласыз"</string>
<string name="satellite_notification_open_message" msgid="4149234979688273729">"Жазышуулар колдонмосун ачуу"</string>
diff --git a/core/res/res/values-lo/strings.xml b/core/res/res/values-lo/strings.xml
index 1f85646..752e68e 100644
--- a/core/res/res/values-lo/strings.xml
+++ b/core/res/res/values-lo/strings.xml
@@ -1929,12 +1929,9 @@
<string name="zen_mode_implicit_trigger_description" msgid="5714956693073007111">"ຈັດການໂດຍ <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
<string name="zen_mode_implicit_activated" msgid="2634285680776672994">"ເປີດຢູ່"</string>
<string name="zen_mode_implicit_deactivated" msgid="8688441768371501750">"ປິດຢູ່"</string>
- <!-- no translation found for zen_mode_trigger_summary_divider_text (7461583466043698862) -->
- <skip />
- <!-- no translation found for zen_mode_trigger_summary_range_symbol_combination (1804900738798069619) -->
- <skip />
- <!-- no translation found for zen_mode_trigger_event_calendar_any (2086784607921121803) -->
- <skip />
+ <string name="zen_mode_trigger_summary_divider_text" msgid="7461583466043698862">", "</string>
+ <string name="zen_mode_trigger_summary_range_symbol_combination" msgid="1804900738798069619">"<xliff:g id="START">%1$s</xliff:g> - <xliff:g id="END">%2$s</xliff:g>"</string>
+ <string name="zen_mode_trigger_event_calendar_any" msgid="2086784607921121803">"ປະຕິທິນໃດກໍໄດ້"</string>
<string name="muted_by" msgid="91464083490094950">"<xliff:g id="THIRD_PARTY">%1$s</xliff:g> ປິດສຽງບາງຢ່າງໄວ້"</string>
<string name="system_error_wipe_data" msgid="5910572292172208493">"ມີບັນຫາພາຍໃນກັບອຸປະກອນຂອງທ່ານ, ແລະມັນອາດຈະບໍ່ສະຖຽນຈົນກວ່າທ່ານຕັ້ງເປັນຂໍ້ມູນໂຮງງານຄືນແລ້ວ."</string>
<string name="system_error_manufacturer" msgid="703545241070116315">"ມີບັນຫາພາຍໃນກັບອຸປະກອນຂອງທ່ານ. ຕິດຕໍ່ຜູ້ຜະລິດຂອງທ່ານສຳລັບລາຍລະອຽດຕ່າງໆ."</string>
@@ -2397,6 +2394,8 @@
<string name="profile_label_test" msgid="9168641926186071947">"ທົດສອບ"</string>
<string name="profile_label_communal" msgid="8743921499944800427">"ສ່ວນກາງ"</string>
<string name="redacted_notification_action_title" msgid="6942924973335920935"></string>
+ <!-- no translation found for screen_not_shared_sensitive_content (7058419185079565001) -->
+ <skip />
<string name="satellite_notification_title" msgid="4026338973463121526">"ເຊື່ອມຕໍ່ກັບດາວທຽມໂດຍອັດຕະໂນມັດ"</string>
<string name="satellite_notification_summary" msgid="5207364139430767162">"ທ່ານສາມາດສົ່ງ ແລະ ຮັບຂໍ້ຄວາມໂດຍບໍ່ຕ້ອງໃຊ້ເຄືອຂ່າຍມືຖື ຫຼື Wi-Fi"</string>
<string name="satellite_notification_open_message" msgid="4149234979688273729">"ເປີດ Messages"</string>
diff --git a/core/res/res/values-lt/strings.xml b/core/res/res/values-lt/strings.xml
index 991da27..2fd6ded 100644
--- a/core/res/res/values-lt/strings.xml
+++ b/core/res/res/values-lt/strings.xml
@@ -1931,12 +1931,9 @@
<string name="zen_mode_implicit_trigger_description" msgid="5714956693073007111">"Tvarko „<xliff:g id="APP_NAME">%1$s</xliff:g>“"</string>
<string name="zen_mode_implicit_activated" msgid="2634285680776672994">"Įjungti"</string>
<string name="zen_mode_implicit_deactivated" msgid="8688441768371501750">"Išjungti"</string>
- <!-- no translation found for zen_mode_trigger_summary_divider_text (7461583466043698862) -->
- <skip />
- <!-- no translation found for zen_mode_trigger_summary_range_symbol_combination (1804900738798069619) -->
- <skip />
- <!-- no translation found for zen_mode_trigger_event_calendar_any (2086784607921121803) -->
- <skip />
+ <string name="zen_mode_trigger_summary_divider_text" msgid="7461583466043698862">", "</string>
+ <string name="zen_mode_trigger_summary_range_symbol_combination" msgid="1804900738798069619">"<xliff:g id="START">%1$s</xliff:g>–<xliff:g id="END">%2$s</xliff:g>"</string>
+ <string name="zen_mode_trigger_event_calendar_any" msgid="2086784607921121803">"Bet kuris kalendorius"</string>
<string name="muted_by" msgid="91464083490094950">"„<xliff:g id="THIRD_PARTY">%1$s</xliff:g>“ nutildo kai kuriuos garsus"</string>
<string name="system_error_wipe_data" msgid="5910572292172208493">"Iškilo vidinė su jūsų įrenginiu susijusi problema, todėl įrenginys gali veikti nestabiliai, kol neatkursite gamyklinių duomenų."</string>
<string name="system_error_manufacturer" msgid="703545241070116315">"Iškilo vidinė su jūsų įrenginiu susijusi problema. Jei reikia išsamios informacijos, susisiekite su gamintoju."</string>
@@ -2399,6 +2396,8 @@
<string name="profile_label_test" msgid="9168641926186071947">"Bandymas"</string>
<string name="profile_label_communal" msgid="8743921499944800427">"Bendruomenės"</string>
<string name="redacted_notification_action_title" msgid="6942924973335920935"></string>
+ <!-- no translation found for screen_not_shared_sensitive_content (7058419185079565001) -->
+ <skip />
<string name="satellite_notification_title" msgid="4026338973463121526">"Automatiškai prisijungta prie palydovinio ryšio"</string>
<string name="satellite_notification_summary" msgid="5207364139430767162">"Galite siųsti ir gauti pranešimus be mobiliojo ryšio ar „Wi-Fi“ tinklo"</string>
<string name="satellite_notification_open_message" msgid="4149234979688273729">"Atidaryti programą „Messages“"</string>
diff --git a/core/res/res/values-lv/strings.xml b/core/res/res/values-lv/strings.xml
index a5b0414..066cd4b 100644
--- a/core/res/res/values-lv/strings.xml
+++ b/core/res/res/values-lv/strings.xml
@@ -828,7 +828,7 @@
<string name="permdesc_writeVerificationStateE2eeContactKeys" msgid="8453156829747427041">"Atļauj lietotnei atjaunināt citām lietotnēm piederošu E2EE sakaru atslēgu verifikācijas statusus."</string>
<string name="policylab_limitPassword" msgid="4851829918814422199">"Paroles kārtulu iestatīšana"</string>
<string name="policydesc_limitPassword" msgid="4105491021115793793">"Kontrolēt ekrāna bloķēšanas paroļu un PIN garumu un tajos atļautās rakstzīmes."</string>
- <string name="policylab_watchLogin" msgid="7599669460083719504">"Ekrāna atbloķēšanas mēģinājumu pārraudzīšana"</string>
+ <string name="policylab_watchLogin" msgid="7599669460083719504">"Pārraudzīt ekrāna atbloķēšanas mēģinājumus"</string>
<string name="policydesc_watchLogin" product="tablet" msgid="2388436408621909298">"Pārrauga nepareizi ievadīto paroļu skaitu, atbloķējot ekrānu, un bloķē planšetdatoru vai dzēš visus planšetdatora datus, ja tiek ievadīts pārāk daudz nepareizu paroļu."</string>
<string name="policydesc_watchLogin" product="tv" msgid="2140588224468517507">"Pārraudzīt nepareizi ievadīto ekrāna atbloķēšanas paroļu skaitu un bloķēt Android TV vai dzēst visus Android TV ierīces datus, ja tiek ievadīts pārāk daudz nepareizu paroļu."</string>
<string name="policydesc_watchLogin" product="automotive" msgid="7011438994051251521">"Ekrāna atbloķēšanas laikā pārraudzīt nepareizi ievadīto paroļu skaitu un bloķēt informatīvi izklaidējošo sistēmu vai dzēst visus informatīvi izklaidējošās sistēmas datus, ja tiek ievadīts pārāk daudz nepareizu paroļu."</string>
@@ -1930,12 +1930,9 @@
<string name="zen_mode_implicit_trigger_description" msgid="5714956693073007111">"Pārvalda <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
<string name="zen_mode_implicit_activated" msgid="2634285680776672994">"Ieslēgta"</string>
<string name="zen_mode_implicit_deactivated" msgid="8688441768371501750">"Izslēgta"</string>
- <!-- no translation found for zen_mode_trigger_summary_divider_text (7461583466043698862) -->
- <skip />
- <!-- no translation found for zen_mode_trigger_summary_range_symbol_combination (1804900738798069619) -->
- <skip />
- <!-- no translation found for zen_mode_trigger_event_calendar_any (2086784607921121803) -->
- <skip />
+ <string name="zen_mode_trigger_summary_divider_text" msgid="7461583466043698862">", "</string>
+ <string name="zen_mode_trigger_summary_range_symbol_combination" msgid="1804900738798069619">"<xliff:g id="START">%1$s</xliff:g>–<xliff:g id="END">%2$s</xliff:g>"</string>
+ <string name="zen_mode_trigger_event_calendar_any" msgid="2086784607921121803">"Jebkurš kalendārs"</string>
<string name="muted_by" msgid="91464083490094950">"<xliff:g id="THIRD_PARTY">%1$s</xliff:g> izslēdz noteiktas skaņas"</string>
<string name="system_error_wipe_data" msgid="5910572292172208493">"Jūsu ierīcē ir radusies iekšēja problēma, un ierīce var darboties nestabili. Lai to labotu, veiciet rūpnīcas datu atiestatīšanu."</string>
<string name="system_error_manufacturer" msgid="703545241070116315">"Jūsu ierīcē ir radusies iekšēja problēma. Lai iegūtu plašāku informāciju, lūdzu, sazinieties ar ražotāju."</string>
@@ -2398,6 +2395,8 @@
<string name="profile_label_test" msgid="9168641926186071947">"Testēšanai"</string>
<string name="profile_label_communal" msgid="8743921499944800427">"Kopīgs"</string>
<string name="redacted_notification_action_title" msgid="6942924973335920935"></string>
+ <!-- no translation found for screen_not_shared_sensitive_content (7058419185079565001) -->
+ <skip />
<string name="satellite_notification_title" msgid="4026338973463121526">"Automātiski izveidots savienojums ar satelītu"</string>
<string name="satellite_notification_summary" msgid="5207364139430767162">"Varat sūtīt un saņemt ziņojumus bez mobilā vai Wi-Fi tīkla."</string>
<string name="satellite_notification_open_message" msgid="4149234979688273729">"Atvērt lietotni Ziņojumi"</string>
diff --git a/core/res/res/values-mk/strings.xml b/core/res/res/values-mk/strings.xml
index 695cd83..a8d5ea4 100644
--- a/core/res/res/values-mk/strings.xml
+++ b/core/res/res/values-mk/strings.xml
@@ -1305,7 +1305,7 @@
<string name="dump_heap_ready_text" msgid="5849618132123045516">"Слика од меморијата на <xliff:g id="PROC">%1$s</xliff:g> ви е достапна за споделување. Бидете внимателни: оваа слика од меморијата можеби ги содржи сите чувствителни лични информации до коишто процесот има пристап, што може да вклучуваат работи што сте ги напишале."</string>
<string name="sendText" msgid="493003724401350724">"Избери дејство за текст"</string>
<string name="volume_ringtone" msgid="134784084629229029">"Јачина на звук на ѕвонче"</string>
- <string name="volume_music" msgid="7727274216734955095">"Јачина на аудио/видео звук"</string>
+ <string name="volume_music" msgid="7727274216734955095">"Јачина на звук за аудио/видео"</string>
<string name="volume_music_hint_playing_through_bluetooth" msgid="2614142915948898228">"Се репродуцира преку Bluetooth"</string>
<string name="volume_music_hint_silent_ringtone_selected" msgid="1514829655029062233">"Поставено ѕвонење на тивко"</string>
<string name="volume_call" msgid="7625321655265747433">"Јачина на звук на дојдовен повик"</string>
@@ -1316,7 +1316,7 @@
<string name="volume_icon_description_bluetooth" msgid="7540388479345558400">"Јачина на звук на Bluetooth"</string>
<string name="volume_icon_description_ringer" msgid="2187800636867423459">"Јачина на звук на мелодија"</string>
<string name="volume_icon_description_incall" msgid="4491255105381227919">"Јачина на звук на повик"</string>
- <string name="volume_icon_description_media" msgid="4997633254078171233">"Јачина на аудио/видео звук"</string>
+ <string name="volume_icon_description_media" msgid="4997633254078171233">"Јачина на звук за аудио/видео"</string>
<string name="volume_icon_description_notification" msgid="579091344110747279">"Јачина на звук за известување"</string>
<string name="ringtone_default" msgid="9118299121288174597">"Стандардна мелодија"</string>
<string name="ringtone_default_with_actual" msgid="2709686194556159773">"Стандардна (<xliff:g id="ACTUAL_RINGTONE">%1$s</xliff:g>)"</string>
@@ -1929,12 +1929,9 @@
<string name="zen_mode_implicit_trigger_description" msgid="5714956693073007111">"Управувано од <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
<string name="zen_mode_implicit_activated" msgid="2634285680776672994">"Вклучено"</string>
<string name="zen_mode_implicit_deactivated" msgid="8688441768371501750">"Исклучено"</string>
- <!-- no translation found for zen_mode_trigger_summary_divider_text (7461583466043698862) -->
- <skip />
- <!-- no translation found for zen_mode_trigger_summary_range_symbol_combination (1804900738798069619) -->
- <skip />
- <!-- no translation found for zen_mode_trigger_event_calendar_any (2086784607921121803) -->
- <skip />
+ <string name="zen_mode_trigger_summary_divider_text" msgid="7461583466043698862">", "</string>
+ <string name="zen_mode_trigger_summary_range_symbol_combination" msgid="1804900738798069619">"<xliff:g id="START">%1$s</xliff:g> – <xliff:g id="END">%2$s</xliff:g>"</string>
+ <string name="zen_mode_trigger_event_calendar_any" msgid="2086784607921121803">"Кој било календар"</string>
<string name="muted_by" msgid="91464083490094950">"<xliff:g id="THIRD_PARTY">%1$s</xliff:g> исклучи некои звуци"</string>
<string name="system_error_wipe_data" msgid="5910572292172208493">"Настана внатрешен проблем со уредот и може да биде нестабилен сè додека не ресетирате на фабричките податоци."</string>
<string name="system_error_manufacturer" msgid="703545241070116315">"Настана внатрешен проблем со уредот. Контактирајте го производителот за детали."</string>
@@ -1995,7 +1992,7 @@
<string name="work_mode_turn_on" msgid="5316648862401307800">"Прекини ја паузата"</string>
<string name="work_mode_emergency_call_button" msgid="6818855962881612322">"Итен случај"</string>
<string name="set_up_screen_lock_title" msgid="8346083801616474030">"Поставете заклучување екран"</string>
- <string name="set_up_screen_lock_action_label" msgid="2687634803649209367">"Поставување заклучување екран"</string>
+ <string name="set_up_screen_lock_action_label" msgid="2687634803649209367">"Поставете заклучување екран"</string>
<string name="private_space_set_up_screen_lock_message" msgid="1109956797005149814">"За да користите „Приватен простор“, поставете заклучување екран на уредов"</string>
<string name="app_blocked_title" msgid="7353262160455028160">"Апликацијата не е достапна"</string>
<string name="app_blocked_message" msgid="542972921087873023">"<xliff:g id="APP_NAME">%1$s</xliff:g> не е достапна во моментов."</string>
@@ -2397,6 +2394,8 @@
<string name="profile_label_test" msgid="9168641926186071947">"Профил за тестирање"</string>
<string name="profile_label_communal" msgid="8743921499944800427">"Профил на заедницата"</string>
<string name="redacted_notification_action_title" msgid="6942924973335920935"></string>
+ <!-- no translation found for screen_not_shared_sensitive_content (7058419185079565001) -->
+ <skip />
<string name="satellite_notification_title" msgid="4026338973463121526">"Поврзано со сателит автоматски"</string>
<string name="satellite_notification_summary" msgid="5207364139430767162">"Може да испраќате и примате пораки без мобилна или Wi-Fi мрежа"</string>
<string name="satellite_notification_open_message" msgid="4149234979688273729">"Отворете ја Messages"</string>
diff --git a/core/res/res/values-ml/strings.xml b/core/res/res/values-ml/strings.xml
index 4c0e9fe..32f2daf 100644
--- a/core/res/res/values-ml/strings.xml
+++ b/core/res/res/values-ml/strings.xml
@@ -1929,12 +1929,9 @@
<string name="zen_mode_implicit_trigger_description" msgid="5714956693073007111">"<xliff:g id="APP_NAME">%1$s</xliff:g> മാനേജ് ചെയ്യുന്നത്"</string>
<string name="zen_mode_implicit_activated" msgid="2634285680776672994">"ഓണാണ്"</string>
<string name="zen_mode_implicit_deactivated" msgid="8688441768371501750">"ഓഫാണ്"</string>
- <!-- no translation found for zen_mode_trigger_summary_divider_text (7461583466043698862) -->
- <skip />
- <!-- no translation found for zen_mode_trigger_summary_range_symbol_combination (1804900738798069619) -->
- <skip />
- <!-- no translation found for zen_mode_trigger_event_calendar_any (2086784607921121803) -->
- <skip />
+ <string name="zen_mode_trigger_summary_divider_text" msgid="7461583466043698862">", "</string>
+ <string name="zen_mode_trigger_summary_range_symbol_combination" msgid="1804900738798069619">"<xliff:g id="START">%1$s</xliff:g> - <xliff:g id="END">%2$s</xliff:g>"</string>
+ <string name="zen_mode_trigger_event_calendar_any" msgid="2086784607921121803">"എല്ലാ കലണ്ടറിലും"</string>
<string name="muted_by" msgid="91464083490094950">"<xliff:g id="THIRD_PARTY">%1$s</xliff:g> ചില ശബ്ദങ്ങൾ മ്യൂട്ട് ചെയ്യുന്നു"</string>
<string name="system_error_wipe_data" msgid="5910572292172208493">"നിങ്ങളുടെ ഉപകരണത്തിൽ ഒരു ആന്തരിക പ്രശ്നമുണ്ട്, ഫാക്ടറി വിവര പുനഃസജ്ജീകരണം ചെയ്യുന്നതുവരെ ഇതു അസ്ഥിരമായിരിക്കാനിടയുണ്ട്."</string>
<string name="system_error_manufacturer" msgid="703545241070116315">"നിങ്ങളുടെ ഉപകരണത്തിൽ ഒരു ആന്തരിക പ്രശ്നമുണ്ട്. വിശദാംശങ്ങൾക്കായി നിർമ്മാതാവിനെ ബന്ധപ്പെടുക."</string>
@@ -2397,6 +2394,8 @@
<string name="profile_label_test" msgid="9168641926186071947">"ടെസ്റ്റ്"</string>
<string name="profile_label_communal" msgid="8743921499944800427">"കമ്മ്യൂണൽ"</string>
<string name="redacted_notification_action_title" msgid="6942924973335920935"></string>
+ <!-- no translation found for screen_not_shared_sensitive_content (7058419185079565001) -->
+ <skip />
<string name="satellite_notification_title" msgid="4026338973463121526">"സാറ്റലൈറ്റിലേക്ക് സ്വയമേവ കണക്റ്റ് ചെയ്തു"</string>
<string name="satellite_notification_summary" msgid="5207364139430767162">"മൊബൈലോ വൈഫൈ നെറ്റ്വർക്കോ ഇല്ലാതെ തന്നെ സന്ദേശങ്ങൾ അയയ്ക്കാനും സ്വീകരിക്കാനും നിങ്ങൾക്ക് കഴിയും"</string>
<string name="satellite_notification_open_message" msgid="4149234979688273729">"Messages തുറക്കുക"</string>
diff --git a/core/res/res/values-mn/strings.xml b/core/res/res/values-mn/strings.xml
index 7f1a44d..a926e60 100644
--- a/core/res/res/values-mn/strings.xml
+++ b/core/res/res/values-mn/strings.xml
@@ -1929,12 +1929,9 @@
<string name="zen_mode_implicit_trigger_description" msgid="5714956693073007111">"<xliff:g id="APP_NAME">%1$s</xliff:g>-с удирддаг"</string>
<string name="zen_mode_implicit_activated" msgid="2634285680776672994">"Асаалттай"</string>
<string name="zen_mode_implicit_deactivated" msgid="8688441768371501750">"Унтраалттай"</string>
- <!-- no translation found for zen_mode_trigger_summary_divider_text (7461583466043698862) -->
- <skip />
- <!-- no translation found for zen_mode_trigger_summary_range_symbol_combination (1804900738798069619) -->
- <skip />
- <!-- no translation found for zen_mode_trigger_event_calendar_any (2086784607921121803) -->
- <skip />
+ <string name="zen_mode_trigger_summary_divider_text" msgid="7461583466043698862">", "</string>
+ <string name="zen_mode_trigger_summary_range_symbol_combination" msgid="1804900738798069619">"<xliff:g id="START">%1$s</xliff:g> - <xliff:g id="END">%2$s</xliff:g>"</string>
+ <string name="zen_mode_trigger_event_calendar_any" msgid="2086784607921121803">"Дурын календарь"</string>
<string name="muted_by" msgid="91464083490094950">"<xliff:g id="THIRD_PARTY">%1$s</xliff:g> зарим дууны дууг хааж байна"</string>
<string name="system_error_wipe_data" msgid="5910572292172208493">"Таны төхөөрөмжид дотоод алдаа байна.Та төхөөрөмжөө үйлдвэрээс гарсан төлөвт шилжүүлэх хүртэл таны төхөөрөмж чинь тогтворгүй байж болох юм."</string>
<string name="system_error_manufacturer" msgid="703545241070116315">"Таны төхөөрөмжид дотоод алдаа байна. Дэлгэрэнгүй мэдээлэл авахыг хүсвэл үйлдвэрлэгчтэйгээ холбоо барина уу."</string>
@@ -2397,6 +2394,8 @@
<string name="profile_label_test" msgid="9168641926186071947">"Туршилт"</string>
<string name="profile_label_communal" msgid="8743921499944800427">"Нийтийн"</string>
<string name="redacted_notification_action_title" msgid="6942924973335920935"></string>
+ <!-- no translation found for screen_not_shared_sensitive_content (7058419185079565001) -->
+ <skip />
<string name="satellite_notification_title" msgid="4026338973463121526">"Хиймэл дагуулд автоматаар холбогдсон"</string>
<string name="satellite_notification_summary" msgid="5207364139430767162">"Та мобайл эсвэл Wi-Fi сүлжээгүйгээр мессеж илгээх болон хүлээн авах боломжтой"</string>
<string name="satellite_notification_open_message" msgid="4149234979688273729">"Мессежийг нээх"</string>
diff --git a/core/res/res/values-mr/strings.xml b/core/res/res/values-mr/strings.xml
index 2368bde..c10b741 100644
--- a/core/res/res/values-mr/strings.xml
+++ b/core/res/res/values-mr/strings.xml
@@ -1929,12 +1929,9 @@
<string name="zen_mode_implicit_trigger_description" msgid="5714956693073007111">"<xliff:g id="APP_NAME">%1$s</xliff:g> द्वारे व्यवस्थापित"</string>
<string name="zen_mode_implicit_activated" msgid="2634285680776672994">"सुरू आहे"</string>
<string name="zen_mode_implicit_deactivated" msgid="8688441768371501750">"बंद आहे"</string>
- <!-- no translation found for zen_mode_trigger_summary_divider_text (7461583466043698862) -->
- <skip />
- <!-- no translation found for zen_mode_trigger_summary_range_symbol_combination (1804900738798069619) -->
- <skip />
- <!-- no translation found for zen_mode_trigger_event_calendar_any (2086784607921121803) -->
- <skip />
+ <string name="zen_mode_trigger_summary_divider_text" msgid="7461583466043698862">", "</string>
+ <string name="zen_mode_trigger_summary_range_symbol_combination" msgid="1804900738798069619">"<xliff:g id="START">%1$s</xliff:g> - <xliff:g id="END">%2$s</xliff:g>"</string>
+ <string name="zen_mode_trigger_event_calendar_any" msgid="2086784607921121803">"कोणतेही कॅलेंडर"</string>
<string name="muted_by" msgid="91464083490094950">"<xliff:g id="THIRD_PARTY">%1$s</xliff:g> काही ध्वनी म्यूट करत आहे"</string>
<string name="system_error_wipe_data" msgid="5910572292172208493">"आपल्या डिव्हाइसमध्ये अंतर्गत समस्या आहे आणि तुमचा फॅक्टरी डेटा रीसेट होईपर्यंत ती अस्थिर असू शकते."</string>
<string name="system_error_manufacturer" msgid="703545241070116315">"आपल्या डिव्हाइसमध्ये अंतर्गत समस्या आहे. तपशीलांसाठी आपल्या निर्मात्याशी संपर्क साधा."</string>
@@ -2397,6 +2394,8 @@
<string name="profile_label_test" msgid="9168641926186071947">"चाचणी"</string>
<string name="profile_label_communal" msgid="8743921499944800427">"सामुदायिक"</string>
<string name="redacted_notification_action_title" msgid="6942924973335920935"></string>
+ <!-- no translation found for screen_not_shared_sensitive_content (7058419185079565001) -->
+ <skip />
<string name="satellite_notification_title" msgid="4026338973463121526">"उपग्रहाशी आपोआप कनेक्ट केलेले आहे"</string>
<string name="satellite_notification_summary" msgid="5207364139430767162">"तुम्ही मोबाइल किंवा वाय-फाय नेटवर्कशिवाय मेसेज पाठवू आणि मिळवू शकता"</string>
<string name="satellite_notification_open_message" msgid="4149234979688273729">"Messages उघडा"</string>
diff --git a/core/res/res/values-ms/strings.xml b/core/res/res/values-ms/strings.xml
index a0656ab..4a4ea88 100644
--- a/core/res/res/values-ms/strings.xml
+++ b/core/res/res/values-ms/strings.xml
@@ -1929,12 +1929,9 @@
<string name="zen_mode_implicit_trigger_description" msgid="5714956693073007111">"Diurus oleh <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
<string name="zen_mode_implicit_activated" msgid="2634285680776672994">"Hidup"</string>
<string name="zen_mode_implicit_deactivated" msgid="8688441768371501750">"Mati"</string>
- <!-- no translation found for zen_mode_trigger_summary_divider_text (7461583466043698862) -->
- <skip />
- <!-- no translation found for zen_mode_trigger_summary_range_symbol_combination (1804900738798069619) -->
- <skip />
- <!-- no translation found for zen_mode_trigger_event_calendar_any (2086784607921121803) -->
- <skip />
+ <string name="zen_mode_trigger_summary_divider_text" msgid="7461583466043698862">", "</string>
+ <string name="zen_mode_trigger_summary_range_symbol_combination" msgid="1804900738798069619">"<xliff:g id="START">%1$s</xliff:g> - <xliff:g id="END">%2$s</xliff:g>"</string>
+ <string name="zen_mode_trigger_event_calendar_any" msgid="2086784607921121803">"Sebarang kalendar"</string>
<string name="muted_by" msgid="91464083490094950">"<xliff:g id="THIRD_PARTY">%1$s</xliff:g> meredamkan sesetengah bunyi"</string>
<string name="system_error_wipe_data" msgid="5910572292172208493">"Terdapat masalah dalaman dengan peranti anda. Peranti mungkin tidak stabil sehingga anda membuat tetapan semula data kilang."</string>
<string name="system_error_manufacturer" msgid="703545241070116315">"Terdapat masalah dalaman dengan peranti anda. Hubungi pengilang untuk mengetahui butirannya."</string>
@@ -2397,6 +2394,8 @@
<string name="profile_label_test" msgid="9168641926186071947">"Ujian"</string>
<string name="profile_label_communal" msgid="8743921499944800427">"Umum"</string>
<string name="redacted_notification_action_title" msgid="6942924973335920935"></string>
+ <!-- no translation found for screen_not_shared_sensitive_content (7058419185079565001) -->
+ <skip />
<string name="satellite_notification_title" msgid="4026338973463121526">"Disambungkan secara automatik kepada satelit"</string>
<string name="satellite_notification_summary" msgid="5207364139430767162">"Anda boleh menghantar dan menerima mesej tanpa rangkaian mudah alih atau Wi-Fi"</string>
<string name="satellite_notification_open_message" msgid="4149234979688273729">"Buka Messages"</string>
diff --git a/core/res/res/values-my/strings.xml b/core/res/res/values-my/strings.xml
index 696cf72..8346134 100644
--- a/core/res/res/values-my/strings.xml
+++ b/core/res/res/values-my/strings.xml
@@ -1929,12 +1929,9 @@
<string name="zen_mode_implicit_trigger_description" msgid="5714956693073007111">"<xliff:g id="APP_NAME">%1$s</xliff:g> က စီမံသည်"</string>
<string name="zen_mode_implicit_activated" msgid="2634285680776672994">"ဖွင့်"</string>
<string name="zen_mode_implicit_deactivated" msgid="8688441768371501750">"ပိတ်"</string>
- <!-- no translation found for zen_mode_trigger_summary_divider_text (7461583466043698862) -->
- <skip />
- <!-- no translation found for zen_mode_trigger_summary_range_symbol_combination (1804900738798069619) -->
- <skip />
- <!-- no translation found for zen_mode_trigger_event_calendar_any (2086784607921121803) -->
- <skip />
+ <string name="zen_mode_trigger_summary_divider_text" msgid="7461583466043698862">"၊ "</string>
+ <string name="zen_mode_trigger_summary_range_symbol_combination" msgid="1804900738798069619">"<xliff:g id="START">%1$s</xliff:g> - <xliff:g id="END">%2$s</xliff:g>"</string>
+ <string name="zen_mode_trigger_event_calendar_any" msgid="2086784607921121803">"မည်သည့်ပြက္ခဒိန်မဆို"</string>
<string name="muted_by" msgid="91464083490094950">"<xliff:g id="THIRD_PARTY">%1$s</xliff:g> သည် အချို့အသံကို ပိတ်နေသည်"</string>
<string name="system_error_wipe_data" msgid="5910572292172208493">"သင့်ကိရိယာအတွင်းပိုင်းတွင် ပြဿနာရှိနေပြီး၊ မူလစက်ရုံထုတ်အခြေအနေအဖြစ် ပြန်လည်ရယူနိုင်သည်အထိ အခြေအနေမတည်ငြိမ်နိုင်ပါ။"</string>
<string name="system_error_manufacturer" msgid="703545241070116315">"သင့်ကိရိယာအတွင်းပိုင်းတွင် ပြဿနာရှိနေ၏။ အသေးစိတ်သိရန်အတွက် ပစ္စည်းထုတ်လုပ်သူအား ဆက်သွယ်ပါ။"</string>
@@ -2397,6 +2394,8 @@
<string name="profile_label_test" msgid="9168641926186071947">"စမ်းသပ်မှု"</string>
<string name="profile_label_communal" msgid="8743921499944800427">"အများသုံး"</string>
<string name="redacted_notification_action_title" msgid="6942924973335920935"></string>
+ <!-- no translation found for screen_not_shared_sensitive_content (7058419185079565001) -->
+ <skip />
<string name="satellite_notification_title" msgid="4026338973463121526">"ဂြိုဟ်တုနှင့် အလိုအလျောက် ချိတ်ဆက်ထားသည်"</string>
<string name="satellite_notification_summary" msgid="5207364139430767162">"မိုဘိုင်း (သို့) Wi-Fi ကွန်ရက်မရှိဘဲ မက်ဆေ့ဂျ်များကို ပို့နိုင်၊ လက်ခံနိုင်သည်"</string>
<string name="satellite_notification_open_message" msgid="4149234979688273729">"Messages ဖွင့်ရန်"</string>
diff --git a/core/res/res/values-nb/strings.xml b/core/res/res/values-nb/strings.xml
index c5e4c2a..252b413 100644
--- a/core/res/res/values-nb/strings.xml
+++ b/core/res/res/values-nb/strings.xml
@@ -1929,12 +1929,9 @@
<string name="zen_mode_implicit_trigger_description" msgid="5714956693073007111">"Administreres av <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
<string name="zen_mode_implicit_activated" msgid="2634285680776672994">"På"</string>
<string name="zen_mode_implicit_deactivated" msgid="8688441768371501750">"Av"</string>
- <!-- no translation found for zen_mode_trigger_summary_divider_text (7461583466043698862) -->
- <skip />
- <!-- no translation found for zen_mode_trigger_summary_range_symbol_combination (1804900738798069619) -->
- <skip />
- <!-- no translation found for zen_mode_trigger_event_calendar_any (2086784607921121803) -->
- <skip />
+ <string name="zen_mode_trigger_summary_divider_text" msgid="7461583466043698862">", "</string>
+ <string name="zen_mode_trigger_summary_range_symbol_combination" msgid="1804900738798069619">"<xliff:g id="START">%1$s</xliff:g> – <xliff:g id="END">%2$s</xliff:g>"</string>
+ <string name="zen_mode_trigger_event_calendar_any" msgid="2086784607921121803">"Hvilken som helst kalender"</string>
<string name="muted_by" msgid="91464083490094950">"<xliff:g id="THIRD_PARTY">%1$s</xliff:g> slår av noen lyder"</string>
<string name="system_error_wipe_data" msgid="5910572292172208493">"Det har oppstått et internt problem på enheten din, og den kan være ustabil til du tilbakestiller den til fabrikkdata."</string>
<string name="system_error_manufacturer" msgid="703545241070116315">"Det har oppstått et internt problem på enheten din. Ta kontakt med produsenten for mer informasjon."</string>
@@ -2397,6 +2394,8 @@
<string name="profile_label_test" msgid="9168641926186071947">"Test"</string>
<string name="profile_label_communal" msgid="8743921499944800427">"Felles"</string>
<string name="redacted_notification_action_title" msgid="6942924973335920935"></string>
+ <!-- no translation found for screen_not_shared_sensitive_content (7058419185079565001) -->
+ <skip />
<string name="satellite_notification_title" msgid="4026338973463121526">"Automatisk tilkoblet satellitt"</string>
<string name="satellite_notification_summary" msgid="5207364139430767162">"Du kan sende og motta meldinger uten mobil- eller wifi-nettverk"</string>
<string name="satellite_notification_open_message" msgid="4149234979688273729">"Åpne Meldinger"</string>
diff --git a/core/res/res/values-ne/strings.xml b/core/res/res/values-ne/strings.xml
index 77e3eaa..6035bb1 100644
--- a/core/res/res/values-ne/strings.xml
+++ b/core/res/res/values-ne/strings.xml
@@ -827,7 +827,7 @@
<string name="permdesc_writeVerificationStateE2eeContactKeys" msgid="8453156829747427041">"यसले एपलाई अन्य एपको स्वामित्वमा रहेका E2EE कन्ट्याक्ट कीहरूको प्रमाणीकरणको स्थिति अपडेट गर्न दिन्छ"</string>
<string name="policylab_limitPassword" msgid="4851829918814422199">"पासवर्ड नियमहरू मिलाउनुहोस्"</string>
<string name="policydesc_limitPassword" msgid="4105491021115793793">"स्क्रिन लक पासवर्ड र PIN हरूमा अनुमति दिइएको लम्बाइ र वर्णहरूको नियन्त्रण गर्नुहोस्।"</string>
- <string name="policylab_watchLogin" msgid="7599669460083719504">"मनिटरको स्क्रिन अनलक गर्ने प्रयासहरू"</string>
+ <string name="policylab_watchLogin" msgid="7599669460083719504">"स्क्रिन अनलक गर्न गरिएको प्रयासको अनुगमन गर्ने"</string>
<string name="policydesc_watchLogin" product="tablet" msgid="2388436408621909298">"स्क्रिन अनलक गर्दा गलत पासवर्ड टाइप भएको संख्या निरीक्षण गर्नुहोस् र यदि निकै धेरै गलत पासवर्डहरू टाइप भएका छन भने ट्याब्लेट लक गर्नुहोस् वा ट्याब्लेटका सबै डेटा मेट्नुहोस्।"</string>
<string name="policydesc_watchLogin" product="tv" msgid="2140588224468517507">"स्क्रिन अनलक गर्दा गलत पासवर्ड टाइप गरेको सङ्ख्या निरीक्षण गर्नुहोस्, र धेरै पटक गलत पासवर्डहरू टाइप गरिएको खण्डमा आफ्नो Android टिभी यन्त्र लक गर्नुहोस् वा डिभाइसमा भएको सम्पूर्ण डेटा मेटाउनुहोस्।"</string>
<string name="policydesc_watchLogin" product="automotive" msgid="7011438994051251521">"स्क्रिन अनलक गर्दा कति पटक गलत पासवर्ड टाइप गरिन्छ भन्ने कुरा निगरानी गरियोस् र अत्यन्तै धेरै पटक गलत पासवर्ड टाइप गरिएका खण्डमा यो इन्फोटेनमेन्ट प्रणाली लक गरियोस् वा यस इन्फोटेनमेन्ट प्रणालीका सबै डेटा मेटाइयोस्।"</string>
@@ -1929,12 +1929,9 @@
<string name="zen_mode_implicit_trigger_description" msgid="5714956693073007111">"<xliff:g id="APP_NAME">%1$s</xliff:g> ले व्यवस्थापन गरेको"</string>
<string name="zen_mode_implicit_activated" msgid="2634285680776672994">"अन छ"</string>
<string name="zen_mode_implicit_deactivated" msgid="8688441768371501750">"अफ छ"</string>
- <!-- no translation found for zen_mode_trigger_summary_divider_text (7461583466043698862) -->
- <skip />
- <!-- no translation found for zen_mode_trigger_summary_range_symbol_combination (1804900738798069619) -->
- <skip />
- <!-- no translation found for zen_mode_trigger_event_calendar_any (2086784607921121803) -->
- <skip />
+ <string name="zen_mode_trigger_summary_divider_text" msgid="7461583466043698862">", "</string>
+ <string name="zen_mode_trigger_summary_range_symbol_combination" msgid="1804900738798069619">"<xliff:g id="START">%1$s</xliff:g> - <xliff:g id="END">%2$s</xliff:g>"</string>
+ <string name="zen_mode_trigger_event_calendar_any" msgid="2086784607921121803">"कुनै पनि पात्रो"</string>
<string name="muted_by" msgid="91464083490094950">"<xliff:g id="THIRD_PARTY">%1$s</xliff:g> ले केही ध्वनिहरू म्युट गर्दै छ"</string>
<string name="system_error_wipe_data" msgid="5910572292172208493">"तपाईंको यन्त्रसँग आन्तरिक समस्या छ, र तपाईंले फ्याक्ट्री डाटा रिसेट नगर्दासम्म यो अस्थिर रहन्छ।"</string>
<string name="system_error_manufacturer" msgid="703545241070116315">"तपाईंको यन्त्रसँग आन्तरिक समस्या छ। विवरणहरूको लागि आफ्नो निर्मातासँग सम्पर्क गर्नुहोस्।"</string>
@@ -2397,6 +2394,8 @@
<string name="profile_label_test" msgid="9168641926186071947">"परीक्षण"</string>
<string name="profile_label_communal" msgid="8743921499944800427">"सामुदायिक"</string>
<string name="redacted_notification_action_title" msgid="6942924973335920935"></string>
+ <!-- no translation found for screen_not_shared_sensitive_content (7058419185079565001) -->
+ <skip />
<string name="satellite_notification_title" msgid="4026338973463121526">"स्याटलाइटमा स्वतः कनेक्ट गरियो"</string>
<string name="satellite_notification_summary" msgid="5207364139430767162">"तपाईं मोबाइल वा Wi-Fi नेटवर्कविनै म्यासेज पठाउन र प्राप्त गर्न सक्नुहुन्छ"</string>
<string name="satellite_notification_open_message" msgid="4149234979688273729">"Messages खोल्नुहोस्"</string>
diff --git a/core/res/res/values-nl/strings.xml b/core/res/res/values-nl/strings.xml
index b5f2bea..5870ca3 100644
--- a/core/res/res/values-nl/strings.xml
+++ b/core/res/res/values-nl/strings.xml
@@ -1866,7 +1866,7 @@
<string name="print_service_installed_title" msgid="6134880817336942482">"<xliff:g id="NAME">%s</xliff:g>-service geïnstalleerd"</string>
<string name="print_service_installed_message" msgid="7005672469916968131">"Tik om aan te zetten"</string>
<string name="restr_pin_enter_admin_pin" msgid="1199419462726962697">"Beheerderspincode invoeren"</string>
- <string name="restr_pin_enter_pin" msgid="373139384161304555">"Geef de pincode op"</string>
+ <string name="restr_pin_enter_pin" msgid="373139384161304555">"Voer pincode in"</string>
<string name="restr_pin_incorrect" msgid="3861383632940852496">"Onjuist"</string>
<string name="restr_pin_enter_old_pin" msgid="7537079094090650967">"Huidige pincode"</string>
<string name="restr_pin_enter_new_pin" msgid="3267614461844565431">"Nieuwe pincode"</string>
@@ -1929,12 +1929,9 @@
<string name="zen_mode_implicit_trigger_description" msgid="5714956693073007111">"Beheerd door <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
<string name="zen_mode_implicit_activated" msgid="2634285680776672994">"Aan"</string>
<string name="zen_mode_implicit_deactivated" msgid="8688441768371501750">"Uit"</string>
- <!-- no translation found for zen_mode_trigger_summary_divider_text (7461583466043698862) -->
- <skip />
- <!-- no translation found for zen_mode_trigger_summary_range_symbol_combination (1804900738798069619) -->
- <skip />
- <!-- no translation found for zen_mode_trigger_event_calendar_any (2086784607921121803) -->
- <skip />
+ <string name="zen_mode_trigger_summary_divider_text" msgid="7461583466043698862">", "</string>
+ <string name="zen_mode_trigger_summary_range_symbol_combination" msgid="1804900738798069619">"<xliff:g id="START">%1$s</xliff:g> - <xliff:g id="END">%2$s</xliff:g>"</string>
+ <string name="zen_mode_trigger_event_calendar_any" msgid="2086784607921121803">"Elke agenda"</string>
<string name="muted_by" msgid="91464083490094950">"<xliff:g id="THIRD_PARTY">%1$s</xliff:g> zet sommige geluiden uit"</string>
<string name="system_error_wipe_data" msgid="5910572292172208493">"Er is een intern probleem met je apparaat. Het apparaat kan instabiel zijn totdat u het apparaat terugzet naar de fabrieksinstellingen."</string>
<string name="system_error_manufacturer" msgid="703545241070116315">"Er is een intern probleem met je apparaat. Neem contact op met de fabrikant voor meer informatie."</string>
@@ -2206,7 +2203,7 @@
<string name="resolver_cant_access_work_apps_explanation" msgid="1129960195389373279">"Deze content kan niet worden geopend met werk-apps"</string>
<string name="resolver_cant_share_with_personal_apps_explanation" msgid="6349766201904601544">"Deze content kan niet worden gedeeld met persoonlijke apps"</string>
<string name="resolver_cant_access_personal_apps_explanation" msgid="1679399548862724359">"Deze content kan niet worden geopend met persoonlijke apps"</string>
- <string name="resolver_turn_on_work_apps" msgid="1535946298236678122">"Werk-apps zijn onderbroken"</string>
+ <string name="resolver_turn_on_work_apps" msgid="1535946298236678122">"Werk-apps zijn gepauzeerd"</string>
<string name="resolver_switch_on_work" msgid="4527096360772311894">"Hervatten"</string>
<string name="resolver_no_work_apps_available" msgid="3298291360133337270">"Geen werk-apps"</string>
<string name="resolver_no_personal_apps_available" msgid="6284837227019594881">"Geen persoonlijke apps"</string>
@@ -2397,6 +2394,8 @@
<string name="profile_label_test" msgid="9168641926186071947">"Test"</string>
<string name="profile_label_communal" msgid="8743921499944800427">"Gemeenschappelijk"</string>
<string name="redacted_notification_action_title" msgid="6942924973335920935"></string>
+ <!-- no translation found for screen_not_shared_sensitive_content (7058419185079565001) -->
+ <skip />
<string name="satellite_notification_title" msgid="4026338973463121526">"Automatisch verbonden met satelliet"</string>
<string name="satellite_notification_summary" msgid="5207364139430767162">"Je kunt berichten sturen en krijgen zonder een mobiel of wifi-netwerk"</string>
<string name="satellite_notification_open_message" msgid="4149234979688273729">"Berichten openen"</string>
diff --git a/core/res/res/values-or/strings.xml b/core/res/res/values-or/strings.xml
index b84297e..4174d04 100644
--- a/core/res/res/values-or/strings.xml
+++ b/core/res/res/values-or/strings.xml
@@ -1929,12 +1929,9 @@
<string name="zen_mode_implicit_trigger_description" msgid="5714956693073007111">"<xliff:g id="APP_NAME">%1$s</xliff:g> ଦ୍ୱାରା ପରିଚାଳିତ"</string>
<string name="zen_mode_implicit_activated" msgid="2634285680776672994">"ଚାଲୁ ଅଛି"</string>
<string name="zen_mode_implicit_deactivated" msgid="8688441768371501750">"ବନ୍ଦ ଅଛି"</string>
- <!-- no translation found for zen_mode_trigger_summary_divider_text (7461583466043698862) -->
- <skip />
- <!-- no translation found for zen_mode_trigger_summary_range_symbol_combination (1804900738798069619) -->
- <skip />
- <!-- no translation found for zen_mode_trigger_event_calendar_any (2086784607921121803) -->
- <skip />
+ <string name="zen_mode_trigger_summary_divider_text" msgid="7461583466043698862">", "</string>
+ <string name="zen_mode_trigger_summary_range_symbol_combination" msgid="1804900738798069619">"<xliff:g id="START">%1$s</xliff:g> - <xliff:g id="END">%2$s</xliff:g>"</string>
+ <string name="zen_mode_trigger_event_calendar_any" msgid="2086784607921121803">"ଯେକୌଣସି କ୍ୟାଲେଣ୍ଡର୍"</string>
<string name="muted_by" msgid="91464083490094950">"<xliff:g id="THIRD_PARTY">%1$s</xliff:g> କିଛି ସାଉଣ୍ଡକୁ ମ୍ୟୁଟ୍ କରୁଛି"</string>
<string name="system_error_wipe_data" msgid="5910572292172208493">"ଆପଣଙ୍କ ଡିଭାଇସ୍ରେ ଏକ ସମସ୍ୟା ରହିଛି ଏବଂ ଆପଣ ଫ୍ୟାକ୍ଟୋରୀ ଡାଟା ରିସେଟ୍ ନକରିବା ପର୍ଯ୍ୟନ୍ତ ଏହା ଅସ୍ଥିର ରହିପାରେ।"</string>
<string name="system_error_manufacturer" msgid="703545241070116315">"ଆପଣଙ୍କ ଡିଭାଇସରେ ଏକ ସମସ୍ୟା ରହିଛି। ବିବରଣୀ ପାଇଁ ଆପଣଙ୍କ ଉତ୍ପାଦକଙ୍କ ସହ କଣ୍ଟାକ୍ଟ କରନ୍ତୁ।"</string>
@@ -2397,6 +2394,8 @@
<string name="profile_label_test" msgid="9168641926186071947">"ଟେଷ୍ଟ"</string>
<string name="profile_label_communal" msgid="8743921499944800427">"କମ୍ୟୁନାଲ"</string>
<string name="redacted_notification_action_title" msgid="6942924973335920935"></string>
+ <!-- no translation found for screen_not_shared_sensitive_content (7058419185079565001) -->
+ <skip />
<string name="satellite_notification_title" msgid="4026338973463121526">"ସାଟେଲାଇଟ ସହ ସ୍ୱତଃ କନେକ୍ଟ ହୋଇଛି"</string>
<string name="satellite_notification_summary" msgid="5207364139430767162">"ଏକ ମୋବାଇଲ କିମ୍ବା ୱାଇ-ଫାଇ ନେଟୱାର୍କ ବିନା ଆପଣ ମେସେଜ ପଠାଇପାରିବେ ଏବଂ ପାଇପାରିବେ"</string>
<string name="satellite_notification_open_message" msgid="4149234979688273729">"Messages ଖୋଲନ୍ତୁ"</string>
diff --git a/core/res/res/values-pa/strings.xml b/core/res/res/values-pa/strings.xml
index b83492a..3e7b27e 100644
--- a/core/res/res/values-pa/strings.xml
+++ b/core/res/res/values-pa/strings.xml
@@ -1929,12 +1929,9 @@
<string name="zen_mode_implicit_trigger_description" msgid="5714956693073007111">"<xliff:g id="APP_NAME">%1$s</xliff:g> ਵੱਲੋਂ ਪ੍ਰਬੰਧਿਤ"</string>
<string name="zen_mode_implicit_activated" msgid="2634285680776672994">"ਚਾਲੂ ਹੈ"</string>
<string name="zen_mode_implicit_deactivated" msgid="8688441768371501750">"ਬੰਦ ਹੈ"</string>
- <!-- no translation found for zen_mode_trigger_summary_divider_text (7461583466043698862) -->
- <skip />
- <!-- no translation found for zen_mode_trigger_summary_range_symbol_combination (1804900738798069619) -->
- <skip />
- <!-- no translation found for zen_mode_trigger_event_calendar_any (2086784607921121803) -->
- <skip />
+ <string name="zen_mode_trigger_summary_divider_text" msgid="7461583466043698862">", "</string>
+ <string name="zen_mode_trigger_summary_range_symbol_combination" msgid="1804900738798069619">"<xliff:g id="START">%1$s</xliff:g> - <xliff:g id="END">%2$s</xliff:g>"</string>
+ <string name="zen_mode_trigger_event_calendar_any" msgid="2086784607921121803">"ਕੋਈ ਵੀ ਕੈਲੰਡਰ"</string>
<string name="muted_by" msgid="91464083490094950">"<xliff:g id="THIRD_PARTY">%1$s</xliff:g> ਕੁਝ ਧੁਨੀਆਂ ਨੂੰ ਮਿਊਟ ਕਰ ਰਹੀ ਹੈ"</string>
<string name="system_error_wipe_data" msgid="5910572292172208493">"ਤੁਹਾਡੇ ਡੀਵਾਈਸ ਨਾਲ ਇੱਕ ਅੰਦਰੂਨੀ ਸਮੱਸਿਆ ਹੈ ਅਤੇ ਇਹ ਅਸਥਿਰ ਹੋ ਸਕਦੀ ਹੈ ਜਦੋਂ ਤੱਕ ਤੁਸੀਂ ਫੈਕਟਰੀ ਡਾਟਾ ਰੀਸੈੱਟ ਨਹੀਂ ਕਰਦੇ।"</string>
<string name="system_error_manufacturer" msgid="703545241070116315">"ਤੁਹਾਡੇ ਡੀਵਾਈਸ ਨਾਲ ਇੱਕ ਅੰਦਰੂਨੀ ਸਮੱਸਿਆ ਸੀ। ਵੇਰਵਿਆਂ ਲਈ ਆਪਣੇ ਨਿਰਮਾਤਾ ਨੂੰ ਸੰਪਰਕ ਕਰੋ।"</string>
@@ -2397,6 +2394,8 @@
<string name="profile_label_test" msgid="9168641926186071947">"ਜਾਂਚ"</string>
<string name="profile_label_communal" msgid="8743921499944800427">"ਭਾਈਚਾਰਕ"</string>
<string name="redacted_notification_action_title" msgid="6942924973335920935"></string>
+ <!-- no translation found for screen_not_shared_sensitive_content (7058419185079565001) -->
+ <skip />
<string name="satellite_notification_title" msgid="4026338973463121526">"ਸੈਟੇਲਾਈਟ ਨਾਲ ਸਵੈ-ਕਨੈਕਟ ਹੋਇਆ"</string>
<string name="satellite_notification_summary" msgid="5207364139430767162">"ਤੁਸੀਂ ਮੋਬਾਈਲ ਜਾਂ ਵਾਈ-ਫਾਈ ਨੈੱਟਵਰਕ ਤੋਂ ਬਿਨਾਂ ਸੁਨੇਹੇ ਭੇਜ ਅਤੇ ਪ੍ਰਾਪਤ ਕਰ ਸਕਦੇ ਹੋ"</string>
<string name="satellite_notification_open_message" msgid="4149234979688273729">"Messages ਐਪ ਖੋਲ੍ਹੋ"</string>
diff --git a/core/res/res/values-pl/strings.xml b/core/res/res/values-pl/strings.xml
index 92068a2..ca126f7 100644
--- a/core/res/res/values-pl/strings.xml
+++ b/core/res/res/values-pl/strings.xml
@@ -1931,12 +1931,9 @@
<string name="zen_mode_implicit_trigger_description" msgid="5714956693073007111">"Zarządzana przez aplikację <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
<string name="zen_mode_implicit_activated" msgid="2634285680776672994">"Włączono"</string>
<string name="zen_mode_implicit_deactivated" msgid="8688441768371501750">"Wyłączono"</string>
- <!-- no translation found for zen_mode_trigger_summary_divider_text (7461583466043698862) -->
- <skip />
- <!-- no translation found for zen_mode_trigger_summary_range_symbol_combination (1804900738798069619) -->
- <skip />
- <!-- no translation found for zen_mode_trigger_event_calendar_any (2086784607921121803) -->
- <skip />
+ <string name="zen_mode_trigger_summary_divider_text" msgid="7461583466043698862">", "</string>
+ <string name="zen_mode_trigger_summary_range_symbol_combination" msgid="1804900738798069619">"<xliff:g id="START">%1$s</xliff:g> – <xliff:g id="END">%2$s</xliff:g>"</string>
+ <string name="zen_mode_trigger_event_calendar_any" msgid="2086784607921121803">"Dowolny kalendarz"</string>
<string name="muted_by" msgid="91464083490094950">"<xliff:g id="THIRD_PARTY">%1$s</xliff:g> wycisza niektóre dźwięki"</string>
<string name="system_error_wipe_data" msgid="5910572292172208493">"W Twoim urządzeniu wystąpił problem wewnętrzny. Może być ono niestabilne, dopóki nie przywrócisz danych fabrycznych."</string>
<string name="system_error_manufacturer" msgid="703545241070116315">"W Twoim urządzeniu wystąpił problem wewnętrzny. Skontaktuj się z jego producentem, by otrzymać szczegółowe informacje."</string>
@@ -2399,6 +2396,8 @@
<string name="profile_label_test" msgid="9168641926186071947">"Testowy"</string>
<string name="profile_label_communal" msgid="8743921499944800427">"Wspólny"</string>
<string name="redacted_notification_action_title" msgid="6942924973335920935"></string>
+ <!-- no translation found for screen_not_shared_sensitive_content (7058419185079565001) -->
+ <skip />
<string name="satellite_notification_title" msgid="4026338973463121526">"Automatycznie połączono z satelitą"</string>
<string name="satellite_notification_summary" msgid="5207364139430767162">"Możesz wymieniać wiadomości bez dostępu do sieci komórkowej lub Wi-Fi"</string>
<string name="satellite_notification_open_message" msgid="4149234979688273729">"Otwórz Wiadomości"</string>
diff --git a/core/res/res/values-pt-rBR/strings.xml b/core/res/res/values-pt-rBR/strings.xml
index 74f341f..c53b1d5 100644
--- a/core/res/res/values-pt-rBR/strings.xml
+++ b/core/res/res/values-pt-rBR/strings.xml
@@ -1930,12 +1930,9 @@
<string name="zen_mode_implicit_trigger_description" msgid="5714956693073007111">"Gerenciada pelo app <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
<string name="zen_mode_implicit_activated" msgid="2634285680776672994">"Ativada"</string>
<string name="zen_mode_implicit_deactivated" msgid="8688441768371501750">"Desativada"</string>
- <!-- no translation found for zen_mode_trigger_summary_divider_text (7461583466043698862) -->
- <skip />
- <!-- no translation found for zen_mode_trigger_summary_range_symbol_combination (1804900738798069619) -->
- <skip />
- <!-- no translation found for zen_mode_trigger_event_calendar_any (2086784607921121803) -->
- <skip />
+ <string name="zen_mode_trigger_summary_divider_text" msgid="7461583466043698862">", "</string>
+ <string name="zen_mode_trigger_summary_range_symbol_combination" msgid="1804900738798069619">"<xliff:g id="START">%1$s</xliff:g> a <xliff:g id="END">%2$s</xliff:g>"</string>
+ <string name="zen_mode_trigger_event_calendar_any" msgid="2086784607921121803">"Qualquer agenda"</string>
<string name="muted_by" msgid="91464083490094950">"<xliff:g id="THIRD_PARTY">%1$s</xliff:g> está silenciando alguns sons"</string>
<string name="system_error_wipe_data" msgid="5910572292172208493">"Há um problema interno com seu dispositivo. Ele pode ficar instável até que você faça a redefinição para configuração original."</string>
<string name="system_error_manufacturer" msgid="703545241070116315">"Há um problema interno com seu dispositivo. Entre em contato com o fabricante para saber mais detalhes."</string>
@@ -2398,6 +2395,8 @@
<string name="profile_label_test" msgid="9168641926186071947">"Teste"</string>
<string name="profile_label_communal" msgid="8743921499944800427">"Público"</string>
<string name="redacted_notification_action_title" msgid="6942924973335920935"></string>
+ <!-- no translation found for screen_not_shared_sensitive_content (7058419185079565001) -->
+ <skip />
<string name="satellite_notification_title" msgid="4026338973463121526">"Conectado automaticamente ao satélite"</string>
<string name="satellite_notification_summary" msgid="5207364139430767162">"Você pode enviar e receber mensagens sem um dispositivo móvel ou uma rede Wi-Fi"</string>
<string name="satellite_notification_open_message" msgid="4149234979688273729">"Abrir o app Mensagens"</string>
diff --git a/core/res/res/values-pt-rPT/strings.xml b/core/res/res/values-pt-rPT/strings.xml
index d6329c2..6b6f5c5 100644
--- a/core/res/res/values-pt-rPT/strings.xml
+++ b/core/res/res/values-pt-rPT/strings.xml
@@ -2395,6 +2395,8 @@
<string name="profile_label_test" msgid="9168641926186071947">"Teste"</string>
<string name="profile_label_communal" msgid="8743921499944800427">"Comum"</string>
<string name="redacted_notification_action_title" msgid="6942924973335920935"></string>
+ <!-- no translation found for screen_not_shared_sensitive_content (7058419185079565001) -->
+ <skip />
<string name="satellite_notification_title" msgid="4026338973463121526">"Ligação de satélite estabelecida automaticamente"</string>
<string name="satellite_notification_summary" msgid="5207364139430767162">"Pode enviar e receber mensagens sem uma rede móvel ou Wi-Fi"</string>
<string name="satellite_notification_open_message" msgid="4149234979688273729">"Abre a app Mensagens"</string>
diff --git a/core/res/res/values-pt/strings.xml b/core/res/res/values-pt/strings.xml
index 74f341f..c53b1d5 100644
--- a/core/res/res/values-pt/strings.xml
+++ b/core/res/res/values-pt/strings.xml
@@ -1930,12 +1930,9 @@
<string name="zen_mode_implicit_trigger_description" msgid="5714956693073007111">"Gerenciada pelo app <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
<string name="zen_mode_implicit_activated" msgid="2634285680776672994">"Ativada"</string>
<string name="zen_mode_implicit_deactivated" msgid="8688441768371501750">"Desativada"</string>
- <!-- no translation found for zen_mode_trigger_summary_divider_text (7461583466043698862) -->
- <skip />
- <!-- no translation found for zen_mode_trigger_summary_range_symbol_combination (1804900738798069619) -->
- <skip />
- <!-- no translation found for zen_mode_trigger_event_calendar_any (2086784607921121803) -->
- <skip />
+ <string name="zen_mode_trigger_summary_divider_text" msgid="7461583466043698862">", "</string>
+ <string name="zen_mode_trigger_summary_range_symbol_combination" msgid="1804900738798069619">"<xliff:g id="START">%1$s</xliff:g> a <xliff:g id="END">%2$s</xliff:g>"</string>
+ <string name="zen_mode_trigger_event_calendar_any" msgid="2086784607921121803">"Qualquer agenda"</string>
<string name="muted_by" msgid="91464083490094950">"<xliff:g id="THIRD_PARTY">%1$s</xliff:g> está silenciando alguns sons"</string>
<string name="system_error_wipe_data" msgid="5910572292172208493">"Há um problema interno com seu dispositivo. Ele pode ficar instável até que você faça a redefinição para configuração original."</string>
<string name="system_error_manufacturer" msgid="703545241070116315">"Há um problema interno com seu dispositivo. Entre em contato com o fabricante para saber mais detalhes."</string>
@@ -2398,6 +2395,8 @@
<string name="profile_label_test" msgid="9168641926186071947">"Teste"</string>
<string name="profile_label_communal" msgid="8743921499944800427">"Público"</string>
<string name="redacted_notification_action_title" msgid="6942924973335920935"></string>
+ <!-- no translation found for screen_not_shared_sensitive_content (7058419185079565001) -->
+ <skip />
<string name="satellite_notification_title" msgid="4026338973463121526">"Conectado automaticamente ao satélite"</string>
<string name="satellite_notification_summary" msgid="5207364139430767162">"Você pode enviar e receber mensagens sem um dispositivo móvel ou uma rede Wi-Fi"</string>
<string name="satellite_notification_open_message" msgid="4149234979688273729">"Abrir o app Mensagens"</string>
diff --git a/core/res/res/values-ro/strings.xml b/core/res/res/values-ro/strings.xml
index d37907c..5a449e3 100644
--- a/core/res/res/values-ro/strings.xml
+++ b/core/res/res/values-ro/strings.xml
@@ -828,7 +828,7 @@
<string name="permdesc_writeVerificationStateE2eeContactKeys" msgid="8453156829747427041">"Permite aplicației să actualizeze starea verificării cheilor E2EE deținute de alte aplicații"</string>
<string name="policylab_limitPassword" msgid="4851829918814422199">"Să seteze reguli pentru parolă"</string>
<string name="policydesc_limitPassword" msgid="4105491021115793793">"Stabilește lungimea și tipul de caractere permise pentru parolele și codurile PIN de blocare a ecranului."</string>
- <string name="policylab_watchLogin" msgid="7599669460083719504">"Să monitorizeze încercările de deblocare a ecranului"</string>
+ <string name="policylab_watchLogin" msgid="7599669460083719504">"să monitorizeze încercările de deblocare a ecranului"</string>
<string name="policydesc_watchLogin" product="tablet" msgid="2388436408621909298">"Monitorizează numărul de parole incorecte introduse la deblocarea ecranului și blochează tableta sau șterge datele acesteia dacă sunt introduse prea multe parole incorecte."</string>
<string name="policydesc_watchLogin" product="tv" msgid="2140588224468517507">"Monitorizează numărul de parole incorecte introduse la deblocarea ecranului și blochează dispozitivul Android TV sau șterge toate datele de pe acesta dacă se introduc prea multe parole incorecte."</string>
<string name="policydesc_watchLogin" product="automotive" msgid="7011438994051251521">"Monitorizează numărul de parole incorecte introduse la deblocarea ecranului și blochează sistemul de infotainment sau șterge toate datele acestuia dacă sunt introduse prea multe parole incorecte."</string>
@@ -841,7 +841,7 @@
<string name="policydesc_resetPassword" msgid="4626419138439341851">"Modifică blocarea ecranului."</string>
<string name="policylab_forceLock" msgid="7360335502968476434">"Să blocheze ecranul"</string>
<string name="policydesc_forceLock" msgid="1008844760853899693">"Stabilește cum și când se blochează ecranul."</string>
- <string name="policylab_wipeData" msgid="1359485247727537311">"Să șteargă toate datele"</string>
+ <string name="policylab_wipeData" msgid="1359485247727537311">"să șteargă toate datele"</string>
<string name="policydesc_wipeData" product="tablet" msgid="7245372676261947507">"Șterge datele de pe tabletă fără avertisment, efectuând resetarea configurării din fabrică."</string>
<string name="policydesc_wipeData" product="tv" msgid="513862488950801261">"Șterge datele de pe dispozitivul Android TV fără avertisment, efectuând o revenire la setările din fabrică."</string>
<string name="policydesc_wipeData" product="automotive" msgid="660804547737323300">"Șterge datele din sistemul de infotainment fără avertisment, prin revenirea la setările din fabrică."</string>
@@ -1930,12 +1930,9 @@
<string name="zen_mode_implicit_trigger_description" msgid="5714956693073007111">"Gestionat de <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
<string name="zen_mode_implicit_activated" msgid="2634285680776672994">"Activată"</string>
<string name="zen_mode_implicit_deactivated" msgid="8688441768371501750">"Dezactivată"</string>
- <!-- no translation found for zen_mode_trigger_summary_divider_text (7461583466043698862) -->
- <skip />
- <!-- no translation found for zen_mode_trigger_summary_range_symbol_combination (1804900738798069619) -->
- <skip />
- <!-- no translation found for zen_mode_trigger_event_calendar_any (2086784607921121803) -->
- <skip />
+ <string name="zen_mode_trigger_summary_divider_text" msgid="7461583466043698862">", "</string>
+ <string name="zen_mode_trigger_summary_range_symbol_combination" msgid="1804900738798069619">"<xliff:g id="START">%1$s</xliff:g> – <xliff:g id="END">%2$s</xliff:g>"</string>
+ <string name="zen_mode_trigger_event_calendar_any" msgid="2086784607921121803">"Orice calendar"</string>
<string name="muted_by" msgid="91464083490094950">"<xliff:g id="THIRD_PARTY">%1$s</xliff:g> dezactivează anumite sunete"</string>
<string name="system_error_wipe_data" msgid="5910572292172208493">"A apărut o problemă internă pe dispozitiv, iar acesta poate fi instabil până la revenirea la setările din fabrică."</string>
<string name="system_error_manufacturer" msgid="703545241070116315">"A apărut o problemă internă pe dispozitiv. Pentru detalii, contactează producătorul."</string>
@@ -2398,6 +2395,8 @@
<string name="profile_label_test" msgid="9168641926186071947">"Test"</string>
<string name="profile_label_communal" msgid="8743921499944800427">"Comun"</string>
<string name="redacted_notification_action_title" msgid="6942924973335920935"></string>
+ <!-- no translation found for screen_not_shared_sensitive_content (7058419185079565001) -->
+ <skip />
<string name="satellite_notification_title" msgid="4026338973463121526">"S-a conectat automat la satelit"</string>
<string name="satellite_notification_summary" msgid="5207364139430767162">"Poți să trimiți și să primești mesaje fără o rețea mobilă sau Wi-Fi"</string>
<string name="satellite_notification_open_message" msgid="4149234979688273729">"Deschide Mesaje"</string>
diff --git a/core/res/res/values-ru/strings.xml b/core/res/res/values-ru/strings.xml
index 723672d..59982ef 100644
--- a/core/res/res/values-ru/strings.xml
+++ b/core/res/res/values-ru/strings.xml
@@ -1285,7 +1285,7 @@
<string name="android_upgrading_starting_apps" msgid="6206161195076057075">"Запуск приложений."</string>
<string name="android_upgrading_complete" msgid="409800058018374746">"Окончание загрузки..."</string>
<string name="fp_power_button_enrollment_message" msgid="5648173517663246140">"Вы нажали кнопку питания. Обычно это приводит к отключению экрана.\n\nПри добавлении отпечатка пальца слегка прикоснитесь к кнопке."</string>
- <string name="fp_power_button_enrollment_title" msgid="6976841690455338563">"Для завершения нужно отключить экран"</string>
+ <string name="fp_power_button_enrollment_title" msgid="6976841690455338563">"Для завершения нужно отключить экран."</string>
<string name="fp_power_button_enrollment_button_text" msgid="3199783266386029200">"Отключить"</string>
<string name="fp_power_button_bp_title" msgid="5585506104526820067">"Продолжить сканирование отпечатка?"</string>
<string name="fp_power_button_bp_message" msgid="2983163038168903393">"Вы нажали кнопку питания. Обычно это приводит к отключению экрана.\n\nЧтобы отсканировать отпечаток пальца, слегка прикоснитесь к кнопке."</string>
@@ -1931,12 +1931,9 @@
<string name="zen_mode_implicit_trigger_description" msgid="5714956693073007111">"Под управлением приложения \"<xliff:g id="APP_NAME">%1$s</xliff:g>\""</string>
<string name="zen_mode_implicit_activated" msgid="2634285680776672994">"Включено"</string>
<string name="zen_mode_implicit_deactivated" msgid="8688441768371501750">"Отключено"</string>
- <!-- no translation found for zen_mode_trigger_summary_divider_text (7461583466043698862) -->
- <skip />
- <!-- no translation found for zen_mode_trigger_summary_range_symbol_combination (1804900738798069619) -->
- <skip />
- <!-- no translation found for zen_mode_trigger_event_calendar_any (2086784607921121803) -->
- <skip />
+ <string name="zen_mode_trigger_summary_divider_text" msgid="7461583466043698862">", "</string>
+ <string name="zen_mode_trigger_summary_range_symbol_combination" msgid="1804900738798069619">"<xliff:g id="START">%1$s</xliff:g> – <xliff:g id="END">%2$s</xliff:g>"</string>
+ <string name="zen_mode_trigger_event_calendar_any" msgid="2086784607921121803">"Любой календарь"</string>
<string name="muted_by" msgid="91464083490094950">"<xliff:g id="THIRD_PARTY">%1$s</xliff:g> приглушает некоторые звуки."</string>
<string name="system_error_wipe_data" msgid="5910572292172208493">"Произошла внутренняя ошибка, и устройство может работать нестабильно, пока вы не выполните сброс настроек."</string>
<string name="system_error_manufacturer" msgid="703545241070116315">"Произошла внутренняя ошибка. Обратитесь к производителю устройства за подробными сведениями."</string>
@@ -2399,6 +2396,8 @@
<string name="profile_label_test" msgid="9168641926186071947">"Тестовый"</string>
<string name="profile_label_communal" msgid="8743921499944800427">"Совместный"</string>
<string name="redacted_notification_action_title" msgid="6942924973335920935"></string>
+ <!-- no translation found for screen_not_shared_sensitive_content (7058419185079565001) -->
+ <skip />
<string name="satellite_notification_title" msgid="4026338973463121526">"Автоматически подключено к системам спутниковой связи"</string>
<string name="satellite_notification_summary" msgid="5207364139430767162">"Вы можете отправлять и получать сообщения без доступа к мобильной сети или Wi-Fi."</string>
<string name="satellite_notification_open_message" msgid="4149234979688273729">"Открыть Сообщения"</string>
diff --git a/core/res/res/values-si/strings.xml b/core/res/res/values-si/strings.xml
index 5886639..04b2c52 100644
--- a/core/res/res/values-si/strings.xml
+++ b/core/res/res/values-si/strings.xml
@@ -1929,12 +1929,9 @@
<string name="zen_mode_implicit_trigger_description" msgid="5714956693073007111">"<xliff:g id="APP_NAME">%1$s</xliff:g> විසින් කළමනාකරණය කරයි"</string>
<string name="zen_mode_implicit_activated" msgid="2634285680776672994">"ක්රියාත්මකයි"</string>
<string name="zen_mode_implicit_deactivated" msgid="8688441768371501750">"ක්රියාවිරහිතයි"</string>
- <!-- no translation found for zen_mode_trigger_summary_divider_text (7461583466043698862) -->
- <skip />
- <!-- no translation found for zen_mode_trigger_summary_range_symbol_combination (1804900738798069619) -->
- <skip />
- <!-- no translation found for zen_mode_trigger_event_calendar_any (2086784607921121803) -->
- <skip />
+ <string name="zen_mode_trigger_summary_divider_text" msgid="7461583466043698862">", "</string>
+ <string name="zen_mode_trigger_summary_range_symbol_combination" msgid="1804900738798069619">"<xliff:g id="START">%1$s</xliff:g> - <xliff:g id="END">%2$s</xliff:g>"</string>
+ <string name="zen_mode_trigger_event_calendar_any" msgid="2086784607921121803">"ඕනෑම දින දර්ශනයක්"</string>
<string name="muted_by" msgid="91464083490094950">"<xliff:g id="THIRD_PARTY">%1$s</xliff:g> සමහර ශබ්ද නිහඬ කරමින්"</string>
<string name="system_error_wipe_data" msgid="5910572292172208493">"ඔබේ උපාංගය සමගින් ගැටලුවක් ඇති අතර, ඔබේ කර්මාන්තශාලා දත්ත යළි සකසන තෙක් එය අස්ථායි විය හැකිය."</string>
<string name="system_error_manufacturer" msgid="703545241070116315">"ඔබේ උපාංගය සමගින් අභ්යන්තර ගැටලුවක් ඇත. විස්තර සඳහා ඔබේ නිෂ්පාදක අමතන්න."</string>
@@ -2397,6 +2394,8 @@
<string name="profile_label_test" msgid="9168641926186071947">"පරීක්ෂණය"</string>
<string name="profile_label_communal" msgid="8743921499944800427">"වාර්ගික"</string>
<string name="redacted_notification_action_title" msgid="6942924973335920935"></string>
+ <!-- no translation found for screen_not_shared_sensitive_content (7058419185079565001) -->
+ <skip />
<string name="satellite_notification_title" msgid="4026338973463121526">"චන්ද්රිකාවට ස්වයංක්රීයව සම්බන්ධ වේ"</string>
<string name="satellite_notification_summary" msgid="5207364139430767162">"ඔබට ජංගම හෝ Wi-Fi ජාලයක් නොමැතිව පණිවිඩ යැවීමට සහ ලැබීමට හැක"</string>
<string name="satellite_notification_open_message" msgid="4149234979688273729">"Messages විවෘත කරන්න"</string>
diff --git a/core/res/res/values-sk/strings.xml b/core/res/res/values-sk/strings.xml
index 5ec599a..76cad30 100644
--- a/core/res/res/values-sk/strings.xml
+++ b/core/res/res/values-sk/strings.xml
@@ -1931,12 +1931,9 @@
<string name="zen_mode_implicit_trigger_description" msgid="5714956693073007111">"Spravované aplikáciou <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
<string name="zen_mode_implicit_activated" msgid="2634285680776672994">"Zapnuté"</string>
<string name="zen_mode_implicit_deactivated" msgid="8688441768371501750">"Vypnuté"</string>
- <!-- no translation found for zen_mode_trigger_summary_divider_text (7461583466043698862) -->
- <skip />
- <!-- no translation found for zen_mode_trigger_summary_range_symbol_combination (1804900738798069619) -->
- <skip />
- <!-- no translation found for zen_mode_trigger_event_calendar_any (2086784607921121803) -->
- <skip />
+ <string name="zen_mode_trigger_summary_divider_text" msgid="7461583466043698862">", "</string>
+ <string name="zen_mode_trigger_summary_range_symbol_combination" msgid="1804900738798069619">"<xliff:g id="START">%1$s</xliff:g> – <xliff:g id="END">%2$s</xliff:g>"</string>
+ <string name="zen_mode_trigger_event_calendar_any" msgid="2086784607921121803">"Ľubovoľný kalendár"</string>
<string name="muted_by" msgid="91464083490094950">"<xliff:g id="THIRD_PARTY">%1$s</xliff:g> vypína niektoré zvuky"</string>
<string name="system_error_wipe_data" msgid="5910572292172208493">"Vo vašom zariadení došlo k internému problému. Môže byť nestabilné, kým neobnovíte jeho výrobné nastavenia."</string>
<string name="system_error_manufacturer" msgid="703545241070116315">"Vo vašom zariadení došlo k internému problému. Ak chcete získať podrobné informácie, obráťte sa na jeho výrobcu."</string>
@@ -2399,6 +2396,8 @@
<string name="profile_label_test" msgid="9168641926186071947">"Testovací"</string>
<string name="profile_label_communal" msgid="8743921499944800427">"Spoločný"</string>
<string name="redacted_notification_action_title" msgid="6942924973335920935"></string>
+ <!-- no translation found for screen_not_shared_sensitive_content (7058419185079565001) -->
+ <skip />
<string name="satellite_notification_title" msgid="4026338973463121526">"Automaticky pripojené k satelitu"</string>
<string name="satellite_notification_summary" msgid="5207364139430767162">"Správy môžete odosielať a prijímať bez mobilnej siete či siete Wi-Fi"</string>
<string name="satellite_notification_open_message" msgid="4149234979688273729">"Otvoriť Správy"</string>
diff --git a/core/res/res/values-sl/strings.xml b/core/res/res/values-sl/strings.xml
index 2a66253..5983929 100644
--- a/core/res/res/values-sl/strings.xml
+++ b/core/res/res/values-sl/strings.xml
@@ -2396,6 +2396,8 @@
<string name="profile_label_test" msgid="9168641926186071947">"Preizkus"</string>
<string name="profile_label_communal" msgid="8743921499944800427">"Skupno"</string>
<string name="redacted_notification_action_title" msgid="6942924973335920935"></string>
+ <!-- no translation found for screen_not_shared_sensitive_content (7058419185079565001) -->
+ <skip />
<string name="satellite_notification_title" msgid="4026338973463121526">"Samodejno vzpostavljena povezava s satelitom"</string>
<string name="satellite_notification_summary" msgid="5207364139430767162">"Sporočila SMS lahko pošiljate in prejemate brez mobilnega omrežja ali omrežja Wi-Fi"</string>
<string name="satellite_notification_open_message" msgid="4149234979688273729">"Odpri Sporočila"</string>
diff --git a/core/res/res/values-sq/strings.xml b/core/res/res/values-sq/strings.xml
index 0e1e791..5a02d56 100644
--- a/core/res/res/values-sq/strings.xml
+++ b/core/res/res/values-sq/strings.xml
@@ -1929,12 +1929,9 @@
<string name="zen_mode_implicit_trigger_description" msgid="5714956693073007111">"Menaxhohet nga <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
<string name="zen_mode_implicit_activated" msgid="2634285680776672994">"Aktivizuar"</string>
<string name="zen_mode_implicit_deactivated" msgid="8688441768371501750">"Çaktivizuar"</string>
- <!-- no translation found for zen_mode_trigger_summary_divider_text (7461583466043698862) -->
- <skip />
- <!-- no translation found for zen_mode_trigger_summary_range_symbol_combination (1804900738798069619) -->
- <skip />
- <!-- no translation found for zen_mode_trigger_event_calendar_any (2086784607921121803) -->
- <skip />
+ <string name="zen_mode_trigger_summary_divider_text" msgid="7461583466043698862">", "</string>
+ <string name="zen_mode_trigger_summary_range_symbol_combination" msgid="1804900738798069619">"<xliff:g id="START">%1$s</xliff:g> - <xliff:g id="END">%2$s</xliff:g>"</string>
+ <string name="zen_mode_trigger_event_calendar_any" msgid="2086784607921121803">"Çdo kalendar"</string>
<string name="muted_by" msgid="91464083490094950">"<xliff:g id="THIRD_PARTY">%1$s</xliff:g> po çaktivizon disa tinguj"</string>
<string name="system_error_wipe_data" msgid="5910572292172208493">"Ka një problem të brendshëm me pajisjen tënde. Ajo mund të jetë e paqëndrueshme derisa të rivendosësh të dhënat në gjendje fabrike."</string>
<string name="system_error_manufacturer" msgid="703545241070116315">"Ka një problem të brendshëm me pajisjen tënde. Kontakto prodhuesin tënd për detaje."</string>
@@ -2397,6 +2394,8 @@
<string name="profile_label_test" msgid="9168641926186071947">"Test"</string>
<string name="profile_label_communal" msgid="8743921499944800427">"I përbashkët"</string>
<string name="redacted_notification_action_title" msgid="6942924973335920935"></string>
+ <!-- no translation found for screen_not_shared_sensitive_content (7058419185079565001) -->
+ <skip />
<string name="satellite_notification_title" msgid="4026338973463121526">"U lidh automatikisht me satelitin"</string>
<string name="satellite_notification_summary" msgid="5207364139430767162">"Mund të dërgosh dhe të marrësh mesazhe pa një rrjet celular apo rrjet Wi-Fi"</string>
<string name="satellite_notification_open_message" msgid="4149234979688273729">"Hap \"Mesazhet\""</string>
diff --git a/core/res/res/values-sr/strings.xml b/core/res/res/values-sr/strings.xml
index cb037cc..637371c 100644
--- a/core/res/res/values-sr/strings.xml
+++ b/core/res/res/values-sr/strings.xml
@@ -1930,12 +1930,9 @@
<string name="zen_mode_implicit_trigger_description" msgid="5714956693073007111">"Управља: <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
<string name="zen_mode_implicit_activated" msgid="2634285680776672994">"Укључено"</string>
<string name="zen_mode_implicit_deactivated" msgid="8688441768371501750">"Искључено"</string>
- <!-- no translation found for zen_mode_trigger_summary_divider_text (7461583466043698862) -->
- <skip />
- <!-- no translation found for zen_mode_trigger_summary_range_symbol_combination (1804900738798069619) -->
- <skip />
- <!-- no translation found for zen_mode_trigger_event_calendar_any (2086784607921121803) -->
- <skip />
+ <string name="zen_mode_trigger_summary_divider_text" msgid="7461583466043698862">", "</string>
+ <string name="zen_mode_trigger_summary_range_symbol_combination" msgid="1804900738798069619">"<xliff:g id="START">%1$s</xliff:g>–<xliff:g id="END">%2$s</xliff:g>"</string>
+ <string name="zen_mode_trigger_event_calendar_any" msgid="2086784607921121803">"Било који календар"</string>
<string name="muted_by" msgid="91464083490094950">"<xliff:g id="THIRD_PARTY">%1$s</xliff:g> искључује неке звуке"</string>
<string name="system_error_wipe_data" msgid="5910572292172208493">"Дошло је до интерног проблема у вези са уређајем и можда ће бити нестабилан док не обавите ресетовање на фабричка подешавања."</string>
<string name="system_error_manufacturer" msgid="703545241070116315">"Дошло је до интерног проблема у вези са уређајем. Потражите детаље од произвођача."</string>
@@ -2398,6 +2395,8 @@
<string name="profile_label_test" msgid="9168641926186071947">"Тест"</string>
<string name="profile_label_communal" msgid="8743921499944800427">"Заједничко"</string>
<string name="redacted_notification_action_title" msgid="6942924973335920935"></string>
+ <!-- no translation found for screen_not_shared_sensitive_content (7058419185079565001) -->
+ <skip />
<string name="satellite_notification_title" msgid="4026338973463121526">"Аутоматски повезано са сателитом"</string>
<string name="satellite_notification_summary" msgid="5207364139430767162">"Можете да шаљете и примате поруке без мобилне или WiFi мреже"</string>
<string name="satellite_notification_open_message" msgid="4149234979688273729">"Отвори Messages"</string>
diff --git a/core/res/res/values-sv/strings.xml b/core/res/res/values-sv/strings.xml
index d3198d6..2dde3a8 100644
--- a/core/res/res/values-sv/strings.xml
+++ b/core/res/res/values-sv/strings.xml
@@ -1929,12 +1929,9 @@
<string name="zen_mode_implicit_trigger_description" msgid="5714956693073007111">"Hanteras av <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
<string name="zen_mode_implicit_activated" msgid="2634285680776672994">"På"</string>
<string name="zen_mode_implicit_deactivated" msgid="8688441768371501750">"Av"</string>
- <!-- no translation found for zen_mode_trigger_summary_divider_text (7461583466043698862) -->
- <skip />
- <!-- no translation found for zen_mode_trigger_summary_range_symbol_combination (1804900738798069619) -->
- <skip />
- <!-- no translation found for zen_mode_trigger_event_calendar_any (2086784607921121803) -->
- <skip />
+ <string name="zen_mode_trigger_summary_divider_text" msgid="7461583466043698862">", "</string>
+ <string name="zen_mode_trigger_summary_range_symbol_combination" msgid="1804900738798069619">"<xliff:g id="START">%1$s</xliff:g>–<xliff:g id="END">%2$s</xliff:g>"</string>
+ <string name="zen_mode_trigger_event_calendar_any" msgid="2086784607921121803">"Alla kalendrar"</string>
<string name="muted_by" msgid="91464083490094950">"<xliff:g id="THIRD_PARTY">%1$s</xliff:g> stänger av vissa ljud"</string>
<string name="system_error_wipe_data" msgid="5910572292172208493">"Ett internt problem har uppstått i enheten, och det kan hända att problemet kvarstår tills du återställer standardinställningarna."</string>
<string name="system_error_manufacturer" msgid="703545241070116315">"Ett internt problem har uppstått i enheten. Kontakta tillverkaren om du vill veta mer."</string>
@@ -2397,6 +2394,8 @@
<string name="profile_label_test" msgid="9168641926186071947">"Test"</string>
<string name="profile_label_communal" msgid="8743921499944800427">"Allmän"</string>
<string name="redacted_notification_action_title" msgid="6942924973335920935"></string>
+ <!-- no translation found for screen_not_shared_sensitive_content (7058419185079565001) -->
+ <skip />
<string name="satellite_notification_title" msgid="4026338973463121526">"Automatiskt ansluten till satellit"</string>
<string name="satellite_notification_summary" msgid="5207364139430767162">"Du kan skicka och ta emot meddelanden utan mobil- eller wifi-nätverk"</string>
<string name="satellite_notification_open_message" msgid="4149234979688273729">"Öppna Messages"</string>
diff --git a/core/res/res/values-sw/strings.xml b/core/res/res/values-sw/strings.xml
index d1738ef..2936716 100644
--- a/core/res/res/values-sw/strings.xml
+++ b/core/res/res/values-sw/strings.xml
@@ -1929,12 +1929,9 @@
<string name="zen_mode_implicit_trigger_description" msgid="5714956693073007111">"Inadhibitiwa na <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
<string name="zen_mode_implicit_activated" msgid="2634285680776672994">"Imewashwa"</string>
<string name="zen_mode_implicit_deactivated" msgid="8688441768371501750">"Imezimwa"</string>
- <!-- no translation found for zen_mode_trigger_summary_divider_text (7461583466043698862) -->
- <skip />
- <!-- no translation found for zen_mode_trigger_summary_range_symbol_combination (1804900738798069619) -->
- <skip />
- <!-- no translation found for zen_mode_trigger_event_calendar_any (2086784607921121803) -->
- <skip />
+ <string name="zen_mode_trigger_summary_divider_text" msgid="7461583466043698862">", "</string>
+ <string name="zen_mode_trigger_summary_range_symbol_combination" msgid="1804900738798069619">"<xliff:g id="START">%1$s</xliff:g> - <xliff:g id="END">%2$s</xliff:g>"</string>
+ <string name="zen_mode_trigger_event_calendar_any" msgid="2086784607921121803">"Kalenda yoyote"</string>
<string name="muted_by" msgid="91464083490094950">"<xliff:g id="THIRD_PARTY">%1$s</xliff:g> inazima baadhi ya sauti"</string>
<string name="system_error_wipe_data" msgid="5910572292172208493">"Kuna hitilafu ya ndani ya kifaa chako, na huenda kisiwe thabiti mpaka urejeshe mipangilio ya kiwandani."</string>
<string name="system_error_manufacturer" msgid="703545241070116315">"Kuna hitilafu ya ndani ya kifaa chako. Wasiliana na mtengenezaji wa kifaa chako kwa maelezo."</string>
@@ -2397,6 +2394,8 @@
<string name="profile_label_test" msgid="9168641926186071947">"Jaribio"</string>
<string name="profile_label_communal" msgid="8743921499944800427">"Unaoshirikiwa"</string>
<string name="redacted_notification_action_title" msgid="6942924973335920935"></string>
+ <!-- no translation found for screen_not_shared_sensitive_content (7058419185079565001) -->
+ <skip />
<string name="satellite_notification_title" msgid="4026338973463121526">"Imeunganishwa kiotomatiki na satelaiti"</string>
<string name="satellite_notification_summary" msgid="5207364139430767162">"Unaweza kutuma na kupokea ujumbe bila mtandao wa simu au Wi-Fi"</string>
<string name="satellite_notification_open_message" msgid="4149234979688273729">"Fungua Programu ya Messages"</string>
diff --git a/core/res/res/values-ta/strings.xml b/core/res/res/values-ta/strings.xml
index 3c4c457..28ee91d 100644
--- a/core/res/res/values-ta/strings.xml
+++ b/core/res/res/values-ta/strings.xml
@@ -1929,12 +1929,9 @@
<string name="zen_mode_implicit_trigger_description" msgid="5714956693073007111">"நிர்வகிப்பது: <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
<string name="zen_mode_implicit_activated" msgid="2634285680776672994">"ஆன்"</string>
<string name="zen_mode_implicit_deactivated" msgid="8688441768371501750">"ஆஃப்"</string>
- <!-- no translation found for zen_mode_trigger_summary_divider_text (7461583466043698862) -->
- <skip />
- <!-- no translation found for zen_mode_trigger_summary_range_symbol_combination (1804900738798069619) -->
- <skip />
- <!-- no translation found for zen_mode_trigger_event_calendar_any (2086784607921121803) -->
- <skip />
+ <string name="zen_mode_trigger_summary_divider_text" msgid="7461583466043698862">", "</string>
+ <string name="zen_mode_trigger_summary_range_symbol_combination" msgid="1804900738798069619">"<xliff:g id="START">%1$s</xliff:g> - <xliff:g id="END">%2$s</xliff:g>"</string>
+ <string name="zen_mode_trigger_event_calendar_any" msgid="2086784607921121803">"ஏதேனும் கேலெண்டர்"</string>
<string name="muted_by" msgid="91464083490094950">"<xliff:g id="THIRD_PARTY">%1$s</xliff:g> சில ஒலிகளை முடக்குகிறது"</string>
<string name="system_error_wipe_data" msgid="5910572292172208493">"சாதனத்தில் அகச் சிக்கல் இருக்கிறது, அதனை ஆரம்பநிலைக்கு மீட்டமைக்கும் வரை நிலையற்று இயங்கலாம்."</string>
<string name="system_error_manufacturer" msgid="703545241070116315">"சாதனத்தில் அகச் சிக்கல் இருக்கிறது. விவரங்களுக்கு சாதன தயாரிப்பாளரைத் தொடர்புகொள்ளவும்."</string>
@@ -2397,6 +2394,8 @@
<string name="profile_label_test" msgid="9168641926186071947">"பரிசோதனை"</string>
<string name="profile_label_communal" msgid="8743921499944800427">"பொது"</string>
<string name="redacted_notification_action_title" msgid="6942924973335920935"></string>
+ <!-- no translation found for screen_not_shared_sensitive_content (7058419185079565001) -->
+ <skip />
<string name="satellite_notification_title" msgid="4026338973463121526">"சாட்டிலைட்டுடன் தானாக இணைக்கப்பட்டது"</string>
<string name="satellite_notification_summary" msgid="5207364139430767162">"மொபைல்/வைஃபை நெட்வொர்க் இல்லாமல் நீங்கள் மெசேஜ்களை அனுப்பலாம் பெறலாம்"</string>
<string name="satellite_notification_open_message" msgid="4149234979688273729">"Messages ஆப்ஸைத் திறக்கவும்"</string>
diff --git a/core/res/res/values-te/strings.xml b/core/res/res/values-te/strings.xml
index 2d6241d..c64c9b6d 100644
--- a/core/res/res/values-te/strings.xml
+++ b/core/res/res/values-te/strings.xml
@@ -1929,12 +1929,9 @@
<string name="zen_mode_implicit_trigger_description" msgid="5714956693073007111">"<xliff:g id="APP_NAME">%1$s</xliff:g> ద్వారా మేనేజ్ చేయబడుతోంది"</string>
<string name="zen_mode_implicit_activated" msgid="2634285680776672994">"ఆన్లో ఉంది"</string>
<string name="zen_mode_implicit_deactivated" msgid="8688441768371501750">"ఆఫ్లో ఉంది"</string>
- <!-- no translation found for zen_mode_trigger_summary_divider_text (7461583466043698862) -->
- <skip />
- <!-- no translation found for zen_mode_trigger_summary_range_symbol_combination (1804900738798069619) -->
- <skip />
- <!-- no translation found for zen_mode_trigger_event_calendar_any (2086784607921121803) -->
- <skip />
+ <string name="zen_mode_trigger_summary_divider_text" msgid="7461583466043698862">", "</string>
+ <string name="zen_mode_trigger_summary_range_symbol_combination" msgid="1804900738798069619">"<xliff:g id="START">%1$s</xliff:g> - <xliff:g id="END">%2$s</xliff:g>"</string>
+ <string name="zen_mode_trigger_event_calendar_any" msgid="2086784607921121803">"ఏదైనా క్యాలెండర్"</string>
<string name="muted_by" msgid="91464083490094950">"<xliff:g id="THIRD_PARTY">%1$s</xliff:g> కొన్ని ధ్వనులను మ్యూట్ చేస్తోంది"</string>
<string name="system_error_wipe_data" msgid="5910572292172208493">"మీ పరికరంతో అంతర్గత సమస్య ఏర్పడింది మరియు మీరు ఫ్యాక్టరీ డేటా రీసెట్ చేసే వరకు అస్థిరంగా ఉంటుంది."</string>
<string name="system_error_manufacturer" msgid="703545241070116315">"మీ పరికరంతో అంతర్గత సమస్య ఏర్పడింది. వివరాల కోసం మీ తయారీదారుని సంప్రదించండి."</string>
@@ -2397,6 +2394,8 @@
<string name="profile_label_test" msgid="9168641926186071947">"పరీక్ష"</string>
<string name="profile_label_communal" msgid="8743921499944800427">"కమ్యూనల్"</string>
<string name="redacted_notification_action_title" msgid="6942924973335920935"></string>
+ <!-- no translation found for screen_not_shared_sensitive_content (7058419185079565001) -->
+ <skip />
<string name="satellite_notification_title" msgid="4026338973463121526">"శాటిలైట్కు ఆటోమేటిక్గా కనెక్ట్ చేయబడింది"</string>
<string name="satellite_notification_summary" msgid="5207364139430767162">"మీరు మొబైల్ లేదా Wi-Fi నెట్వర్క్ లేకుండా మెసేజ్లను పంపవచ్చు, స్వీకరించవచ్చు"</string>
<string name="satellite_notification_open_message" msgid="4149234979688273729">"Messagesను తెరవండి"</string>
diff --git a/core/res/res/values-th/strings.xml b/core/res/res/values-th/strings.xml
index e75cfe1..7555f26 100644
--- a/core/res/res/values-th/strings.xml
+++ b/core/res/res/values-th/strings.xml
@@ -1929,12 +1929,9 @@
<string name="zen_mode_implicit_trigger_description" msgid="5714956693073007111">"จัดการโดย <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
<string name="zen_mode_implicit_activated" msgid="2634285680776672994">"เปิด"</string>
<string name="zen_mode_implicit_deactivated" msgid="8688441768371501750">"ปิด"</string>
- <!-- no translation found for zen_mode_trigger_summary_divider_text (7461583466043698862) -->
- <skip />
- <!-- no translation found for zen_mode_trigger_summary_range_symbol_combination (1804900738798069619) -->
- <skip />
- <!-- no translation found for zen_mode_trigger_event_calendar_any (2086784607921121803) -->
- <skip />
+ <string name="zen_mode_trigger_summary_divider_text" msgid="7461583466043698862">", "</string>
+ <string name="zen_mode_trigger_summary_range_symbol_combination" msgid="1804900738798069619">"<xliff:g id="START">%1$s</xliff:g> - <xliff:g id="END">%2$s</xliff:g>"</string>
+ <string name="zen_mode_trigger_event_calendar_any" msgid="2086784607921121803">"ปฏิทินทั้งหมด"</string>
<string name="muted_by" msgid="91464083490094950">"<xliff:g id="THIRD_PARTY">%1$s</xliff:g> กำลังปิดเสียงบางรายการ"</string>
<string name="system_error_wipe_data" msgid="5910572292172208493">"อุปกรณ์ของคุณเกิดปัญหาภายในเครื่อง อุปกรณ์อาจทำงานไม่เสถียรจนกว่าคุณจะรีเซ็ตข้อมูลเป็นค่าเริ่มต้น"</string>
<string name="system_error_manufacturer" msgid="703545241070116315">"อุปกรณ์ของคุณเกิดปัญหาภายในเครื่อง โปรดติดต่อผู้ผลิตเพื่อขอรายละเอียดเพิ่มเติม"</string>
@@ -2397,6 +2394,8 @@
<string name="profile_label_test" msgid="9168641926186071947">"ทดสอบ"</string>
<string name="profile_label_communal" msgid="8743921499944800427">"ส่วนกลาง"</string>
<string name="redacted_notification_action_title" msgid="6942924973335920935"></string>
+ <!-- no translation found for screen_not_shared_sensitive_content (7058419185079565001) -->
+ <skip />
<string name="satellite_notification_title" msgid="4026338973463121526">"เชื่อมต่อกับดาวเทียมโดยอัตโนมัติ"</string>
<string name="satellite_notification_summary" msgid="5207364139430767162">"คุณรับส่งข้อความผ่านดาวเทียมได้โดยไม่ต้องใช้เครือข่ายมือถือหรือ Wi-Fi"</string>
<string name="satellite_notification_open_message" msgid="4149234979688273729">"เปิด Messages"</string>
diff --git a/core/res/res/values-tl/strings.xml b/core/res/res/values-tl/strings.xml
index 0ba3fc3..112da5c 100644
--- a/core/res/res/values-tl/strings.xml
+++ b/core/res/res/values-tl/strings.xml
@@ -1929,12 +1929,9 @@
<string name="zen_mode_implicit_trigger_description" msgid="5714956693073007111">"Pinapamahalaan ng <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
<string name="zen_mode_implicit_activated" msgid="2634285680776672994">"Naka-on"</string>
<string name="zen_mode_implicit_deactivated" msgid="8688441768371501750">"Naka-off"</string>
- <!-- no translation found for zen_mode_trigger_summary_divider_text (7461583466043698862) -->
- <skip />
- <!-- no translation found for zen_mode_trigger_summary_range_symbol_combination (1804900738798069619) -->
- <skip />
- <!-- no translation found for zen_mode_trigger_event_calendar_any (2086784607921121803) -->
- <skip />
+ <string name="zen_mode_trigger_summary_divider_text" msgid="7461583466043698862">", "</string>
+ <string name="zen_mode_trigger_summary_range_symbol_combination" msgid="1804900738798069619">"<xliff:g id="START">%1$s</xliff:g>, <xliff:g id="END">%2$s</xliff:g>"</string>
+ <string name="zen_mode_trigger_event_calendar_any" msgid="2086784607921121803">"Anumang kalendaryo"</string>
<string name="muted_by" msgid="91464083490094950">"Minu-mute ng <xliff:g id="THIRD_PARTY">%1$s</xliff:g> ang ilang tunog"</string>
<string name="system_error_wipe_data" msgid="5910572292172208493">"May internal na problema sa iyong device, at maaaring hindi ito maging stable hanggang sa i-reset mo ang factory data."</string>
<string name="system_error_manufacturer" msgid="703545241070116315">"May internal na problema sa iyong device. Makipag-ugnayan sa iyong manufacturer upang malaman ang mga detalye."</string>
@@ -2397,6 +2394,8 @@
<string name="profile_label_test" msgid="9168641926186071947">"Test"</string>
<string name="profile_label_communal" msgid="8743921499944800427">"Communal"</string>
<string name="redacted_notification_action_title" msgid="6942924973335920935"></string>
+ <!-- no translation found for screen_not_shared_sensitive_content (7058419185079565001) -->
+ <skip />
<string name="satellite_notification_title" msgid="4026338973463121526">"Awtomatikong nakakonekta sa satellite"</string>
<string name="satellite_notification_summary" msgid="5207364139430767162">"Puwede kang magpadala at tumanggap ng mga mensahe nang walang mobile o Wi-Fi network"</string>
<string name="satellite_notification_open_message" msgid="4149234979688273729">"Buksan ang Messages"</string>
diff --git a/core/res/res/values-tr/strings.xml b/core/res/res/values-tr/strings.xml
index b3b59fc..2ca545b 100644
--- a/core/res/res/values-tr/strings.xml
+++ b/core/res/res/values-tr/strings.xml
@@ -1929,12 +1929,9 @@
<string name="zen_mode_implicit_trigger_description" msgid="5714956693073007111">"<xliff:g id="APP_NAME">%1$s</xliff:g> tarafından yönetiliyor"</string>
<string name="zen_mode_implicit_activated" msgid="2634285680776672994">"Açık"</string>
<string name="zen_mode_implicit_deactivated" msgid="8688441768371501750">"Kapalı"</string>
- <!-- no translation found for zen_mode_trigger_summary_divider_text (7461583466043698862) -->
- <skip />
- <!-- no translation found for zen_mode_trigger_summary_range_symbol_combination (1804900738798069619) -->
- <skip />
- <!-- no translation found for zen_mode_trigger_event_calendar_any (2086784607921121803) -->
- <skip />
+ <string name="zen_mode_trigger_summary_divider_text" msgid="7461583466043698862">", "</string>
+ <string name="zen_mode_trigger_summary_range_symbol_combination" msgid="1804900738798069619">"<xliff:g id="START">%1$s</xliff:g>-<xliff:g id="END">%2$s</xliff:g>"</string>
+ <string name="zen_mode_trigger_event_calendar_any" msgid="2086784607921121803">"Tüm takvimler"</string>
<string name="muted_by" msgid="91464083490094950">"<xliff:g id="THIRD_PARTY">%1$s</xliff:g> bazı sesleri kapatıyor"</string>
<string name="system_error_wipe_data" msgid="5910572292172208493">"Cihazınızla ilgili dahili bir sorun oluştu ve fabrika verilerine sıfırlama işlemi gerçekleştirilene kadar kararsız çalışabilir."</string>
<string name="system_error_manufacturer" msgid="703545241070116315">"Cihazınızla ilgili dahili bir sorun oluştu. Ayrıntılı bilgi için üreticinizle iletişim kurun."</string>
@@ -2397,6 +2394,8 @@
<string name="profile_label_test" msgid="9168641926186071947">"Test"</string>
<string name="profile_label_communal" msgid="8743921499944800427">"Paylaşılan"</string>
<string name="redacted_notification_action_title" msgid="6942924973335920935"></string>
+ <!-- no translation found for screen_not_shared_sensitive_content (7058419185079565001) -->
+ <skip />
<string name="satellite_notification_title" msgid="4026338973463121526">"Uyduya otomatik olarak bağlandı"</string>
<string name="satellite_notification_summary" msgid="5207364139430767162">"Mobil veya kablosuz ağa bağlı olmadan mesaj alıp gönderebilirsiniz"</string>
<string name="satellite_notification_open_message" msgid="4149234979688273729">"Mesajlar\'ı aç"</string>
diff --git a/core/res/res/values-uk/strings.xml b/core/res/res/values-uk/strings.xml
index 528b403..df2c715 100644
--- a/core/res/res/values-uk/strings.xml
+++ b/core/res/res/values-uk/strings.xml
@@ -1931,12 +1931,9 @@
<string name="zen_mode_implicit_trigger_description" msgid="5714956693073007111">"Керує додаток <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
<string name="zen_mode_implicit_activated" msgid="2634285680776672994">"Увімкнено"</string>
<string name="zen_mode_implicit_deactivated" msgid="8688441768371501750">"Вимкнено"</string>
- <!-- no translation found for zen_mode_trigger_summary_divider_text (7461583466043698862) -->
- <skip />
- <!-- no translation found for zen_mode_trigger_summary_range_symbol_combination (1804900738798069619) -->
- <skip />
- <!-- no translation found for zen_mode_trigger_event_calendar_any (2086784607921121803) -->
- <skip />
+ <string name="zen_mode_trigger_summary_divider_text" msgid="7461583466043698862">", "</string>
+ <string name="zen_mode_trigger_summary_range_symbol_combination" msgid="1804900738798069619">"<xliff:g id="START">%1$s</xliff:g> – <xliff:g id="END">%2$s</xliff:g>"</string>
+ <string name="zen_mode_trigger_event_calendar_any" msgid="2086784607921121803">"З усіх календарів"</string>
<string name="muted_by" msgid="91464083490094950">"<xliff:g id="THIRD_PARTY">%1$s</xliff:g> вимикає деякі звуки"</string>
<string name="system_error_wipe_data" msgid="5910572292172208493">"Через внутрішню помилку ваш пристрій може працювати нестабільно. Відновіть заводські налаштування."</string>
<string name="system_error_manufacturer" msgid="703545241070116315">"На пристрої сталася внутрішня помилка. Зв’яжіться з виробником пристрою, щоб дізнатися більше."</string>
@@ -2399,6 +2396,8 @@
<string name="profile_label_test" msgid="9168641926186071947">"Тестовий профіль"</string>
<string name="profile_label_communal" msgid="8743921499944800427">"Спільний профіль"</string>
<string name="redacted_notification_action_title" msgid="6942924973335920935"></string>
+ <!-- no translation found for screen_not_shared_sensitive_content (7058419185079565001) -->
+ <skip />
<string name="satellite_notification_title" msgid="4026338973463121526">"Автоматично підключено до супутника"</string>
<string name="satellite_notification_summary" msgid="5207364139430767162">"Ви можете надсилати й отримувати повідомлення, не використовуючи Wi-Fi або мобільну мережу"</string>
<string name="satellite_notification_open_message" msgid="4149234979688273729">"Відкрийте Повідомлення"</string>
diff --git a/core/res/res/values-ur/strings.xml b/core/res/res/values-ur/strings.xml
index 48c20f5..29bd5be 100644
--- a/core/res/res/values-ur/strings.xml
+++ b/core/res/res/values-ur/strings.xml
@@ -1929,12 +1929,9 @@
<string name="zen_mode_implicit_trigger_description" msgid="5714956693073007111">"<xliff:g id="APP_NAME">%1$s</xliff:g> کے زیر انتظام ہے"</string>
<string name="zen_mode_implicit_activated" msgid="2634285680776672994">"آن ہے"</string>
<string name="zen_mode_implicit_deactivated" msgid="8688441768371501750">"آف ہے"</string>
- <!-- no translation found for zen_mode_trigger_summary_divider_text (7461583466043698862) -->
- <skip />
- <!-- no translation found for zen_mode_trigger_summary_range_symbol_combination (1804900738798069619) -->
- <skip />
- <!-- no translation found for zen_mode_trigger_event_calendar_any (2086784607921121803) -->
- <skip />
+ <string name="zen_mode_trigger_summary_divider_text" msgid="7461583466043698862">"، "</string>
+ <string name="zen_mode_trigger_summary_range_symbol_combination" msgid="1804900738798069619">"<xliff:g id="START">%1$s</xliff:g> - <xliff:g id="END">%2$s</xliff:g>"</string>
+ <string name="zen_mode_trigger_event_calendar_any" msgid="2086784607921121803">"کوئی بھی کیلنڈر"</string>
<string name="muted_by" msgid="91464083490094950">"<xliff:g id="THIRD_PARTY">%1$s</xliff:g> کچھ آوازوں کو خاموش کر رہا ہے"</string>
<string name="system_error_wipe_data" msgid="5910572292172208493">"آپ کے آلہ میں ایک داخلی مسئلہ ہے اور جب تک آپ فیکٹری ڈیٹا کو دوبارہ ترتیب نہیں دے دیتے ہیں، ہوسکتا ہے کہ یہ غیر مستحکم رہے۔"</string>
<string name="system_error_manufacturer" msgid="703545241070116315">"آپ کے آلہ میں ایک داخلی مسئلہ ہے۔ تفصیلات کیلئے اپنے مینوفیکچرر سے رابطہ کریں۔"</string>
@@ -2397,6 +2394,8 @@
<string name="profile_label_test" msgid="9168641926186071947">"ٹیسٹ"</string>
<string name="profile_label_communal" msgid="8743921499944800427">"کمیونل"</string>
<string name="redacted_notification_action_title" msgid="6942924973335920935"></string>
+ <!-- no translation found for screen_not_shared_sensitive_content (7058419185079565001) -->
+ <skip />
<string name="satellite_notification_title" msgid="4026338973463121526">"سٹلائٹ سے خودکار طور پر منسلک ہے"</string>
<string name="satellite_notification_summary" msgid="5207364139430767162">"آپ موبائل یا Wi-Fi نیٹ ورک کے بغیر پیغامات بھیج اور موصول کر سکتے ہیں"</string>
<string name="satellite_notification_open_message" msgid="4149234979688273729">"پیغامات ایپ کو کھولیں"</string>
diff --git a/core/res/res/values-uz/strings.xml b/core/res/res/values-uz/strings.xml
index d7152b5..dddc3d6 100644
--- a/core/res/res/values-uz/strings.xml
+++ b/core/res/res/values-uz/strings.xml
@@ -1929,12 +1929,9 @@
<string name="zen_mode_implicit_trigger_description" msgid="5714956693073007111">"<xliff:g id="APP_NAME">%1$s</xliff:g> tomonidan boshqariladi"</string>
<string name="zen_mode_implicit_activated" msgid="2634285680776672994">"Yoniq"</string>
<string name="zen_mode_implicit_deactivated" msgid="8688441768371501750">"Oʻchiq"</string>
- <!-- no translation found for zen_mode_trigger_summary_divider_text (7461583466043698862) -->
- <skip />
- <!-- no translation found for zen_mode_trigger_summary_range_symbol_combination (1804900738798069619) -->
- <skip />
- <!-- no translation found for zen_mode_trigger_event_calendar_any (2086784607921121803) -->
- <skip />
+ <string name="zen_mode_trigger_summary_divider_text" msgid="7461583466043698862">", "</string>
+ <string name="zen_mode_trigger_summary_range_symbol_combination" msgid="1804900738798069619">"<xliff:g id="START">%1$s</xliff:g> – <xliff:g id="END">%2$s</xliff:g>"</string>
+ <string name="zen_mode_trigger_event_calendar_any" msgid="2086784607921121803">"Har qanday taqvim"</string>
<string name="muted_by" msgid="91464083490094950">"<xliff:g id="THIRD_PARTY">%1$s</xliff:g> ayrim tovushlarni ovozsiz qilgan"</string>
<string name="system_error_wipe_data" msgid="5910572292172208493">"Qurilmangiz bilan bog‘liq ichki muammo mavjud. U zavod sozlamalari tiklanmaguncha barqaror ishlamasligi mumkin."</string>
<string name="system_error_manufacturer" msgid="703545241070116315">"Qurilmangiz bilan bog‘liq ichki muammo mavjud. Tafsilotlar uchun qurilmangiz ishlab chiqaruvchisiga murojaat qiling."</string>
@@ -2397,6 +2394,8 @@
<string name="profile_label_test" msgid="9168641926186071947">"Test"</string>
<string name="profile_label_communal" msgid="8743921499944800427">"Umumiy"</string>
<string name="redacted_notification_action_title" msgid="6942924973335920935"></string>
+ <!-- no translation found for screen_not_shared_sensitive_content (7058419185079565001) -->
+ <skip />
<string name="satellite_notification_title" msgid="4026338973463121526">"Sputnikka avtomatik ulandi"</string>
<string name="satellite_notification_summary" msgid="5207364139430767162">"Mobil yoki Wi-Fi tarmoqsiz xabarlarni yuborishingiz va qabul qilishingiz mumkin"</string>
<string name="satellite_notification_open_message" msgid="4149234979688273729">"Xabarlar ilovasini ochish"</string>
diff --git a/core/res/res/values-vi/strings.xml b/core/res/res/values-vi/strings.xml
index 0d0ba4a..073a1a8 100644
--- a/core/res/res/values-vi/strings.xml
+++ b/core/res/res/values-vi/strings.xml
@@ -1929,12 +1929,9 @@
<string name="zen_mode_implicit_trigger_description" msgid="5714956693073007111">"Do <xliff:g id="APP_NAME">%1$s</xliff:g> quản lý"</string>
<string name="zen_mode_implicit_activated" msgid="2634285680776672994">"Bật"</string>
<string name="zen_mode_implicit_deactivated" msgid="8688441768371501750">"Tắt"</string>
- <!-- no translation found for zen_mode_trigger_summary_divider_text (7461583466043698862) -->
- <skip />
- <!-- no translation found for zen_mode_trigger_summary_range_symbol_combination (1804900738798069619) -->
- <skip />
- <!-- no translation found for zen_mode_trigger_event_calendar_any (2086784607921121803) -->
- <skip />
+ <string name="zen_mode_trigger_summary_divider_text" msgid="7461583466043698862">", "</string>
+ <string name="zen_mode_trigger_summary_range_symbol_combination" msgid="1804900738798069619">"<xliff:g id="START">%1$s</xliff:g> – <xliff:g id="END">%2$s</xliff:g>"</string>
+ <string name="zen_mode_trigger_event_calendar_any" msgid="2086784607921121803">"Bất kỳ lịch nào"</string>
<string name="muted_by" msgid="91464083490094950">"<xliff:g id="THIRD_PARTY">%1$s</xliff:g> đang tắt một số âm thanh"</string>
<string name="system_error_wipe_data" msgid="5910572292172208493">"Đã xảy ra sự cố nội bộ với thiết bị của bạn và thiết bị có thể sẽ không ổn định cho tới khi bạn thiết lập lại dữ liệu ban đầu."</string>
<string name="system_error_manufacturer" msgid="703545241070116315">"Đã xảy ra sự cố nội bộ với thiết bị. Hãy liên hệ với nhà sản xuất của bạn để biết chi tiết."</string>
@@ -2397,6 +2394,8 @@
<string name="profile_label_test" msgid="9168641926186071947">"Kiểm thử"</string>
<string name="profile_label_communal" msgid="8743921499944800427">"Dùng chung"</string>
<string name="redacted_notification_action_title" msgid="6942924973335920935"></string>
+ <!-- no translation found for screen_not_shared_sensitive_content (7058419185079565001) -->
+ <skip />
<string name="satellite_notification_title" msgid="4026338973463121526">"Đã tự động kết nối với vệ tinh"</string>
<string name="satellite_notification_summary" msgid="5207364139430767162">"Bạn có thể gửi và nhận tin nhắn mà không cần có mạng di động hoặc mạng Wi-Fi"</string>
<string name="satellite_notification_open_message" msgid="4149234979688273729">"Mở ứng dụng Tin nhắn"</string>
diff --git a/core/res/res/values-zh-rCN/strings.xml b/core/res/res/values-zh-rCN/strings.xml
index 958e465..ff2d4fc 100644
--- a/core/res/res/values-zh-rCN/strings.xml
+++ b/core/res/res/values-zh-rCN/strings.xml
@@ -1929,12 +1929,9 @@
<string name="zen_mode_implicit_trigger_description" msgid="5714956693073007111">"由<xliff:g id="APP_NAME">%1$s</xliff:g>管理"</string>
<string name="zen_mode_implicit_activated" msgid="2634285680776672994">"已启用"</string>
<string name="zen_mode_implicit_deactivated" msgid="8688441768371501750">"已停用"</string>
- <!-- no translation found for zen_mode_trigger_summary_divider_text (7461583466043698862) -->
- <skip />
- <!-- no translation found for zen_mode_trigger_summary_range_symbol_combination (1804900738798069619) -->
- <skip />
- <!-- no translation found for zen_mode_trigger_event_calendar_any (2086784607921121803) -->
- <skip />
+ <string name="zen_mode_trigger_summary_divider_text" msgid="7461583466043698862">"、 "</string>
+ <string name="zen_mode_trigger_summary_range_symbol_combination" msgid="1804900738798069619">"<xliff:g id="START">%1$s</xliff:g> - <xliff:g id="END">%2$s</xliff:g>"</string>
+ <string name="zen_mode_trigger_event_calendar_any" msgid="2086784607921121803">"所有日历"</string>
<string name="muted_by" msgid="91464083490094950">"<xliff:g id="THIRD_PARTY">%1$s</xliff:g>正在将某些音效设为静音"</string>
<string name="system_error_wipe_data" msgid="5910572292172208493">"您的设备内部出现了问题。如果不将设备恢复出厂设置,设备运行可能会不稳定。"</string>
<string name="system_error_manufacturer" msgid="703545241070116315">"您的设备内部出现了问题。请联系您的设备制造商了解详情。"</string>
@@ -2397,6 +2394,8 @@
<string name="profile_label_test" msgid="9168641926186071947">"测试"</string>
<string name="profile_label_communal" msgid="8743921499944800427">"共用"</string>
<string name="redacted_notification_action_title" msgid="6942924973335920935"></string>
+ <!-- no translation found for screen_not_shared_sensitive_content (7058419185079565001) -->
+ <skip />
<string name="satellite_notification_title" msgid="4026338973463121526">"自动连接到卫星"</string>
<string name="satellite_notification_summary" msgid="5207364139430767162">"您无需使用移动网络或 WLAN 网络便能收发消息"</string>
<string name="satellite_notification_open_message" msgid="4149234979688273729">"打开“信息”应用"</string>
diff --git a/core/res/res/values-zh-rHK/strings.xml b/core/res/res/values-zh-rHK/strings.xml
index df49fd6..6f560bb 100644
--- a/core/res/res/values-zh-rHK/strings.xml
+++ b/core/res/res/values-zh-rHK/strings.xml
@@ -1929,12 +1929,9 @@
<string name="zen_mode_implicit_trigger_description" msgid="5714956693073007111">"由<xliff:g id="APP_NAME">%1$s</xliff:g>管理"</string>
<string name="zen_mode_implicit_activated" msgid="2634285680776672994">"已開啟"</string>
<string name="zen_mode_implicit_deactivated" msgid="8688441768371501750">"已關閉"</string>
- <!-- no translation found for zen_mode_trigger_summary_divider_text (7461583466043698862) -->
- <skip />
- <!-- no translation found for zen_mode_trigger_summary_range_symbol_combination (1804900738798069619) -->
- <skip />
- <!-- no translation found for zen_mode_trigger_event_calendar_any (2086784607921121803) -->
- <skip />
+ <string name="zen_mode_trigger_summary_divider_text" msgid="7461583466043698862">"、 "</string>
+ <string name="zen_mode_trigger_summary_range_symbol_combination" msgid="1804900738798069619">"<xliff:g id="START">%1$s</xliff:g> - <xliff:g id="END">%2$s</xliff:g>"</string>
+ <string name="zen_mode_trigger_event_calendar_any" msgid="2086784607921121803">"任何日曆"</string>
<string name="muted_by" msgid="91464083490094950">"<xliff:g id="THIRD_PARTY">%1$s</xliff:g>正將某些音效設為靜音"</string>
<string name="system_error_wipe_data" msgid="5910572292172208493">"你裝置的系統發生問題,回復原廠設定後即可解決該問題。"</string>
<string name="system_error_manufacturer" msgid="703545241070116315">"你裝置的系統發生問題,請聯絡你的製造商瞭解詳情。"</string>
@@ -2397,6 +2394,8 @@
<string name="profile_label_test" msgid="9168641926186071947">"測試"</string>
<string name="profile_label_communal" msgid="8743921499944800427">"共用"</string>
<string name="redacted_notification_action_title" msgid="6942924973335920935"></string>
+ <!-- no translation found for screen_not_shared_sensitive_content (7058419185079565001) -->
+ <skip />
<string name="satellite_notification_title" msgid="4026338973463121526">"已自動連線至衛星"</string>
<string name="satellite_notification_summary" msgid="5207364139430767162">"你可在沒有流動/Wi-Fi 網絡的情況下收發訊息"</string>
<string name="satellite_notification_open_message" msgid="4149234979688273729">"開啟「訊息」"</string>
diff --git a/core/res/res/values-zh-rTW/strings.xml b/core/res/res/values-zh-rTW/strings.xml
index cc99d91..8b2d534 100644
--- a/core/res/res/values-zh-rTW/strings.xml
+++ b/core/res/res/values-zh-rTW/strings.xml
@@ -1929,12 +1929,9 @@
<string name="zen_mode_implicit_trigger_description" msgid="5714956693073007111">"由「<xliff:g id="APP_NAME">%1$s</xliff:g>」管理"</string>
<string name="zen_mode_implicit_activated" msgid="2634285680776672994">"已啟用"</string>
<string name="zen_mode_implicit_deactivated" msgid="8688441768371501750">"已停用"</string>
- <!-- no translation found for zen_mode_trigger_summary_divider_text (7461583466043698862) -->
- <skip />
- <!-- no translation found for zen_mode_trigger_summary_range_symbol_combination (1804900738798069619) -->
- <skip />
- <!-- no translation found for zen_mode_trigger_event_calendar_any (2086784607921121803) -->
- <skip />
+ <string name="zen_mode_trigger_summary_divider_text" msgid="7461583466043698862">"、 "</string>
+ <string name="zen_mode_trigger_summary_range_symbol_combination" msgid="1804900738798069619">"<xliff:g id="START">%1$s</xliff:g> - <xliff:g id="END">%2$s</xliff:g>"</string>
+ <string name="zen_mode_trigger_event_calendar_any" msgid="2086784607921121803">"任何日曆"</string>
<string name="muted_by" msgid="91464083490094950">"「<xliff:g id="THIRD_PARTY">%1$s</xliff:g>」正在關閉部分音效"</string>
<string name="system_error_wipe_data" msgid="5910572292172208493">"你的裝置發生內部問題,必須將裝置恢復原廠設定才能解除不穩定狀態。"</string>
<string name="system_error_manufacturer" msgid="703545241070116315">"你的裝置發生內部問題,詳情請洽裝置製造商。"</string>
@@ -2397,6 +2394,8 @@
<string name="profile_label_test" msgid="9168641926186071947">"測試"</string>
<string name="profile_label_communal" msgid="8743921499944800427">"通用"</string>
<string name="redacted_notification_action_title" msgid="6942924973335920935"></string>
+ <!-- no translation found for screen_not_shared_sensitive_content (7058419185079565001) -->
+ <skip />
<string name="satellite_notification_title" msgid="4026338973463121526">"已自動連上衛星"</string>
<string name="satellite_notification_summary" msgid="5207364139430767162">"你可以收發訊息,沒有行動/Wi-Fi 網路也無妨"</string>
<string name="satellite_notification_open_message" msgid="4149234979688273729">"開啟「訊息」應用程式"</string>
diff --git a/core/res/res/values-zu/strings.xml b/core/res/res/values-zu/strings.xml
index 3de2684..922172c 100644
--- a/core/res/res/values-zu/strings.xml
+++ b/core/res/res/values-zu/strings.xml
@@ -1929,12 +1929,9 @@
<string name="zen_mode_implicit_trigger_description" msgid="5714956693073007111">"Iphethwe yi-<xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
<string name="zen_mode_implicit_activated" msgid="2634285680776672994">"Kuvuliwe"</string>
<string name="zen_mode_implicit_deactivated" msgid="8688441768371501750">"Kuvaliwe"</string>
- <!-- no translation found for zen_mode_trigger_summary_divider_text (7461583466043698862) -->
- <skip />
- <!-- no translation found for zen_mode_trigger_summary_range_symbol_combination (1804900738798069619) -->
- <skip />
- <!-- no translation found for zen_mode_trigger_event_calendar_any (2086784607921121803) -->
- <skip />
+ <string name="zen_mode_trigger_summary_divider_text" msgid="7461583466043698862">", "</string>
+ <string name="zen_mode_trigger_summary_range_symbol_combination" msgid="1804900738798069619">"<xliff:g id="START">%1$s</xliff:g>, <xliff:g id="END">%2$s</xliff:g>"</string>
+ <string name="zen_mode_trigger_event_calendar_any" msgid="2086784607921121803">"Noma iyiphi ikhalenda"</string>
<string name="muted_by" msgid="91464083490094950">"<xliff:g id="THIRD_PARTY">%1$s</xliff:g> ithulisa eminye imisindo"</string>
<string name="system_error_wipe_data" msgid="5910572292172208493">"Kukhona inkinga yangaphakathi ngedivayisi yakho, futhi ingase ibe engazinzile kuze kube yilapho usetha kabusha yonke idatha."</string>
<string name="system_error_manufacturer" msgid="703545241070116315">"Kukhona inkinga yangaphakathi ngedivayisi yakho. Xhumana nomkhiqizi wakho ukuze uthole imininingwane."</string>
@@ -2397,6 +2394,8 @@
<string name="profile_label_test" msgid="9168641926186071947">"Hlola"</string>
<string name="profile_label_communal" msgid="8743921499944800427">"Okomphakathi"</string>
<string name="redacted_notification_action_title" msgid="6942924973335920935"></string>
+ <!-- no translation found for screen_not_shared_sensitive_content (7058419185079565001) -->
+ <skip />
<string name="satellite_notification_title" msgid="4026338973463121526">"Ixhumeke ngokuzenzakalelayo kusathelayithi"</string>
<string name="satellite_notification_summary" msgid="5207364139430767162">"Ungathumela futhi wamukele imilayezo ngaphandle kwenethiwekhi yeselula noma ye-Wi-Fi"</string>
<string name="satellite_notification_open_message" msgid="4149234979688273729">"Vula Imilayezo"</string>
diff --git a/core/res/res/values/config.xml b/core/res/res/values/config.xml
index d2f74b2..d4db244 100644
--- a/core/res/res/values/config.xml
+++ b/core/res/res/values/config.xml
@@ -3351,6 +3351,11 @@
com.android.systemui/com.android.systemui.tv.hdmi.HdmiCecSetMenuLanguageActivity
</string>
+ <!-- Component name of the activity used to inform user that their device lost Active Source
+ status and will go to standby if there is no interaction. -->
+ <string name="config_hdmiCecActiveSourceLostActivity"
+ >com.android.systemui/com.android.systemui.tv.hdmi.HdmiCecActiveSourceLostActivity</string>
+
<!-- Name of the dialog that is used to request the user's consent for a Platform VPN -->
<string name="config_platformVpnConfirmDialogComponent" translatable="false"
>com.android.vpndialogs/com.android.vpndialogs.PlatformVpnConfirmDialog</string>
@@ -4807,6 +4812,18 @@
See android.credentials.CredentialManager
-->
<string name="config_defaultCredentialManagerHybridService" translatable="false"></string>
+
+ <!-- The component name, flattened to a string, for the system's credential manager
+ autofill service. This service allows interceding autofill requests and routing
+ them to credential manager.
+
+ This service must be trusted, as it can be activated without explicit consent of the user.
+ If no service with the specified name exists on the device, autofill will still
+ work with the user configured autofill service
+
+ See android.credentials.CredentialManager
+ -->
+ <string name="config_defaultCredentialManagerAutofillService" translatable="false"></string>
<!-- The component name(s), flattened to a string, for the system's credential manager
provider services. These services allow retrieving and storing credentials.
diff --git a/core/res/res/values/symbols.xml b/core/res/res/values/symbols.xml
index 08f377b..f33e277 100644
--- a/core/res/res/values/symbols.xml
+++ b/core/res/res/values/symbols.xml
@@ -390,6 +390,7 @@
<java-symbol type="string" name="config_sensorUseStartedActivity_hwToggle" />
<java-symbol type="string" name="config_sensorStateChangedActivity" />
<java-symbol type="string" name="config_hdmiCecSetMenuLanguageActivity" />
+ <java-symbol type="string" name="config_hdmiCecActiveSourceLostActivity" />
<java-symbol type="integer" name="config_minNumVisibleRecentTasks_lowRam" />
<java-symbol type="integer" name="config_maxNumVisibleRecentTasks_lowRam" />
<java-symbol type="integer" name="config_minNumVisibleRecentTasks" />
@@ -3905,6 +3906,7 @@
<java-symbol type="string" name="config_defaultAppPredictionService" />
<java-symbol type="string" name="config_defaultContentSuggestionsService" />
<java-symbol type="string" name="config_defaultCredentialManagerHybridService" />
+ <java-symbol type="string" name="config_defaultCredentialManagerAutofillService" />
<java-symbol type="array" name="config_enabledCredentialProviderService" />
<java-symbol type="array" name="config_primaryCredentialProviderService" />
<java-symbol type="string" name="config_defaultSearchUiService" />
diff --git a/core/tests/coretests/src/android/app/NotificationChannelTest.java b/core/tests/coretests/src/android/app/NotificationChannelTest.java
index 18209b5..504f98f 100644
--- a/core/tests/coretests/src/android/app/NotificationChannelTest.java
+++ b/core/tests/coretests/src/android/app/NotificationChannelTest.java
@@ -31,6 +31,7 @@
import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.when;
+import android.annotation.FlaggedApi;
import android.content.AttributionSource;
import android.content.ContentProvider;
import android.content.ContentResolver;
@@ -46,6 +47,7 @@
import android.os.RemoteCallback;
import android.os.RemoteException;
import android.os.VibrationEffect;
+import android.platform.test.annotations.EnableFlags;
import android.platform.test.annotations.Presubmit;
import android.platform.test.flag.junit.SetFlagsRule;
import android.provider.MediaStore.Audio.AudioColumns;
@@ -577,6 +579,40 @@
assertNull(channel.getVibrationEffect());
}
+ @Test
+ @EnableFlags({Flags.FLAG_RESTRICT_AUDIO_ATTRIBUTES_MEDIA,
+ Flags.FLAG_RESTRICT_AUDIO_ATTRIBUTES_CALL, Flags.FLAG_RESTRICT_AUDIO_ATTRIBUTES_ALARM})
+ public void testCopy() {
+ NotificationChannel original = new NotificationChannel("id", "name", 2);
+ original.setDescription("desc");
+ original.setBypassDnd(true);
+ original.setLockscreenVisibility(7);
+ original.setSound(Uri.EMPTY, new AudioAttributes.Builder().build());
+ original.setLightColor(5);
+ original.enableLights(false);
+ original.setVibrationPattern(new long[] {1, 9, 3});
+ if (Flags.notificationChannelVibrationEffectApi()) {
+ original.setVibrationEffect(VibrationEffect.createOneShot(100, 5));
+ }
+ original.lockFields(9999);
+ original.setUserVisibleTaskShown(true);
+ original.enableVibration(false);
+ original.setShowBadge(true);
+ original.setDeleted(false);
+ original.setGroup("group");
+ original.setBlockable(false);
+ original.setAllowBubbles(true);
+ original.setOriginalImportance(6);
+ original.setConversationId("parent", "convo");
+ original.setDemoted(false);
+ original.setImportantConversation(true);
+ original.setDeletedTimeMs(100);
+ original.setImportanceLockedByCriticalDeviceFunction(false);
+
+ NotificationChannel parcelCopy = writeToAndReadFromParcel(original);
+ assertThat(original.copy()).isEqualTo(parcelCopy);
+ }
+
/** Backs up a given channel to an XML, and returns the channel read from the XML. */
private NotificationChannel backUpAndRestore(NotificationChannel channel) throws Exception {
TypedXmlSerializer serializer = Xml.newFastSerializer();
diff --git a/core/tests/coretests/src/android/view/ViewFrameRateTest.java b/core/tests/coretests/src/android/view/ViewFrameRateTest.java
index 3e172c1..dcfbf64 100644
--- a/core/tests/coretests/src/android/view/ViewFrameRateTest.java
+++ b/core/tests/coretests/src/android/view/ViewFrameRateTest.java
@@ -21,6 +21,7 @@
import static android.view.Surface.FRAME_RATE_CATEGORY_NORMAL;
import static android.view.Surface.FRAME_RATE_COMPATIBILITY_GTE;
import static android.view.flags.Flags.FLAG_TOOLKIT_FRAME_RATE_VELOCITY_MAPPING_READ_ONLY;
+import static android.view.flags.Flags.FLAG_TOOLKIT_FRAME_RATE_VIEW_ENABLING_READ_ONLY;
import static android.view.flags.Flags.FLAG_TOOLKIT_SET_FRAME_RATE_READ_ONLY;
import static android.view.flags.Flags.FLAG_VIEW_VELOCITY_API;
import static android.view.flags.Flags.toolkitFrameRateBySizeReadOnly;
@@ -35,6 +36,8 @@
import android.app.Activity;
import android.os.SystemClock;
import android.platform.test.annotations.RequiresFlagsEnabled;
+import android.platform.test.flag.junit.CheckFlagsRule;
+import android.platform.test.flag.junit.DeviceFlagsValueProvider;
import android.util.DisplayMetrics;
import androidx.test.annotation.UiThreadTest;
@@ -60,6 +63,9 @@
public ActivityTestRule<ViewCaptureTestActivity> mActivityRule = new ActivityTestRule<>(
ViewCaptureTestActivity.class);
+ @Rule
+ public final CheckFlagsRule mCheckFlagsRule = DeviceFlagsValueProvider.createCheckFlagsRule();
+
private Activity mActivity;
private View mMovingView;
private ViewRootImpl mViewRoot;
@@ -80,7 +86,8 @@
@UiThreadTest
@Test
- @RequiresFlagsEnabled(FLAG_VIEW_VELOCITY_API)
+ @RequiresFlagsEnabled({FLAG_VIEW_VELOCITY_API,
+ FLAG_TOOLKIT_FRAME_RATE_VIEW_ENABLING_READ_ONLY})
public void frameRateChangesWhenContentMoves() {
mMovingView.offsetLeftAndRight(100);
float frameRate = mViewRoot.getPreferredFrameRate();
@@ -121,7 +128,8 @@
@Test
@RequiresFlagsEnabled({FLAG_VIEW_VELOCITY_API,
- FLAG_TOOLKIT_FRAME_RATE_VELOCITY_MAPPING_READ_ONLY})
+ FLAG_TOOLKIT_FRAME_RATE_VELOCITY_MAPPING_READ_ONLY,
+ FLAG_TOOLKIT_FRAME_RATE_VIEW_ENABLING_READ_ONLY})
public void lowVelocity60() throws Throwable {
mActivityRule.runOnUiThread(() -> {
ViewGroup.LayoutParams layoutParams = mMovingView.getLayoutParams();
@@ -140,7 +148,8 @@
@Test
@RequiresFlagsEnabled({FLAG_VIEW_VELOCITY_API,
- FLAG_TOOLKIT_FRAME_RATE_VELOCITY_MAPPING_READ_ONLY})
+ FLAG_TOOLKIT_FRAME_RATE_VELOCITY_MAPPING_READ_ONLY,
+ FLAG_TOOLKIT_FRAME_RATE_VIEW_ENABLING_READ_ONLY})
public void highVelocity140() throws Throwable {
mActivityRule.runOnUiThread(() -> {
ViewGroup.LayoutParams layoutParams = mMovingView.getLayoutParams();
@@ -172,7 +181,8 @@
}
@Test
- @RequiresFlagsEnabled(FLAG_TOOLKIT_SET_FRAME_RATE_READ_ONLY)
+ @RequiresFlagsEnabled({FLAG_TOOLKIT_SET_FRAME_RATE_READ_ONLY,
+ FLAG_TOOLKIT_FRAME_RATE_VIEW_ENABLING_READ_ONLY})
public void noVelocityUsesCategorySmall() throws Throwable {
final CountDownLatch drawLatch1 = new CountDownLatch(1);
mActivityRule.runOnUiThread(() -> {
@@ -206,7 +216,8 @@
}
@Test
- @RequiresFlagsEnabled(FLAG_TOOLKIT_SET_FRAME_RATE_READ_ONLY)
+ @RequiresFlagsEnabled({FLAG_TOOLKIT_SET_FRAME_RATE_READ_ONLY,
+ FLAG_TOOLKIT_FRAME_RATE_VIEW_ENABLING_READ_ONLY})
public void noVelocityUsesCategoryNarrowWidth() throws Throwable {
final CountDownLatch drawLatch1 = new CountDownLatch(1);
mActivityRule.runOnUiThread(() -> {
@@ -239,7 +250,8 @@
}
@Test
- @RequiresFlagsEnabled(FLAG_TOOLKIT_SET_FRAME_RATE_READ_ONLY)
+ @RequiresFlagsEnabled({FLAG_TOOLKIT_SET_FRAME_RATE_READ_ONLY,
+ FLAG_TOOLKIT_FRAME_RATE_VIEW_ENABLING_READ_ONLY})
public void noVelocityUsesCategoryNarrowHeight() throws Throwable {
final CountDownLatch drawLatch1 = new CountDownLatch(1);
mActivityRule.runOnUiThread(() -> {
@@ -272,7 +284,8 @@
}
@Test
- @RequiresFlagsEnabled(FLAG_TOOLKIT_SET_FRAME_RATE_READ_ONLY)
+ @RequiresFlagsEnabled({FLAG_TOOLKIT_SET_FRAME_RATE_READ_ONLY,
+ FLAG_TOOLKIT_FRAME_RATE_VIEW_ENABLING_READ_ONLY})
public void noVelocityUsesCategoryLargeWidth() throws Throwable {
final CountDownLatch drawLatch1 = new CountDownLatch(1);
mActivityRule.runOnUiThread(() -> {
@@ -305,7 +318,8 @@
}
@Test
- @RequiresFlagsEnabled(FLAG_TOOLKIT_SET_FRAME_RATE_READ_ONLY)
+ @RequiresFlagsEnabled({FLAG_TOOLKIT_SET_FRAME_RATE_READ_ONLY,
+ FLAG_TOOLKIT_FRAME_RATE_VIEW_ENABLING_READ_ONLY})
public void noVelocityUsesCategoryLargeHeight() throws Throwable {
final CountDownLatch drawLatch1 = new CountDownLatch(1);
mActivityRule.runOnUiThread(() -> {
@@ -338,7 +352,8 @@
}
@Test
- @RequiresFlagsEnabled(FLAG_TOOLKIT_SET_FRAME_RATE_READ_ONLY)
+ @RequiresFlagsEnabled({FLAG_TOOLKIT_SET_FRAME_RATE_READ_ONLY,
+ FLAG_TOOLKIT_FRAME_RATE_VIEW_ENABLING_READ_ONLY})
public void defaultNormal() throws Throwable {
mActivityRule.runOnUiThread(() -> {
View parent = (View) mMovingView.getParent();
diff --git a/core/tests/coretests/src/android/view/ViewRootImplTest.java b/core/tests/coretests/src/android/view/ViewRootImplTest.java
index 6f107a9..a86e568 100644
--- a/core/tests/coretests/src/android/view/ViewRootImplTest.java
+++ b/core/tests/coretests/src/android/view/ViewRootImplTest.java
@@ -20,6 +20,7 @@
import static android.view.flags.Flags.FLAG_TOOLKIT_SET_FRAME_RATE_READ_ONLY;
import static android.view.flags.Flags.FLAG_TOOLKIT_FRAME_RATE_BY_SIZE_READ_ONLY;
import static android.view.flags.Flags.FLAG_TOOLKIT_FRAME_RATE_FUNCTION_ENABLING_READ_ONLY;
+import static android.view.flags.Flags.FLAG_TOOLKIT_FRAME_RATE_VIEW_ENABLING_READ_ONLY;
import static android.view.flags.Flags.FLAG_VIEW_VELOCITY_API;
import static android.view.Surface.FRAME_RATE_CATEGORY_HIGH;
import static android.view.Surface.FRAME_RATE_CATEGORY_HIGH_HINT;
@@ -578,7 +579,8 @@
*/
@Test
@RequiresFlagsEnabled({FLAG_TOOLKIT_SET_FRAME_RATE_READ_ONLY,
- FLAG_TOOLKIT_FRAME_RATE_FUNCTION_ENABLING_READ_ONLY})
+ FLAG_TOOLKIT_FRAME_RATE_FUNCTION_ENABLING_READ_ONLY,
+ FLAG_TOOLKIT_FRAME_RATE_VIEW_ENABLING_READ_ONLY})
public void votePreferredFrameRate_voteFrameRateCategory_visibility_defaultHigh() {
View view = new View(sContext);
attachViewToWindow(view);
@@ -612,7 +614,8 @@
*/
@Test
@RequiresFlagsEnabled({FLAG_TOOLKIT_SET_FRAME_RATE_READ_ONLY,
- FLAG_TOOLKIT_FRAME_RATE_FUNCTION_ENABLING_READ_ONLY})
+ FLAG_TOOLKIT_FRAME_RATE_FUNCTION_ENABLING_READ_ONLY,
+ FLAG_TOOLKIT_FRAME_RATE_VIEW_ENABLING_READ_ONLY})
public void votePreferredFrameRate_voteFrameRateCategory_smallSize_defaultHigh() {
View view = new View(sContext);
WindowManager.LayoutParams wmlp = new WindowManager.LayoutParams(TYPE_APPLICATION_OVERLAY);
@@ -640,7 +643,8 @@
*/
@Test
@RequiresFlagsEnabled({FLAG_TOOLKIT_SET_FRAME_RATE_READ_ONLY,
- FLAG_TOOLKIT_FRAME_RATE_FUNCTION_ENABLING_READ_ONLY})
+ FLAG_TOOLKIT_FRAME_RATE_FUNCTION_ENABLING_READ_ONLY,
+ FLAG_TOOLKIT_FRAME_RATE_VIEW_ENABLING_READ_ONLY})
public void votePreferredFrameRate_voteFrameRateCategory_normalSize_defaultHigh() {
View view = new View(sContext);
WindowManager.LayoutParams wmlp = new WindowManager.LayoutParams(TYPE_APPLICATION_OVERLAY);
@@ -777,7 +781,8 @@
*/
@Test
@RequiresFlagsEnabled({FLAG_TOOLKIT_SET_FRAME_RATE_READ_ONLY,
- FLAG_TOOLKIT_FRAME_RATE_FUNCTION_ENABLING_READ_ONLY})
+ FLAG_TOOLKIT_FRAME_RATE_FUNCTION_ENABLING_READ_ONLY,
+ FLAG_TOOLKIT_FRAME_RATE_VIEW_ENABLING_READ_ONLY})
public void votePreferredFrameRate_voteFrameRate_category() {
View view = new View(sContext);
attachViewToWindow(view);
@@ -817,7 +822,9 @@
*/
@Test
@RequiresFlagsEnabled({FLAG_TOOLKIT_SET_FRAME_RATE_READ_ONLY,
- FLAG_VIEW_VELOCITY_API, FLAG_TOOLKIT_FRAME_RATE_FUNCTION_ENABLING_READ_ONLY})
+ FLAG_VIEW_VELOCITY_API,
+ FLAG_TOOLKIT_FRAME_RATE_FUNCTION_ENABLING_READ_ONLY,
+ FLAG_TOOLKIT_FRAME_RATE_VIEW_ENABLING_READ_ONLY})
public void votePreferredFrameRate_voteFrameRateCategory_velocityToHigh() {
View view = new View(sContext);
WindowManager.LayoutParams wmlp = new WindowManager.LayoutParams(TYPE_APPLICATION_OVERLAY);
@@ -957,7 +964,8 @@
*/
@Test
@RequiresFlagsEnabled({FLAG_TOOLKIT_SET_FRAME_RATE_READ_ONLY,
- FLAG_TOOLKIT_FRAME_RATE_FUNCTION_ENABLING_READ_ONLY})
+ FLAG_TOOLKIT_FRAME_RATE_FUNCTION_ENABLING_READ_ONLY,
+ FLAG_TOOLKIT_FRAME_RATE_VIEW_ENABLING_READ_ONLY})
public void votePreferredFrameRate_voteFrameRateOnly() {
View view = new View(sContext);
float frameRate = 20;
@@ -1000,7 +1008,8 @@
*/
@Test
@RequiresFlagsEnabled({FLAG_TOOLKIT_SET_FRAME_RATE_READ_ONLY,
- FLAG_TOOLKIT_FRAME_RATE_FUNCTION_ENABLING_READ_ONLY})
+ FLAG_TOOLKIT_FRAME_RATE_FUNCTION_ENABLING_READ_ONLY,
+ FLAG_TOOLKIT_FRAME_RATE_VIEW_ENABLING_READ_ONLY})
public void votePreferredFrameRate_infrequentLayer_defaultHigh() throws InterruptedException {
final long delay = 200L;
@@ -1102,7 +1111,8 @@
*/
@Test
@RequiresFlagsEnabled({FLAG_TOOLKIT_SET_FRAME_RATE_READ_ONLY,
- FLAG_TOOLKIT_FRAME_RATE_FUNCTION_ENABLING_READ_ONLY})
+ FLAG_TOOLKIT_FRAME_RATE_FUNCTION_ENABLING_READ_ONLY,
+ FLAG_TOOLKIT_FRAME_RATE_VIEW_ENABLING_READ_ONLY})
public void votePreferredFrameRate_applyTextureViewHeuristic() throws InterruptedException {
final long delay = 30L;
diff --git a/data/etc/com.android.settings.xml b/data/etc/com.android.settings.xml
index 6bdd291..cd68503 100644
--- a/data/etc/com.android.settings.xml
+++ b/data/etc/com.android.settings.xml
@@ -67,5 +67,6 @@
<permission name="android.permission.READ_SAFETY_CENTER_STATUS" />
<permission name="android.permission.SEND_SAFETY_CENTER_UPDATE" />
<permission name="android.permission.LIST_ENABLED_CREDENTIAL_PROVIDERS" />
+ <permission name="android.permission.SATELLITE_COMMUNICATION" />
</privapp-permissions>
</permissions>
diff --git a/libs/WindowManager/Shell/res/color/desktop_mode_maximize_menu_button_color_selector.xml b/libs/WindowManager/Shell/res/color/desktop_mode_maximize_menu_button_color_selector.xml
index 65f5239..640d184 100644
--- a/libs/WindowManager/Shell/res/color/desktop_mode_maximize_menu_button_color_selector.xml
+++ b/libs/WindowManager/Shell/res/color/desktop_mode_maximize_menu_button_color_selector.xml
@@ -14,15 +14,13 @@
~ See the License for the specific language governing permissions and
~ limitations under the License
-->
-
-<selector xmlns:android="http://schemas.android.com/apk/res/android">
+<selector xmlns:android="http://schemas.android.com/apk/res/android"
+ xmlns:androidprv="http://schemas.android.com/apk/prv/res/android">
<item android:state_pressed="true"
- android:color="@color/desktop_mode_maximize_menu_button_on_hover"/>
- <item android:state_hovered="true"
- android:color="@color/desktop_mode_maximize_menu_button_on_hover"/>
+ android:color="?androidprv:attr/colorAccentPrimary"/>
<item android:state_focused="true"
- android:color="@color/desktop_mode_maximize_menu_button_on_hover"/>
+ android:color="?androidprv:attr/colorAccentPrimary"/>
<item android:state_selected="true"
- android:color="@color/desktop_mode_maximize_menu_button_on_hover"/>
- <item android:color="@color/desktop_mode_maximize_menu_button"/>
+ android:color="?androidprv:attr/colorAccentPrimary"/>
+ <item android:color="?androidprv:attr/materialColorOutlineVariant"/>
</selector>
\ No newline at end of file
diff --git a/libs/WindowManager/Shell/res/color/desktop_mode_maximize_menu_button_outline_color_selector.xml b/libs/WindowManager/Shell/res/color/desktop_mode_maximize_menu_button_outline_color_selector.xml
deleted file mode 100644
index 86679af..0000000
--- a/libs/WindowManager/Shell/res/color/desktop_mode_maximize_menu_button_outline_color_selector.xml
+++ /dev/null
@@ -1,28 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!--
- ~ 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
--->
-
-<selector xmlns:android="http://schemas.android.com/apk/res/android">
- <item android:state_pressed="true"
- android:color="@color/desktop_mode_maximize_menu_button_outline_on_hover"/>
- <item android:state_hovered="true"
- android:color="@color/desktop_mode_maximize_menu_button_outline_on_hover"/>
- <item android:state_focused="true"
- android:color="@color/desktop_mode_maximize_menu_button_outline_on_hover"/>
- <item android:state_selected="true"
- android:color="@color/desktop_mode_maximize_menu_button_outline_on_hover"/>
- <item android:color="@color/desktop_mode_maximize_menu_button_outline"/>
-</selector>
\ No newline at end of file
diff --git a/libs/WindowManager/Shell/res/drawable/desktop_mode_maximize_menu_maximize_button_background.xml b/libs/WindowManager/Shell/res/drawable/desktop_mode_maximize_menu_button_background.xml
similarity index 86%
rename from libs/WindowManager/Shell/res/drawable/desktop_mode_maximize_menu_maximize_button_background.xml
rename to libs/WindowManager/Shell/res/drawable/desktop_mode_maximize_menu_button_background.xml
index bfb0dd7..ed51498 100644
--- a/libs/WindowManager/Shell/res/drawable/desktop_mode_maximize_menu_maximize_button_background.xml
+++ b/libs/WindowManager/Shell/res/drawable/desktop_mode_maximize_menu_button_background.xml
@@ -19,6 +19,5 @@
android:shape="rectangle">
<solid android:color="@color/desktop_mode_maximize_menu_button_color_selector"/>
<corners
- android:radius="@dimen/desktop_mode_maximize_menu_buttons_large_corner_radius"/>
- <stroke android:width="1dp" android:color="@color/desktop_mode_maximize_menu_button_outline_color_selector"/>
+ android:radius="@dimen/desktop_mode_maximize_menu_buttons_radius"/>
</shape>
\ No newline at end of file
diff --git a/libs/WindowManager/Shell/res/drawable/desktop_mode_maximize_menu_maximize_button_background.xml b/libs/WindowManager/Shell/res/drawable/desktop_mode_maximize_menu_layout_background.xml
similarity index 79%
copy from libs/WindowManager/Shell/res/drawable/desktop_mode_maximize_menu_maximize_button_background.xml
copy to libs/WindowManager/Shell/res/drawable/desktop_mode_maximize_menu_layout_background.xml
index bfb0dd7..04ad572 100644
--- a/libs/WindowManager/Shell/res/drawable/desktop_mode_maximize_menu_maximize_button_background.xml
+++ b/libs/WindowManager/Shell/res/drawable/desktop_mode_maximize_menu_layout_background.xml
@@ -16,9 +16,9 @@
-->
<shape xmlns:android="http://schemas.android.com/apk/res/android"
+ xmlns:androidprv="http://schemas.android.com/apk/prv/res/android"
android:shape="rectangle">
- <solid android:color="@color/desktop_mode_maximize_menu_button_color_selector"/>
<corners
- android:radius="@dimen/desktop_mode_maximize_menu_buttons_large_corner_radius"/>
- <stroke android:width="1dp" android:color="@color/desktop_mode_maximize_menu_button_outline_color_selector"/>
+ android:radius="@dimen/desktop_mode_maximize_menu_buttons_outline_radius"/>
+ <stroke android:width="1dp" android:color="?androidprv:attr/materialColorOutlineVariant"/>
</shape>
\ No newline at end of file
diff --git a/libs/WindowManager/Shell/res/drawable/desktop_mode_maximize_menu_maximize_button_background.xml b/libs/WindowManager/Shell/res/drawable/desktop_mode_maximize_menu_layout_background_on_hover.xml
similarity index 78%
copy from libs/WindowManager/Shell/res/drawable/desktop_mode_maximize_menu_maximize_button_background.xml
copy to libs/WindowManager/Shell/res/drawable/desktop_mode_maximize_menu_layout_background_on_hover.xml
index bfb0dd7..86da9fe 100644
--- a/libs/WindowManager/Shell/res/drawable/desktop_mode_maximize_menu_maximize_button_background.xml
+++ b/libs/WindowManager/Shell/res/drawable/desktop_mode_maximize_menu_layout_background_on_hover.xml
@@ -16,9 +16,9 @@
-->
<shape xmlns:android="http://schemas.android.com/apk/res/android"
+ xmlns:androidprv="http://schemas.android.com/apk/prv/res/android"
android:shape="rectangle">
- <solid android:color="@color/desktop_mode_maximize_menu_button_color_selector"/>
<corners
- android:radius="@dimen/desktop_mode_maximize_menu_buttons_large_corner_radius"/>
- <stroke android:width="1dp" android:color="@color/desktop_mode_maximize_menu_button_outline_color_selector"/>
+ android:radius="@dimen/desktop_mode_maximize_menu_buttons_outline_radius"/>
+ <stroke android:width="1dp" android:color="?androidprv:attr/colorAccentPrimary"/>
</shape>
\ No newline at end of file
diff --git a/libs/WindowManager/Shell/res/drawable/desktop_mode_maximize_menu_snap_left_button_background.xml b/libs/WindowManager/Shell/res/drawable/desktop_mode_maximize_menu_snap_left_button_background.xml
deleted file mode 100644
index 6630fca..0000000
--- a/libs/WindowManager/Shell/res/drawable/desktop_mode_maximize_menu_snap_left_button_background.xml
+++ /dev/null
@@ -1,28 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-
-<!--
- ~ 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
--->
-
-<shape xmlns:android="http://schemas.android.com/apk/res/android"
- android:shape="rectangle">
- <solid android:color="@color/desktop_mode_maximize_menu_button_color_selector"/>
- <corners
- android:topLeftRadius="@dimen/desktop_mode_maximize_menu_buttons_large_corner_radius"
- android:topRightRadius="@dimen/desktop_mode_maximize_menu_buttons_small_corner_radius"
- android:bottomLeftRadius="@dimen/desktop_mode_maximize_menu_buttons_large_corner_radius"
- android:bottomRightRadius="@dimen/desktop_mode_maximize_menu_buttons_small_corner_radius"/>
- <stroke android:width="1dp" android:color="@color/desktop_mode_maximize_menu_button_outline_color_selector"/>
-</shape>
\ No newline at end of file
diff --git a/libs/WindowManager/Shell/res/drawable/desktop_mode_maximize_menu_snap_right_button_background.xml b/libs/WindowManager/Shell/res/drawable/desktop_mode_maximize_menu_snap_right_button_background.xml
deleted file mode 100644
index 7bd6e99..0000000
--- a/libs/WindowManager/Shell/res/drawable/desktop_mode_maximize_menu_snap_right_button_background.xml
+++ /dev/null
@@ -1,28 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-
-<!--
- ~ 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
--->
-
-<shape xmlns:android="http://schemas.android.com/apk/res/android"
- android:shape="rectangle">
- <solid android:color="@color/desktop_mode_maximize_menu_button_color_selector"/>
- <corners
- android:topLeftRadius="@dimen/desktop_mode_maximize_menu_buttons_small_corner_radius"
- android:topRightRadius="@dimen/desktop_mode_maximize_menu_buttons_large_corner_radius"
- android:bottomLeftRadius="@dimen/desktop_mode_maximize_menu_buttons_small_corner_radius"
- android:bottomRightRadius="@dimen/desktop_mode_maximize_menu_buttons_large_corner_radius"/>
- <stroke android:width="1dp" android:color="@color/desktop_mode_maximize_menu_button_outline_color_selector"/>
-</shape>
\ No newline at end of file
diff --git a/libs/WindowManager/Shell/res/layout/desktop_mode_window_decor_maximize_menu.xml b/libs/WindowManager/Shell/res/layout/desktop_mode_window_decor_maximize_menu.xml
index dbfd6e5..9f0a425 100644
--- a/libs/WindowManager/Shell/res/layout/desktop_mode_window_decor_maximize_menu.xml
+++ b/libs/WindowManager/Shell/res/layout/desktop_mode_window_decor_maximize_menu.xml
@@ -15,41 +15,87 @@
~ limitations under the License.
-->
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
+ xmlns:androidprv="http://schemas.android.com/apk/prv/res/android"
android:id="@+id/maximize_menu"
style="?android:attr/buttonBarStyle"
android:layout_width="@dimen/desktop_mode_maximize_menu_width"
android:layout_height="@dimen/desktop_mode_maximize_menu_height"
android:orientation="horizontal"
android:gravity="center"
+ android:padding="16dp"
android:background="@drawable/desktop_mode_maximize_menu_background">
+ <LinearLayout
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:orientation="vertical">
- <Button
- android:id="@+id/maximize_menu_maximize_button"
- style="?android:attr/buttonBarButtonStyle"
- android:layout_width="120dp"
- android:layout_height="80dp"
- android:layout_marginRight="15dp"
- android:color="@color/desktop_mode_maximize_menu_button"
- android:background="@drawable/desktop_mode_maximize_menu_maximize_button_background"
- android:stateListAnimator="@null"/>
+ <FrameLayout
+ android:id="@+id/maximize_menu_maximize_button_layout"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:background="@drawable/desktop_mode_maximize_menu_layout_background"
+ android:padding="4dp"
+ android:layout_marginRight="8dp"
+ android:layout_marginBottom="4dp">
+ <Button
+ android:id="@+id/maximize_menu_maximize_button"
+ style="?android:attr/buttonBarButtonStyle"
+ android:layout_width="86dp"
+ android:layout_height="@dimen/desktop_mode_maximize_menu_button_height"
+ android:background="@drawable/desktop_mode_maximize_menu_button_background"
+ android:stateListAnimator="@null"/>
+ </FrameLayout>
- <Button
- android:id="@+id/maximize_menu_snap_left_button"
- style="?android:attr/buttonBarButtonStyle"
- android:layout_width="58dp"
- android:layout_height="80dp"
- android:layout_marginRight="6dp"
- android:color="@color/desktop_mode_maximize_menu_button"
- android:background="@drawable/desktop_mode_maximize_menu_snap_left_button_background"
- android:stateListAnimator="@null"/>
+ <TextView
+ android:layout_width="94dp"
+ android:layout_height="18dp"
+ android:textSize="11sp"
+ android:layout_marginBottom="76dp"
+ android:gravity="center"
+ android:fontFamily="google-sans-text"
+ android:text="@string/desktop_mode_maximize_menu_maximize_text"
+ android:textColor="?androidprv:attr/materialColorOnSurface"/>
+ </LinearLayout>
- <Button
- android:id="@+id/maximize_menu_snap_right_button"
- style="?android:attr/buttonBarButtonStyle"
- android:layout_width="58dp"
- android:layout_height="80dp"
- android:color="@color/desktop_mode_maximize_menu_button"
- android:background="@drawable/desktop_mode_maximize_menu_snap_right_button_background"
- android:stateListAnimator="@null"/>
+ <LinearLayout
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:orientation="vertical">
+ <LinearLayout
+ android:id="@+id/maximize_menu_snap_menu_layout"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:orientation="horizontal"
+ android:padding="4dp"
+ android:background="@drawable/desktop_mode_maximize_menu_layout_background"
+ android:layout_marginBottom="4dp">
+ <Button
+ android:id="@+id/maximize_menu_snap_left_button"
+ style="?android:attr/buttonBarButtonStyle"
+ android:layout_width="41dp"
+ android:layout_height="@dimen/desktop_mode_maximize_menu_button_height"
+ android:layout_marginRight="4dp"
+ android:background="@drawable/desktop_mode_maximize_menu_button_background"
+ android:stateListAnimator="@null"/>
+
+ <Button
+ android:id="@+id/maximize_menu_snap_right_button"
+ style="?android:attr/buttonBarButtonStyle"
+ android:layout_width="41dp"
+ android:layout_height="@dimen/desktop_mode_maximize_menu_button_height"
+ android:background="@drawable/desktop_mode_maximize_menu_button_background"
+ android:stateListAnimator="@null"/>
+ </LinearLayout>
+ <TextView
+ android:layout_width="94dp"
+ android:layout_height="18dp"
+ android:textSize="11sp"
+ android:layout_marginBottom="76dp"
+ android:layout_gravity="center"
+ android:gravity="center"
+ android:fontFamily="google-sans-text"
+ android:text="@string/desktop_mode_maximize_menu_snap_text"
+ android:textColor="?androidprv:attr/materialColorOnSurface"/>
+ </LinearLayout>
</LinearLayout>
\ No newline at end of file
diff --git a/libs/WindowManager/Shell/res/values/colors.xml b/libs/WindowManager/Shell/res/values/colors.xml
index 758dbfd..cf18da6 100644
--- a/libs/WindowManager/Shell/res/values/colors.xml
+++ b/libs/WindowManager/Shell/res/values/colors.xml
@@ -62,10 +62,6 @@
<color name="desktop_mode_caption_handle_bar_dark">#1C1C17</color>
<color name="desktop_mode_resize_veil_light">#EFF1F2</color>
<color name="desktop_mode_resize_veil_dark">#1C1C17</color>
- <color name="desktop_mode_maximize_menu_button">#DDDACD</color>
- <color name="desktop_mode_maximize_menu_button_outline">#797869</color>
- <color name="desktop_mode_maximize_menu_button_outline_on_hover">#606219</color>
- <color name="desktop_mode_maximize_menu_button_on_hover">#E7E790</color>
<color name="desktop_mode_maximize_menu_progress_light">#33000000</color>
<color name="desktop_mode_maximize_menu_progress_dark">#33FFFFFF</color>
<color name="desktop_mode_caption_button_on_hover_light">#11000000</color>
diff --git a/libs/WindowManager/Shell/res/values/dimen.xml b/libs/WindowManager/Shell/res/values/dimen.xml
index 70371f6..39dd4d3 100644
--- a/libs/WindowManager/Shell/res/values/dimen.xml
+++ b/libs/WindowManager/Shell/res/values/dimen.xml
@@ -456,16 +456,19 @@
<dimen name="desktop_mode_customizable_caption_margin_end">152dp</dimen>
<!-- The width of the maximize menu in desktop mode. -->
- <dimen name="desktop_mode_maximize_menu_width">287dp</dimen>
+ <dimen name="desktop_mode_maximize_menu_width">228dp</dimen>
<!-- The height of the maximize menu in desktop mode. -->
- <dimen name="desktop_mode_maximize_menu_height">112dp</dimen>
+ <dimen name="desktop_mode_maximize_menu_height">114dp</dimen>
- <!-- The larger of the two corner radii of the maximize menu buttons. -->
- <dimen name="desktop_mode_maximize_menu_buttons_large_corner_radius">4dp</dimen>
+ <!-- The height of the buttons in the maximize menu. -->
+ <dimen name="desktop_mode_maximize_menu_button_height">52dp</dimen>
- <!-- The smaller of the two corner radii of the maximize menu buttons. -->
- <dimen name="desktop_mode_maximize_menu_buttons_small_corner_radius">2dp</dimen>
+ <!-- The radius of the maximize menu buttons. -->
+ <dimen name="desktop_mode_maximize_menu_buttons_radius">4dp</dimen>
+
+ <!-- The radius of the layout outline around the maximize menu buttons. -->
+ <dimen name="desktop_mode_maximize_menu_buttons_outline_radius">6dp</dimen>
<!-- The corner radius of the maximize menu. -->
<dimen name="desktop_mode_maximize_menu_corner_radius">8dp</dimen>
diff --git a/libs/WindowManager/Shell/res/values/strings.xml b/libs/WindowManager/Shell/res/values/strings.xml
index 812a81b..fa6dd39 100644
--- a/libs/WindowManager/Shell/res/values/strings.xml
+++ b/libs/WindowManager/Shell/res/values/strings.xml
@@ -280,4 +280,8 @@
<string name="collapse_menu_text">Close Menu</string>
<!-- Accessibility text for the handle menu open menu button [CHAR LIMIT=NONE] -->
<string name="expand_menu_text">Open Menu</string>
+ <!-- Maximize menu maximize button string. -->
+ <string name="desktop_mode_maximize_menu_maximize_text">Maximize Screen</string>
+ <!-- Maximize menu maximize button string. -->
+ <string name="desktop_mode_maximize_menu_snap_text">Snap Screen</string>
</resources>
diff --git a/libs/WindowManager/Shell/src/com/android/wm/shell/back/BackAnimationController.java b/libs/WindowManager/Shell/src/com/android/wm/shell/back/BackAnimationController.java
index 59c841f..97bf8f7 100644
--- a/libs/WindowManager/Shell/src/com/android/wm/shell/back/BackAnimationController.java
+++ b/libs/WindowManager/Shell/src/com/android/wm/shell/back/BackAnimationController.java
@@ -173,6 +173,8 @@
ProtoLog.i(WM_SHELL_BACK_PREVIEW, "Navigation window gone.");
setTriggerBack(false);
resetTouchTracker();
+ // Don't wait for animation start
+ mShellExecutor.removeCallbacks(mAnimationTimeoutRunnable);
});
}
});
@@ -954,7 +956,7 @@
ProtoLog.e(WM_SHELL_BACK_PREVIEW, "Lack of navigation info to start animation.");
return;
}
- if (mApps == null) {
+ if (!validateAnimationTargets(mApps)) {
ProtoLog.w(WM_SHELL_BACK_PREVIEW, "Not starting animation due to mApps being null.");
return;
}
@@ -985,6 +987,21 @@
}
}
+ /**
+ * Validate animation targets.
+ */
+ static boolean validateAnimationTargets(RemoteAnimationTarget[] apps) {
+ if (apps == null || apps.length == 0) {
+ return false;
+ }
+ for (int i = apps.length - 1; i >= 0; --i) {
+ if (!apps[i].leash.isValid()) {
+ return false;
+ }
+ }
+ return true;
+ }
+
private void createAdapter() {
IBackAnimationRunner runner =
new IBackAnimationRunner.Stub() {
@@ -997,6 +1014,10 @@
mShellExecutor.execute(
() -> {
endLatencyTracking();
+ if (!validateAnimationTargets(apps)) {
+ Log.e(TAG, "Invalid animation targets!");
+ return;
+ }
mBackAnimationFinishedCallback = finishedCallback;
mApps = apps;
startSystemAnimation();
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 b830a41..0061d03 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
@@ -369,67 +369,50 @@
val startBounds = draggedTaskChange.startAbsBounds
val endBounds = draggedTaskChange.endAbsBounds
- // TODO(b/301106941): Instead of forcing-finishing the animation that scales the
- // surface down and then starting another that scales it back up to the final size,
- // blend the two animations.
- state.dragAnimator.endAnimator()
- // Using [DRAG_FREEFORM_SCALE] to calculate animated width/height is possible because
- // it is known that the animation scale is finished because the animation was
- // force-ended above. This won't be true when the two animations are blended.
- val animStartWidth = (startBounds.width() * DRAG_FREEFORM_SCALE).toInt()
- val animStartHeight = (startBounds.height() * DRAG_FREEFORM_SCALE).toInt()
- // Using end bounds here to find the left/top also assumes the center animation has
- // finished and the surface is placed exactly in the center of the screen which matches
- // the end/default bounds of the now freeform task.
- val animStartLeft = endBounds.centerX() - (animStartWidth / 2)
- val animStartTop = endBounds.centerY() - (animStartHeight / 2)
- val animStartBounds = Rect(
- animStartLeft,
- animStartTop,
- animStartLeft + animStartWidth,
- animStartTop + animStartHeight
+ // Pause any animation that may be currently playing; we will use the relevant
+ // details of that animation here.
+ state.dragAnimator.cancelAnimator()
+ // We still apply scale to task bounds; as we animate the bounds to their
+ // end value, animate scale to 1.
+ val startScale = state.dragAnimator.scale
+ val startPosition = state.dragAnimator.position
+ val unscaledStartWidth = startBounds.width()
+ val unscaledStartHeight = startBounds.height()
+ val unscaledStartBounds = Rect(
+ startPosition.x.toInt(),
+ startPosition.y.toInt(),
+ startPosition.x.toInt() + unscaledStartWidth,
+ startPosition.y.toInt() + unscaledStartHeight
)
-
dragToDesktopStateListener?.onCommitToDesktopAnimationStart(t)
- t.apply {
- setScale(draggedTaskLeash, 1f, 1f)
- setPosition(
- draggedTaskLeash,
- animStartBounds.left.toFloat(),
- animStartBounds.top.toFloat()
- )
- setWindowCrop(
- draggedTaskLeash,
- animStartBounds.width(),
- animStartBounds.height()
- )
- }
// Accept the merge by applying the merging transaction (applied by #showResizeVeil)
// and finish callback. Show the veil and position the task at the first frame before
// starting the final animation.
- onTaskResizeAnimationListener.onAnimationStart(state.draggedTaskId, t, animStartBounds)
+ onTaskResizeAnimationListener.onAnimationStart(state.draggedTaskId, t,
+ unscaledStartBounds)
finishCallback.onTransitionFinished(null /* wct */)
- // Because the task surface was scaled down during the drag, we must use the animated
- // bounds instead of the [startAbsBounds].
val tx: SurfaceControl.Transaction = transactionSupplier.get()
- ValueAnimator.ofObject(rectEvaluator, animStartBounds, endBounds)
+ ValueAnimator.ofObject(rectEvaluator, unscaledStartBounds, endBounds)
.setDuration(DRAG_TO_DESKTOP_FINISH_ANIM_DURATION_MS)
.apply {
addUpdateListener { animator ->
val animBounds = animator.animatedValue as Rect
+ val animFraction = animator.animatedFraction
+ // Progress scale from starting value to 1 as animation plays.
+ val animScale = startScale + animFraction * (1 - startScale)
tx.apply {
- setScale(draggedTaskLeash, 1f, 1f)
- setPosition(
- draggedTaskLeash,
- animBounds.left.toFloat(),
- animBounds.top.toFloat()
- )
+ setScale(draggedTaskLeash, animScale, animScale)
+ setPosition(
+ draggedTaskLeash,
+ animBounds.left.toFloat(),
+ animBounds.top.toFloat()
+ )
setWindowCrop(
- draggedTaskLeash,
- animBounds.width(),
- animBounds.height()
+ draggedTaskLeash,
+ animBounds.width(),
+ animBounds.height()
)
}
onTaskResizeAnimationListener.onBoundsChange(
@@ -493,10 +476,8 @@
val draggedTaskChange = state.draggedTaskChange
?: throw IllegalStateException("Expected non-null task change")
val sc = draggedTaskChange.leash
- // TODO(b/301106941): Don't end the animation and start one to scale it back, merge them
- // instead.
- // End the animation that shrinks the window when task is first dragged from fullscreen
- dragToDesktopAnimator.endAnimator()
+ // Pause the animation that shrinks the window when task is first dragged from fullscreen
+ dragToDesktopAnimator.cancelAnimator()
// Then animate the scaled window back to its original bounds.
val x: Float = dragToDesktopAnimator.position.x
val y: Float = dragToDesktopAnimator.position.y
diff --git a/libs/WindowManager/Shell/src/com/android/wm/shell/windowdecor/DesktopModeWindowDecorViewModel.java b/libs/WindowManager/Shell/src/com/android/wm/shell/windowdecor/DesktopModeWindowDecorViewModel.java
index 0595e65..a0f9c6b 100644
--- a/libs/WindowManager/Shell/src/com/android/wm/shell/windowdecor/DesktopModeWindowDecorViewModel.java
+++ b/libs/WindowManager/Shell/src/com/android/wm/shell/windowdecor/DesktopModeWindowDecorViewModel.java
@@ -25,6 +25,7 @@
import static android.view.MotionEvent.ACTION_CANCEL;
import static android.view.MotionEvent.ACTION_HOVER_ENTER;
import static android.view.MotionEvent.ACTION_HOVER_EXIT;
+import static android.view.MotionEvent.ACTION_HOVER_MOVE;
import static android.view.MotionEvent.ACTION_MOVE;
import static android.view.MotionEvent.ACTION_UP;
import static android.view.WindowInsets.Type.statusBars;
@@ -32,16 +33,8 @@
import static com.android.wm.shell.common.split.SplitScreenConstants.SPLIT_POSITION_BOTTOM_OR_RIGHT;
import static com.android.wm.shell.common.split.SplitScreenConstants.SPLIT_POSITION_TOP_OR_LEFT;
import static com.android.wm.shell.compatui.AppCompatUtils.isSingleTopActivityTranslucent;
-import static com.android.wm.shell.desktopmode.DesktopModeVisualIndicator.IndicatorType.TO_DESKTOP_INDICATOR;
import static com.android.wm.shell.desktopmode.DesktopModeVisualIndicator.IndicatorType.TO_FULLSCREEN_INDICATOR;
-import static com.android.wm.shell.desktopmode.DesktopModeVisualIndicator.IndicatorType.TO_SPLIT_LEFT_INDICATOR;
-import static com.android.wm.shell.desktopmode.DesktopModeVisualIndicator.IndicatorType.TO_SPLIT_RIGHT_INDICATOR;
-import static com.android.wm.shell.desktopmode.EnterDesktopTaskTransitionHandler.FREEFORM_ANIMATION_DURATION;
-import static com.android.wm.shell.windowdecor.MoveToDesktopAnimator.DRAG_FREEFORM_SCALE;
-import android.animation.Animator;
-import android.animation.AnimatorListenerAdapter;
-import android.animation.ValueAnimator;
import android.annotation.NonNull;
import android.app.ActivityManager;
import android.app.ActivityManager.RunningTaskInfo;
@@ -365,7 +358,7 @@
private class DesktopModeTouchEventListener extends GestureDetector.SimpleOnGestureListener
implements View.OnClickListener, View.OnTouchListener, View.OnLongClickListener,
- View.OnGenericMotionListener , DragDetector.MotionEventHandler {
+ View.OnGenericMotionListener, DragDetector.MotionEventHandler {
private static final int CLOSE_MAXIMIZE_MENU_DELAY_MS = 150;
private final int mTaskId;
@@ -558,8 +551,14 @@
// Re-hovering over any of the maximize menu views should keep the menu open by
// cancelling any attempts to close the menu.
mMainHandler.removeCallbacks(mCloseMaximizeWindowRunnable);
+ if (id != R.id.maximize_window) {
+ decoration.onMaximizeMenuHoverEnter(id, ev);
+ }
}
return true;
+ } else if (ev.getAction() == ACTION_HOVER_MOVE
+ && MaximizeMenu.Companion.isMaximizeMenuView(id)) {
+ decoration.onMaximizeMenuHoverMove(id, ev);
} else if (ev.getAction() == ACTION_HOVER_EXIT) {
if (!decoration.isMaximizeMenuActive() && id == R.id.maximize_window) {
decoration.onMaximizeWindowHoverExit();
@@ -569,6 +568,8 @@
// menu view to another.
mMainHandler.postDelayed(mCloseMaximizeWindowRunnable,
CLOSE_MAXIMIZE_MENU_DELAY_MS);
+ } else if (MaximizeMenu.Companion.isMaximizeMenuView(id)) {
+ decoration.onMaximizeMenuHoverExit(id, ev);
}
return true;
}
@@ -849,26 +850,18 @@
}
case MotionEvent.ACTION_UP: {
if (mTransitionDragActive) {
- final DesktopModeVisualIndicator.IndicatorType indicatorType =
- mDesktopTasksController.updateVisualIndicator(relevantDecor.mTaskInfo,
- relevantDecor.mTaskSurface, ev.getRawX(), ev.getRawY());
+ mDesktopTasksController.updateVisualIndicator(relevantDecor.mTaskInfo,
+ relevantDecor.mTaskSurface, ev.getRawX(), ev.getRawY());
mTransitionDragActive = false;
- if (indicatorType == TO_DESKTOP_INDICATOR
- || indicatorType == TO_SPLIT_LEFT_INDICATOR
- || indicatorType == TO_SPLIT_RIGHT_INDICATOR) {
- if (DesktopModeStatus.isEnabled()) {
- animateToDesktop(relevantDecor, ev);
- }
- mMoveToDesktopAnimator = null;
- return;
- } else if (mMoveToDesktopAnimator != null) {
+ if (mMoveToDesktopAnimator != null) {
// Though this isn't a hover event, we need to update handle's hover state
// as it likely will change.
relevantDecor.updateHoverAndPressStatus(ev);
mDesktopTasksController.onDragPositioningEndThroughStatusBar(
new PointF(ev.getRawX(), ev.getRawY()),
relevantDecor.mTaskInfo,
- calculateFreeformBounds(ev.getDisplayId(), DRAG_FREEFORM_SCALE));
+ calculateFreeformBounds(ev.getDisplayId(),
+ DesktopTasksController.DESKTOP_MODE_INITIAL_BOUNDS_SCALE));
mMoveToDesktopAnimator = null;
return;
} else {
@@ -937,54 +930,6 @@
(int) (screenHeight * (adjustmentPercentage + scale)));
}
- /**
- * Blocks relayout until transition is finished and transitions to Desktop
- */
- private void animateToDesktop(DesktopModeWindowDecoration relevantDecor,
- MotionEvent ev) {
- centerAndMoveToDesktopWithAnimation(relevantDecor, ev);
- }
-
- /**
- * Animates a window to the center, grows to freeform size, and transitions to Desktop Mode.
- * @param relevantDecor the window decor of the task to be animated
- * @param ev the motion event that triggers the animation
- * TODO(b/315527000): This animation needs to be adjusted to allow snap left/right cases.
- * Currently fullscreen -> split snap still animates to center screen before readjusting.
- */
- private void centerAndMoveToDesktopWithAnimation(DesktopModeWindowDecoration relevantDecor,
- MotionEvent ev) {
- ValueAnimator animator = ValueAnimator.ofFloat(0f, 1f);
- animator.setDuration(FREEFORM_ANIMATION_DURATION);
- final SurfaceControl sc = relevantDecor.mTaskSurface;
- final Rect endBounds = calculateFreeformBounds(ev.getDisplayId(), DRAG_FREEFORM_SCALE);
- final Transaction t = mTransactionFactory.get();
- final float diffX = endBounds.centerX() - ev.getRawX();
- final float diffY = endBounds.top - ev.getRawY();
- final float startingX = ev.getRawX() - DRAG_FREEFORM_SCALE
- * mDragToDesktopAnimationStartBounds.width() / 2;
-
- animator.addUpdateListener(animation -> {
- final float animatorValue = (float) animation.getAnimatedValue();
- final float x = startingX + diffX * animatorValue;
- final float y = ev.getRawY() + diffY * animatorValue;
- t.setPosition(sc, x, y);
- t.apply();
- });
- animator.addListener(new AnimatorListenerAdapter() {
- @Override
- public void onAnimationEnd(Animator animation) {
- mDesktopTasksController.onDragPositioningEndThroughStatusBar(
- new PointF(ev.getRawX(), ev.getRawY()),
- relevantDecor.mTaskInfo,
- calculateFreeformBounds(ev.getDisplayId(),
- DesktopTasksController
- .DESKTOP_MODE_INITIAL_BOUNDS_SCALE));
- }
- });
- animator.start();
- }
-
@Nullable
private DesktopModeWindowDecoration getRelevantWindowDecor(MotionEvent ev) {
final DesktopModeWindowDecoration focusedDecor = getFocusedDecor();
diff --git a/libs/WindowManager/Shell/src/com/android/wm/shell/windowdecor/DesktopModeWindowDecoration.java b/libs/WindowManager/Shell/src/com/android/wm/shell/windowdecor/DesktopModeWindowDecoration.java
index dce52a6..f790d2a 100644
--- a/libs/WindowManager/Shell/src/com/android/wm/shell/windowdecor/DesktopModeWindowDecoration.java
+++ b/libs/WindowManager/Shell/src/com/android/wm/shell/windowdecor/DesktopModeWindowDecoration.java
@@ -403,7 +403,8 @@
final int menuHeight = loadDimensionPixelSize(
resources, R.dimen.desktop_mode_maximize_menu_height);
- float menuLeft = (mPositionInParent.x + maximizeButtonLocation[0]);
+ float menuLeft = (mPositionInParent.x + maximizeButtonLocation[0] - ((float) (menuWidth
+ - maximizeWindowButton.getWidth()) / 2));
float menuTop = (mPositionInParent.y + captionHeight);
final float menuRight = menuLeft + menuWidth;
final float menuBottom = menuTop + menuHeight;
@@ -831,16 +832,34 @@
.setAnimatingTaskResize(animatingTaskResize);
}
+ /** Called when there is a {@Link ACTION_HOVER_EXIT} on the maximize window button. */
void onMaximizeWindowHoverExit() {
((DesktopModeAppControlsWindowDecorationViewHolder) mWindowDecorViewHolder)
.onMaximizeWindowHoverExit();
}
+ /** Called when there is a {@Link ACTION_HOVER_ENTER} on the maximize window button. */
void onMaximizeWindowHoverEnter() {
((DesktopModeAppControlsWindowDecorationViewHolder) mWindowDecorViewHolder)
.onMaximizeWindowHoverEnter();
}
+ /** Called when there is a {@Link ACTION_HOVER_ENTER} on a view in the maximize menu. */
+ void onMaximizeMenuHoverEnter(int id, MotionEvent ev) {
+ mMaximizeMenu.onMaximizeMenuHoverEnter(id, ev);
+ }
+
+ /** Called when there is a {@Link ACTION_HOVER_MOVE} on a view in the maximize menu. */
+ void onMaximizeMenuHoverMove(int id, MotionEvent ev) {
+ mMaximizeMenu.onMaximizeMenuHoverMove(id, ev);
+ }
+
+ /** Called when there is a {@Link ACTION_HOVER_EXIT} on a view in the maximize menu. */
+ void onMaximizeMenuHoverExit(int id, MotionEvent ev) {
+ mMaximizeMenu.onMaximizeMenuHoverExit(id, ev);
+ }
+
+
@Override
public String toString() {
return "{"
diff --git a/libs/WindowManager/Shell/src/com/android/wm/shell/windowdecor/MaximizeMenu.kt b/libs/WindowManager/Shell/src/com/android/wm/shell/windowdecor/MaximizeMenu.kt
index b82f7ca..899b7cc 100644
--- a/libs/WindowManager/Shell/src/com/android/wm/shell/windowdecor/MaximizeMenu.kt
+++ b/libs/WindowManager/Shell/src/com/android/wm/shell/windowdecor/MaximizeMenu.kt
@@ -33,7 +33,11 @@
import android.view.WindowManager
import android.view.WindowlessWindowManager
import android.widget.Button
+import android.widget.FrameLayout
+import android.widget.LinearLayout
import android.window.TaskConstants
+import androidx.core.content.withStyledAttributes
+import com.android.internal.R.attr.colorAccentPrimary
import com.android.wm.shell.R
import com.android.wm.shell.RootTaskDisplayAreaOrganizer
import com.android.wm.shell.common.DisplayController
@@ -70,6 +74,12 @@
private val menuWidth = loadDimensionPixelSize(R.dimen.desktop_mode_maximize_menu_width)
private val menuHeight = loadDimensionPixelSize(R.dimen.desktop_mode_maximize_menu_height)
+ private lateinit var snapRightButton: Button
+ private lateinit var snapLeftButton: Button
+ private lateinit var maximizeButton: Button
+ private lateinit var maximizeButtonLayout: FrameLayout
+ private lateinit var snapButtonsLayout: LinearLayout
+
/** Position the menu relative to the caption's position. */
fun positionMenu(position: PointF, t: Transaction) {
menuPosition.set(position)
@@ -150,23 +160,23 @@
maximizeMenuView.setOnGenericMotionListener(onGenericMotionListener)
maximizeMenuView.setOnTouchListener(onTouchListener)
- val maximizeButton = maximizeMenuView.requireViewById<Button>(
- R.id.maximize_menu_maximize_button
- )
+ maximizeButtonLayout = maximizeMenuView.requireViewById(
+ R.id.maximize_menu_maximize_button_layout)
+
+ maximizeButton = maximizeMenuView.requireViewById(R.id.maximize_menu_maximize_button)
maximizeButton.setOnClickListener(onClickListener)
maximizeButton.setOnGenericMotionListener(onGenericMotionListener)
- val snapRightButton = maximizeMenuView.requireViewById<Button>(
- R.id.maximize_menu_snap_right_button
- )
+ snapRightButton = maximizeMenuView.requireViewById(R.id.maximize_menu_snap_right_button)
snapRightButton.setOnClickListener(onClickListener)
snapRightButton.setOnGenericMotionListener(onGenericMotionListener)
- val snapLeftButton = maximizeMenuView.requireViewById<Button>(
- R.id.maximize_menu_snap_left_button
- )
+ snapLeftButton = maximizeMenuView.requireViewById(R.id.maximize_menu_snap_left_button)
snapLeftButton.setOnClickListener(onClickListener)
snapLeftButton.setOnGenericMotionListener(onGenericMotionListener)
+
+ snapButtonsLayout = maximizeMenuView.requireViewById(R.id.maximize_menu_snap_menu_layout)
+ snapButtonsLayout.setOnGenericMotionListener(onGenericMotionListener)
}
/**
@@ -190,11 +200,77 @@
return maximizeMenu?.mWindowViewHost?.view?.isLaidOut ?: false
}
+ fun onMaximizeMenuHoverEnter(viewId: Int, ev: MotionEvent) {
+ setSnapButtonsColorOnHover(viewId, ev)
+ }
+
+ fun onMaximizeMenuHoverMove(viewId: Int, ev: MotionEvent) {
+ setSnapButtonsColorOnHover(viewId, ev)
+ }
+
+ fun onMaximizeMenuHoverExit(id: Int, ev: MotionEvent) {
+ val inSnapMenuBounds = ev.x >= 0 && ev.x <= snapButtonsLayout.width &&
+ ev.y >= 0 && ev.y <= snapButtonsLayout.height
+ val colorList = decorWindowContext.getColorStateList(
+ R.color.desktop_mode_maximize_menu_button_color_selector)
+
+ if (id == R.id.maximize_menu_maximize_button) {
+ maximizeButton.background?.setTintList(colorList)
+ maximizeButtonLayout.setBackgroundResource(
+ R.drawable.desktop_mode_maximize_menu_layout_background)
+ } else if (id == R.id.maximize_menu_snap_menu_layout && !inSnapMenuBounds) {
+ // After exiting the snap menu layout area, checks to see that user is not still
+ // hovering within the snap menu layout bounds which would indicate that the user is
+ // hovering over a snap button within the snap menu layout rather than having exited.
+ snapLeftButton.background?.setTintList(colorList)
+ snapLeftButton.background?.alpha = 255
+ snapRightButton.background?.setTintList(colorList)
+ snapRightButton.background?.alpha = 255
+ snapButtonsLayout.setBackgroundResource(
+ R.drawable.desktop_mode_maximize_menu_layout_background)
+ }
+ }
+
+ private fun setSnapButtonsColorOnHover(viewId: Int, ev: MotionEvent) {
+ decorWindowContext.withStyledAttributes(null, intArrayOf(colorAccentPrimary), 0, 0) {
+ val materialColor = getColor(0, 0)
+ val snapMenuCenter = snapButtonsLayout.width / 2
+ if (viewId == R.id.maximize_menu_maximize_button) {
+ // Highlight snap maximize window button
+ maximizeButton.background?.setTint(materialColor)
+ maximizeButtonLayout.setBackgroundResource(
+ R.drawable.desktop_mode_maximize_menu_layout_background_on_hover)
+ } else if (viewId == R.id.maximize_menu_snap_left_button ||
+ (viewId == R.id.maximize_menu_snap_menu_layout && ev.x <= snapMenuCenter)) {
+ // Highlight snap left button
+ snapRightButton.background?.setTint(materialColor)
+ snapLeftButton.background?.setTint(materialColor)
+ snapButtonsLayout.setBackgroundResource(
+ R.drawable.desktop_mode_maximize_menu_layout_background_on_hover)
+ snapRightButton.background?.alpha = 102
+ snapLeftButton.background?.alpha = 255
+ } else if (viewId == R.id.maximize_menu_snap_right_button ||
+ (viewId == R.id.maximize_menu_snap_menu_layout && ev.x > snapMenuCenter)) {
+ // Highlight snap right button
+ snapRightButton.background?.setTint(materialColor)
+ snapLeftButton.background?.setTint(materialColor)
+ snapButtonsLayout.setBackgroundResource(
+ R.drawable.desktop_mode_maximize_menu_layout_background_on_hover)
+ snapRightButton.background?.alpha = 255
+ snapLeftButton.background?.alpha = 102
+ }
+ }
+ }
+
companion object {
fun isMaximizeMenuView(@IdRes viewId: Int): Boolean {
- return viewId == R.id.maximize_menu || viewId == R.id.maximize_menu_maximize_button ||
+ return viewId == R.id.maximize_menu ||
+ viewId == R.id.maximize_menu_maximize_button ||
+ viewId == R.id.maximize_menu_maximize_button_layout ||
viewId == R.id.maximize_menu_snap_left_button ||
- viewId == R.id.maximize_menu_snap_right_button
+ viewId == R.id.maximize_menu_snap_right_button ||
+ viewId == R.id.maximize_menu_snap_menu_layout ||
+ viewId == R.id.maximize_menu_snap_menu_layout
}
}
}
diff --git a/libs/WindowManager/Shell/src/com/android/wm/shell/windowdecor/MoveToDesktopAnimator.kt b/libs/WindowManager/Shell/src/com/android/wm/shell/windowdecor/MoveToDesktopAnimator.kt
index af05523..987aadf 100644
--- a/libs/WindowManager/Shell/src/com/android/wm/shell/windowdecor/MoveToDesktopAnimator.kt
+++ b/libs/WindowManager/Shell/src/com/android/wm/shell/windowdecor/MoveToDesktopAnimator.kt
@@ -31,15 +31,16 @@
private val animatedTaskWidth
get() = dragToDesktopAnimator.animatedValue as Float * startBounds.width()
+ val scale: Float
+ get() = dragToDesktopAnimator.animatedValue as Float
private val dragToDesktopAnimator: ValueAnimator = ValueAnimator.ofFloat(1f,
DRAG_FREEFORM_SCALE)
.setDuration(ANIMATION_DURATION.toLong())
.apply {
val t = SurfaceControl.Transaction()
val cornerRadius = ScreenDecorationsUtils.getWindowCornerRadius(context)
- addUpdateListener { animation ->
- val animatorValue = animation.animatedValue as Float
- t.setScale(taskSurface, animatorValue, animatorValue)
+ addUpdateListener {
+ t.setScale(taskSurface, scale, scale)
.setCornerRadius(taskSurface, cornerRadius)
.apply()
}
@@ -90,9 +91,9 @@
}
/**
- * Ends the animation, setting the scale and position to the final animation value
+ * Cancels the animation, intended to be used when another animator will take over.
*/
- fun endAnimator() {
- dragToDesktopAnimator.end()
+ fun cancelAnimator() {
+ dragToDesktopAnimator.cancel()
}
}
\ No newline at end of file
diff --git a/libs/WindowManager/Shell/tests/flicker/pip/csuiteDefaultTemplate.xml b/libs/WindowManager/Shell/tests/flicker/pip/csuiteDefaultTemplate.xml
index 09c24eb..b3eb2bf 100644
--- a/libs/WindowManager/Shell/tests/flicker/pip/csuiteDefaultTemplate.xml
+++ b/libs/WindowManager/Shell/tests/flicker/pip/csuiteDefaultTemplate.xml
@@ -39,7 +39,7 @@
<option name="run-command" value="cmd window tracing size 20480"/>
<option name="run-command" value="su root service call SurfaceFlinger 1029 i32 81920"/>
<!-- uninstall Maps, so that latest version can be installed from pStash directly -->
- <option name="run-command" value="pm uninstall -k --user 0 com.google.android.apps.maps"/>
+ <option name="run-command" value="su root pm uninstall -k --user 0 com.google.android.apps.maps"/>
</target_preparer>
<target_preparer class="com.android.tradefed.targetprep.RunCommandTargetPreparer">
<option name="test-user-token" value="%TEST_USER%"/>
diff --git a/libs/WindowManager/Shell/tests/flicker/pip/src/com/android/wm/shell/flicker/pip/apps/NetflixEnterPipTest.kt b/libs/WindowManager/Shell/tests/flicker/pip/src/com/android/wm/shell/flicker/pip/apps/NetflixEnterPipTest.kt
index 847fc3d..e85da30 100644
--- a/libs/WindowManager/Shell/tests/flicker/pip/src/com/android/wm/shell/flicker/pip/apps/NetflixEnterPipTest.kt
+++ b/libs/WindowManager/Shell/tests/flicker/pip/src/com/android/wm/shell/flicker/pip/apps/NetflixEnterPipTest.kt
@@ -18,7 +18,6 @@
import android.Manifest
import android.platform.test.annotations.Postsubmit
-import android.tools.NavBar
import android.tools.Rotation
import android.tools.traces.component.ComponentNameMatcher
import android.tools.device.apphelpers.NetflixAppHelper
@@ -173,8 +172,7 @@
@JvmStatic
fun getParams() =
LegacyFlickerTestFactory.nonRotationTests(
- supportedRotations = listOf(Rotation.ROTATION_0),
- supportedNavigationModes = listOf(NavBar.MODE_GESTURAL)
+ supportedRotations = listOf(Rotation.ROTATION_0)
)
}
}
diff --git a/libs/WindowManager/Shell/tests/flicker/pip/src/com/android/wm/shell/flicker/pip/apps/YouTubeEnterPipToOtherOrientationTest.kt b/libs/WindowManager/Shell/tests/flicker/pip/src/com/android/wm/shell/flicker/pip/apps/YouTubeEnterPipToOtherOrientationTest.kt
index 165ed55a..de8e7c3 100644
--- a/libs/WindowManager/Shell/tests/flicker/pip/src/com/android/wm/shell/flicker/pip/apps/YouTubeEnterPipToOtherOrientationTest.kt
+++ b/libs/WindowManager/Shell/tests/flicker/pip/src/com/android/wm/shell/flicker/pip/apps/YouTubeEnterPipToOtherOrientationTest.kt
@@ -18,7 +18,6 @@
import android.Manifest
import android.platform.test.annotations.Postsubmit
-import android.tools.NavBar
import android.tools.Rotation
import android.tools.traces.component.ComponentNameMatcher
import android.tools.device.apphelpers.YouTubeAppHelper
@@ -158,8 +157,7 @@
@JvmStatic
fun getParams() =
LegacyFlickerTestFactory.nonRotationTests(
- supportedRotations = listOf(Rotation.ROTATION_0),
- supportedNavigationModes = listOf(NavBar.MODE_GESTURAL)
+ supportedRotations = listOf(Rotation.ROTATION_0)
)
}
}
diff --git a/libs/WindowManager/Shell/tests/unittest/src/com/android/wm/shell/back/BackAnimationControllerTest.java b/libs/WindowManager/Shell/tests/unittest/src/com/android/wm/shell/back/BackAnimationControllerTest.java
index d839eae..2ff1ddd 100644
--- a/libs/WindowManager/Shell/tests/unittest/src/com/android/wm/shell/back/BackAnimationControllerTest.java
+++ b/libs/WindowManager/Shell/tests/unittest/src/com/android/wm/shell/back/BackAnimationControllerTest.java
@@ -69,7 +69,6 @@
import com.android.wm.shell.sysui.ShellInit;
import com.android.wm.shell.sysui.ShellSharedConstants;
-
import org.junit.Before;
import org.junit.Test;
import org.junit.runner.RunWith;
@@ -182,7 +181,9 @@
}
RemoteAnimationTarget createAnimationTarget() {
- SurfaceControl topWindowLeash = new SurfaceControl();
+ SurfaceControl topWindowLeash = new SurfaceControl.Builder()
+ .setName("FakeLeash")
+ .build();
return new RemoteAnimationTarget(-1, RemoteAnimationTarget.MODE_CLOSING, topWindowLeash,
false, new Rect(), new Rect(), -1,
new Point(0, 0), new Rect(), new Rect(), new WindowConfiguration(),
diff --git a/libs/WindowManager/Shell/tests/unittest/src/com/android/wm/shell/desktopmode/DragToDesktopTransitionHandlerTest.kt b/libs/WindowManager/Shell/tests/unittest/src/com/android/wm/shell/desktopmode/DragToDesktopTransitionHandlerTest.kt
index 98e90d6..2ade3fb 100644
--- a/libs/WindowManager/Shell/tests/unittest/src/com/android/wm/shell/desktopmode/DragToDesktopTransitionHandlerTest.kt
+++ b/libs/WindowManager/Shell/tests/unittest/src/com/android/wm/shell/desktopmode/DragToDesktopTransitionHandlerTest.kt
@@ -190,7 +190,7 @@
handler.cancelDragToDesktopTransition()
// Cancel animation should run since it had already started.
- verify(dragAnimator).endAnimator()
+ verify(dragAnimator).cancelAnimator()
}
@Test
diff --git a/location/java/android/location/flags/location.aconfig b/location/java/android/location/flags/location.aconfig
index 19e59a7..b8b03b6 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 40929f7..c1be6b5 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/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/nfc/Android.bp b/nfc/Android.bp
index 0b3f291..c186804 100644
--- a/nfc/Android.bp
+++ b/nfc/Android.bp
@@ -39,6 +39,7 @@
libs: [
"unsupportedappusage", // for android.compat.annotation.UnsupportedAppUsage
"framework-permission-s",
+ "framework-permission",
],
static_libs: [
"android.nfc.flags-aconfig-java",
diff --git a/nfc/api/system-current.txt b/nfc/api/system-current.txt
index a72e539..310130e 100644
--- a/nfc/api/system-current.txt
+++ b/nfc/api/system-current.txt
@@ -9,6 +9,7 @@
method @FlaggedApi("android.nfc.enable_nfc_reader_option") @RequiresPermission(android.Manifest.permission.WRITE_SECURE_SETTINGS) public boolean enableReaderOption(boolean);
method @RequiresPermission(android.Manifest.permission.WRITE_SECURE_SETTINGS) public boolean enableSecureNfc(boolean);
method @FlaggedApi("android.nfc.enable_nfc_mainline") public int getAdapterState();
+ method @FlaggedApi("android.nfc.nfc_oem_extension") @NonNull public android.nfc.NfcOemExtension getNfcOemExtension();
method @NonNull @RequiresPermission(android.Manifest.permission.WRITE_SECURE_SETTINGS) public java.util.Map<java.lang.String,java.lang.Boolean> getTagIntentAppPreferenceForUser(int);
method @RequiresPermission(android.Manifest.permission.NFC_SET_CONTROLLER_ALWAYS_ON) public boolean isControllerAlwaysOn();
method @RequiresPermission(android.Manifest.permission.NFC_SET_CONTROLLER_ALWAYS_ON) public boolean isControllerAlwaysOnSupported();
@@ -55,6 +56,16 @@
method public void onWlcStateChanged(@NonNull android.nfc.WlcListenerDeviceInfo);
}
+ @FlaggedApi("android.nfc.nfc_oem_extension") public final class NfcOemExtension {
+ method @FlaggedApi("android.nfc.nfc_oem_extension") @RequiresPermission(android.Manifest.permission.WRITE_SECURE_SETTINGS) public void clearPreference();
+ method @FlaggedApi("android.nfc.nfc_oem_extension") @RequiresPermission(android.Manifest.permission.WRITE_SECURE_SETTINGS) public void registerCallback(@NonNull java.util.concurrent.Executor, @NonNull android.nfc.NfcOemExtension.Callback);
+ method @FlaggedApi("android.nfc.nfc_oem_extension") @RequiresPermission(android.Manifest.permission.WRITE_SECURE_SETTINGS) public void unregisterCallback(@NonNull android.nfc.NfcOemExtension.Callback);
+ }
+
+ public static interface NfcOemExtension.Callback {
+ method public void onTagConnected(boolean, @NonNull android.nfc.Tag);
+ }
+
}
package android.nfc.cardemulation {
diff --git a/nfc/java/android/nfc/INfcAdapter.aidl b/nfc/java/android/nfc/INfcAdapter.aidl
index 7a78f3d..b57d548 100644
--- a/nfc/java/android/nfc/INfcAdapter.aidl
+++ b/nfc/java/android/nfc/INfcAdapter.aidl
@@ -28,6 +28,7 @@
import android.nfc.INfcTag;
import android.nfc.INfcCardEmulation;
import android.nfc.INfcFCardEmulation;
+import android.nfc.INfcOemExtensionCallback;
import android.nfc.INfcUnlockHandler;
import android.nfc.ITagRemovedCallback;
import android.nfc.INfcDta;
@@ -105,4 +106,7 @@
int sendVendorNciMessage(int mt, int gid, int oid, in byte[] payload);
void registerVendorExtensionCallback(in INfcVendorNciCallback callbacks);
void unregisterVendorExtensionCallback(in INfcVendorNciCallback callbacks);
+ void registerOemExtensionCallback(INfcOemExtensionCallback callbacks);
+ void unregisterOemExtensionCallback(INfcOemExtensionCallback callbacks);
+ void clearPreference();
}
diff --git a/nfc/java/android/nfc/INfcOemExtensionCallback.aidl b/nfc/java/android/nfc/INfcOemExtensionCallback.aidl
new file mode 100644
index 0000000..6c9096d
--- /dev/null
+++ b/nfc/java/android/nfc/INfcOemExtensionCallback.aidl
@@ -0,0 +1,25 @@
+/*
+ * Copyright 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.nfc;
+
+import android.nfc.Tag;
+
+/**
+ * @hide
+ */
+interface INfcOemExtensionCallback {
+ void onTagConnected(boolean connected, in Tag tag);
+}
diff --git a/nfc/java/android/nfc/NfcAdapter.java b/nfc/java/android/nfc/NfcAdapter.java
index 7a7db31..b44a71b 100644
--- a/nfc/java/android/nfc/NfcAdapter.java
+++ b/nfc/java/android/nfc/NfcAdapter.java
@@ -581,6 +581,7 @@
final Context mContext;
final HashMap<NfcUnlockHandler, INfcUnlockHandler> mNfcUnlockHandlers;
final Object mLock;
+ final NfcOemExtension mNfcOemExtension;
ITagRemovedCallback mTagRemovedListener; // protected by mLock
@@ -891,6 +892,7 @@
mControllerAlwaysOnListener = new NfcControllerAlwaysOnListener(getService());
mNfcWlcStateListener = new NfcWlcStateListener(getService());
mNfcVendorNciCallbackListener = new NfcVendorNciCallbackListener(getService());
+ mNfcOemExtension = new NfcOemExtension(mContext, this);
}
/**
@@ -3163,4 +3165,19 @@
void onVendorNciNotification(
@IntRange(from = 9, to = 15) int gid, int oid, @NonNull byte[] payload);
}
+
+ /**
+ * Returns an instance of {@link NfcOemExtension} associated with {@link NfcAdapter} instance.
+ * @hide
+ */
+ @SystemApi
+ @FlaggedApi(Flags.FLAG_NFC_OEM_EXTENSION)
+ @NonNull public NfcOemExtension getNfcOemExtension() {
+ synchronized (sLock) {
+ if (!sHasNfcFeature) {
+ throw new UnsupportedOperationException();
+ }
+ }
+ return mNfcOemExtension;
+ }
}
diff --git a/nfc/java/android/nfc/NfcOemExtension.java b/nfc/java/android/nfc/NfcOemExtension.java
new file mode 100644
index 0000000..1eff58c
--- /dev/null
+++ b/nfc/java/android/nfc/NfcOemExtension.java
@@ -0,0 +1,160 @@
+/*
+ * 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.nfc;
+
+import android.annotation.CallbackExecutor;
+import android.annotation.FlaggedApi;
+import android.annotation.NonNull;
+import android.annotation.RequiresPermission;
+import android.annotation.SystemApi;
+import android.content.Context;
+import android.os.Binder;
+import android.os.RemoteException;
+import android.util.Log;
+
+import java.util.concurrent.Executor;
+
+/**
+ * Used for OEM extension APIs.
+ * This class holds all the APIs and callbacks defined for OEMs/vendors to extend the NFC stack
+ * for their proprietary features.
+ *
+ * @hide
+ */
+@FlaggedApi(Flags.FLAG_NFC_OEM_EXTENSION)
+@SystemApi
+public final class NfcOemExtension {
+ private static final String TAG = "NfcOemExtension";
+ private static final int OEM_EXTENSION_RESPONSE_THRESHOLD_MS = 2000;
+ private final NfcAdapter mAdapter;
+ private final NfcOemExtensionCallback mOemNfcExtensionCallback;
+ private final Context mContext;
+ private Executor mExecutor = null;
+ private Callback mCallback = null;
+ private final Object mLock = new Object();
+
+ /**
+ * Interface for Oem extensions for NFC.
+ */
+ public interface Callback {
+ /**
+ * Notify Oem to tag is connected or not
+ * ex - if tag is connected notify cover and Nfctest app if app is in testing mode
+ *
+ * @param connected status of the tag true if tag is connected otherwise false
+ * @param tag Tag details
+ */
+ void onTagConnected(boolean connected, @NonNull Tag tag);
+ }
+
+
+ /**
+ * Constructor to be used only by {@link NfcAdapter}.
+ * @hide
+ */
+ public NfcOemExtension(@NonNull Context context, @NonNull NfcAdapter adapter) {
+ mContext = context;
+ mAdapter = adapter;
+ mOemNfcExtensionCallback = new NfcOemExtensionCallback();
+ }
+
+ /**
+ * Register an {@link Callback} to listen for UWB oem extension callbacks
+ * <p>The provided callback will be invoked by the given {@link Executor}.
+ *
+ * @param executor an {@link Executor} to execute given callback
+ * @param callback oem implementation of {@link Callback}
+ */
+ @FlaggedApi(Flags.FLAG_NFC_OEM_EXTENSION)
+ @RequiresPermission(android.Manifest.permission.WRITE_SECURE_SETTINGS)
+ public void registerCallback(@NonNull @CallbackExecutor Executor executor,
+ @NonNull Callback callback) {
+ synchronized (mLock) {
+ if (mCallback != null) {
+ Log.e(TAG, "Callback already registered. Unregister existing callback before"
+ + "registering");
+ throw new IllegalArgumentException();
+ }
+ try {
+ NfcAdapter.sService.registerOemExtensionCallback(mOemNfcExtensionCallback);
+ mCallback = callback;
+ mExecutor = executor;
+ } catch (RemoteException e) {
+ mAdapter.attemptDeadServiceRecovery(e);
+ }
+ }
+ }
+
+ /**
+ * Unregister the specified {@link Callback}
+ *
+ * <p>The same {@link Callback} object used when calling
+ * {@link #registerCallback(Executor, Callback)} must be used.
+ *
+ * <p>Callbacks are automatically unregistered when an application process goes away
+ *
+ * @param callback oem implementation of {@link Callback}
+ */
+ @FlaggedApi(Flags.FLAG_NFC_OEM_EXTENSION)
+ @RequiresPermission(android.Manifest.permission.WRITE_SECURE_SETTINGS)
+ public void unregisterCallback(@NonNull Callback callback) {
+ synchronized (mLock) {
+ if (mCallback == null || mCallback != callback) {
+ Log.e(TAG, "Callback not registered");
+ throw new IllegalArgumentException();
+ }
+ try {
+ NfcAdapter.sService.unregisterOemExtensionCallback(mOemNfcExtensionCallback);
+ mCallback = null;
+ mExecutor = null;
+ } catch (RemoteException e) {
+ mAdapter.attemptDeadServiceRecovery(e);
+ }
+ }
+ }
+
+ /**
+ * Clear NfcService preference, interface method to clear NFC preference values on OEM specific
+ * events. For ex: on soft reset, Nfc default values needs to be overridden by OEM defaults.
+ */
+ @FlaggedApi(Flags.FLAG_NFC_OEM_EXTENSION)
+ @RequiresPermission(android.Manifest.permission.WRITE_SECURE_SETTINGS)
+ public void clearPreference() {
+ try {
+ NfcAdapter.sService.clearPreference();
+ } catch (RemoteException e) {
+ mAdapter.attemptDeadServiceRecovery(e);
+ }
+ }
+
+ private final class NfcOemExtensionCallback extends INfcOemExtensionCallback.Stub {
+ @Override
+ public void onTagConnected(boolean connected, Tag tag) throws RemoteException {
+ synchronized (mLock) {
+ if (mCallback == null || mExecutor == null) {
+ return;
+ }
+ final long identity = Binder.clearCallingIdentity();
+ try {
+ mExecutor.execute(() -> mCallback.onTagConnected(connected, tag));
+ } finally {
+ Binder.restoreCallingIdentity(identity);
+ }
+ }
+ }
+ }
+}
diff --git a/nfc/java/android/nfc/flags.aconfig b/nfc/java/android/nfc/flags.aconfig
index 6d4a17c..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"
@@ -84,3 +85,11 @@
description: "Enable NFC vendor command support"
bug: "289879306"
}
+
+flag {
+ name: "nfc_oem_extension"
+ is_exported: true
+ namespace: "nfc"
+ description: "Enable NFC OEM extension support"
+ bug: "331206243"
+}
diff --git a/packages/CrashRecovery/aconfig/flags.aconfig b/packages/CrashRecovery/aconfig/flags.aconfig
index 8627eac..35d7393 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-ca/strings.xml b/packages/CredentialManager/res/values-ca/strings.xml
index ba34d61..3809d92 100644
--- a/packages/CredentialManager/res/values-ca/strings.xml
+++ b/packages/CredentialManager/res/values-ca/strings.xml
@@ -39,12 +39,9 @@
<string name="seamless_transition_detail" msgid="4475509237171739843">"Tot i que avancem cap a un futur sense contrasenyes, continuaran estant disponibles juntament amb les claus d\'accés."</string>
<string name="choose_provider_title" msgid="8870795677024868108">"Tria on vols desar les <xliff:g id="CREATETYPES">%1$s</xliff:g>"</string>
<string name="choose_provider_body" msgid="4967074531845147434">"Selecciona un gestor de contrasenyes per desar la teva informació i iniciar la sessió més ràpidament la pròxima vegada"</string>
- <!-- no translation found for choose_create_option_passkey_title (8762295821604276511) -->
- <skip />
- <!-- no translation found for choose_create_option_password_title (4481366993598649224) -->
- <skip />
- <!-- no translation found for choose_create_option_sign_in_title (7092914088455358079) -->
- <skip />
+ <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="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>
@@ -73,8 +70,7 @@
<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>
- <!-- no translation found for get_dialog_title_single_tap_for (2057945648748859483) -->
- <skip />
+ <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_choose_passkey_for" msgid="9175997688078538490">"Tria una clau d\'accés desada per a <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
diff --git a/packages/CredentialManager/res/values-hy/strings.xml b/packages/CredentialManager/res/values-hy/strings.xml
index 2159840..79a2624 100644
--- a/packages/CredentialManager/res/values-hy/strings.xml
+++ b/packages/CredentialManager/res/values-hy/strings.xml
@@ -39,12 +39,9 @@
<string name="seamless_transition_detail" msgid="4475509237171739843">"Թեև մենք առանց գաղտնաբառերի ապագայի ճանապարհին ենք, դրանք դեռ հասանելի կլինեն անցաբառերի հետ մեկտեղ։"</string>
<string name="choose_provider_title" msgid="8870795677024868108">"Նշեք, թե որտեղ եք ուզում պահել ձեր <xliff:g id="CREATETYPES">%1$s</xliff:g>ը"</string>
<string name="choose_provider_body" msgid="4967074531845147434">"Ընտրեք գաղտնաբառերի կառավարիչ՝ ձեր տեղեկությունները պահելու և հաջորդ անգամ ավելի արագ մուտք գործելու համար"</string>
- <!-- no translation found for choose_create_option_passkey_title (8762295821604276511) -->
- <skip />
- <!-- no translation found for choose_create_option_password_title (4481366993598649224) -->
- <skip />
- <!-- no translation found for choose_create_option_sign_in_title (7092914088455358079) -->
- <skip />
+ <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="passkey" msgid="632353688396759522">"անցաբառ"</string>
<string name="password" msgid="6738570945182936667">"գաղտնաբառ"</string>
<string name="passkeys" msgid="5733880786866559847">"անցաբառեր"</string>
@@ -73,8 +70,7 @@
<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>
- <!-- no translation found for get_dialog_title_single_tap_for (2057945648748859483) -->
- <skip />
+ <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_choose_passkey_for" msgid="9175997688078538490">"Ընտրեք պահված անցաբառ <xliff:g id="APP_NAME">%1$s</xliff:g> հավելվածի համար"</string>
diff --git a/packages/CredentialManager/res/values-mk/strings.xml b/packages/CredentialManager/res/values-mk/strings.xml
index 428878a..95554a2 100644
--- a/packages/CredentialManager/res/values-mk/strings.xml
+++ b/packages/CredentialManager/res/values-mk/strings.xml
@@ -39,12 +39,9 @@
<string name="seamless_transition_detail" msgid="4475509237171739843">"Како што се движиме кон иднина без лозинки, лозинките сепак ќе бидат достапни покрај криптографските клучеви."</string>
<string name="choose_provider_title" msgid="8870795677024868108">"Изберете каде да ги зачувате вашите <xliff:g id="CREATETYPES">%1$s</xliff:g>"</string>
<string name="choose_provider_body" msgid="4967074531845147434">"Изберете управник со лозинки за да ги зачувате вашите податоци и да се најавите побрзо следниот пат"</string>
- <!-- no translation found for choose_create_option_passkey_title (8762295821604276511) -->
- <skip />
- <!-- no translation found for choose_create_option_password_title (4481366993598649224) -->
- <skip />
- <!-- no translation found for choose_create_option_sign_in_title (7092914088455358079) -->
- <skip />
+ <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="passkey" msgid="632353688396759522">"криптографски клуч"</string>
<string name="password" msgid="6738570945182936667">"лозинка"</string>
<string name="passkeys" msgid="5733880786866559847">"криптографски клучеви"</string>
@@ -73,8 +70,7 @@
<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>
- <!-- no translation found for get_dialog_title_single_tap_for (2057945648748859483) -->
- <skip />
+ <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_choose_passkey_for" msgid="9175997688078538490">"Изберете зачуван криптографски клуч за <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
diff --git a/packages/CredentialManager/res/values-sq/strings.xml b/packages/CredentialManager/res/values-sq/strings.xml
index 71fb2f5..f31d16a 100644
--- a/packages/CredentialManager/res/values-sq/strings.xml
+++ b/packages/CredentialManager/res/values-sq/strings.xml
@@ -39,12 +39,9 @@
<string name="seamless_transition_detail" msgid="4475509237171739843">"Teksa shkojmë drejt një të ardhmeje pa fjalëkalime, këto të fundit do të ofrohen ende së bashku me çelësat e kalimit."</string>
<string name="choose_provider_title" msgid="8870795677024868108">"Zgjidh se ku t\'i ruash <xliff:g id="CREATETYPES">%1$s</xliff:g>"</string>
<string name="choose_provider_body" msgid="4967074531845147434">"Zgjidh një menaxher fjalëkalimesh për të ruajtur informacionet e tua dhe për t\'u identifikuar më shpejt herën tjetër"</string>
- <!-- no translation found for choose_create_option_passkey_title (8762295821604276511) -->
- <skip />
- <!-- no translation found for choose_create_option_password_title (4481366993598649224) -->
- <skip />
- <!-- no translation found for choose_create_option_sign_in_title (7092914088455358079) -->
- <skip />
+ <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="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>
@@ -73,8 +70,7 @@
<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>
- <!-- no translation found for get_dialog_title_single_tap_for (2057945648748859483) -->
- <skip />
+ <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_choose_passkey_for" msgid="9175997688078538490">"Zgjidh një çelës kalimi të ruajtur për <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
diff --git a/packages/CredentialManager/res/values-ta/strings.xml b/packages/CredentialManager/res/values-ta/strings.xml
index 7a4ed5a..49d1710 100644
--- a/packages/CredentialManager/res/values-ta/strings.xml
+++ b/packages/CredentialManager/res/values-ta/strings.xml
@@ -39,12 +39,9 @@
<string name="seamless_transition_detail" msgid="4475509237171739843">"கடவுச்சொல்லற்ற எதிர்காலத்தை நோக்கி நாம் பயணிக்கிறோம். கடவுச்சாவிகளைப் பயன்படுத்தும் இதே வேளையில் கடவுச்சொற்களையும் பயன்படுத்த முடியும்."</string>
<string name="choose_provider_title" msgid="8870795677024868108">"உங்கள் <xliff:g id="CREATETYPES">%1$s</xliff:g> எங்கே சேமிக்கப்பட வேண்டும் என்பதைத் தேர்வுசெய்யுங்கள்"</string>
<string name="choose_provider_body" msgid="4967074531845147434">"உங்கள் தகவல்களைச் சேமித்து அடுத்த முறை விரைவாக உள்நுழைய ஒரு கடவுச்சொல் நிர்வாகியைத் தேர்வுசெய்யுங்கள்"</string>
- <!-- no translation found for choose_create_option_passkey_title (8762295821604276511) -->
- <skip />
- <!-- no translation found for choose_create_option_password_title (4481366993598649224) -->
- <skip />
- <!-- no translation found for choose_create_option_sign_in_title (7092914088455358079) -->
- <skip />
+ <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="passkey" msgid="632353688396759522">"கடவுச்சாவி"</string>
<string name="password" msgid="6738570945182936667">"கடவுச்சொல்"</string>
<string name="passkeys" msgid="5733880786866559847">"கடவுச்சாவிகள்"</string>
@@ -73,8 +70,7 @@
<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>
- <!-- no translation found for get_dialog_title_single_tap_for (2057945648748859483) -->
- <skip />
+ <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_choose_passkey_for" msgid="9175997688078538490">"<xliff:g id="APP_NAME">%1$s</xliff:g> ஆப்ஸுக்கான சேமிக்கப்பட்ட கடவுச்சாவியைத் தேர்ந்தெடுங்கள்"</string>
diff --git a/packages/CredentialManager/res/values-uk/strings.xml b/packages/CredentialManager/res/values-uk/strings.xml
index 9781020..62eac9a 100644
--- a/packages/CredentialManager/res/values-uk/strings.xml
+++ b/packages/CredentialManager/res/values-uk/strings.xml
@@ -39,12 +39,9 @@
<string name="seamless_transition_detail" msgid="4475509237171739843">"На шляху до безпарольного майбутнього паролі й надалі будуть використовуватися паралельно з ключами доступу."</string>
<string name="choose_provider_title" msgid="8870795677024868108">"Виберіть, де зберігати <xliff:g id="CREATETYPES">%1$s</xliff:g>"</string>
<string name="choose_provider_body" msgid="4967074531845147434">"Виберіть менеджер паролів, щоб зберігати свої дані й надалі входити в облікові записи швидше"</string>
- <!-- no translation found for choose_create_option_passkey_title (8762295821604276511) -->
- <skip />
- <!-- no translation found for choose_create_option_password_title (4481366993598649224) -->
- <skip />
- <!-- no translation found for choose_create_option_sign_in_title (7092914088455358079) -->
- <skip />
+ <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="passkey" msgid="632353688396759522">"ключ доступу"</string>
<string name="password" msgid="6738570945182936667">"пароль"</string>
<string name="passkeys" msgid="5733880786866559847">"ключі доступу"</string>
@@ -73,8 +70,7 @@
<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>
- <!-- no translation found for get_dialog_title_single_tap_for (2057945648748859483) -->
- <skip />
+ <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_choose_passkey_for" msgid="9175997688078538490">"Виберіть збережений ключ доступу для додатка <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
diff --git a/packages/CredentialManager/res/values-zh-rHK/strings.xml b/packages/CredentialManager/res/values-zh-rHK/strings.xml
index 03ae2e8..7a375c9 100644
--- a/packages/CredentialManager/res/values-zh-rHK/strings.xml
+++ b/packages/CredentialManager/res/values-zh-rHK/strings.xml
@@ -39,9 +39,9 @@
<string name="seamless_transition_detail" msgid="4475509237171739843">"我們將會改用無密碼技術,而密碼仍可與密鑰並行使用。"</string>
<string name="choose_provider_title" msgid="8870795677024868108">"選擇儲存<xliff:g id="CREATETYPES">%1$s</xliff:g>的位置"</string>
<string name="choose_provider_body" msgid="4967074531845147434">"選取密碼管理工具即可儲存自己的資料,縮短下次登入的時間"</string>
- <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_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="passkey" msgid="632353688396759522">"密鑰"</string>
<string name="password" msgid="6738570945182936667">"密碼"</string>
<string name="passkeys" msgid="5733880786866559847">"密鑰"</string>
@@ -70,7 +70,7 @@
<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_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_choose_passkey_for" msgid="9175997688078538490">"選擇已儲存的「<xliff:g id="APP_NAME">%1$s</xliff:g>」密鑰"</string>
diff --git a/packages/CredentialManager/src/com/android/credentialmanager/common/ui/BottomSheet.kt b/packages/CredentialManager/src/com/android/credentialmanager/common/ui/BottomSheet.kt
index e43b09e..f65a1b7 100644
--- a/packages/CredentialManager/src/com/android/credentialmanager/common/ui/BottomSheet.kt
+++ b/packages/CredentialManager/src/com/android/credentialmanager/common/ui/BottomSheet.kt
@@ -20,7 +20,9 @@
import androidx.compose.animation.animateContentSize
import androidx.compose.foundation.background
import androidx.compose.foundation.layout.Box
+import androidx.compose.foundation.layout.WindowInsets
import androidx.compose.foundation.layout.fillMaxWidth
+import androidx.compose.foundation.layout.navigationBars
import androidx.compose.foundation.layout.padding
import androidx.compose.foundation.layout.wrapContentHeight
import androidx.compose.material3.ExperimentalMaterial3Api
@@ -69,6 +71,7 @@
},
scrimColor = MaterialTheme.colorScheme.scrim.copy(alpha = .32f),
shape = EntryShape.TopRoundedCorner,
+ windowInsets = WindowInsets.navigationBars,
dragHandle = null,
// Never take over the full screen. We always want to leave some top scrim space
// for exiting and viewing the underlying app to help a user gain context.
diff --git a/packages/PackageInstaller/src/com/android/packageinstaller/v2/model/InstallRepository.kt b/packages/PackageInstaller/src/com/android/packageinstaller/v2/model/InstallRepository.kt
index 08028b1..f7752ff 100644
--- a/packages/PackageInstaller/src/com/android/packageinstaller/v2/model/InstallRepository.kt
+++ b/packages/PackageInstaller/src/com/android/packageinstaller/v2/model/InstallRepository.kt
@@ -60,6 +60,7 @@
import com.android.packageinstaller.v2.model.PackageUtil.isCallerSessionOwner
import com.android.packageinstaller.v2.model.PackageUtil.isInstallPermissionGrantedOrRequested
import com.android.packageinstaller.v2.model.PackageUtil.isPermissionGranted
+import com.android.packageinstaller.v2.model.PackageUtil.localLogv
import java.io.File
import java.io.IOException
import kotlinx.coroutines.DelicateCoroutinesApi
@@ -75,7 +76,6 @@
private val devicePolicyManager: DevicePolicyManager? =
context.getSystemService(DevicePolicyManager::class.java)
private val appOpsManager: AppOpsManager? = context.getSystemService(AppOpsManager::class.java)
- private val localLOGV = false
private var isSessionInstall = false
private var isTrustedSource = false
private val _stagingResult = MutableLiveData<InstallStage>()
@@ -155,8 +155,18 @@
originatingUid, callingAttributionTag
)
+ if(localLogv) {
+ Log.i(LOG_TAG, "Intent: $intent\n" +
+ "sessionId: $sessionId\n" +
+ "staged sessionId: $stagedSessionId\n" +
+ "calling package: $callingPackage\n" +
+ "callingUid: $callingUid\n" +
+ "originatingUid: $originatingUid")
+ }
+
if (callingUid == Process.INVALID_UID && sourceInfo == null) {
// Caller's identity could not be determined. Abort the install
+ Log.e(LOG_TAG, "Cannot determine caller since UID is invalid and sourceInfo is null")
return InstallAborted(ABORT_REASON_INTERNAL_ERROR)
}
@@ -165,6 +175,9 @@
|| (stagedSessionId != SessionInfo.INVALID_ID
&& !isCallerSessionOwner(packageInstaller, Process.myUid(), stagedSessionId))
) {
+ Log.e(LOG_TAG, "UID is not the owner of the session:\n" +
+ "CallingUid: $originatingUid | SessionId: $sessionId\n" +
+ "My UID: ${Process.myUid()} | StagedSessionId: $stagedSessionId")
return InstallAborted(ABORT_REASON_INTERNAL_ERROR)
}
@@ -173,6 +186,9 @@
context, callingUid, originatingUid, isTrustedSource
)
) {
+ Log.e(LOG_TAG, "UID $originatingUid needs to declare " +
+ Manifest.permission.REQUEST_INSTALL_PACKAGES
+ )
return InstallAborted(ABORT_REASON_INTERNAL_ERROR)
}
@@ -180,6 +196,7 @@
if (restriction != null) {
val adminSupportDetailsIntent =
devicePolicyManager!!.createAdminSupportIntent(restriction)
+ Log.e(LOG_TAG, "$restriction set in place. Cannot install." )
return InstallAborted(
ABORT_REASON_POLICY, message = restriction, resultIntent = adminSupportDetailsIntent
)
@@ -287,7 +304,7 @@
stagedSessionId = packageInstaller.createSession(params)
}
} catch (e: Exception) {
- Log.w(LOG_TAG, "Failed to create a staging session", e)
+ Log.e(LOG_TAG, "Failed to create a staging session", e)
_stagingResult.value = InstallAborted(
ABORT_REASON_INTERNAL_ERROR,
resultIntent = Intent().putExtra(
@@ -308,6 +325,7 @@
_stagingResult.value = InstallReady()
} else {
cleanupStagingSession()
+ Log.e(LOG_TAG, "Could not stage APK.")
_stagingResult.value = InstallAborted(
ABORT_REASON_INTERNAL_ERROR,
resultIntent = Intent().putExtra(
@@ -318,6 +336,7 @@
}
}
} else {
+ Log.e(LOG_TAG, "Invalid URI: ${if (uri == null) "null" else uri.scheme}")
_stagingResult.value = InstallAborted(
ABORT_REASON_INTERNAL_ERROR,
resultIntent = Intent().putExtra(
@@ -403,8 +422,8 @@
*/
fun requestUserConfirmation(): InstallStage {
return if (isTrustedSource) {
- if (localLOGV) {
- Log.i(LOG_TAG, "install allowed")
+ if (localLogv) {
+ Log.i(LOG_TAG, "Install allowed")
}
// Returns InstallUserActionRequired stage if install details could be successfully
// computed, else it returns InstallAborted.
@@ -428,7 +447,7 @@
val info = packageInstaller.getSessionInfo(sessionId)
val resolvedPath = info?.resolvedBaseApkPath
if (info == null || !info.isSealed || resolvedPath == null) {
- Log.w(LOG_TAG, "Session $sessionId in funky state; ignoring")
+ Log.e(LOG_TAG, "Session $sessionId in funky state; ignoring")
return InstallAborted(ABORT_REASON_INTERNAL_ERROR)
}
packageSource = Uri.fromFile(File(resolvedPath))
@@ -440,7 +459,7 @@
} else if (PackageInstaller.ACTION_CONFIRM_PRE_APPROVAL == intent.action) {
val info = packageInstaller.getSessionInfo(sessionId)
if (info == null || !info.isPreApprovalRequested) {
- Log.w(LOG_TAG, "Session $sessionId in funky state; ignoring")
+ Log.e(LOG_TAG, "Session $sessionId in funky state; ignoring")
return InstallAborted(ABORT_REASON_INTERNAL_ERROR)
}
packageSource = info
@@ -465,7 +484,7 @@
// if there's nothing to do, quietly slip into the ether
if (packageSource == null) {
- Log.w(LOG_TAG, "Unspecified source")
+ Log.e(LOG_TAG, "Unspecified source")
return InstallAborted(
ABORT_REASON_INTERNAL_ERROR,
resultIntent = Intent().putExtra(
@@ -509,7 +528,7 @@
if (scheme == null) {
return InstallAborted(ABORT_REASON_INTERNAL_ERROR)
}
- if (localLOGV) {
+ if (localLogv) {
Log.i(LOG_TAG, "processPackageUri(): uri = $packageUri, scheme = $scheme")
}
when (scheme) {
@@ -528,7 +547,7 @@
}
}
if (newPackageInfo == null) {
- Log.w(
+ Log.e(
LOG_TAG, "Requested package " + packageUri.schemeSpecificPart
+ " not available. Discontinuing installation"
)
@@ -542,7 +561,7 @@
)
}
appSnippet = getAppSnippet(context, newPackageInfo!!)
- if (localLOGV) {
+ if (localLogv) {
Log.i(LOG_TAG, "Created snippet for " + appSnippet.label)
}
}
@@ -569,7 +588,7 @@
activityResultCode = Activity.RESULT_FIRST_USER
)
}
- if (localLOGV) {
+ if (localLogv) {
Log.i(LOG_TAG, "Creating snippet for local file $sourceFile")
}
appSnippet = getAppSnippet(context, newPackageInfo!!, sourceFile!!)
@@ -590,9 +609,7 @@
* Use the SessionInfo and set up the installer for pre-commit install session.
*
* @param sessionInfo The SessionInfo to compose
- * @return
- * * [InstallUserActionRequired] if source could be processed
- * * [InstallAborted] if source is invalid or there was an error is processing a source
+ * @return [InstallUserActionRequired]
*/
private fun processSessionInfo(sessionInfo: SessionInfo, userActionReason: Int): InstallStage {
newPackageInfo = generateStubPackageInfo(sessionInfo.getAppPackageName())
@@ -718,7 +735,7 @@
appOpStr!!, requestInfo.originatingUid, requestInfo.callingPackage,
requestInfo.attributionTag, "Started package installation activity"
)
- if (localLOGV) {
+ if (localLogv) {
Log.i(LOG_TAG, "handleUnknownSources(): appMode=$appOpMode")
}
@@ -764,6 +781,9 @@
fun initiateInstall() {
if (sessionId > 0) {
packageInstaller.setPermissionsResult(sessionId, true)
+ if (localLogv) {
+ Log.i(LOG_TAG, "Install permission granted for session $sessionId")
+ }
_installResult.value = InstallAborted(
ABORT_REASON_DONE, activityResultCode = Activity.RESULT_OK
)
@@ -824,8 +844,13 @@
private fun setStageBasedOnResult(
statusCode: Int,
legacyStatus: Int,
- message: String?
+ message: String?,
) {
+ if (localLogv) {
+ Log.i(LOG_TAG, "Status code: $statusCode\n" +
+ "legacy status: $legacyStatus\n" +
+ "message: $message")
+ }
if (statusCode == PackageInstaller.STATUS_SUCCESS) {
val shouldReturnResult = intent.getBooleanExtra(Intent.EXTRA_RETURN_RESULT, false)
val resultIntent = if (shouldReturnResult) {
diff --git a/packages/PackageInstaller/src/com/android/packageinstaller/v2/model/PackageUtil.kt b/packages/PackageInstaller/src/com/android/packageinstaller/v2/model/PackageUtil.kt
index 8d8c2f1..bae6f68 100644
--- a/packages/PackageInstaller/src/com/android/packageinstaller/v2/model/PackageUtil.kt
+++ b/packages/PackageInstaller/src/com/android/packageinstaller/v2/model/PackageUtil.kt
@@ -36,7 +36,8 @@
object PackageUtil {
private val LOG_TAG = InstallRepository::class.java.simpleName
private const val DOWNLOADS_AUTHORITY = "downloads"
- private const val SPLIT_BASE_APK_END_WITH = "base.apk"
+ private const val SPLIT_BASE_APK_SUFFIX = "base.apk"
+ const val localLogv = false
/**
* Determines if the UID belongs to the system downloads provider and returns the
@@ -394,7 +395,7 @@
@JvmStatic
fun getPackageInfo(context: Context, sourceFile: File, flags: Int): PackageInfo? {
var filePath = sourceFile.absolutePath
- if (filePath.endsWith(SPLIT_BASE_APK_END_WITH)) {
+ if (filePath.endsWith(SPLIT_BASE_APK_SUFFIX)) {
val dir = sourceFile.parentFile
if ((dir?.listFiles()?.size ?: 0) > 1) {
// split apks, use file directory to get archive info
@@ -436,5 +437,9 @@
* The class to hold an incoming package's icon and label.
* See [getAppSnippet]
*/
- data class AppSnippet(var label: CharSequence?, var icon: Drawable?)
+ data class AppSnippet(var label: CharSequence?, var icon: Drawable?) {
+ override fun toString(): String {
+ return "AppSnippet[label = ${label}, hasIcon = ${icon != null}]"
+ }
+ }
}
diff --git a/packages/PackageInstaller/src/com/android/packageinstaller/v2/model/UninstallRepository.kt b/packages/PackageInstaller/src/com/android/packageinstaller/v2/model/UninstallRepository.kt
index c6b6d36..0091a3e8 100644
--- a/packages/PackageInstaller/src/com/android/packageinstaller/v2/model/UninstallRepository.kt
+++ b/packages/PackageInstaller/src/com/android/packageinstaller/v2/model/UninstallRepository.kt
@@ -226,18 +226,19 @@
userName
)
if (userManager!!.isSameProfileGroup(myUserHandle, uninstalledUser!!)) {
- if (customUserManager!!.isManagedProfile()) {
+ if (customUserManager.isManagedProfile) {
messageString = context.getString(
R.string.uninstall_application_text_current_user_work_profile, userName
)
- } else if (customUserManager!!.isCloneProfile()){
+ } else if (customUserManager.isCloneProfile){
isClonedApp = true
messageString = context.getString(
R.string.uninstall_application_text_current_user_clone_profile
)
} else if (Flags.allowPrivateProfile()
&& android.multiuser.Flags.enablePrivateSpaceFeatures()
- && customUserManager!!.isPrivateProfile()) {
+ && customUserManager.isPrivateProfile
+ ) {
// TODO(b/324244123): Get these Strings from a User Property API.
messageString = context.getString(
R.string.uninstall_application_text_current_user_private_profile
@@ -401,6 +402,7 @@
uninstallData.putBoolean(Intent.EXTRA_UNINSTALL_ALL_USERS, uninstallFromAllUsers)
uninstallData.putCharSequence(EXTRA_APP_LABEL, targetAppLabel)
uninstallData.putBoolean(EXTRA_IS_CLONE_APP, isClonedApp)
+ uninstallData.putInt(EXTRA_TARGET_USER_ID, uninstalledUser!!.identifier)
Log.i(LOG_TAG, "Uninstalling extras = $uninstallData")
// Get a PendingIntent for result broadcast and issue an uninstall request
@@ -730,7 +732,7 @@
}
}
- fun cancelInstall() {
+ fun cancelUninstall() {
if (callback != null) {
callback!!.onUninstallComplete(
targetPackageName!!,
@@ -749,6 +751,7 @@
private const val EXTRA_IS_CLONE_APP = "com.android.packageinstaller.extra.IS_CLONE_APP"
private const val EXTRA_PACKAGE_NAME =
"com.android.packageinstaller.extra.EXTRA_PACKAGE_NAME"
+ private const val EXTRA_TARGET_USER_ID = "EXTRA_TARGET_USER_ID"
}
class CallerInfo(val activityName: String?, val uid: Int)
diff --git a/packages/PackageInstaller/src/com/android/packageinstaller/v2/ui/InstallLaunch.kt b/packages/PackageInstaller/src/com/android/packageinstaller/v2/ui/InstallLaunch.kt
index 6f8eca3..31b9ccb 100644
--- a/packages/PackageInstaller/src/com/android/packageinstaller/v2/ui/InstallLaunch.kt
+++ b/packages/PackageInstaller/src/com/android/packageinstaller/v2/ui/InstallLaunch.kt
@@ -43,6 +43,7 @@
import com.android.packageinstaller.v2.model.InstallStage
import com.android.packageinstaller.v2.model.InstallSuccess
import com.android.packageinstaller.v2.model.InstallUserActionRequired
+import com.android.packageinstaller.v2.model.PackageUtil.localLogv
import com.android.packageinstaller.v2.ui.fragments.AnonymousSourceFragment
import com.android.packageinstaller.v2.ui.fragments.ExternalSourcesBlockedFragment
import com.android.packageinstaller.v2.ui.fragments.InstallConfirmationFragment
@@ -66,8 +67,6 @@
private const val TAG_DIALOG = "dialog"
}
- private val localLOGV = false
-
/**
* A collection of unknown sources listeners that are actively listening for app ops mode
* changes
@@ -199,14 +198,14 @@
// admin enforcing the restriction for the affected user. If not enforced by the admin,
// show the system dialog.
if (adminSupportIntent != null) {
- if (localLOGV) {
+ if (localLogv) {
Log.i(LOG_TAG, "Restriction set by admin, starting $adminSupportIntent")
}
startActivity(adminSupportIntent)
// Finish the package installer app since the next dialog will not be shown by this app
shouldFinish = true
} else {
- if (localLOGV) {
+ if (localLogv) {
Log.i(LOG_TAG, "Restriction set by system: $restriction")
}
val blockedByPolicyDialog = createDevicePolicyRestrictionDialog(restriction)
@@ -225,7 +224,7 @@
* @return The dialog
*/
private fun createDevicePolicyRestrictionDialog(restriction: String?): DialogFragment? {
- if (localLOGV) {
+ if (localLogv) {
Log.i(LOG_TAG, "createDialog($restriction)")
}
return when (restriction) {
@@ -259,6 +258,9 @@
}
override fun onPositiveResponse(reasonCode: Int) {
+ if (localLogv) {
+ Log.d(LOG_TAG, "Positive button clicked. ReasonCode: $reasonCode")
+ }
when (reasonCode) {
InstallUserActionRequired.USER_ACTION_REASON_ANONYMOUS_SOURCE ->
installViewModel!!.forcedSkipSourceCheck()
@@ -269,6 +271,9 @@
}
override fun onNegativeResponse(stageCode: Int) {
+ if (localLogv) {
+ Log.d(LOG_TAG, "Negative button clicked. StageCode: $stageCode")
+ }
if (stageCode == InstallStage.STAGE_USER_ACTION_REQUIRED) {
installViewModel!!.cleanupInstall()
}
@@ -276,10 +281,16 @@
}
override fun onNegativeResponse(resultCode: Int, data: Intent?) {
+ if (localLogv) {
+ Log.d(LOG_TAG, "Negative button clicked. resultCode: $resultCode; Intent: $data")
+ }
setResult(resultCode, data, true)
}
override fun sendUnknownAppsIntent(sourcePackageName: String) {
+ if (localLogv) {
+ Log.d(LOG_TAG, "Launching unknown-apps settings intent for $sourcePackageName")
+ }
val settingsIntent = Intent()
settingsIntent.setAction(Settings.ACTION_MANAGE_UNKNOWN_APP_SOURCES)
val packageUri = Uri.parse("package:$sourcePackageName")
@@ -299,6 +310,9 @@
}
override fun openInstalledApp(intent: Intent?) {
+ if (localLogv) {
+ Log.d(LOG_TAG, "Opening $intent")
+ }
setResult(Activity.RESULT_OK, intent, true)
if (intent != null && intent.hasCategory(Intent.CATEGORY_LAUNCHER)) {
startActivity(intent)
diff --git a/packages/PackageInstaller/src/com/android/packageinstaller/v2/ui/UninstallLaunch.kt b/packages/PackageInstaller/src/com/android/packageinstaller/v2/ui/UninstallLaunch.kt
index 0050c7e..c4ca272 100644
--- a/packages/PackageInstaller/src/com/android/packageinstaller/v2/ui/UninstallLaunch.kt
+++ b/packages/PackageInstaller/src/com/android/packageinstaller/v2/ui/UninstallLaunch.kt
@@ -28,6 +28,7 @@
import androidx.fragment.app.FragmentActivity
import androidx.fragment.app.FragmentManager
import androidx.lifecycle.ViewModelProvider
+import com.android.packageinstaller.v2.model.PackageUtil.localLogv
import com.android.packageinstaller.v2.model.UninstallAborted
import com.android.packageinstaller.v2.model.UninstallFailed
import com.android.packageinstaller.v2.model.UninstallRepository
@@ -159,11 +160,17 @@
}
override fun onPositiveResponse(keepData: Boolean) {
+ if (localLogv) {
+ Log.d(LOG_TAG, "Staring uninstall")
+ }
uninstallViewModel!!.initiateUninstall(keepData)
}
override fun onNegativeResponse() {
- uninstallViewModel!!.cancelInstall()
+ if (localLogv) {
+ Log.d(LOG_TAG, "Cancelling uninstall")
+ }
+ uninstallViewModel!!.cancelUninstall()
setResult(Activity.RESULT_FIRST_USER, null, true)
}
}
diff --git a/packages/PackageInstaller/src/com/android/packageinstaller/v2/ui/fragments/AnonymousSourceFragment.java b/packages/PackageInstaller/src/com/android/packageinstaller/v2/ui/fragments/AnonymousSourceFragment.java
index b29cb2a..cc40b0c 100644
--- a/packages/PackageInstaller/src/com/android/packageinstaller/v2/ui/fragments/AnonymousSourceFragment.java
+++ b/packages/PackageInstaller/src/com/android/packageinstaller/v2/ui/fragments/AnonymousSourceFragment.java
@@ -21,6 +21,7 @@
import android.content.Context;
import android.content.DialogInterface;
import android.os.Bundle;
+import android.util.Log;
import androidx.annotation.NonNull;
import androidx.fragment.app.DialogFragment;
import com.android.packageinstaller.R;
@@ -33,7 +34,7 @@
*/
public class AnonymousSourceFragment extends DialogFragment {
- public static String TAG = AnonymousSourceFragment.class.getSimpleName();
+ public static final String LOG_TAG = AnonymousSourceFragment.class.getSimpleName();
@NonNull
private InstallActionListener mInstallActionListener;
@NonNull
@@ -48,7 +49,8 @@
@NonNull
@Override
public Dialog onCreateDialog(Bundle savedInstanceState) {
- mDialog = new AlertDialog.Builder(requireContext())
+ Log.i(LOG_TAG, "Creating " + LOG_TAG);
+ mDialog = new AlertDialog.Builder(requireContext())
.setMessage(R.string.anonymous_source_warning)
.setPositiveButton(R.string.anonymous_source_continue,
((dialog, which) -> mInstallActionListener.onPositiveResponse(
@@ -56,7 +58,7 @@
.setNegativeButton(R.string.cancel,
((dialog, which) -> mInstallActionListener.onNegativeResponse(
InstallStage.STAGE_USER_ACTION_REQUIRED))).create();
- return mDialog;
+ return mDialog;
}
@Override
diff --git a/packages/PackageInstaller/src/com/android/packageinstaller/v2/ui/fragments/ExternalSourcesBlockedFragment.java b/packages/PackageInstaller/src/com/android/packageinstaller/v2/ui/fragments/ExternalSourcesBlockedFragment.java
index 2314d6b..a95137d 100644
--- a/packages/PackageInstaller/src/com/android/packageinstaller/v2/ui/fragments/ExternalSourcesBlockedFragment.java
+++ b/packages/PackageInstaller/src/com/android/packageinstaller/v2/ui/fragments/ExternalSourcesBlockedFragment.java
@@ -21,6 +21,7 @@
import android.content.Context;
import android.content.DialogInterface;
import android.os.Bundle;
+import android.util.Log;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import androidx.fragment.app.DialogFragment;
@@ -34,7 +35,7 @@
*/
public class ExternalSourcesBlockedFragment extends DialogFragment {
- private final String TAG = ExternalSourcesBlockedFragment.class.getSimpleName();
+ private static final String LOG_TAG = ExternalSourcesBlockedFragment.class.getSimpleName();
@NonNull
private final InstallUserActionRequired mDialogData;
@NonNull
@@ -55,6 +56,7 @@
@NonNull
@Override
public Dialog onCreateDialog(@Nullable Bundle savedInstanceState) {
+ Log.i(LOG_TAG, "Creating " + LOG_TAG + "\n" + mDialogData);
mDialog = new AlertDialog.Builder(requireContext())
.setTitle(mDialogData.getAppLabel())
.setIcon(mDialogData.getAppIcon())
diff --git a/packages/PackageInstaller/src/com/android/packageinstaller/v2/ui/fragments/InstallConfirmationFragment.java b/packages/PackageInstaller/src/com/android/packageinstaller/v2/ui/fragments/InstallConfirmationFragment.java
index 0a4aa48..99b1eec 100644
--- a/packages/PackageInstaller/src/com/android/packageinstaller/v2/ui/fragments/InstallConfirmationFragment.java
+++ b/packages/PackageInstaller/src/com/android/packageinstaller/v2/ui/fragments/InstallConfirmationFragment.java
@@ -23,6 +23,7 @@
import android.os.Bundle;
import android.text.Html;
import android.text.method.ScrollingMovementMethod;
+import android.util.Log;
import android.view.View;
import android.widget.TextView;
import androidx.annotation.NonNull;
@@ -37,8 +38,7 @@
*/
public class InstallConfirmationFragment extends DialogFragment {
- public static String TAG = InstallConfirmationFragment.class.getSimpleName();
-
+ public static final String LOG_TAG = InstallConfirmationFragment.class.getSimpleName();
@NonNull
private final InstallUserActionRequired mDialogData;
@NonNull
@@ -59,6 +59,7 @@
@NonNull
@Override
public Dialog onCreateDialog(@Nullable Bundle savedInstanceState) {
+ Log.i(LOG_TAG, "Creating " + LOG_TAG + "\n" + mDialogData);
View dialogView = getLayoutInflater().inflate(R.layout.install_content_view, null);
int positiveBtnTextRes;
diff --git a/packages/PackageInstaller/src/com/android/packageinstaller/v2/ui/fragments/InstallFailedFragment.java b/packages/PackageInstaller/src/com/android/packageinstaller/v2/ui/fragments/InstallFailedFragment.java
index 4667a7a..7c9d98d 100644
--- a/packages/PackageInstaller/src/com/android/packageinstaller/v2/ui/fragments/InstallFailedFragment.java
+++ b/packages/PackageInstaller/src/com/android/packageinstaller/v2/ui/fragments/InstallFailedFragment.java
@@ -38,7 +38,7 @@
*/
public class InstallFailedFragment extends DialogFragment {
- private static final String TAG = InstallFailedFragment.class.getSimpleName();
+ private static final String LOG_TAG = InstallFailedFragment.class.getSimpleName();
private final InstallFailed mDialogData;
private InstallActionListener mInstallActionListener;
@@ -55,6 +55,7 @@
@NonNull
@Override
public Dialog onCreateDialog(@Nullable Bundle savedInstanceState) {
+ Log.i(LOG_TAG, "Creating " + LOG_TAG + "\n" + mDialogData);
View dialogView = getLayoutInflater().inflate(R.layout.install_content_view, null);
AlertDialog dialog = new AlertDialog.Builder(requireContext())
.setTitle(mDialogData.getAppLabel())
@@ -75,7 +76,7 @@
* @param statusCode The status code from the package installer.
*/
private void setExplanationFromErrorCode(int statusCode, View dialogView) {
- Log.d(TAG, "Installation status code: " + statusCode);
+ Log.i(LOG_TAG, "Installation status code: " + statusCode);
View viewToEnable;
switch (statusCode) {
diff --git a/packages/PackageInstaller/src/com/android/packageinstaller/v2/ui/fragments/InstallInstallingFragment.java b/packages/PackageInstaller/src/com/android/packageinstaller/v2/ui/fragments/InstallInstallingFragment.java
index 7327b5d..27210b7 100644
--- a/packages/PackageInstaller/src/com/android/packageinstaller/v2/ui/fragments/InstallInstallingFragment.java
+++ b/packages/PackageInstaller/src/com/android/packageinstaller/v2/ui/fragments/InstallInstallingFragment.java
@@ -20,6 +20,7 @@
import android.app.Dialog;
import android.content.DialogInterface;
import android.os.Bundle;
+import android.util.Log;
import android.view.View;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
@@ -32,6 +33,7 @@
*/
public class InstallInstallingFragment extends DialogFragment {
+ private static final String LOG_TAG = InstallInstallingFragment.class.getSimpleName();
private final InstallInstalling mDialogData;
private AlertDialog mDialog;
@@ -42,6 +44,7 @@
@NonNull
@Override
public Dialog onCreateDialog(@Nullable Bundle savedInstanceState) {
+ Log.i(LOG_TAG, "Creating " + LOG_TAG + "\n" + mDialogData);
View dialogView = getLayoutInflater().inflate(R.layout.install_content_view, null);
mDialog = new AlertDialog.Builder(requireContext())
.setTitle(mDialogData.getAppLabel())
diff --git a/packages/PackageInstaller/src/com/android/packageinstaller/v2/ui/fragments/InstallStagingFragment.java b/packages/PackageInstaller/src/com/android/packageinstaller/v2/ui/fragments/InstallStagingFragment.java
index feb2428..3cab96b 100644
--- a/packages/PackageInstaller/src/com/android/packageinstaller/v2/ui/fragments/InstallStagingFragment.java
+++ b/packages/PackageInstaller/src/com/android/packageinstaller/v2/ui/fragments/InstallStagingFragment.java
@@ -20,6 +20,7 @@
import android.app.Dialog;
import android.content.DialogInterface;
import android.os.Bundle;
+import android.util.Log;
import android.view.View;
import android.widget.ProgressBar;
import androidx.annotation.NonNull;
@@ -29,13 +30,14 @@
public class InstallStagingFragment extends DialogFragment {
- private static final String TAG = InstallStagingFragment.class.getSimpleName();
+ private static final String LOG_TAG = InstallStagingFragment.class.getSimpleName();
private ProgressBar mProgressBar;
private AlertDialog mDialog;
@NonNull
@Override
public Dialog onCreateDialog(@Nullable Bundle savedInstanceState) {
+ Log.i(LOG_TAG, "Creating " + LOG_TAG);
View dialogView = getLayoutInflater().inflate(R.layout.install_content_view, null);
dialogView.requireViewById(R.id.staging).setVisibility(View.VISIBLE);
diff --git a/packages/PackageInstaller/src/com/android/packageinstaller/v2/ui/fragments/InstallSuccessFragment.java b/packages/PackageInstaller/src/com/android/packageinstaller/v2/ui/fragments/InstallSuccessFragment.java
index e491f9c..28b5423b 100644
--- a/packages/PackageInstaller/src/com/android/packageinstaller/v2/ui/fragments/InstallSuccessFragment.java
+++ b/packages/PackageInstaller/src/com/android/packageinstaller/v2/ui/fragments/InstallSuccessFragment.java
@@ -60,6 +60,7 @@
@NonNull
@Override
public Dialog onCreateDialog(@Nullable Bundle savedInstanceState) {
+ Log.i(LOG_TAG, "Creating " + LOG_TAG + "\n" + mDialogData);
View dialogView = getLayoutInflater().inflate(R.layout.install_content_view, null);
mDialog = new AlertDialog.Builder(requireContext())
.setTitle(mDialogData.getAppLabel())
diff --git a/packages/PackageInstaller/src/com/android/packageinstaller/v2/ui/fragments/ParseErrorFragment.java b/packages/PackageInstaller/src/com/android/packageinstaller/v2/ui/fragments/ParseErrorFragment.java
index 68d48d6..cde3d8d 100644
--- a/packages/PackageInstaller/src/com/android/packageinstaller/v2/ui/fragments/ParseErrorFragment.java
+++ b/packages/PackageInstaller/src/com/android/packageinstaller/v2/ui/fragments/ParseErrorFragment.java
@@ -21,6 +21,7 @@
import android.content.Context;
import android.content.DialogInterface;
import android.os.Bundle;
+import android.util.Log;
import androidx.annotation.NonNull;
import androidx.fragment.app.DialogFragment;
import com.android.packageinstaller.R;
@@ -29,7 +30,7 @@
public class ParseErrorFragment extends DialogFragment {
- private static final String TAG = ParseErrorFragment.class.getSimpleName();
+ private static final String LOG_TAG = ParseErrorFragment.class.getSimpleName();
private final InstallAborted mDialogData;
private InstallActionListener mInstallActionListener;
@@ -46,7 +47,8 @@
@NonNull
@Override
public Dialog onCreateDialog(Bundle savedInstanceState) {
- return new AlertDialog.Builder(getActivity())
+ Log.i(LOG_TAG, "Creating " + LOG_TAG + "\n" + mDialogData);
+ return new AlertDialog.Builder(requireContext())
.setMessage(R.string.Parse_error_dlg_text)
.setPositiveButton(R.string.ok,
(dialog, which) ->
diff --git a/packages/PackageInstaller/src/com/android/packageinstaller/v2/ui/fragments/SimpleErrorFragment.java b/packages/PackageInstaller/src/com/android/packageinstaller/v2/ui/fragments/SimpleErrorFragment.java
index 58b8b2d..66a353a 100644
--- a/packages/PackageInstaller/src/com/android/packageinstaller/v2/ui/fragments/SimpleErrorFragment.java
+++ b/packages/PackageInstaller/src/com/android/packageinstaller/v2/ui/fragments/SimpleErrorFragment.java
@@ -21,6 +21,7 @@
import android.content.Context;
import android.content.DialogInterface;
import android.os.Bundle;
+import android.util.Log;
import androidx.annotation.NonNull;
import androidx.fragment.app.DialogFragment;
import com.android.packageinstaller.R;
@@ -29,7 +30,7 @@
public class SimpleErrorFragment extends DialogFragment {
- private static final String TAG = SimpleErrorFragment.class.getSimpleName();
+ private static final String LOG_TAG = SimpleErrorFragment.class.getSimpleName();
private final int mMessageResId;
private InstallActionListener mInstallActionListener;
@@ -46,7 +47,9 @@
@NonNull
@Override
public Dialog onCreateDialog(Bundle savedInstanceState) {
- return new AlertDialog.Builder(getActivity())
+ Log.i(LOG_TAG, "Creating " + LOG_TAG + "\n" +
+ "Dialog message: " + requireContext().getString(mMessageResId));
+ return new AlertDialog.Builder(requireContext())
.setMessage(mMessageResId)
.setPositiveButton(R.string.ok,
(dialog, which) ->
diff --git a/packages/PackageInstaller/src/com/android/packageinstaller/v2/ui/fragments/UninstallConfirmationFragment.java b/packages/PackageInstaller/src/com/android/packageinstaller/v2/ui/fragments/UninstallConfirmationFragment.java
index 32ac4a6..87af1ae 100644
--- a/packages/PackageInstaller/src/com/android/packageinstaller/v2/ui/fragments/UninstallConfirmationFragment.java
+++ b/packages/PackageInstaller/src/com/android/packageinstaller/v2/ui/fragments/UninstallConfirmationFragment.java
@@ -23,6 +23,7 @@
import android.content.Context;
import android.content.DialogInterface;
import android.os.Bundle;
+import android.util.Log;
import android.view.View;
import android.widget.CheckBox;
import android.widget.TextView;
@@ -37,7 +38,7 @@
* Dialog to show while requesting user confirmation for uninstalling an app.
*/
public class UninstallConfirmationFragment extends DialogFragment {
-
+ private static final String LOG_TAG = UninstallConfirmationFragment.class.getSimpleName();
private final UninstallUserActionRequired mDialogData;
private UninstallActionListener mUninstallActionListener;
@@ -56,6 +57,7 @@
@NonNull
@Override
public Dialog onCreateDialog(@Nullable Bundle savedInstanceState) {
+ Log.i(LOG_TAG, "Creating " + LOG_TAG + "\n" + mDialogData);
AlertDialog.Builder builder = new AlertDialog.Builder(requireContext())
.setTitle(mDialogData.getTitle())
.setPositiveButton(R.string.ok,
diff --git a/packages/PackageInstaller/src/com/android/packageinstaller/v2/ui/fragments/UninstallErrorFragment.java b/packages/PackageInstaller/src/com/android/packageinstaller/v2/ui/fragments/UninstallErrorFragment.java
index eb7183d..51e16cb 100644
--- a/packages/PackageInstaller/src/com/android/packageinstaller/v2/ui/fragments/UninstallErrorFragment.java
+++ b/packages/PackageInstaller/src/com/android/packageinstaller/v2/ui/fragments/UninstallErrorFragment.java
@@ -21,6 +21,7 @@
import android.content.Context;
import android.content.DialogInterface;
import android.os.Bundle;
+import android.util.Log;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import androidx.fragment.app.DialogFragment;
@@ -33,6 +34,7 @@
*/
public class UninstallErrorFragment extends DialogFragment {
+ private static final String LOG_TAG = UninstallErrorFragment.class.getSimpleName();
private final UninstallAborted mDialogData;
private UninstallActionListener mUninstallActionListener;
@@ -49,6 +51,7 @@
@NonNull
@Override
public Dialog onCreateDialog(@Nullable Bundle savedInstanceState) {
+ Log.i(LOG_TAG, "Creating " + LOG_TAG + "\n" + mDialogData);
AlertDialog.Builder builder = new AlertDialog.Builder(requireContext())
.setMessage(mDialogData.getDialogTextResource())
.setNegativeButton(R.string.ok,
diff --git a/packages/PackageInstaller/src/com/android/packageinstaller/v2/ui/fragments/UninstallUninstallingFragment.java b/packages/PackageInstaller/src/com/android/packageinstaller/v2/ui/fragments/UninstallUninstallingFragment.java
index 835efc6..626ff6b 100644
--- a/packages/PackageInstaller/src/com/android/packageinstaller/v2/ui/fragments/UninstallUninstallingFragment.java
+++ b/packages/PackageInstaller/src/com/android/packageinstaller/v2/ui/fragments/UninstallUninstallingFragment.java
@@ -19,6 +19,7 @@
import android.app.AlertDialog;
import android.app.Dialog;
import android.os.Bundle;
+import android.util.Log;
import androidx.annotation.NonNull;
import androidx.fragment.app.DialogFragment;
import com.android.packageinstaller.R;
@@ -29,6 +30,7 @@
*/
public class UninstallUninstallingFragment extends DialogFragment {
+ private static final String LOG_TAG = UninstallUninstallingFragment.class.getSimpleName();
UninstallUninstalling mDialogData;
public UninstallUninstallingFragment(UninstallUninstalling dialogData) {
@@ -38,6 +40,7 @@
@NonNull
@Override
public Dialog onCreateDialog(Bundle savedInstanceState) {
+ Log.i(LOG_TAG, "Creating " + LOG_TAG + "\n" + mDialogData);
AlertDialog.Builder builder = new AlertDialog.Builder(requireContext())
.setCancelable(false);
if (mDialogData.isCloneUser()) {
diff --git a/packages/PackageInstaller/src/com/android/packageinstaller/v2/viewmodel/UninstallViewModel.kt b/packages/PackageInstaller/src/com/android/packageinstaller/v2/viewmodel/UninstallViewModel.kt
index 80886e9..3081d7d 100644
--- a/packages/PackageInstaller/src/com/android/packageinstaller/v2/viewmodel/UninstallViewModel.kt
+++ b/packages/PackageInstaller/src/com/android/packageinstaller/v2/viewmodel/UninstallViewModel.kt
@@ -56,7 +56,7 @@
}
}
- fun cancelInstall() {
- repository.cancelInstall()
+ fun cancelUninstall() {
+ repository.cancelUninstall()
}
}
diff --git a/packages/SettingsLib/SearchWidget/res/values-or/strings.xml b/packages/SettingsLib/SearchWidget/res/values-or/strings.xml
index 4f92d02..07f090f 100644
--- a/packages/SettingsLib/SearchWidget/res/values-or/strings.xml
+++ b/packages/SettingsLib/SearchWidget/res/values-or/strings.xml
@@ -17,5 +17,5 @@
<resources xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="search_menu" msgid="1914043873178389845">"ସେଟିଂସରେ ସର୍ଚ୍ଚ କରନ୍ତୁ"</string>
+ <string name="search_menu" msgid="1914043873178389845">"ସର୍ଚ୍ଚ ସେଟିଂସ"</string>
</resources>
diff --git a/packages/SettingsLib/res/values-af/strings.xml b/packages/SettingsLib/res/values-af/strings.xml
index 2622dde..eb3d4af 100644
--- a/packages/SettingsLib/res/values-af/strings.xml
+++ b/packages/SettingsLib/res/values-af/strings.xml
@@ -106,6 +106,28 @@
<string name="bluetooth_hearing_aid_left_active" msgid="7084887715570971441">"Aktief, net links"</string>
<string name="bluetooth_hearing_aid_right_active" msgid="8574683234077567230">"Aktief, net regs"</string>
<string name="bluetooth_hearing_aid_left_and_right_active" msgid="407704460573163973">"Aktief, links en regs"</string>
+ <!-- no translation found for bluetooth_active_media_only_battery_level (1164678961213251365) -->
+ <skip />
+ <!-- no translation found for bluetooth_active_media_only_battery_level_untethered (1345174295097854560) -->
+ <skip />
+ <!-- no translation found for bluetooth_battery_level_lea_support (8580950145907305436) -->
+ <skip />
+ <!-- no translation found for bluetooth_battery_level_untethered_lea_support (8534816721698743015) -->
+ <skip />
+ <!-- no translation found for bluetooth_battery_level_untethered_left_lea_support (6605320955858788855) -->
+ <skip />
+ <!-- no translation found for bluetooth_battery_level_untethered_right_lea_support (5717356160322149355) -->
+ <skip />
+ <!-- no translation found for bluetooth_active_media_only_no_battery_level (71106861912593126) -->
+ <skip />
+ <!-- no translation found for bluetooth_saved_device_lea_support (7231323139968285768) -->
+ <skip />
+ <!-- no translation found for bluetooth_hearing_aid_media_only_left_active (1632152540901488645) -->
+ <skip />
+ <!-- no translation found for bluetooth_hearing_aid_media_only_right_active (3854140683042617230) -->
+ <skip />
+ <!-- no translation found for bluetooth_hearing_aid_media_only_left_and_right_active (1299913413062528417) -->
+ <skip />
<string name="bluetooth_profile_a2dp" msgid="4632426382762851724">"Media-oudio"</string>
<string name="bluetooth_profile_headset" msgid="5395952236133499331">"Foonoproepe"</string>
<string name="bluetooth_profile_opp" msgid="6692618568149493430">"Lêeroordrag"</string>
@@ -643,8 +665,6 @@
<string name="guest_notification_ephemeral" msgid="7263252466950923871">"Alle aktiwiteit sal uitgevee word wanneer jy uitgaan"</string>
<string name="guest_notification_non_ephemeral" msgid="6843799963012259330">"Jy kan jou aktiwiteit stoor of uitvee wanneer jy uitgaan"</string>
<string name="guest_notification_non_ephemeral_non_first_login" msgid="8009307983766934876">"Stel terug om aktiwiteit nou uit te vee, of stoor of vee aktiwiteit uit wanneer jy uitgaan"</string>
- <string name="user_image_take_photo" msgid="467512954561638530">"Neem \'n foto"</string>
- <string name="user_image_choose_photo" msgid="1363820919146782908">"Kies \'n prent"</string>
<string name="user_image_photo_selector" msgid="433658323306627093">"Kies foto"</string>
<string name="failed_attempts_now_wiping_device" msgid="4016329172216428897">"Te veel verkeerde pogings. Hierdie toestel se data sal uitgevee word."</string>
<string name="failed_attempts_now_wiping_user" msgid="469060411789668050">"Te veel verkeerde pogings. Hierdie gebruiker sal uitgevee word."</string>
@@ -684,8 +704,6 @@
<string name="accessibility_ethernet_disconnected" msgid="2832501530856497489">"Ethernet is ontkoppel."</string>
<string name="accessibility_ethernet_connected" msgid="6175942685957461563">"Ethernet."</string>
<string name="accessibility_no_calling" msgid="3540827068323895748">"Geen oproepe nie."</string>
- <string name="avatar_picker_title" msgid="8492884172713170652">"Kies \'n profielprent"</string>
- <string name="default_user_icon_description" msgid="6554047177298972638">"Verstekgebruikerikoon"</string>
<string name="physical_keyboard_title" msgid="4811935435315835220">"Fisieke sleutelbord"</string>
<string name="keyboard_layout_dialog_title" msgid="3927180147005616290">"Kies sleutelborduitleg"</string>
<string name="keyboard_layout_default_label" msgid="1997292217218546957">"Verstek"</string>
diff --git a/packages/SettingsLib/res/values-am/strings.xml b/packages/SettingsLib/res/values-am/strings.xml
index 52f68ab..bda0277 100644
--- a/packages/SettingsLib/res/values-am/strings.xml
+++ b/packages/SettingsLib/res/values-am/strings.xml
@@ -106,6 +106,28 @@
<string name="bluetooth_hearing_aid_left_active" msgid="7084887715570971441">"ገቢር፣ ግራ ብቻ"</string>
<string name="bluetooth_hearing_aid_right_active" msgid="8574683234077567230">"ገቢር፣ ቀኝ ብቻ"</string>
<string name="bluetooth_hearing_aid_left_and_right_active" msgid="407704460573163973">"ገቢር፣ ግራ እና ቀኝ"</string>
+ <!-- no translation found for bluetooth_active_media_only_battery_level (1164678961213251365) -->
+ <skip />
+ <!-- no translation found for bluetooth_active_media_only_battery_level_untethered (1345174295097854560) -->
+ <skip />
+ <!-- no translation found for bluetooth_battery_level_lea_support (8580950145907305436) -->
+ <skip />
+ <!-- no translation found for bluetooth_battery_level_untethered_lea_support (8534816721698743015) -->
+ <skip />
+ <!-- no translation found for bluetooth_battery_level_untethered_left_lea_support (6605320955858788855) -->
+ <skip />
+ <!-- no translation found for bluetooth_battery_level_untethered_right_lea_support (5717356160322149355) -->
+ <skip />
+ <!-- no translation found for bluetooth_active_media_only_no_battery_level (71106861912593126) -->
+ <skip />
+ <!-- no translation found for bluetooth_saved_device_lea_support (7231323139968285768) -->
+ <skip />
+ <!-- no translation found for bluetooth_hearing_aid_media_only_left_active (1632152540901488645) -->
+ <skip />
+ <!-- no translation found for bluetooth_hearing_aid_media_only_right_active (3854140683042617230) -->
+ <skip />
+ <!-- no translation found for bluetooth_hearing_aid_media_only_left_and_right_active (1299913413062528417) -->
+ <skip />
<string name="bluetooth_profile_a2dp" msgid="4632426382762851724">"የማህደረ መረጃ ኦዲዮ"</string>
<string name="bluetooth_profile_headset" msgid="5395952236133499331">"የስልክ ጥሪዎች"</string>
<string name="bluetooth_profile_opp" msgid="6692618568149493430">"ፋይል ማስተላለፍ"</string>
@@ -643,8 +665,6 @@
<string name="guest_notification_ephemeral" msgid="7263252466950923871">"በሚወጡበት ጊዜ ሁሉም እንቅስቃሴዎች ይሰረዛሉ"</string>
<string name="guest_notification_non_ephemeral" msgid="6843799963012259330">"በሚወጡበት ጊዜ እንቅስቃሴዎን ማስቀመጥ ወይም መሰረዝ ይችላሉ"</string>
<string name="guest_notification_non_ephemeral_non_first_login" msgid="8009307983766934876">"የክፍለ-ጊዜ እንቅስቃሴን አሁን ለመሰረዝ ዳግም ያስጀምሩ፣ ወይም በሚወጡበት ጊዜ እንቅስቃሴን ማስቀመጥ ወይም መሰረዝ ይችላሉ"</string>
- <string name="user_image_take_photo" msgid="467512954561638530">"ፎቶ አንሳ"</string>
- <string name="user_image_choose_photo" msgid="1363820919146782908">"ምስል ይምረጡ"</string>
<string name="user_image_photo_selector" msgid="433658323306627093">"ፎቶ ይምረጡ"</string>
<string name="failed_attempts_now_wiping_device" msgid="4016329172216428897">"በጣም ብዙ ትክክል ያልሆኑ ሙከራዎች። የዚህ መሣሪያ ውሂብ ይሰረዛል።"</string>
<string name="failed_attempts_now_wiping_user" msgid="469060411789668050">"በጣም ብዙ ትክክል ያልሆኑ ሙከራዎች። ይህ ተጠቃሚ ይሰረዛል።"</string>
@@ -684,8 +704,6 @@
<string name="accessibility_ethernet_disconnected" msgid="2832501530856497489">"ኤተርኔት ተነቅሏል።"</string>
<string name="accessibility_ethernet_connected" msgid="6175942685957461563">"ኢተርኔት።"</string>
<string name="accessibility_no_calling" msgid="3540827068323895748">"መደወል የለም።"</string>
- <string name="avatar_picker_title" msgid="8492884172713170652">"የመገለጫ ሥዕል ይምረጡ"</string>
- <string name="default_user_icon_description" msgid="6554047177298972638">"ነባሪ የተጠቃሚ አዶ"</string>
<string name="physical_keyboard_title" msgid="4811935435315835220">"አካላዊ ቁልፍ ሰሌዳ"</string>
<string name="keyboard_layout_dialog_title" msgid="3927180147005616290">"የቁልፍ ሰሌዳ አቀማመጥን ይምረጡ"</string>
<string name="keyboard_layout_default_label" msgid="1997292217218546957">"ነባሪ"</string>
diff --git a/packages/SettingsLib/res/values-ar/strings.xml b/packages/SettingsLib/res/values-ar/strings.xml
index 09895fe..ba93f65 100644
--- a/packages/SettingsLib/res/values-ar/strings.xml
+++ b/packages/SettingsLib/res/values-ar/strings.xml
@@ -106,6 +106,28 @@
<string name="bluetooth_hearing_aid_left_active" msgid="7084887715570971441">"السمّاعة الطبية اليسرى فقط مفعَّلة"</string>
<string name="bluetooth_hearing_aid_right_active" msgid="8574683234077567230">"السمّاعة الطبية اليمنى فقط مفعَّلة"</string>
<string name="bluetooth_hearing_aid_left_and_right_active" msgid="407704460573163973">"السمّاعتان اليسرى واليمنى مفعَّلتان"</string>
+ <!-- no translation found for bluetooth_active_media_only_battery_level (1164678961213251365) -->
+ <skip />
+ <!-- no translation found for bluetooth_active_media_only_battery_level_untethered (1345174295097854560) -->
+ <skip />
+ <!-- no translation found for bluetooth_battery_level_lea_support (8580950145907305436) -->
+ <skip />
+ <!-- no translation found for bluetooth_battery_level_untethered_lea_support (8534816721698743015) -->
+ <skip />
+ <!-- no translation found for bluetooth_battery_level_untethered_left_lea_support (6605320955858788855) -->
+ <skip />
+ <!-- no translation found for bluetooth_battery_level_untethered_right_lea_support (5717356160322149355) -->
+ <skip />
+ <!-- no translation found for bluetooth_active_media_only_no_battery_level (71106861912593126) -->
+ <skip />
+ <!-- no translation found for bluetooth_saved_device_lea_support (7231323139968285768) -->
+ <skip />
+ <!-- no translation found for bluetooth_hearing_aid_media_only_left_active (1632152540901488645) -->
+ <skip />
+ <!-- no translation found for bluetooth_hearing_aid_media_only_right_active (3854140683042617230) -->
+ <skip />
+ <!-- no translation found for bluetooth_hearing_aid_media_only_left_and_right_active (1299913413062528417) -->
+ <skip />
<string name="bluetooth_profile_a2dp" msgid="4632426382762851724">"الإعدادات الصوتية للوسائط"</string>
<string name="bluetooth_profile_headset" msgid="5395952236133499331">"المكالمات الهاتفية"</string>
<string name="bluetooth_profile_opp" msgid="6692618568149493430">"نقل الملف"</string>
@@ -472,7 +494,7 @@
<string name="power_remaining_more_than_subtext" msgid="446388082266121894">"سيبقى شحن البطارية أكثر من <xliff:g id="TIME_REMAINING">%1$s</xliff:g> (<xliff:g id="LEVEL">%2$s</xliff:g>)."</string>
<string name="power_remaining_only_more_than_subtext" msgid="4873750633368888062">"سيبقى شحن البطارية أكثر من <xliff:g id="TIME_REMAINING">%1$s</xliff:g>."</string>
<string name="power_charging" msgid="6727132649743436802">"<xliff:g id="LEVEL">%1$s</xliff:g> - <xliff:g id="STATE">%2$s</xliff:g>"</string>
- <string name="power_remaining_charging_duration_only" msgid="8085099012811384899">"يتبقّى <xliff:g id="TIME">%1$s</xliff:g> حتى اكتمال شحن البطارية."</string>
+ <string name="power_remaining_charging_duration_only" msgid="8085099012811384899">"يتبقّى <xliff:g id="TIME">%1$s</xliff:g> حتى اكتمال شحن البطارية"</string>
<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>
@@ -616,7 +638,7 @@
<string name="add_user_failed" msgid="4809887794313944872">"تعذّر إنشاء مستخدم جديد."</string>
<string name="add_guest_failed" msgid="8074548434469843443">"تعذّر إنشاء جلسة ضيف جديدة."</string>
<string name="user_nickname" msgid="262624187455825083">"اللقب"</string>
- <string name="edit_user_info_message" msgid="6677556031419002895">"سيظهر الاسم والصورة اللذين تختارهما لأي شخص يستخدم هذا الجهاز."</string>
+ <string name="edit_user_info_message" msgid="6677556031419002895">"بإمكان أي شخص يستخدم هذا الجهاز رؤية الاسم والصورة اللذين تختارهما."</string>
<string name="user_add_user" msgid="7876449291500212468">"إضافة مستخدم"</string>
<string name="guest_new_guest" msgid="3482026122932643557">"إضافة ضيف"</string>
<string name="guest_exit_guest" msgid="5908239569510734136">"إزالة جلسة الضيف"</string>
@@ -643,8 +665,6 @@
<string name="guest_notification_ephemeral" msgid="7263252466950923871">"سيتم حذف جميع الأنشطة عند الخروج من وضع الضيف"</string>
<string name="guest_notification_non_ephemeral" msgid="6843799963012259330">"يمكنك حفظ نشاطك أو حذفه عند الخروج من وضع الضيف."</string>
<string name="guest_notification_non_ephemeral_non_first_login" msgid="8009307983766934876">"يمكنك إجراء إعادة ضبط لحذف نشاط الجلسة الآن، أو حِفظ النشاط أو حذفه عند الخروج من وضع الضيف."</string>
- <string name="user_image_take_photo" msgid="467512954561638530">"التقاط صورة"</string>
- <string name="user_image_choose_photo" msgid="1363820919146782908">"اختيار صورة"</string>
<string name="user_image_photo_selector" msgid="433658323306627093">"اختيار صورة"</string>
<string name="failed_attempts_now_wiping_device" msgid="4016329172216428897">"لقد استنفدت عدد المحاولات غير الصحيحة وسيتم حذف بيانات هذا الجهاز."</string>
<string name="failed_attempts_now_wiping_user" msgid="469060411789668050">"لقد استنفدت عدد المحاولات غير الصحيحة وسيتم حذف حساب هذا المستخدم."</string>
@@ -684,8 +704,6 @@
<string name="accessibility_ethernet_disconnected" msgid="2832501530856497489">"تم قطع اتصال Ethernet."</string>
<string name="accessibility_ethernet_connected" msgid="6175942685957461563">"إيثرنت"</string>
<string name="accessibility_no_calling" msgid="3540827068323895748">"لا يتم الاتصال."</string>
- <string name="avatar_picker_title" msgid="8492884172713170652">"اختيار صورة الملف الشخصي"</string>
- <string name="default_user_icon_description" msgid="6554047177298972638">"رمز المستخدم التلقائي"</string>
<string name="physical_keyboard_title" msgid="4811935435315835220">"لوحة المفاتيح الخارجية"</string>
<string name="keyboard_layout_dialog_title" msgid="3927180147005616290">"اختيار تنسيق لوحة مفاتيح"</string>
<string name="keyboard_layout_default_label" msgid="1997292217218546957">"التنسيق التلقائي"</string>
diff --git a/packages/SettingsLib/res/values-as/strings.xml b/packages/SettingsLib/res/values-as/strings.xml
index ee2449c..ef53faf 100644
--- a/packages/SettingsLib/res/values-as/strings.xml
+++ b/packages/SettingsLib/res/values-as/strings.xml
@@ -106,6 +106,28 @@
<string name="bluetooth_hearing_aid_left_active" msgid="7084887715570971441">"কেৱল বাঁওফালৰটো সক্ৰিয় হৈছে"</string>
<string name="bluetooth_hearing_aid_right_active" msgid="8574683234077567230">"কেৱল সোঁফালৰটো সক্ৰিয় হৈছে"</string>
<string name="bluetooth_hearing_aid_left_and_right_active" msgid="407704460573163973">"বাওঁ আৰু সোঁ দুয়োফালৰ সক্ৰিয় হৈছে"</string>
+ <!-- no translation found for bluetooth_active_media_only_battery_level (1164678961213251365) -->
+ <skip />
+ <!-- no translation found for bluetooth_active_media_only_battery_level_untethered (1345174295097854560) -->
+ <skip />
+ <!-- no translation found for bluetooth_battery_level_lea_support (8580950145907305436) -->
+ <skip />
+ <!-- no translation found for bluetooth_battery_level_untethered_lea_support (8534816721698743015) -->
+ <skip />
+ <!-- no translation found for bluetooth_battery_level_untethered_left_lea_support (6605320955858788855) -->
+ <skip />
+ <!-- no translation found for bluetooth_battery_level_untethered_right_lea_support (5717356160322149355) -->
+ <skip />
+ <!-- no translation found for bluetooth_active_media_only_no_battery_level (71106861912593126) -->
+ <skip />
+ <!-- no translation found for bluetooth_saved_device_lea_support (7231323139968285768) -->
+ <skip />
+ <!-- no translation found for bluetooth_hearing_aid_media_only_left_active (1632152540901488645) -->
+ <skip />
+ <!-- no translation found for bluetooth_hearing_aid_media_only_right_active (3854140683042617230) -->
+ <skip />
+ <!-- no translation found for bluetooth_hearing_aid_media_only_left_and_right_active (1299913413062528417) -->
+ <skip />
<string name="bluetooth_profile_a2dp" msgid="4632426382762851724">"মিডিয়াৰ অডিঅ’"</string>
<string name="bluetooth_profile_headset" msgid="5395952236133499331">"ফ\'ন কলসমূহ"</string>
<string name="bluetooth_profile_opp" msgid="6692618568149493430">"ফাইল স্থানান্তৰণ"</string>
@@ -643,8 +665,6 @@
<string name="guest_notification_ephemeral" msgid="7263252466950923871">"বাহিৰ হওঁতে আটাইবোৰ কাৰ্যকলাপ মচা হ’ব"</string>
<string name="guest_notification_non_ephemeral" msgid="6843799963012259330">"আপুনি বাহিৰ হওঁতে নিজৰ কাৰ্যকলাপ ছেভ কৰিব অথবা মচিব পাৰে"</string>
<string name="guest_notification_non_ephemeral_non_first_login" msgid="8009307983766934876">"এতিয়াই ছেশ্বনৰ কাৰ্যকলাপ ৰিছেট কৰক অথবা মচক অথবা আপুনি বাহিৰ হওঁতে কাৰ্যকলাপ ছেভ কৰিব অথবা মচিব পাৰে"</string>
- <string name="user_image_take_photo" msgid="467512954561638530">"এখন ফট’ তোলক"</string>
- <string name="user_image_choose_photo" msgid="1363820919146782908">"এখন প্ৰতিচ্ছবি বাছনি কৰক"</string>
<string name="user_image_photo_selector" msgid="433658323306627093">"ফট’ বাছনি কৰক"</string>
<string name="failed_attempts_now_wiping_device" msgid="4016329172216428897">"অতি বেছি ভুল প্ৰয়াস। ডিভাইচটোৰ ডেটা মচা হ’ব।"</string>
<string name="failed_attempts_now_wiping_user" msgid="469060411789668050">"অতি বেছি ভুল প্ৰয়াস। এই ব্যৱহাৰকাৰীক মচা হ’ব।"</string>
@@ -684,8 +704,6 @@
<string name="accessibility_ethernet_disconnected" msgid="2832501530856497489">"ইথাৰনেট সংযোগ বিচ্ছিন্ন হৈছে।"</string>
<string name="accessibility_ethernet_connected" msgid="6175942685957461563">"ইথাৰনেট।"</string>
<string name="accessibility_no_calling" msgid="3540827068323895748">"কল কৰা নহয়"</string>
- <string name="avatar_picker_title" msgid="8492884172713170652">"এখন প্ৰ’ফাইল চিত্ৰ বাছনি কৰক"</string>
- <string name="default_user_icon_description" msgid="6554047177298972638">"ডিফ’ল্ট ব্যৱহাৰকাৰীৰ চিহ্ন"</string>
<string name="physical_keyboard_title" msgid="4811935435315835220">"কায়িক কীব’ৰ্ড"</string>
<string name="keyboard_layout_dialog_title" msgid="3927180147005616290">"কীব\'ৰ্ডৰ চানেকি বাছক"</string>
<string name="keyboard_layout_default_label" msgid="1997292217218546957">"ডিফ’ল্ট"</string>
diff --git a/packages/SettingsLib/res/values-az/strings.xml b/packages/SettingsLib/res/values-az/strings.xml
index 47c4522..48c68f4 100644
--- a/packages/SettingsLib/res/values-az/strings.xml
+++ b/packages/SettingsLib/res/values-az/strings.xml
@@ -106,6 +106,28 @@
<string name="bluetooth_hearing_aid_left_active" msgid="7084887715570971441">"Aktiv, yalnız sol"</string>
<string name="bluetooth_hearing_aid_right_active" msgid="8574683234077567230">"Aktiv, yalnız sağ"</string>
<string name="bluetooth_hearing_aid_left_and_right_active" msgid="407704460573163973">"Aktiv, sol və sağ"</string>
+ <!-- no translation found for bluetooth_active_media_only_battery_level (1164678961213251365) -->
+ <skip />
+ <!-- no translation found for bluetooth_active_media_only_battery_level_untethered (1345174295097854560) -->
+ <skip />
+ <!-- no translation found for bluetooth_battery_level_lea_support (8580950145907305436) -->
+ <skip />
+ <!-- no translation found for bluetooth_battery_level_untethered_lea_support (8534816721698743015) -->
+ <skip />
+ <!-- no translation found for bluetooth_battery_level_untethered_left_lea_support (6605320955858788855) -->
+ <skip />
+ <!-- no translation found for bluetooth_battery_level_untethered_right_lea_support (5717356160322149355) -->
+ <skip />
+ <!-- no translation found for bluetooth_active_media_only_no_battery_level (71106861912593126) -->
+ <skip />
+ <!-- no translation found for bluetooth_saved_device_lea_support (7231323139968285768) -->
+ <skip />
+ <!-- no translation found for bluetooth_hearing_aid_media_only_left_active (1632152540901488645) -->
+ <skip />
+ <!-- no translation found for bluetooth_hearing_aid_media_only_right_active (3854140683042617230) -->
+ <skip />
+ <!-- no translation found for bluetooth_hearing_aid_media_only_left_and_right_active (1299913413062528417) -->
+ <skip />
<string name="bluetooth_profile_a2dp" msgid="4632426382762851724">"Media audio"</string>
<string name="bluetooth_profile_headset" msgid="5395952236133499331">"Telefon zəngləri"</string>
<string name="bluetooth_profile_opp" msgid="6692618568149493430">"Fayl transferi"</string>
@@ -643,8 +665,6 @@
<string name="guest_notification_ephemeral" msgid="7263252466950923871">"Çıxış zamanı bütün fəaliyyətlər silinəcək"</string>
<string name="guest_notification_non_ephemeral" msgid="6843799963012259330">"Çıxışda fəaliyyətinizi saxlaya və ya silə bilərsiniz"</string>
<string name="guest_notification_non_ephemeral_non_first_login" msgid="8009307983766934876">"Sessiya fəaliyyətini indi silmək üçün sıfırlayın və ya çıxışda fəaliyyəti saxlaya və ya silə bilərsiniz"</string>
- <string name="user_image_take_photo" msgid="467512954561638530">"Foto çəkin"</string>
- <string name="user_image_choose_photo" msgid="1363820919146782908">"Şəkil seçin"</string>
<string name="user_image_photo_selector" msgid="433658323306627093">"Foto seçin"</string>
<string name="failed_attempts_now_wiping_device" msgid="4016329172216428897">"Həddindən artıq yanlış cəhd. Bu cihazın datası silinəcək."</string>
<string name="failed_attempts_now_wiping_user" msgid="469060411789668050">"Həddindən artıq yanlış cəhd. Bu istifadəçi silinəcək."</string>
@@ -684,8 +704,6 @@
<string name="accessibility_ethernet_disconnected" msgid="2832501530856497489">"Ethernet bağlantısı kəsilib."</string>
<string name="accessibility_ethernet_connected" msgid="6175942685957461563">"Ethernet."</string>
<string name="accessibility_no_calling" msgid="3540827068323895748">"Zəng yoxdur."</string>
- <string name="avatar_picker_title" msgid="8492884172713170652">"Profil şəkli seçin"</string>
- <string name="default_user_icon_description" msgid="6554047177298972638">"Defolt istifadəçi ikonası"</string>
<string name="physical_keyboard_title" msgid="4811935435315835220">"Fiziki klaviatura"</string>
<string name="keyboard_layout_dialog_title" msgid="3927180147005616290">"Klaviatura düzənini seçin"</string>
<string name="keyboard_layout_default_label" msgid="1997292217218546957">"Defolt"</string>
diff --git a/packages/SettingsLib/res/values-b+sr+Latn/strings.xml b/packages/SettingsLib/res/values-b+sr+Latn/strings.xml
index 92f68fa..04c6d94 100644
--- a/packages/SettingsLib/res/values-b+sr+Latn/strings.xml
+++ b/packages/SettingsLib/res/values-b+sr+Latn/strings.xml
@@ -106,6 +106,28 @@
<string name="bluetooth_hearing_aid_left_active" msgid="7084887715570971441">"Aktivno, samo s leve strane"</string>
<string name="bluetooth_hearing_aid_right_active" msgid="8574683234077567230">"Aktivno, s desne strane"</string>
<string name="bluetooth_hearing_aid_left_and_right_active" msgid="407704460573163973">"Aktivno, s leve i desne strane"</string>
+ <!-- no translation found for bluetooth_active_media_only_battery_level (1164678961213251365) -->
+ <skip />
+ <!-- no translation found for bluetooth_active_media_only_battery_level_untethered (1345174295097854560) -->
+ <skip />
+ <!-- no translation found for bluetooth_battery_level_lea_support (8580950145907305436) -->
+ <skip />
+ <!-- no translation found for bluetooth_battery_level_untethered_lea_support (8534816721698743015) -->
+ <skip />
+ <!-- no translation found for bluetooth_battery_level_untethered_left_lea_support (6605320955858788855) -->
+ <skip />
+ <!-- no translation found for bluetooth_battery_level_untethered_right_lea_support (5717356160322149355) -->
+ <skip />
+ <!-- no translation found for bluetooth_active_media_only_no_battery_level (71106861912593126) -->
+ <skip />
+ <!-- no translation found for bluetooth_saved_device_lea_support (7231323139968285768) -->
+ <skip />
+ <!-- no translation found for bluetooth_hearing_aid_media_only_left_active (1632152540901488645) -->
+ <skip />
+ <!-- no translation found for bluetooth_hearing_aid_media_only_right_active (3854140683042617230) -->
+ <skip />
+ <!-- no translation found for bluetooth_hearing_aid_media_only_left_and_right_active (1299913413062528417) -->
+ <skip />
<string name="bluetooth_profile_a2dp" msgid="4632426382762851724">"Zvuk medija"</string>
<string name="bluetooth_profile_headset" msgid="5395952236133499331">"Telefonski pozivi"</string>
<string name="bluetooth_profile_opp" msgid="6692618568149493430">"Prenos datoteke"</string>
@@ -643,8 +665,6 @@
<string name="guest_notification_ephemeral" msgid="7263252466950923871">"Sve aktivnosti će biti izbrisane pri izlazu"</string>
<string name="guest_notification_non_ephemeral" msgid="6843799963012259330">"Možete da sačuvate ili izbrišete aktivnosti pri izlazu"</string>
<string name="guest_notification_non_ephemeral_non_first_login" msgid="8009307983766934876">"Resetujete za brisanje aktivnosti sesije, ili sačuvajte ili izbrišite aktivnosti pri izlazu"</string>
- <string name="user_image_take_photo" msgid="467512954561638530">"Slikaj"</string>
- <string name="user_image_choose_photo" msgid="1363820919146782908">"Odaberi sliku"</string>
<string name="user_image_photo_selector" msgid="433658323306627093">"Izaberite sliku"</string>
<string name="failed_attempts_now_wiping_device" msgid="4016329172216428897">"Previše netačnih pokušaja. Izbrisaćemo podatke sa ovog uređaja."</string>
<string name="failed_attempts_now_wiping_user" msgid="469060411789668050">"Previše netačnih pokušaja. Izbrisaćemo ovog korisnika."</string>
@@ -684,8 +704,6 @@
<string name="accessibility_ethernet_disconnected" msgid="2832501530856497489">"Veza sa eternetom je prekinuta."</string>
<string name="accessibility_ethernet_connected" msgid="6175942685957461563">"Eternet."</string>
<string name="accessibility_no_calling" msgid="3540827068323895748">"Bez pozivanja."</string>
- <string name="avatar_picker_title" msgid="8492884172713170652">"Odaberite sliku profila"</string>
- <string name="default_user_icon_description" msgid="6554047177298972638">"Podrazumevana ikona korisnika"</string>
<string name="physical_keyboard_title" msgid="4811935435315835220">"Fizička tastatura"</string>
<string name="keyboard_layout_dialog_title" msgid="3927180147005616290">"Odaberite raspored tastature"</string>
<string name="keyboard_layout_default_label" msgid="1997292217218546957">"Podrazumevano"</string>
diff --git a/packages/SettingsLib/res/values-be/strings.xml b/packages/SettingsLib/res/values-be/strings.xml
index 926ae83..f8c88e6 100644
--- a/packages/SettingsLib/res/values-be/strings.xml
+++ b/packages/SettingsLib/res/values-be/strings.xml
@@ -106,6 +106,28 @@
<string name="bluetooth_hearing_aid_left_active" msgid="7084887715570971441">"Уключана, толькі для левага вуха"</string>
<string name="bluetooth_hearing_aid_right_active" msgid="8574683234077567230">"Уключана, толькі для правага вуха"</string>
<string name="bluetooth_hearing_aid_left_and_right_active" msgid="407704460573163973">"Уключана, для левага і правага вуха"</string>
+ <!-- no translation found for bluetooth_active_media_only_battery_level (1164678961213251365) -->
+ <skip />
+ <!-- no translation found for bluetooth_active_media_only_battery_level_untethered (1345174295097854560) -->
+ <skip />
+ <!-- no translation found for bluetooth_battery_level_lea_support (8580950145907305436) -->
+ <skip />
+ <!-- no translation found for bluetooth_battery_level_untethered_lea_support (8534816721698743015) -->
+ <skip />
+ <!-- no translation found for bluetooth_battery_level_untethered_left_lea_support (6605320955858788855) -->
+ <skip />
+ <!-- no translation found for bluetooth_battery_level_untethered_right_lea_support (5717356160322149355) -->
+ <skip />
+ <!-- no translation found for bluetooth_active_media_only_no_battery_level (71106861912593126) -->
+ <skip />
+ <!-- no translation found for bluetooth_saved_device_lea_support (7231323139968285768) -->
+ <skip />
+ <!-- no translation found for bluetooth_hearing_aid_media_only_left_active (1632152540901488645) -->
+ <skip />
+ <!-- no translation found for bluetooth_hearing_aid_media_only_right_active (3854140683042617230) -->
+ <skip />
+ <!-- no translation found for bluetooth_hearing_aid_media_only_left_and_right_active (1299913413062528417) -->
+ <skip />
<string name="bluetooth_profile_a2dp" msgid="4632426382762851724">"Аўдыя медыяфайлаў"</string>
<string name="bluetooth_profile_headset" msgid="5395952236133499331">"Тэлефонныя выклікі"</string>
<string name="bluetooth_profile_opp" msgid="6692618568149493430">"Перадача файлаў"</string>
@@ -643,8 +665,6 @@
<string name="guest_notification_ephemeral" msgid="7263252466950923871">"Падчас выхаду будуць выдалены ўсе звесткі пра дзеянні"</string>
<string name="guest_notification_non_ephemeral" msgid="6843799963012259330">"Падчас выхаду можна захаваць ці выдаліць звесткі пра дзеянні"</string>
<string name="guest_notification_non_ephemeral_non_first_login" msgid="8009307983766934876">"Скіньце звесткі пра дзеянні падчас сеанса зараз. Вы таксама можаце захаваць ці выдаліць іх у час выхаду."</string>
- <string name="user_image_take_photo" msgid="467512954561638530">"Зрабіць фота"</string>
- <string name="user_image_choose_photo" msgid="1363820919146782908">"Выбраць відарыс"</string>
<string name="user_image_photo_selector" msgid="433658323306627093">"Выбраць фота"</string>
<string name="failed_attempts_now_wiping_device" msgid="4016329172216428897">"Занадта шмат няўдалых спроб. Даныя з гэтай прылады будуць выдалены."</string>
<string name="failed_attempts_now_wiping_user" msgid="469060411789668050">"Занадта шмат няўдалых спроб. Гэты карыстальнік будзе выдалены."</string>
@@ -684,8 +704,6 @@
<string name="accessibility_ethernet_disconnected" msgid="2832501530856497489">"Ethernet адлучаны."</string>
<string name="accessibility_ethernet_connected" msgid="6175942685957461563">"Ethernet."</string>
<string name="accessibility_no_calling" msgid="3540827068323895748">"Ніякіх выклікаў."</string>
- <string name="avatar_picker_title" msgid="8492884172713170652">"Выберыце відарыс профілю"</string>
- <string name="default_user_icon_description" msgid="6554047177298972638">"Стандартны карыстальніцкі значок"</string>
<string name="physical_keyboard_title" msgid="4811935435315835220">"Фізічная клавіятура"</string>
<string name="keyboard_layout_dialog_title" msgid="3927180147005616290">"Выбар раскладкі клавіятуры"</string>
<string name="keyboard_layout_default_label" msgid="1997292217218546957">"Стандартна"</string>
diff --git a/packages/SettingsLib/res/values-bg/strings.xml b/packages/SettingsLib/res/values-bg/strings.xml
index b46f00a..0457f10 100644
--- a/packages/SettingsLib/res/values-bg/strings.xml
+++ b/packages/SettingsLib/res/values-bg/strings.xml
@@ -106,6 +106,28 @@
<string name="bluetooth_hearing_aid_left_active" msgid="7084887715570971441">"Активно – само лявото"</string>
<string name="bluetooth_hearing_aid_right_active" msgid="8574683234077567230">"Активно – само дясното"</string>
<string name="bluetooth_hearing_aid_left_and_right_active" msgid="407704460573163973">"Активно – лявото и дясното"</string>
+ <!-- no translation found for bluetooth_active_media_only_battery_level (1164678961213251365) -->
+ <skip />
+ <!-- no translation found for bluetooth_active_media_only_battery_level_untethered (1345174295097854560) -->
+ <skip />
+ <!-- no translation found for bluetooth_battery_level_lea_support (8580950145907305436) -->
+ <skip />
+ <!-- no translation found for bluetooth_battery_level_untethered_lea_support (8534816721698743015) -->
+ <skip />
+ <!-- no translation found for bluetooth_battery_level_untethered_left_lea_support (6605320955858788855) -->
+ <skip />
+ <!-- no translation found for bluetooth_battery_level_untethered_right_lea_support (5717356160322149355) -->
+ <skip />
+ <!-- no translation found for bluetooth_active_media_only_no_battery_level (71106861912593126) -->
+ <skip />
+ <!-- no translation found for bluetooth_saved_device_lea_support (7231323139968285768) -->
+ <skip />
+ <!-- no translation found for bluetooth_hearing_aid_media_only_left_active (1632152540901488645) -->
+ <skip />
+ <!-- no translation found for bluetooth_hearing_aid_media_only_right_active (3854140683042617230) -->
+ <skip />
+ <!-- no translation found for bluetooth_hearing_aid_media_only_left_and_right_active (1299913413062528417) -->
+ <skip />
<string name="bluetooth_profile_a2dp" msgid="4632426382762851724">"Мултимедийно аудио"</string>
<string name="bluetooth_profile_headset" msgid="5395952236133499331">"Телефонни обаждания"</string>
<string name="bluetooth_profile_opp" msgid="6692618568149493430">"Прехвърляне на файл"</string>
@@ -643,8 +665,6 @@
<string name="guest_notification_ephemeral" msgid="7263252466950923871">"Цялата активност ще бъде изтрита при изход"</string>
<string name="guest_notification_non_ephemeral" msgid="6843799963012259330">"При изход можете да запазите активността или да я изтриете"</string>
<string name="guest_notification_non_ephemeral_non_first_login" msgid="8009307983766934876">"Нулирайте, за да изтриете активността в сесията сега. Можете също да я запазите или изтриете при изход"</string>
- <string name="user_image_take_photo" msgid="467512954561638530">"Правене на снимка"</string>
- <string name="user_image_choose_photo" msgid="1363820919146782908">"Избиране на изображение"</string>
<string name="user_image_photo_selector" msgid="433658323306627093">"Избиране на снимката"</string>
<string name="failed_attempts_now_wiping_device" msgid="4016329172216428897">"Твърде много неправилни опити. Данните от това устройство ще бъдат изтрити."</string>
<string name="failed_attempts_now_wiping_user" msgid="469060411789668050">"Твърде много неправилни опити. Този потребител ще бъде изтрит."</string>
@@ -684,8 +704,6 @@
<string name="accessibility_ethernet_disconnected" msgid="2832501530856497489">"Връзката с Ethernet е прекратена."</string>
<string name="accessibility_ethernet_connected" msgid="6175942685957461563">"Ethernet."</string>
<string name="accessibility_no_calling" msgid="3540827068323895748">"Без обаждания."</string>
- <string name="avatar_picker_title" msgid="8492884172713170652">"Изберете снимка на потребителския профил"</string>
- <string name="default_user_icon_description" msgid="6554047177298972638">"Икона за основния потребител"</string>
<string name="physical_keyboard_title" msgid="4811935435315835220">"Физическа клавиатура"</string>
<string name="keyboard_layout_dialog_title" msgid="3927180147005616290">"Избор на клавиатурна подредба"</string>
<string name="keyboard_layout_default_label" msgid="1997292217218546957">"По подразбиране"</string>
diff --git a/packages/SettingsLib/res/values-bn/strings.xml b/packages/SettingsLib/res/values-bn/strings.xml
index fdc8302..e9367ff 100644
--- a/packages/SettingsLib/res/values-bn/strings.xml
+++ b/packages/SettingsLib/res/values-bn/strings.xml
@@ -106,6 +106,28 @@
<string name="bluetooth_hearing_aid_left_active" msgid="7084887715570971441">"শুধুমাত্র বাঁদিকের হিয়ারিং এড অ্যাক্টিভ"</string>
<string name="bluetooth_hearing_aid_right_active" msgid="8574683234077567230">"শুধুমাত্র ডানদিকের হিয়ারিং এড অ্যাক্টিভ"</string>
<string name="bluetooth_hearing_aid_left_and_right_active" msgid="407704460573163973">"বাঁ ও ডানদিকের হিয়ারিং এড, অ্যাক্টিভ"</string>
+ <!-- no translation found for bluetooth_active_media_only_battery_level (1164678961213251365) -->
+ <skip />
+ <!-- no translation found for bluetooth_active_media_only_battery_level_untethered (1345174295097854560) -->
+ <skip />
+ <!-- no translation found for bluetooth_battery_level_lea_support (8580950145907305436) -->
+ <skip />
+ <!-- no translation found for bluetooth_battery_level_untethered_lea_support (8534816721698743015) -->
+ <skip />
+ <!-- no translation found for bluetooth_battery_level_untethered_left_lea_support (6605320955858788855) -->
+ <skip />
+ <!-- no translation found for bluetooth_battery_level_untethered_right_lea_support (5717356160322149355) -->
+ <skip />
+ <!-- no translation found for bluetooth_active_media_only_no_battery_level (71106861912593126) -->
+ <skip />
+ <!-- no translation found for bluetooth_saved_device_lea_support (7231323139968285768) -->
+ <skip />
+ <!-- no translation found for bluetooth_hearing_aid_media_only_left_active (1632152540901488645) -->
+ <skip />
+ <!-- no translation found for bluetooth_hearing_aid_media_only_right_active (3854140683042617230) -->
+ <skip />
+ <!-- no translation found for bluetooth_hearing_aid_media_only_left_and_right_active (1299913413062528417) -->
+ <skip />
<string name="bluetooth_profile_a2dp" msgid="4632426382762851724">"মিডিয়া অডিও"</string>
<string name="bluetooth_profile_headset" msgid="5395952236133499331">"ফোন কল"</string>
<string name="bluetooth_profile_opp" msgid="6692618568149493430">"ফাইল স্থানান্তর"</string>
@@ -643,8 +665,6 @@
<string name="guest_notification_ephemeral" msgid="7263252466950923871">"ছেড়ে বেরিয়ে যাওয়ার সময় সব অ্যাক্টিভিটি মুছে দেওয়া হবে"</string>
<string name="guest_notification_non_ephemeral" msgid="6843799963012259330">"ছেড়ে বেরিয়ে যাওয়ার সময় আপনি অ্যাক্টিভিটি সেভ করতে পারবেন বা মুছতে পারবেন"</string>
<string name="guest_notification_non_ephemeral_non_first_login" msgid="8009307983766934876">"সেশন অ্যাক্টিভিটি মুছে দিতে এখন রিসেট করুন বা ছেড়ে বেরিয়ে আসার সময় আপনি অ্যাক্টিভিটি সেভ করতে বা মুছতে পারবেন"</string>
- <string name="user_image_take_photo" msgid="467512954561638530">"ফটো তুলুন"</string>
- <string name="user_image_choose_photo" msgid="1363820919146782908">"একটি ইমেজ বেছে নিন"</string>
<string name="user_image_photo_selector" msgid="433658323306627093">"ফটো বেছে নিন"</string>
<string name="failed_attempts_now_wiping_device" msgid="4016329172216428897">"একাধিকবার ভুল ইনপুট দিয়েছেন। এই ডিভাইসের ডেটা মুছে ফেলা হবে।"</string>
<string name="failed_attempts_now_wiping_user" msgid="469060411789668050">"একাধিকবার ভুল ইনপুট দিয়েছেন। এই ব্যবহারকারীর প্রোফাইল মুছে ফেলা হবে।"</string>
@@ -684,8 +704,6 @@
<string name="accessibility_ethernet_disconnected" msgid="2832501530856497489">"ইথারনেটের সংযোগ বিচ্ছিন্ন হয়েছে৷"</string>
<string name="accessibility_ethernet_connected" msgid="6175942685957461563">"ইথারনেট।"</string>
<string name="accessibility_no_calling" msgid="3540827068323895748">"কল করবেন না।"</string>
- <string name="avatar_picker_title" msgid="8492884172713170652">"একটি প্রোফাইল ছবি বেছে নিন"</string>
- <string name="default_user_icon_description" msgid="6554047177298972638">"ডিফল্ট ব্যবহারকারীর আইকন"</string>
<string name="physical_keyboard_title" msgid="4811935435315835220">"ফিজিক্যাল কীবোর্ড"</string>
<string name="keyboard_layout_dialog_title" msgid="3927180147005616290">"কীবোর্ড লেআউট বেছে নিন"</string>
<string name="keyboard_layout_default_label" msgid="1997292217218546957">"ডিফল্ট"</string>
diff --git a/packages/SettingsLib/res/values-bs/strings.xml b/packages/SettingsLib/res/values-bs/strings.xml
index 5e0ff19..7fb5225 100644
--- a/packages/SettingsLib/res/values-bs/strings.xml
+++ b/packages/SettingsLib/res/values-bs/strings.xml
@@ -106,6 +106,28 @@
<string name="bluetooth_hearing_aid_left_active" msgid="7084887715570971441">"Aktivno, samo lijevi"</string>
<string name="bluetooth_hearing_aid_right_active" msgid="8574683234077567230">"Aktivno, samo desni"</string>
<string name="bluetooth_hearing_aid_left_and_right_active" msgid="407704460573163973">"Aktivno, lijevi i desni"</string>
+ <!-- no translation found for bluetooth_active_media_only_battery_level (1164678961213251365) -->
+ <skip />
+ <!-- no translation found for bluetooth_active_media_only_battery_level_untethered (1345174295097854560) -->
+ <skip />
+ <!-- no translation found for bluetooth_battery_level_lea_support (8580950145907305436) -->
+ <skip />
+ <!-- no translation found for bluetooth_battery_level_untethered_lea_support (8534816721698743015) -->
+ <skip />
+ <!-- no translation found for bluetooth_battery_level_untethered_left_lea_support (6605320955858788855) -->
+ <skip />
+ <!-- no translation found for bluetooth_battery_level_untethered_right_lea_support (5717356160322149355) -->
+ <skip />
+ <!-- no translation found for bluetooth_active_media_only_no_battery_level (71106861912593126) -->
+ <skip />
+ <!-- no translation found for bluetooth_saved_device_lea_support (7231323139968285768) -->
+ <skip />
+ <!-- no translation found for bluetooth_hearing_aid_media_only_left_active (1632152540901488645) -->
+ <skip />
+ <!-- no translation found for bluetooth_hearing_aid_media_only_right_active (3854140683042617230) -->
+ <skip />
+ <!-- no translation found for bluetooth_hearing_aid_media_only_left_and_right_active (1299913413062528417) -->
+ <skip />
<string name="bluetooth_profile_a2dp" msgid="4632426382762851724">"Zvuk medija"</string>
<string name="bluetooth_profile_headset" msgid="5395952236133499331">"Telefonski pozivi"</string>
<string name="bluetooth_profile_opp" msgid="6692618568149493430">"Prenošenje fajla"</string>
@@ -643,8 +665,6 @@
<string name="guest_notification_ephemeral" msgid="7263252466950923871">"Sva aktivnost će se izbrisati pri napuštanju"</string>
<string name="guest_notification_non_ephemeral" msgid="6843799963012259330">"Možete sačuvati ili izbrisati svoju aktivnost pri izlasku"</string>
<string name="guest_notification_non_ephemeral_non_first_login" msgid="8009307983766934876">"Poništite da odmah izbrišete aktivnost iz sesije ili je možete sačuvati ili izbrisati pri izlasku"</string>
- <string name="user_image_take_photo" msgid="467512954561638530">"Snimite fotografiju"</string>
- <string name="user_image_choose_photo" msgid="1363820919146782908">"Odaberite sliku"</string>
<string name="user_image_photo_selector" msgid="433658323306627093">"Odabir fotografije"</string>
<string name="failed_attempts_now_wiping_device" msgid="4016329172216428897">"Previše je neispravnih pokušaja. Podaci ovog uređaja će se izbrisati."</string>
<string name="failed_attempts_now_wiping_user" msgid="469060411789668050">"Previše je neispravnih pokušaja. Ovaj korisnik će se izbrisati."</string>
@@ -684,8 +704,6 @@
<string name="accessibility_ethernet_disconnected" msgid="2832501530856497489">"Veza sa Ethernetom je prekinuta."</string>
<string name="accessibility_ethernet_connected" msgid="6175942685957461563">"Ethernet."</string>
<string name="accessibility_no_calling" msgid="3540827068323895748">"Nema pozivanja."</string>
- <string name="avatar_picker_title" msgid="8492884172713170652">"Odaberite sliku profila"</string>
- <string name="default_user_icon_description" msgid="6554047177298972638">"Zadana ikona korisnika"</string>
<string name="physical_keyboard_title" msgid="4811935435315835220">"Fizička tastatura"</string>
<string name="keyboard_layout_dialog_title" msgid="3927180147005616290">"Odaberite raspored tastature"</string>
<string name="keyboard_layout_default_label" msgid="1997292217218546957">"Zadano"</string>
diff --git a/packages/SettingsLib/res/values-ca/strings.xml b/packages/SettingsLib/res/values-ca/strings.xml
index f8d6d24..18da1be 100644
--- a/packages/SettingsLib/res/values-ca/strings.xml
+++ b/packages/SettingsLib/res/values-ca/strings.xml
@@ -106,6 +106,28 @@
<string name="bluetooth_hearing_aid_left_active" msgid="7084887715570971441">"Actiu, només l\'esquerre"</string>
<string name="bluetooth_hearing_aid_right_active" msgid="8574683234077567230">"Actiu, només el dret"</string>
<string name="bluetooth_hearing_aid_left_and_right_active" msgid="407704460573163973">"Actiu, esquerre i dret"</string>
+ <!-- no translation found for bluetooth_active_media_only_battery_level (1164678961213251365) -->
+ <skip />
+ <!-- no translation found for bluetooth_active_media_only_battery_level_untethered (1345174295097854560) -->
+ <skip />
+ <!-- no translation found for bluetooth_battery_level_lea_support (8580950145907305436) -->
+ <skip />
+ <!-- no translation found for bluetooth_battery_level_untethered_lea_support (8534816721698743015) -->
+ <skip />
+ <!-- no translation found for bluetooth_battery_level_untethered_left_lea_support (6605320955858788855) -->
+ <skip />
+ <!-- no translation found for bluetooth_battery_level_untethered_right_lea_support (5717356160322149355) -->
+ <skip />
+ <!-- no translation found for bluetooth_active_media_only_no_battery_level (71106861912593126) -->
+ <skip />
+ <!-- no translation found for bluetooth_saved_device_lea_support (7231323139968285768) -->
+ <skip />
+ <!-- no translation found for bluetooth_hearing_aid_media_only_left_active (1632152540901488645) -->
+ <skip />
+ <!-- no translation found for bluetooth_hearing_aid_media_only_right_active (3854140683042617230) -->
+ <skip />
+ <!-- no translation found for bluetooth_hearing_aid_media_only_left_and_right_active (1299913413062528417) -->
+ <skip />
<string name="bluetooth_profile_a2dp" msgid="4632426382762851724">"Àudio multimèdia"</string>
<string name="bluetooth_profile_headset" msgid="5395952236133499331">"Trucades telefòniques"</string>
<string name="bluetooth_profile_opp" msgid="6692618568149493430">"Transferència de fitxers"</string>
@@ -488,7 +510,7 @@
<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>
<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 la configuració restringida"</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>
<string name="external_source_trusted" msgid="1146522036773132905">"Amb permís"</string>
<string name="external_source_untrusted" msgid="5037891688911672227">"Sense permís"</string>
@@ -643,8 +665,6 @@
<string name="guest_notification_ephemeral" msgid="7263252466950923871">"Se suprimirà tota l\'activitat en sortir"</string>
<string name="guest_notification_non_ephemeral" msgid="6843799963012259330">"Pots desar o suprimir l\'activitat en sortir"</string>
<string name="guest_notification_non_ephemeral_non_first_login" msgid="8009307983766934876">"Restableix la sessió per suprimir l\'activitat ara, o desa o suprimeix l\'activitat en sortir."</string>
- <string name="user_image_take_photo" msgid="467512954561638530">"Fes una foto"</string>
- <string name="user_image_choose_photo" msgid="1363820919146782908">"Tria una imatge"</string>
<string name="user_image_photo_selector" msgid="433658323306627093">"Selecciona una foto"</string>
<string name="failed_attempts_now_wiping_device" msgid="4016329172216428897">"Has superat el nombre d\'intents incorrectes permesos. Les dades d\'aquest dispositiu se suprimiran."</string>
<string name="failed_attempts_now_wiping_user" msgid="469060411789668050">"Has superat el nombre d\'intents incorrectes permesos. Aquest usuari se suprimirà."</string>
@@ -684,8 +704,6 @@
<string name="accessibility_ethernet_disconnected" msgid="2832501530856497489">"S\'ha desconnectat l\'Ethernet."</string>
<string name="accessibility_ethernet_connected" msgid="6175942685957461563">"Ethernet."</string>
<string name="accessibility_no_calling" msgid="3540827068323895748">"Sense trucades."</string>
- <string name="avatar_picker_title" msgid="8492884172713170652">"Tria una foto de perfil"</string>
- <string name="default_user_icon_description" msgid="6554047177298972638">"Icona d\'usuari predeterminat"</string>
<string name="physical_keyboard_title" msgid="4811935435315835220">"Teclat físic"</string>
<string name="keyboard_layout_dialog_title" msgid="3927180147005616290">"Tria una disposició de teclat"</string>
<string name="keyboard_layout_default_label" msgid="1997292217218546957">"Predeterminat"</string>
diff --git a/packages/SettingsLib/res/values-cs/strings.xml b/packages/SettingsLib/res/values-cs/strings.xml
index cd4c580..f4bfe505c 100644
--- a/packages/SettingsLib/res/values-cs/strings.xml
+++ b/packages/SettingsLib/res/values-cs/strings.xml
@@ -106,6 +106,28 @@
<string name="bluetooth_hearing_aid_left_active" msgid="7084887715570971441">"Aktivní, pouze levé"</string>
<string name="bluetooth_hearing_aid_right_active" msgid="8574683234077567230">"Aktivní, pouze pravé"</string>
<string name="bluetooth_hearing_aid_left_and_right_active" msgid="407704460573163973">"Aktivní, levé a pravé"</string>
+ <!-- no translation found for bluetooth_active_media_only_battery_level (1164678961213251365) -->
+ <skip />
+ <!-- no translation found for bluetooth_active_media_only_battery_level_untethered (1345174295097854560) -->
+ <skip />
+ <!-- no translation found for bluetooth_battery_level_lea_support (8580950145907305436) -->
+ <skip />
+ <!-- no translation found for bluetooth_battery_level_untethered_lea_support (8534816721698743015) -->
+ <skip />
+ <!-- no translation found for bluetooth_battery_level_untethered_left_lea_support (6605320955858788855) -->
+ <skip />
+ <!-- no translation found for bluetooth_battery_level_untethered_right_lea_support (5717356160322149355) -->
+ <skip />
+ <!-- no translation found for bluetooth_active_media_only_no_battery_level (71106861912593126) -->
+ <skip />
+ <!-- no translation found for bluetooth_saved_device_lea_support (7231323139968285768) -->
+ <skip />
+ <!-- no translation found for bluetooth_hearing_aid_media_only_left_active (1632152540901488645) -->
+ <skip />
+ <!-- no translation found for bluetooth_hearing_aid_media_only_right_active (3854140683042617230) -->
+ <skip />
+ <!-- no translation found for bluetooth_hearing_aid_media_only_left_and_right_active (1299913413062528417) -->
+ <skip />
<string name="bluetooth_profile_a2dp" msgid="4632426382762851724">"Zvuk médií"</string>
<string name="bluetooth_profile_headset" msgid="5395952236133499331">"Telefonní hovory"</string>
<string name="bluetooth_profile_opp" msgid="6692618568149493430">"Přenos souborů"</string>
@@ -552,7 +574,7 @@
<string name="media_transfer_this_device_name_tablet" msgid="2975593806278422086">"Tento tablet"</string>
<!-- no translation found for media_transfer_this_device_name_tv (5285685336836896535) -->
<skip />
- <string name="media_transfer_dock_speaker_device_name" msgid="2856219597113881950">"Dok s reproduktorem"</string>
+ <string name="media_transfer_dock_speaker_device_name" msgid="2856219597113881950">"Reproduktor doku"</string>
<string name="media_transfer_external_device_name" msgid="2588672258721846418">"Externí zařízení"</string>
<string name="media_transfer_default_device_name" msgid="4315604017399871828">"Připojené zařízení"</string>
<string name="media_transfer_this_phone" msgid="7194341457812151531">"Tento telefon"</string>
@@ -643,8 +665,6 @@
<string name="guest_notification_ephemeral" msgid="7263252466950923871">"Veškerá aktivita bude při ukončení smazána"</string>
<string name="guest_notification_non_ephemeral" msgid="6843799963012259330">"Aktivitu můžete při ukončení uložit nebo smazat"</string>
<string name="guest_notification_non_ephemeral_non_first_login" msgid="8009307983766934876">"Aktivitu relace můžete ihned smazat resetováním, případně ji můžete uložit nebo smazat při ukončení"</string>
- <string name="user_image_take_photo" msgid="467512954561638530">"Pořídit fotku"</string>
- <string name="user_image_choose_photo" msgid="1363820919146782908">"Vybrat obrázek"</string>
<string name="user_image_photo_selector" msgid="433658323306627093">"Vybrat fotku"</string>
<string name="failed_attempts_now_wiping_device" msgid="4016329172216428897">"Příliš mnoho neplatných pokusů. Data v tomto zařízení budou smazána."</string>
<string name="failed_attempts_now_wiping_user" msgid="469060411789668050">"Příliš mnoho neplatných pokusů. Tento uživatel bude smazán."</string>
@@ -684,8 +704,6 @@
<string name="accessibility_ethernet_disconnected" msgid="2832501530856497489">"Síť ethernet je odpojena."</string>
<string name="accessibility_ethernet_connected" msgid="6175942685957461563">"Ethernet."</string>
<string name="accessibility_no_calling" msgid="3540827068323895748">"Bez volání."</string>
- <string name="avatar_picker_title" msgid="8492884172713170652">"Vyberte profilový obrázek"</string>
- <string name="default_user_icon_description" msgid="6554047177298972638">"Výchozí uživatelská ikona"</string>
<string name="physical_keyboard_title" msgid="4811935435315835220">"Fyzická klávesnice"</string>
<string name="keyboard_layout_dialog_title" msgid="3927180147005616290">"Zvolte rozložení klávesnice"</string>
<string name="keyboard_layout_default_label" msgid="1997292217218546957">"Výchozí"</string>
diff --git a/packages/SettingsLib/res/values-da/strings.xml b/packages/SettingsLib/res/values-da/strings.xml
index 1b097a1..d51f8b9 100644
--- a/packages/SettingsLib/res/values-da/strings.xml
+++ b/packages/SettingsLib/res/values-da/strings.xml
@@ -106,6 +106,28 @@
<string name="bluetooth_hearing_aid_left_active" msgid="7084887715570971441">"Aktiv, kun venstre"</string>
<string name="bluetooth_hearing_aid_right_active" msgid="8574683234077567230">"Aktiv, kun højre"</string>
<string name="bluetooth_hearing_aid_left_and_right_active" msgid="407704460573163973">"Aktiv, venstre og højre"</string>
+ <!-- no translation found for bluetooth_active_media_only_battery_level (1164678961213251365) -->
+ <skip />
+ <!-- no translation found for bluetooth_active_media_only_battery_level_untethered (1345174295097854560) -->
+ <skip />
+ <!-- no translation found for bluetooth_battery_level_lea_support (8580950145907305436) -->
+ <skip />
+ <!-- no translation found for bluetooth_battery_level_untethered_lea_support (8534816721698743015) -->
+ <skip />
+ <!-- no translation found for bluetooth_battery_level_untethered_left_lea_support (6605320955858788855) -->
+ <skip />
+ <!-- no translation found for bluetooth_battery_level_untethered_right_lea_support (5717356160322149355) -->
+ <skip />
+ <!-- no translation found for bluetooth_active_media_only_no_battery_level (71106861912593126) -->
+ <skip />
+ <!-- no translation found for bluetooth_saved_device_lea_support (7231323139968285768) -->
+ <skip />
+ <!-- no translation found for bluetooth_hearing_aid_media_only_left_active (1632152540901488645) -->
+ <skip />
+ <!-- no translation found for bluetooth_hearing_aid_media_only_right_active (3854140683042617230) -->
+ <skip />
+ <!-- no translation found for bluetooth_hearing_aid_media_only_left_and_right_active (1299913413062528417) -->
+ <skip />
<string name="bluetooth_profile_a2dp" msgid="4632426382762851724">"Medielyd"</string>
<string name="bluetooth_profile_headset" msgid="5395952236133499331">"Telefonopkald"</string>
<string name="bluetooth_profile_opp" msgid="6692618568149493430">"Filoverførsel"</string>
@@ -145,7 +167,7 @@
<string name="bluetooth_pairing_decline" msgid="6483118841204885890">"Annuller"</string>
<string name="bluetooth_pairing_will_share_phonebook" msgid="3064334458659165176">"Parring giver adgang til dine kontakter og din opkaldshistorik, når enhederne er forbundet."</string>
<string name="bluetooth_pairing_error_message" msgid="6626399020672335565">"Der kunne ikke parres med <xliff:g id="DEVICE_NAME">%1$s</xliff:g>."</string>
- <string name="bluetooth_pairing_pin_error_message" msgid="264422127613704940">"Kunne ikke parre med <xliff:g id="DEVICE_NAME">%1$s</xliff:g> pga. forkert pinkode eller adgangsnøgle."</string>
+ <string name="bluetooth_pairing_pin_error_message" msgid="264422127613704940">"Parring med <xliff:g id="DEVICE_NAME">%1$s</xliff:g> mislykkedes på grund af en forkert pinkode eller adgangsnøgle."</string>
<string name="bluetooth_pairing_device_down_error_message" msgid="2554424863101358857">"Der kan ikke kommunikeres med <xliff:g id="DEVICE_NAME">%1$s</xliff:g>."</string>
<string name="bluetooth_pairing_rejected_error_message" msgid="5943444352777314442">"Parring afvist af <xliff:g id="DEVICE_NAME">%1$s</xliff:g>."</string>
<string name="bluetooth_talkback_computer" msgid="3736623135703893773">"Computer"</string>
@@ -643,8 +665,6 @@
<string name="guest_notification_ephemeral" msgid="7263252466950923871">"Al aktivitet slettes ved afslutning"</string>
<string name="guest_notification_non_ephemeral" msgid="6843799963012259330">"Du kan gemme eller slette din aktivitet ved afslutning"</string>
<string name="guest_notification_non_ephemeral_non_first_login" msgid="8009307983766934876">"Nulstil for at slette sessionsaktiviteten nu, eller gem eller slet aktivitet ved afslutning"</string>
- <string name="user_image_take_photo" msgid="467512954561638530">"Tag et billede"</string>
- <string name="user_image_choose_photo" msgid="1363820919146782908">"Vælg et billede"</string>
<string name="user_image_photo_selector" msgid="433658323306627093">"Vælg billede"</string>
<string name="failed_attempts_now_wiping_device" msgid="4016329172216428897">"For mange forkerte forsøg. Dataene på denne enhed slettes."</string>
<string name="failed_attempts_now_wiping_user" msgid="469060411789668050">"For mange forkerte forsøg. Denne bruger slettes."</string>
@@ -684,8 +704,6 @@
<string name="accessibility_ethernet_disconnected" msgid="2832501530856497489">"Ethernet er ikke tilsluttet."</string>
<string name="accessibility_ethernet_connected" msgid="6175942685957461563">"Ethernet."</string>
<string name="accessibility_no_calling" msgid="3540827068323895748">"Opkald er deaktiveret."</string>
- <string name="avatar_picker_title" msgid="8492884172713170652">"Vælg et profilbillede"</string>
- <string name="default_user_icon_description" msgid="6554047177298972638">"Ikon for standardbruger"</string>
<string name="physical_keyboard_title" msgid="4811935435315835220">"Fysisk tastatur"</string>
<string name="keyboard_layout_dialog_title" msgid="3927180147005616290">"Vælg tastaturlayout"</string>
<string name="keyboard_layout_default_label" msgid="1997292217218546957">"Standard"</string>
diff --git a/packages/SettingsLib/res/values-de/strings.xml b/packages/SettingsLib/res/values-de/strings.xml
index 4accddb..08ca14a 100644
--- a/packages/SettingsLib/res/values-de/strings.xml
+++ b/packages/SettingsLib/res/values-de/strings.xml
@@ -106,6 +106,28 @@
<string name="bluetooth_hearing_aid_left_active" msgid="7084887715570971441">"Aktiv, nur links"</string>
<string name="bluetooth_hearing_aid_right_active" msgid="8574683234077567230">"Aktiv, nur rechts"</string>
<string name="bluetooth_hearing_aid_left_and_right_active" msgid="407704460573163973">"Aktiv, links und rechts"</string>
+ <!-- no translation found for bluetooth_active_media_only_battery_level (1164678961213251365) -->
+ <skip />
+ <!-- no translation found for bluetooth_active_media_only_battery_level_untethered (1345174295097854560) -->
+ <skip />
+ <!-- no translation found for bluetooth_battery_level_lea_support (8580950145907305436) -->
+ <skip />
+ <!-- no translation found for bluetooth_battery_level_untethered_lea_support (8534816721698743015) -->
+ <skip />
+ <!-- no translation found for bluetooth_battery_level_untethered_left_lea_support (6605320955858788855) -->
+ <skip />
+ <!-- no translation found for bluetooth_battery_level_untethered_right_lea_support (5717356160322149355) -->
+ <skip />
+ <!-- no translation found for bluetooth_active_media_only_no_battery_level (71106861912593126) -->
+ <skip />
+ <!-- no translation found for bluetooth_saved_device_lea_support (7231323139968285768) -->
+ <skip />
+ <!-- no translation found for bluetooth_hearing_aid_media_only_left_active (1632152540901488645) -->
+ <skip />
+ <!-- no translation found for bluetooth_hearing_aid_media_only_right_active (3854140683042617230) -->
+ <skip />
+ <!-- no translation found for bluetooth_hearing_aid_media_only_left_and_right_active (1299913413062528417) -->
+ <skip />
<string name="bluetooth_profile_a2dp" msgid="4632426382762851724">"Medien-Audio"</string>
<string name="bluetooth_profile_headset" msgid="5395952236133499331">"Telefonanrufe"</string>
<string name="bluetooth_profile_opp" msgid="6692618568149493430">"Dateiübertragung"</string>
@@ -643,8 +665,6 @@
<string name="guest_notification_ephemeral" msgid="7263252466950923871">"Beim Beenden werden alle Aktivitäten gelöscht"</string>
<string name="guest_notification_non_ephemeral" msgid="6843799963012259330">"Speichere oder lösche deine Aktivitäten beim Beenden"</string>
<string name="guest_notification_non_ephemeral_non_first_login" msgid="8009307983766934876">"Zurücksetzen, um jetzt die Sitzungsaktivitäten zu löschen, oder Aktivitäten beim Beenden speichern oder löschen"</string>
- <string name="user_image_take_photo" msgid="467512954561638530">"Foto machen"</string>
- <string name="user_image_choose_photo" msgid="1363820919146782908">"Bild auswählen"</string>
<string name="user_image_photo_selector" msgid="433658323306627093">"Foto auswählen"</string>
<string name="failed_attempts_now_wiping_device" msgid="4016329172216428897">"Zu viele Fehlversuche. Die Daten auf diesem Gerät werden gelöscht."</string>
<string name="failed_attempts_now_wiping_user" msgid="469060411789668050">"Zu viele Fehlversuche. Dieser Nutzer wird gelöscht."</string>
@@ -684,8 +704,6 @@
<string name="accessibility_ethernet_disconnected" msgid="2832501530856497489">"Ethernet nicht verbunden"</string>
<string name="accessibility_ethernet_connected" msgid="6175942685957461563">"Ethernet."</string>
<string name="accessibility_no_calling" msgid="3540827068323895748">"Keine Anrufe."</string>
- <string name="avatar_picker_title" msgid="8492884172713170652">"Profilbild auswählen"</string>
- <string name="default_user_icon_description" msgid="6554047177298972638">"Standardmäßiges Nutzersymbol"</string>
<string name="physical_keyboard_title" msgid="4811935435315835220">"Physische Tastatur"</string>
<string name="keyboard_layout_dialog_title" msgid="3927180147005616290">"Tastaturlayout wählen"</string>
<string name="keyboard_layout_default_label" msgid="1997292217218546957">"Standard"</string>
diff --git a/packages/SettingsLib/res/values-el/strings.xml b/packages/SettingsLib/res/values-el/strings.xml
index 55baabb..c38034a 100644
--- a/packages/SettingsLib/res/values-el/strings.xml
+++ b/packages/SettingsLib/res/values-el/strings.xml
@@ -106,6 +106,28 @@
<string name="bluetooth_hearing_aid_left_active" msgid="7084887715570971441">"Ενεργό, μόνο το αριστερό"</string>
<string name="bluetooth_hearing_aid_right_active" msgid="8574683234077567230">"Ενεργό, μόνο το δεξί"</string>
<string name="bluetooth_hearing_aid_left_and_right_active" msgid="407704460573163973">"Ενεργό, αριστερό και δεξί"</string>
+ <!-- no translation found for bluetooth_active_media_only_battery_level (1164678961213251365) -->
+ <skip />
+ <!-- no translation found for bluetooth_active_media_only_battery_level_untethered (1345174295097854560) -->
+ <skip />
+ <!-- no translation found for bluetooth_battery_level_lea_support (8580950145907305436) -->
+ <skip />
+ <!-- no translation found for bluetooth_battery_level_untethered_lea_support (8534816721698743015) -->
+ <skip />
+ <!-- no translation found for bluetooth_battery_level_untethered_left_lea_support (6605320955858788855) -->
+ <skip />
+ <!-- no translation found for bluetooth_battery_level_untethered_right_lea_support (5717356160322149355) -->
+ <skip />
+ <!-- no translation found for bluetooth_active_media_only_no_battery_level (71106861912593126) -->
+ <skip />
+ <!-- no translation found for bluetooth_saved_device_lea_support (7231323139968285768) -->
+ <skip />
+ <!-- no translation found for bluetooth_hearing_aid_media_only_left_active (1632152540901488645) -->
+ <skip />
+ <!-- no translation found for bluetooth_hearing_aid_media_only_right_active (3854140683042617230) -->
+ <skip />
+ <!-- no translation found for bluetooth_hearing_aid_media_only_left_and_right_active (1299913413062528417) -->
+ <skip />
<string name="bluetooth_profile_a2dp" msgid="4632426382762851724">"Ήχος πολυμέσων"</string>
<string name="bluetooth_profile_headset" msgid="5395952236133499331">"Τηλεφωνικές κλήσεις"</string>
<string name="bluetooth_profile_opp" msgid="6692618568149493430">"Μεταφορά αρχείου"</string>
@@ -643,8 +665,6 @@
<string name="guest_notification_ephemeral" msgid="7263252466950923871">"Όλη η δραστηριότητα θα διαγραφεί κατά την έξοδο"</string>
<string name="guest_notification_non_ephemeral" msgid="6843799963012259330">"Αποθηκεύστε ή διαγράψτε τη δραστηριότητά σας κατά την έξοδο"</string>
<string name="guest_notification_non_ephemeral_non_first_login" msgid="8009307983766934876">"Επαναφορά για διαγραφή της δραστηριότητας της περιόδου σύνδεσης ή αποθήκευση ή διαγραφή κατά την έξοδο."</string>
- <string name="user_image_take_photo" msgid="467512954561638530">"Λήψη φωτογραφίας"</string>
- <string name="user_image_choose_photo" msgid="1363820919146782908">"Επιλογή εικόνας"</string>
<string name="user_image_photo_selector" msgid="433658323306627093">"Επιλογή φωτογραφίας"</string>
<string name="failed_attempts_now_wiping_device" msgid="4016329172216428897">"Πάρα πολλές ανεπιτυχείς προσπάθειες. Τα δεδομένα αυτής της συσκευής θα διαγραφούν."</string>
<string name="failed_attempts_now_wiping_user" msgid="469060411789668050">"Πάρα πολλές ανεπιτυχείς προσπάθειες. Αυτός ο χρήστης θα διαγραφεί."</string>
@@ -684,8 +704,6 @@
<string name="accessibility_ethernet_disconnected" msgid="2832501530856497489">"Το Ethernet αποσυνδέθηκε."</string>
<string name="accessibility_ethernet_connected" msgid="6175942685957461563">"Ethernet."</string>
<string name="accessibility_no_calling" msgid="3540827068323895748">"Χωρίς κλήσεις."</string>
- <string name="avatar_picker_title" msgid="8492884172713170652">"Επιλογή φωτογραφίας προφίλ"</string>
- <string name="default_user_icon_description" msgid="6554047177298972638">"Προεπιλεγμένο εικονίδιο χρήστη"</string>
<string name="physical_keyboard_title" msgid="4811935435315835220">"Φυσικό πληκτρολόγιο"</string>
<string name="keyboard_layout_dialog_title" msgid="3927180147005616290">"Επιλέξτε διάταξη πληκτρολογίου"</string>
<string name="keyboard_layout_default_label" msgid="1997292217218546957">"Προεπιλογή"</string>
diff --git a/packages/SettingsLib/res/values-en-rAU/strings.xml b/packages/SettingsLib/res/values-en-rAU/strings.xml
index f136838..c787c63 100644
--- a/packages/SettingsLib/res/values-en-rAU/strings.xml
+++ b/packages/SettingsLib/res/values-en-rAU/strings.xml
@@ -106,6 +106,28 @@
<string name="bluetooth_hearing_aid_left_active" msgid="7084887715570971441">"Active, left only"</string>
<string name="bluetooth_hearing_aid_right_active" msgid="8574683234077567230">"Active, right only"</string>
<string name="bluetooth_hearing_aid_left_and_right_active" msgid="407704460573163973">"Active, left and right"</string>
+ <!-- no translation found for bluetooth_active_media_only_battery_level (1164678961213251365) -->
+ <skip />
+ <!-- no translation found for bluetooth_active_media_only_battery_level_untethered (1345174295097854560) -->
+ <skip />
+ <!-- no translation found for bluetooth_battery_level_lea_support (8580950145907305436) -->
+ <skip />
+ <!-- no translation found for bluetooth_battery_level_untethered_lea_support (8534816721698743015) -->
+ <skip />
+ <!-- no translation found for bluetooth_battery_level_untethered_left_lea_support (6605320955858788855) -->
+ <skip />
+ <!-- no translation found for bluetooth_battery_level_untethered_right_lea_support (5717356160322149355) -->
+ <skip />
+ <!-- no translation found for bluetooth_active_media_only_no_battery_level (71106861912593126) -->
+ <skip />
+ <!-- no translation found for bluetooth_saved_device_lea_support (7231323139968285768) -->
+ <skip />
+ <!-- no translation found for bluetooth_hearing_aid_media_only_left_active (1632152540901488645) -->
+ <skip />
+ <!-- no translation found for bluetooth_hearing_aid_media_only_right_active (3854140683042617230) -->
+ <skip />
+ <!-- no translation found for bluetooth_hearing_aid_media_only_left_and_right_active (1299913413062528417) -->
+ <skip />
<string name="bluetooth_profile_a2dp" msgid="4632426382762851724">"Media audio"</string>
<string name="bluetooth_profile_headset" msgid="5395952236133499331">"Phone calls"</string>
<string name="bluetooth_profile_opp" msgid="6692618568149493430">"File transfer"</string>
@@ -616,7 +638,7 @@
<string name="add_user_failed" msgid="4809887794313944872">"Failed to create a new user"</string>
<string name="add_guest_failed" msgid="8074548434469843443">"Failed to create a new guest"</string>
<string name="user_nickname" msgid="262624187455825083">"Nickname"</string>
- <string name="edit_user_info_message" msgid="6677556031419002895">"The name and picture you choose will be visible to anyone who uses this device."</string>
+ <string name="edit_user_info_message" msgid="6677556031419002895">"The name and picture that you choose will be visible to anyone who uses this device."</string>
<string name="user_add_user" msgid="7876449291500212468">"Add user"</string>
<string name="guest_new_guest" msgid="3482026122932643557">"Add guest"</string>
<string name="guest_exit_guest" msgid="5908239569510734136">"Remove guest"</string>
@@ -643,8 +665,6 @@
<string name="guest_notification_ephemeral" msgid="7263252466950923871">"All activity will be deleted on exit"</string>
<string name="guest_notification_non_ephemeral" msgid="6843799963012259330">"You can save or delete your activity on exit"</string>
<string name="guest_notification_non_ephemeral_non_first_login" msgid="8009307983766934876">"Reset to delete session activity now, or you can save or delete activity on exit"</string>
- <string name="user_image_take_photo" msgid="467512954561638530">"Take a photo"</string>
- <string name="user_image_choose_photo" msgid="1363820919146782908">"Choose an image"</string>
<string name="user_image_photo_selector" msgid="433658323306627093">"Select photo"</string>
<string name="failed_attempts_now_wiping_device" msgid="4016329172216428897">"Too many incorrect attempts. This device\'s data will be deleted."</string>
<string name="failed_attempts_now_wiping_user" msgid="469060411789668050">"Too many incorrect attempts. This user will be deleted."</string>
@@ -684,8 +704,6 @@
<string name="accessibility_ethernet_disconnected" msgid="2832501530856497489">"Ethernet disconnected."</string>
<string name="accessibility_ethernet_connected" msgid="6175942685957461563">"Ethernet."</string>
<string name="accessibility_no_calling" msgid="3540827068323895748">"No calling."</string>
- <string name="avatar_picker_title" msgid="8492884172713170652">"Choose a profile picture"</string>
- <string name="default_user_icon_description" msgid="6554047177298972638">"Default user icon"</string>
<string name="physical_keyboard_title" msgid="4811935435315835220">"Physical keyboard"</string>
<string name="keyboard_layout_dialog_title" msgid="3927180147005616290">"Choose keyboard layout"</string>
<string name="keyboard_layout_default_label" msgid="1997292217218546957">"Default"</string>
diff --git a/packages/SettingsLib/res/values-en-rCA/strings.xml b/packages/SettingsLib/res/values-en-rCA/strings.xml
index 3308bf9..e5d2e29 100644
--- a/packages/SettingsLib/res/values-en-rCA/strings.xml
+++ b/packages/SettingsLib/res/values-en-rCA/strings.xml
@@ -106,6 +106,17 @@
<string name="bluetooth_hearing_aid_left_active" msgid="7084887715570971441">"Active, left only"</string>
<string name="bluetooth_hearing_aid_right_active" msgid="8574683234077567230">"Active, right only"</string>
<string name="bluetooth_hearing_aid_left_and_right_active" msgid="407704460573163973">"Active, left and right"</string>
+ <string name="bluetooth_active_media_only_battery_level" msgid="1164678961213251365">"Active (media only), <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE">%1$s</xliff:g> battery"</string>
+ <string name="bluetooth_active_media_only_battery_level_untethered" msgid="1345174295097854560">"Active (media only), L: <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE_0">%1$s</xliff:g> battery, R: <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE_1">%2$s</xliff:g> battery"</string>
+ <string name="bluetooth_battery_level_lea_support" msgid="8580950145907305436">"Connected (supports audio sharing), <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE">%1$s</xliff:g> battery"</string>
+ <string name="bluetooth_battery_level_untethered_lea_support" msgid="8534816721698743015">"Connected (supports audio sharing), L: <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE_0">%1$s</xliff:g> battery, R: <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE_1">%2$s</xliff:g> battery"</string>
+ <string name="bluetooth_battery_level_untethered_left_lea_support" msgid="6605320955858788855">"Connected (supports audio sharing), left <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE">%1$s</xliff:g>"</string>
+ <string name="bluetooth_battery_level_untethered_right_lea_support" msgid="5717356160322149355">"Connected (supports audio sharing), right <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE">%1$s</xliff:g>"</string>
+ <string name="bluetooth_active_media_only_no_battery_level" msgid="71106861912593126">"Active (media only)"</string>
+ <string name="bluetooth_saved_device_lea_support" msgid="7231323139968285768">"Supports audio sharing"</string>
+ <string name="bluetooth_hearing_aid_media_only_left_active" msgid="1632152540901488645">"Active (media only), left only"</string>
+ <string name="bluetooth_hearing_aid_media_only_right_active" msgid="3854140683042617230">"Active (media only), right only"</string>
+ <string name="bluetooth_hearing_aid_media_only_left_and_right_active" msgid="1299913413062528417">"Active (media only), left and right"</string>
<string name="bluetooth_profile_a2dp" msgid="4632426382762851724">"Media audio"</string>
<string name="bluetooth_profile_headset" msgid="5395952236133499331">"Phone calls"</string>
<string name="bluetooth_profile_opp" msgid="6692618568149493430">"File transfer"</string>
@@ -643,8 +654,6 @@
<string name="guest_notification_ephemeral" msgid="7263252466950923871">"All activity will be deleted on exit"</string>
<string name="guest_notification_non_ephemeral" msgid="6843799963012259330">"You can save or delete your activity on exit"</string>
<string name="guest_notification_non_ephemeral_non_first_login" msgid="8009307983766934876">"Reset to delete session activity now, or you can save or delete activity on exit"</string>
- <string name="user_image_take_photo" msgid="467512954561638530">"Take a photo"</string>
- <string name="user_image_choose_photo" msgid="1363820919146782908">"Choose an image"</string>
<string name="user_image_photo_selector" msgid="433658323306627093">"Select photo"</string>
<string name="failed_attempts_now_wiping_device" msgid="4016329172216428897">"Too many incorrect attempts. This device\'s data will be deleted."</string>
<string name="failed_attempts_now_wiping_user" msgid="469060411789668050">"Too many incorrect attempts. This user will be deleted."</string>
@@ -684,8 +693,6 @@
<string name="accessibility_ethernet_disconnected" msgid="2832501530856497489">"Ethernet disconnected."</string>
<string name="accessibility_ethernet_connected" msgid="6175942685957461563">"Ethernet."</string>
<string name="accessibility_no_calling" msgid="3540827068323895748">"No calling."</string>
- <string name="avatar_picker_title" msgid="8492884172713170652">"Choose a profile picture"</string>
- <string name="default_user_icon_description" msgid="6554047177298972638">"Default user icon"</string>
<string name="physical_keyboard_title" msgid="4811935435315835220">"Physical keyboard"</string>
<string name="keyboard_layout_dialog_title" msgid="3927180147005616290">"Choose keyboard layout"</string>
<string name="keyboard_layout_default_label" msgid="1997292217218546957">"Default"</string>
diff --git a/packages/SettingsLib/res/values-en-rGB/strings.xml b/packages/SettingsLib/res/values-en-rGB/strings.xml
index f136838..c787c63 100644
--- a/packages/SettingsLib/res/values-en-rGB/strings.xml
+++ b/packages/SettingsLib/res/values-en-rGB/strings.xml
@@ -106,6 +106,28 @@
<string name="bluetooth_hearing_aid_left_active" msgid="7084887715570971441">"Active, left only"</string>
<string name="bluetooth_hearing_aid_right_active" msgid="8574683234077567230">"Active, right only"</string>
<string name="bluetooth_hearing_aid_left_and_right_active" msgid="407704460573163973">"Active, left and right"</string>
+ <!-- no translation found for bluetooth_active_media_only_battery_level (1164678961213251365) -->
+ <skip />
+ <!-- no translation found for bluetooth_active_media_only_battery_level_untethered (1345174295097854560) -->
+ <skip />
+ <!-- no translation found for bluetooth_battery_level_lea_support (8580950145907305436) -->
+ <skip />
+ <!-- no translation found for bluetooth_battery_level_untethered_lea_support (8534816721698743015) -->
+ <skip />
+ <!-- no translation found for bluetooth_battery_level_untethered_left_lea_support (6605320955858788855) -->
+ <skip />
+ <!-- no translation found for bluetooth_battery_level_untethered_right_lea_support (5717356160322149355) -->
+ <skip />
+ <!-- no translation found for bluetooth_active_media_only_no_battery_level (71106861912593126) -->
+ <skip />
+ <!-- no translation found for bluetooth_saved_device_lea_support (7231323139968285768) -->
+ <skip />
+ <!-- no translation found for bluetooth_hearing_aid_media_only_left_active (1632152540901488645) -->
+ <skip />
+ <!-- no translation found for bluetooth_hearing_aid_media_only_right_active (3854140683042617230) -->
+ <skip />
+ <!-- no translation found for bluetooth_hearing_aid_media_only_left_and_right_active (1299913413062528417) -->
+ <skip />
<string name="bluetooth_profile_a2dp" msgid="4632426382762851724">"Media audio"</string>
<string name="bluetooth_profile_headset" msgid="5395952236133499331">"Phone calls"</string>
<string name="bluetooth_profile_opp" msgid="6692618568149493430">"File transfer"</string>
@@ -616,7 +638,7 @@
<string name="add_user_failed" msgid="4809887794313944872">"Failed to create a new user"</string>
<string name="add_guest_failed" msgid="8074548434469843443">"Failed to create a new guest"</string>
<string name="user_nickname" msgid="262624187455825083">"Nickname"</string>
- <string name="edit_user_info_message" msgid="6677556031419002895">"The name and picture you choose will be visible to anyone who uses this device."</string>
+ <string name="edit_user_info_message" msgid="6677556031419002895">"The name and picture that you choose will be visible to anyone who uses this device."</string>
<string name="user_add_user" msgid="7876449291500212468">"Add user"</string>
<string name="guest_new_guest" msgid="3482026122932643557">"Add guest"</string>
<string name="guest_exit_guest" msgid="5908239569510734136">"Remove guest"</string>
@@ -643,8 +665,6 @@
<string name="guest_notification_ephemeral" msgid="7263252466950923871">"All activity will be deleted on exit"</string>
<string name="guest_notification_non_ephemeral" msgid="6843799963012259330">"You can save or delete your activity on exit"</string>
<string name="guest_notification_non_ephemeral_non_first_login" msgid="8009307983766934876">"Reset to delete session activity now, or you can save or delete activity on exit"</string>
- <string name="user_image_take_photo" msgid="467512954561638530">"Take a photo"</string>
- <string name="user_image_choose_photo" msgid="1363820919146782908">"Choose an image"</string>
<string name="user_image_photo_selector" msgid="433658323306627093">"Select photo"</string>
<string name="failed_attempts_now_wiping_device" msgid="4016329172216428897">"Too many incorrect attempts. This device\'s data will be deleted."</string>
<string name="failed_attempts_now_wiping_user" msgid="469060411789668050">"Too many incorrect attempts. This user will be deleted."</string>
@@ -684,8 +704,6 @@
<string name="accessibility_ethernet_disconnected" msgid="2832501530856497489">"Ethernet disconnected."</string>
<string name="accessibility_ethernet_connected" msgid="6175942685957461563">"Ethernet."</string>
<string name="accessibility_no_calling" msgid="3540827068323895748">"No calling."</string>
- <string name="avatar_picker_title" msgid="8492884172713170652">"Choose a profile picture"</string>
- <string name="default_user_icon_description" msgid="6554047177298972638">"Default user icon"</string>
<string name="physical_keyboard_title" msgid="4811935435315835220">"Physical keyboard"</string>
<string name="keyboard_layout_dialog_title" msgid="3927180147005616290">"Choose keyboard layout"</string>
<string name="keyboard_layout_default_label" msgid="1997292217218546957">"Default"</string>
diff --git a/packages/SettingsLib/res/values-en-rIN/strings.xml b/packages/SettingsLib/res/values-en-rIN/strings.xml
index f136838..c787c63 100644
--- a/packages/SettingsLib/res/values-en-rIN/strings.xml
+++ b/packages/SettingsLib/res/values-en-rIN/strings.xml
@@ -106,6 +106,28 @@
<string name="bluetooth_hearing_aid_left_active" msgid="7084887715570971441">"Active, left only"</string>
<string name="bluetooth_hearing_aid_right_active" msgid="8574683234077567230">"Active, right only"</string>
<string name="bluetooth_hearing_aid_left_and_right_active" msgid="407704460573163973">"Active, left and right"</string>
+ <!-- no translation found for bluetooth_active_media_only_battery_level (1164678961213251365) -->
+ <skip />
+ <!-- no translation found for bluetooth_active_media_only_battery_level_untethered (1345174295097854560) -->
+ <skip />
+ <!-- no translation found for bluetooth_battery_level_lea_support (8580950145907305436) -->
+ <skip />
+ <!-- no translation found for bluetooth_battery_level_untethered_lea_support (8534816721698743015) -->
+ <skip />
+ <!-- no translation found for bluetooth_battery_level_untethered_left_lea_support (6605320955858788855) -->
+ <skip />
+ <!-- no translation found for bluetooth_battery_level_untethered_right_lea_support (5717356160322149355) -->
+ <skip />
+ <!-- no translation found for bluetooth_active_media_only_no_battery_level (71106861912593126) -->
+ <skip />
+ <!-- no translation found for bluetooth_saved_device_lea_support (7231323139968285768) -->
+ <skip />
+ <!-- no translation found for bluetooth_hearing_aid_media_only_left_active (1632152540901488645) -->
+ <skip />
+ <!-- no translation found for bluetooth_hearing_aid_media_only_right_active (3854140683042617230) -->
+ <skip />
+ <!-- no translation found for bluetooth_hearing_aid_media_only_left_and_right_active (1299913413062528417) -->
+ <skip />
<string name="bluetooth_profile_a2dp" msgid="4632426382762851724">"Media audio"</string>
<string name="bluetooth_profile_headset" msgid="5395952236133499331">"Phone calls"</string>
<string name="bluetooth_profile_opp" msgid="6692618568149493430">"File transfer"</string>
@@ -616,7 +638,7 @@
<string name="add_user_failed" msgid="4809887794313944872">"Failed to create a new user"</string>
<string name="add_guest_failed" msgid="8074548434469843443">"Failed to create a new guest"</string>
<string name="user_nickname" msgid="262624187455825083">"Nickname"</string>
- <string name="edit_user_info_message" msgid="6677556031419002895">"The name and picture you choose will be visible to anyone who uses this device."</string>
+ <string name="edit_user_info_message" msgid="6677556031419002895">"The name and picture that you choose will be visible to anyone who uses this device."</string>
<string name="user_add_user" msgid="7876449291500212468">"Add user"</string>
<string name="guest_new_guest" msgid="3482026122932643557">"Add guest"</string>
<string name="guest_exit_guest" msgid="5908239569510734136">"Remove guest"</string>
@@ -643,8 +665,6 @@
<string name="guest_notification_ephemeral" msgid="7263252466950923871">"All activity will be deleted on exit"</string>
<string name="guest_notification_non_ephemeral" msgid="6843799963012259330">"You can save or delete your activity on exit"</string>
<string name="guest_notification_non_ephemeral_non_first_login" msgid="8009307983766934876">"Reset to delete session activity now, or you can save or delete activity on exit"</string>
- <string name="user_image_take_photo" msgid="467512954561638530">"Take a photo"</string>
- <string name="user_image_choose_photo" msgid="1363820919146782908">"Choose an image"</string>
<string name="user_image_photo_selector" msgid="433658323306627093">"Select photo"</string>
<string name="failed_attempts_now_wiping_device" msgid="4016329172216428897">"Too many incorrect attempts. This device\'s data will be deleted."</string>
<string name="failed_attempts_now_wiping_user" msgid="469060411789668050">"Too many incorrect attempts. This user will be deleted."</string>
@@ -684,8 +704,6 @@
<string name="accessibility_ethernet_disconnected" msgid="2832501530856497489">"Ethernet disconnected."</string>
<string name="accessibility_ethernet_connected" msgid="6175942685957461563">"Ethernet."</string>
<string name="accessibility_no_calling" msgid="3540827068323895748">"No calling."</string>
- <string name="avatar_picker_title" msgid="8492884172713170652">"Choose a profile picture"</string>
- <string name="default_user_icon_description" msgid="6554047177298972638">"Default user icon"</string>
<string name="physical_keyboard_title" msgid="4811935435315835220">"Physical keyboard"</string>
<string name="keyboard_layout_dialog_title" msgid="3927180147005616290">"Choose keyboard layout"</string>
<string name="keyboard_layout_default_label" msgid="1997292217218546957">"Default"</string>
diff --git a/packages/SettingsLib/res/values-en-rXC/strings.xml b/packages/SettingsLib/res/values-en-rXC/strings.xml
index d720aee..5e14648 100644
--- a/packages/SettingsLib/res/values-en-rXC/strings.xml
+++ b/packages/SettingsLib/res/values-en-rXC/strings.xml
@@ -106,6 +106,17 @@
<string name="bluetooth_hearing_aid_left_active" msgid="7084887715570971441">"Active, left only"</string>
<string name="bluetooth_hearing_aid_right_active" msgid="8574683234077567230">"Active, right only"</string>
<string name="bluetooth_hearing_aid_left_and_right_active" msgid="407704460573163973">"Active, left and right"</string>
+ <string name="bluetooth_active_media_only_battery_level" msgid="1164678961213251365">"Active (media only), <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE">%1$s</xliff:g> battery"</string>
+ <string name="bluetooth_active_media_only_battery_level_untethered" msgid="1345174295097854560">"Active (media only), L: <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE_0">%1$s</xliff:g> battery, R: <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE_1">%2$s</xliff:g> battery"</string>
+ <string name="bluetooth_battery_level_lea_support" msgid="8580950145907305436">"Connected (supports audio sharing), <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE">%1$s</xliff:g> battery"</string>
+ <string name="bluetooth_battery_level_untethered_lea_support" msgid="8534816721698743015">"Connected (supports audio sharing), L: <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE_0">%1$s</xliff:g> battery, R: <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE_1">%2$s</xliff:g> battery"</string>
+ <string name="bluetooth_battery_level_untethered_left_lea_support" msgid="6605320955858788855">"Connected (supports audio sharing), left <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE">%1$s</xliff:g>"</string>
+ <string name="bluetooth_battery_level_untethered_right_lea_support" msgid="5717356160322149355">"Connected (supports audio sharing), right <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE">%1$s</xliff:g>"</string>
+ <string name="bluetooth_active_media_only_no_battery_level" msgid="71106861912593126">"Active (media only)"</string>
+ <string name="bluetooth_saved_device_lea_support" msgid="7231323139968285768">"Supports audio sharing"</string>
+ <string name="bluetooth_hearing_aid_media_only_left_active" msgid="1632152540901488645">"Active (media only), left only"</string>
+ <string name="bluetooth_hearing_aid_media_only_right_active" msgid="3854140683042617230">"Active (media only), right only"</string>
+ <string name="bluetooth_hearing_aid_media_only_left_and_right_active" msgid="1299913413062528417">"Active (media only), left and right"</string>
<string name="bluetooth_profile_a2dp" msgid="4632426382762851724">"Media audio"</string>
<string name="bluetooth_profile_headset" msgid="5395952236133499331">"Phone calls"</string>
<string name="bluetooth_profile_opp" msgid="6692618568149493430">"File transfer"</string>
@@ -643,8 +654,6 @@
<string name="guest_notification_ephemeral" msgid="7263252466950923871">"All activity will be deleted on exit"</string>
<string name="guest_notification_non_ephemeral" msgid="6843799963012259330">"You can save or delete your activity on exit"</string>
<string name="guest_notification_non_ephemeral_non_first_login" msgid="8009307983766934876">"Reset to delete session activity now, or you can save or delete activity on exit"</string>
- <string name="user_image_take_photo" msgid="467512954561638530">"Take a photo"</string>
- <string name="user_image_choose_photo" msgid="1363820919146782908">"Choose an image"</string>
<string name="user_image_photo_selector" msgid="433658323306627093">"Select photo"</string>
<string name="failed_attempts_now_wiping_device" msgid="4016329172216428897">"Too many incorrect attempts. This device\'s data will be deleted."</string>
<string name="failed_attempts_now_wiping_user" msgid="469060411789668050">"Too many incorrect attempts. This user will be deleted."</string>
@@ -684,8 +693,6 @@
<string name="accessibility_ethernet_disconnected" msgid="2832501530856497489">"Ethernet disconnected."</string>
<string name="accessibility_ethernet_connected" msgid="6175942685957461563">"Ethernet."</string>
<string name="accessibility_no_calling" msgid="3540827068323895748">"No calling."</string>
- <string name="avatar_picker_title" msgid="8492884172713170652">"Choose a profile picture"</string>
- <string name="default_user_icon_description" msgid="6554047177298972638">"Default user icon"</string>
<string name="physical_keyboard_title" msgid="4811935435315835220">"Physical keyboard"</string>
<string name="keyboard_layout_dialog_title" msgid="3927180147005616290">"Choose keyboard layout"</string>
<string name="keyboard_layout_default_label" msgid="1997292217218546957">"Default"</string>
diff --git a/packages/SettingsLib/res/values-es-rUS/strings.xml b/packages/SettingsLib/res/values-es-rUS/strings.xml
index 4ee0577..1903c6b 100644
--- a/packages/SettingsLib/res/values-es-rUS/strings.xml
+++ b/packages/SettingsLib/res/values-es-rUS/strings.xml
@@ -106,6 +106,28 @@
<string name="bluetooth_hearing_aid_left_active" msgid="7084887715570971441">"Activo; solo oído izquierdo"</string>
<string name="bluetooth_hearing_aid_right_active" msgid="8574683234077567230">"Activo; solo oído derecho"</string>
<string name="bluetooth_hearing_aid_left_and_right_active" msgid="407704460573163973">"Activo; oídos izquierdo y derecho"</string>
+ <!-- no translation found for bluetooth_active_media_only_battery_level (1164678961213251365) -->
+ <skip />
+ <!-- no translation found for bluetooth_active_media_only_battery_level_untethered (1345174295097854560) -->
+ <skip />
+ <!-- no translation found for bluetooth_battery_level_lea_support (8580950145907305436) -->
+ <skip />
+ <!-- no translation found for bluetooth_battery_level_untethered_lea_support (8534816721698743015) -->
+ <skip />
+ <!-- no translation found for bluetooth_battery_level_untethered_left_lea_support (6605320955858788855) -->
+ <skip />
+ <!-- no translation found for bluetooth_battery_level_untethered_right_lea_support (5717356160322149355) -->
+ <skip />
+ <!-- no translation found for bluetooth_active_media_only_no_battery_level (71106861912593126) -->
+ <skip />
+ <!-- no translation found for bluetooth_saved_device_lea_support (7231323139968285768) -->
+ <skip />
+ <!-- no translation found for bluetooth_hearing_aid_media_only_left_active (1632152540901488645) -->
+ <skip />
+ <!-- no translation found for bluetooth_hearing_aid_media_only_right_active (3854140683042617230) -->
+ <skip />
+ <!-- no translation found for bluetooth_hearing_aid_media_only_left_and_right_active (1299913413062528417) -->
+ <skip />
<string name="bluetooth_profile_a2dp" msgid="4632426382762851724">"Audio multimedia"</string>
<string name="bluetooth_profile_headset" msgid="5395952236133499331">"Llamadas telefónicas"</string>
<string name="bluetooth_profile_opp" msgid="6692618568149493430">"Transferencia de archivos"</string>
@@ -552,7 +574,7 @@
<string name="media_transfer_this_device_name_tablet" msgid="2975593806278422086">"Esta tablet"</string>
<!-- no translation found for media_transfer_this_device_name_tv (5285685336836896535) -->
<skip />
- <string name="media_transfer_dock_speaker_device_name" msgid="2856219597113881950">"Bocina del conector"</string>
+ <string name="media_transfer_dock_speaker_device_name" msgid="2856219597113881950">"Bocina de la estación de carga"</string>
<string name="media_transfer_external_device_name" msgid="2588672258721846418">"Dispositivo externo"</string>
<string name="media_transfer_default_device_name" msgid="4315604017399871828">"Dispositivo conectado"</string>
<string name="media_transfer_this_phone" msgid="7194341457812151531">"Este teléfono"</string>
@@ -643,8 +665,6 @@
<string name="guest_notification_ephemeral" msgid="7263252466950923871">"Cuando salgas, se borrará toda la actividad"</string>
<string name="guest_notification_non_ephemeral" msgid="6843799963012259330">"Puedes guardar o borrar la actividad cuando salgas"</string>
<string name="guest_notification_non_ephemeral_non_first_login" msgid="8009307983766934876">"Restablece la sesión para eliminar la actividad ahora; o guarda o borra la actividad cuando salgas"</string>
- <string name="user_image_take_photo" msgid="467512954561638530">"Tomar una foto"</string>
- <string name="user_image_choose_photo" msgid="1363820919146782908">"Elegir una imagen"</string>
<string name="user_image_photo_selector" msgid="433658323306627093">"Seleccionar foto"</string>
<string name="failed_attempts_now_wiping_device" msgid="4016329172216428897">"Hubo demasiados intentos incorrectos. Se borrarán los datos de este dispositivo."</string>
<string name="failed_attempts_now_wiping_user" msgid="469060411789668050">"Hubo demasiados intentos incorrectos. Se borrará este usuario."</string>
@@ -684,8 +704,6 @@
<string name="accessibility_ethernet_disconnected" msgid="2832501530856497489">"Ethernet desconectada"</string>
<string name="accessibility_ethernet_connected" msgid="6175942685957461563">"Ethernet."</string>
<string name="accessibility_no_calling" msgid="3540827068323895748">"Sin llamadas."</string>
- <string name="avatar_picker_title" msgid="8492884172713170652">"Elige una foto de perfil"</string>
- <string name="default_user_icon_description" msgid="6554047177298972638">"Ícono de usuario predeterminado"</string>
<string name="physical_keyboard_title" msgid="4811935435315835220">"Teclado físico"</string>
<string name="keyboard_layout_dialog_title" msgid="3927180147005616290">"Elige el diseño de teclado"</string>
<string name="keyboard_layout_default_label" msgid="1997292217218546957">"Predeterminada"</string>
diff --git a/packages/SettingsLib/res/values-es/arrays.xml b/packages/SettingsLib/res/values-es/arrays.xml
index 5046194..1489e5f 100644
--- a/packages/SettingsLib/res/values-es/arrays.xml
+++ b/packages/SettingsLib/res/values-es/arrays.xml
@@ -186,11 +186,11 @@
</string-array>
<string-array name="select_logd_size_summaries">
<item msgid="409235464399258501">"Desactivado"</item>
- <item msgid="4195153527464162486">"64 K/búfer registro"</item>
- <item msgid="7464037639415220106">"256 K/búfer registro"</item>
- <item msgid="8539423820514360724">"1 M/búfer registro"</item>
- <item msgid="1984761927103140651">"4 M/búfer registro"</item>
- <item msgid="2983219471251787208">"8 MB por búfer de registro"</item>
+ <item msgid="4195153527464162486">"64 K/búfer de registro"</item>
+ <item msgid="7464037639415220106">"256 K/búfer de registro"</item>
+ <item msgid="8539423820514360724">"1 M/búfer de registro"</item>
+ <item msgid="1984761927103140651">"4 M/búfer de registro"</item>
+ <item msgid="2983219471251787208">"8 MB/búfer de registro"</item>
</string-array>
<string-array name="select_logpersist_titles">
<item msgid="704720725704372366">"Desactivado"</item>
diff --git a/packages/SettingsLib/res/values-es/strings.xml b/packages/SettingsLib/res/values-es/strings.xml
index 00d5e5f..29b29b6 100644
--- a/packages/SettingsLib/res/values-es/strings.xml
+++ b/packages/SettingsLib/res/values-es/strings.xml
@@ -106,6 +106,28 @@
<string name="bluetooth_hearing_aid_left_active" msgid="7084887715570971441">"Activo, solo oído izquierdo"</string>
<string name="bluetooth_hearing_aid_right_active" msgid="8574683234077567230">"Activo, solo oído derecho"</string>
<string name="bluetooth_hearing_aid_left_and_right_active" msgid="407704460573163973">"Activo, oídos izquierdo y derecho"</string>
+ <!-- no translation found for bluetooth_active_media_only_battery_level (1164678961213251365) -->
+ <skip />
+ <!-- no translation found for bluetooth_active_media_only_battery_level_untethered (1345174295097854560) -->
+ <skip />
+ <!-- no translation found for bluetooth_battery_level_lea_support (8580950145907305436) -->
+ <skip />
+ <!-- no translation found for bluetooth_battery_level_untethered_lea_support (8534816721698743015) -->
+ <skip />
+ <!-- no translation found for bluetooth_battery_level_untethered_left_lea_support (6605320955858788855) -->
+ <skip />
+ <!-- no translation found for bluetooth_battery_level_untethered_right_lea_support (5717356160322149355) -->
+ <skip />
+ <!-- no translation found for bluetooth_active_media_only_no_battery_level (71106861912593126) -->
+ <skip />
+ <!-- no translation found for bluetooth_saved_device_lea_support (7231323139968285768) -->
+ <skip />
+ <!-- no translation found for bluetooth_hearing_aid_media_only_left_active (1632152540901488645) -->
+ <skip />
+ <!-- no translation found for bluetooth_hearing_aid_media_only_right_active (3854140683042617230) -->
+ <skip />
+ <!-- no translation found for bluetooth_hearing_aid_media_only_left_and_right_active (1299913413062528417) -->
+ <skip />
<string name="bluetooth_profile_a2dp" msgid="4632426382762851724">"Audio multimedia"</string>
<string name="bluetooth_profile_headset" msgid="5395952236133499331">"Llamadas de teléfono"</string>
<string name="bluetooth_profile_opp" msgid="6692618568149493430">"Transferencia de archivos"</string>
@@ -313,7 +335,7 @@
<string name="wifi_non_persistent_mac_randomization_summary" msgid="2159794543105053930">"Si este modo está habilitado, es posible que la dirección MAC del dispositivo cambie cada vez que se conecte a una red que tenga habilitada la aleatorización de MAC."</string>
<string name="wifi_metered_label" msgid="8737187690304098638">"Medida"</string>
<string name="wifi_unmetered_label" msgid="6174142840934095093">"No medida"</string>
- <string name="select_logd_size_title" msgid="1604578195914595173">"Tamaños del búfer de registro"</string>
+ <string name="select_logd_size_title" msgid="1604578195914595173">"Tamaños de los búferes de registro"</string>
<string name="select_logd_size_dialog_title" msgid="2105401994681013578">"Elige el tamaño del Logger por búfer"</string>
<string name="dev_logpersist_clear_warning_title" msgid="8631859265777337991">"¿Borrar almacenamiento continuo del registrador?"</string>
<string name="dev_logpersist_clear_warning_message" msgid="6447590867594287413">"Cuando ya no supervisamos la actividad con el registrador de forma continua, estamos obligados a borrar los datos del registrador almacenados en el dispositivo."</string>
@@ -643,8 +665,6 @@
<string name="guest_notification_ephemeral" msgid="7263252466950923871">"Toda la actividad se eliminará cuando salgas"</string>
<string name="guest_notification_non_ephemeral" msgid="6843799963012259330">"Puedes guardar o eliminar tu actividad al salir"</string>
<string name="guest_notification_non_ephemeral_non_first_login" msgid="8009307983766934876">"Restablece la sesión para eliminar la actividad ahora, o guarda o borra la actividad al salir"</string>
- <string name="user_image_take_photo" msgid="467512954561638530">"Hacer foto"</string>
- <string name="user_image_choose_photo" msgid="1363820919146782908">"Seleccionar una imagen"</string>
<string name="user_image_photo_selector" msgid="433658323306627093">"Seleccionar foto"</string>
<string name="failed_attempts_now_wiping_device" msgid="4016329172216428897">"Ha habido demasiados intentos fallidos. Los datos de este dispositivo se eliminarán."</string>
<string name="failed_attempts_now_wiping_user" msgid="469060411789668050">"Ha habido demasiados intentos fallidos. Este usuario se eliminará."</string>
@@ -684,8 +704,6 @@
<string name="accessibility_ethernet_disconnected" msgid="2832501530856497489">"Conexión Ethernet desconectada."</string>
<string name="accessibility_ethernet_connected" msgid="6175942685957461563">"Ethernet"</string>
<string name="accessibility_no_calling" msgid="3540827068323895748">"Sin llamadas."</string>
- <string name="avatar_picker_title" msgid="8492884172713170652">"Elige una imagen de perfil"</string>
- <string name="default_user_icon_description" msgid="6554047177298972638">"Icono de usuario predeterminado"</string>
<string name="physical_keyboard_title" msgid="4811935435315835220">"Teclado físico"</string>
<string name="keyboard_layout_dialog_title" msgid="3927180147005616290">"Elige el diseño del teclado"</string>
<string name="keyboard_layout_default_label" msgid="1997292217218546957">"Predeterminado"</string>
diff --git a/packages/SettingsLib/res/values-et/strings.xml b/packages/SettingsLib/res/values-et/strings.xml
index cb23c42..9f77bd9 100644
--- a/packages/SettingsLib/res/values-et/strings.xml
+++ b/packages/SettingsLib/res/values-et/strings.xml
@@ -106,6 +106,28 @@
<string name="bluetooth_hearing_aid_left_active" msgid="7084887715570971441">"Aktiivne, ainult vasak"</string>
<string name="bluetooth_hearing_aid_right_active" msgid="8574683234077567230">"Aktiivne, ainult parem"</string>
<string name="bluetooth_hearing_aid_left_and_right_active" msgid="407704460573163973">"Aktiivne, vasak ja parem"</string>
+ <!-- no translation found for bluetooth_active_media_only_battery_level (1164678961213251365) -->
+ <skip />
+ <!-- no translation found for bluetooth_active_media_only_battery_level_untethered (1345174295097854560) -->
+ <skip />
+ <!-- no translation found for bluetooth_battery_level_lea_support (8580950145907305436) -->
+ <skip />
+ <!-- no translation found for bluetooth_battery_level_untethered_lea_support (8534816721698743015) -->
+ <skip />
+ <!-- no translation found for bluetooth_battery_level_untethered_left_lea_support (6605320955858788855) -->
+ <skip />
+ <!-- no translation found for bluetooth_battery_level_untethered_right_lea_support (5717356160322149355) -->
+ <skip />
+ <!-- no translation found for bluetooth_active_media_only_no_battery_level (71106861912593126) -->
+ <skip />
+ <!-- no translation found for bluetooth_saved_device_lea_support (7231323139968285768) -->
+ <skip />
+ <!-- no translation found for bluetooth_hearing_aid_media_only_left_active (1632152540901488645) -->
+ <skip />
+ <!-- no translation found for bluetooth_hearing_aid_media_only_right_active (3854140683042617230) -->
+ <skip />
+ <!-- no translation found for bluetooth_hearing_aid_media_only_left_and_right_active (1299913413062528417) -->
+ <skip />
<string name="bluetooth_profile_a2dp" msgid="4632426382762851724">"Meediaheli"</string>
<string name="bluetooth_profile_headset" msgid="5395952236133499331">"Telefonikõned"</string>
<string name="bluetooth_profile_opp" msgid="6692618568149493430">"Failiedastus"</string>
@@ -643,8 +665,6 @@
<string name="guest_notification_ephemeral" msgid="7263252466950923871">"Kõik tegevused kustutatakse väljumisel"</string>
<string name="guest_notification_non_ephemeral" msgid="6843799963012259330">"Võite tegevused väljumisel salvestada või kustutada."</string>
<string name="guest_notification_non_ephemeral_non_first_login" msgid="8009307983766934876">"Seansi tegevuste kohe kustutamiseks lähtestage; või salvestage või kustutage need väljumisel."</string>
- <string name="user_image_take_photo" msgid="467512954561638530">"Pildistage"</string>
- <string name="user_image_choose_photo" msgid="1363820919146782908">"Valige pilt"</string>
<string name="user_image_photo_selector" msgid="433658323306627093">"Valige foto"</string>
<string name="failed_attempts_now_wiping_device" msgid="4016329172216428897">"Liiga palju valesid katseid. Selle seadme andmed kustutatakse."</string>
<string name="failed_attempts_now_wiping_user" msgid="469060411789668050">"Liiga palju valesid katseid. See kasutaja kustutatakse."</string>
@@ -684,8 +704,6 @@
<string name="accessibility_ethernet_disconnected" msgid="2832501530856497489">"Etherneti-ühendus on katkestatud."</string>
<string name="accessibility_ethernet_connected" msgid="6175942685957461563">"Ethernet."</string>
<string name="accessibility_no_calling" msgid="3540827068323895748">"Helistamine pole võimalik."</string>
- <string name="avatar_picker_title" msgid="8492884172713170652">"Valige profiilipilt"</string>
- <string name="default_user_icon_description" msgid="6554047177298972638">"Vaikekasutajaikoon"</string>
<string name="physical_keyboard_title" msgid="4811935435315835220">"Füüsiline klaviatuur"</string>
<string name="keyboard_layout_dialog_title" msgid="3927180147005616290">"Klaviatuuri paigutuse valimine"</string>
<string name="keyboard_layout_default_label" msgid="1997292217218546957">"Vaikimisi"</string>
diff --git a/packages/SettingsLib/res/values-eu/strings.xml b/packages/SettingsLib/res/values-eu/strings.xml
index 41311f2..05f3ac7 100644
--- a/packages/SettingsLib/res/values-eu/strings.xml
+++ b/packages/SettingsLib/res/values-eu/strings.xml
@@ -106,6 +106,28 @@
<string name="bluetooth_hearing_aid_left_active" msgid="7084887715570971441">"Aktibo, ezkerrekoa soilik"</string>
<string name="bluetooth_hearing_aid_right_active" msgid="8574683234077567230">"Aktibo, eskuinekoa soilik"</string>
<string name="bluetooth_hearing_aid_left_and_right_active" msgid="407704460573163973">"Aktibo, ezkerreko eta eskuineko audifonoak"</string>
+ <!-- no translation found for bluetooth_active_media_only_battery_level (1164678961213251365) -->
+ <skip />
+ <!-- no translation found for bluetooth_active_media_only_battery_level_untethered (1345174295097854560) -->
+ <skip />
+ <!-- no translation found for bluetooth_battery_level_lea_support (8580950145907305436) -->
+ <skip />
+ <!-- no translation found for bluetooth_battery_level_untethered_lea_support (8534816721698743015) -->
+ <skip />
+ <!-- no translation found for bluetooth_battery_level_untethered_left_lea_support (6605320955858788855) -->
+ <skip />
+ <!-- no translation found for bluetooth_battery_level_untethered_right_lea_support (5717356160322149355) -->
+ <skip />
+ <!-- no translation found for bluetooth_active_media_only_no_battery_level (71106861912593126) -->
+ <skip />
+ <!-- no translation found for bluetooth_saved_device_lea_support (7231323139968285768) -->
+ <skip />
+ <!-- no translation found for bluetooth_hearing_aid_media_only_left_active (1632152540901488645) -->
+ <skip />
+ <!-- no translation found for bluetooth_hearing_aid_media_only_right_active (3854140683042617230) -->
+ <skip />
+ <!-- no translation found for bluetooth_hearing_aid_media_only_left_and_right_active (1299913413062528417) -->
+ <skip />
<string name="bluetooth_profile_a2dp" msgid="4632426382762851724">"Euskarriaren audioa"</string>
<string name="bluetooth_profile_headset" msgid="5395952236133499331">"Telefono-deiak"</string>
<string name="bluetooth_profile_opp" msgid="6692618568149493430">"Fitxategi-transferentzia"</string>
@@ -643,8 +665,6 @@
<string name="guest_notification_ephemeral" msgid="7263252466950923871">"Irtetean, jarduera guztiak ezabatuko dira"</string>
<string name="guest_notification_non_ephemeral" msgid="6843799963012259330">"Irtetean, jarduerak gorde edo ezabatu egin ditzakezu"</string>
<string name="guest_notification_non_ephemeral_non_first_login" msgid="8009307983766934876">"Berrezarri saioa jarduerak ezabatzeko; bestela, aukeratu jarduerak irtetean gordetzea edo ezabatzea"</string>
- <string name="user_image_take_photo" msgid="467512954561638530">"Atera argazki bat"</string>
- <string name="user_image_choose_photo" msgid="1363820919146782908">"Aukeratu irudi bat"</string>
<string name="user_image_photo_selector" msgid="433658323306627093">"Hautatu argazki bat"</string>
<string name="failed_attempts_now_wiping_device" msgid="4016329172216428897">"Saiakera oker gehiegi egin dituzu. Gailu honetako datuak ezabatu egingo dira."</string>
<string name="failed_attempts_now_wiping_user" msgid="469060411789668050">"Saiakera oker gehiegi egin dituzu. Erabiltzailea ezabatu egingo da."</string>
@@ -684,8 +704,6 @@
<string name="accessibility_ethernet_disconnected" msgid="2832501530856497489">"Ethernet bidezko konexioa eten da."</string>
<string name="accessibility_ethernet_connected" msgid="6175942685957461563">"Ethernet."</string>
<string name="accessibility_no_calling" msgid="3540827068323895748">"Deirik ez."</string>
- <string name="avatar_picker_title" msgid="8492884172713170652">"Aukeratu profileko argazki bat"</string>
- <string name="default_user_icon_description" msgid="6554047177298972638">"Erabiltzaile lehenetsiaren ikonoa"</string>
<string name="physical_keyboard_title" msgid="4811935435315835220">"Teklatu fisikoa"</string>
<string name="keyboard_layout_dialog_title" msgid="3927180147005616290">"Aukeratu teklatuaren diseinua"</string>
<string name="keyboard_layout_default_label" msgid="1997292217218546957">"Lehenetsia"</string>
diff --git a/packages/SettingsLib/res/values-fa/strings.xml b/packages/SettingsLib/res/values-fa/strings.xml
index 51a5609..658fb0f 100644
--- a/packages/SettingsLib/res/values-fa/strings.xml
+++ b/packages/SettingsLib/res/values-fa/strings.xml
@@ -106,6 +106,28 @@
<string name="bluetooth_hearing_aid_left_active" msgid="7084887715570971441">"فعال، فقط چپ"</string>
<string name="bluetooth_hearing_aid_right_active" msgid="8574683234077567230">"فعال، فقط راست"</string>
<string name="bluetooth_hearing_aid_left_and_right_active" msgid="407704460573163973">"فعال، چپ و راست"</string>
+ <!-- no translation found for bluetooth_active_media_only_battery_level (1164678961213251365) -->
+ <skip />
+ <!-- no translation found for bluetooth_active_media_only_battery_level_untethered (1345174295097854560) -->
+ <skip />
+ <!-- no translation found for bluetooth_battery_level_lea_support (8580950145907305436) -->
+ <skip />
+ <!-- no translation found for bluetooth_battery_level_untethered_lea_support (8534816721698743015) -->
+ <skip />
+ <!-- no translation found for bluetooth_battery_level_untethered_left_lea_support (6605320955858788855) -->
+ <skip />
+ <!-- no translation found for bluetooth_battery_level_untethered_right_lea_support (5717356160322149355) -->
+ <skip />
+ <!-- no translation found for bluetooth_active_media_only_no_battery_level (71106861912593126) -->
+ <skip />
+ <!-- no translation found for bluetooth_saved_device_lea_support (7231323139968285768) -->
+ <skip />
+ <!-- no translation found for bluetooth_hearing_aid_media_only_left_active (1632152540901488645) -->
+ <skip />
+ <!-- no translation found for bluetooth_hearing_aid_media_only_right_active (3854140683042617230) -->
+ <skip />
+ <!-- no translation found for bluetooth_hearing_aid_media_only_left_and_right_active (1299913413062528417) -->
+ <skip />
<string name="bluetooth_profile_a2dp" msgid="4632426382762851724">"رسانه صوتی"</string>
<string name="bluetooth_profile_headset" msgid="5395952236133499331">"تماسهای تلفنی"</string>
<string name="bluetooth_profile_opp" msgid="6692618568149493430">"انتقال فایل"</string>
@@ -643,8 +665,6 @@
<string name="guest_notification_ephemeral" msgid="7263252466950923871">"همه فعالیتها هنگام خروج حذف خواهد شد"</string>
<string name="guest_notification_non_ephemeral" msgid="6843799963012259330">"میتوانید فعالیتتان را هنگام خروج ذخیره یا حذف کنید"</string>
<string name="guest_notification_non_ephemeral_non_first_login" msgid="8009307983766934876">"برای حذف فعالیت جلسه در این لحظه، بازنشانی کنید یا میتوانید فعالیت را هنگام خروج ذخیره یا حذف کنید"</string>
- <string name="user_image_take_photo" msgid="467512954561638530">"عکس گرفتن"</string>
- <string name="user_image_choose_photo" msgid="1363820919146782908">"انتخاب تصویر"</string>
<string name="user_image_photo_selector" msgid="433658323306627093">"انتخاب عکس"</string>
<string name="failed_attempts_now_wiping_device" msgid="4016329172216428897">"تلاشهای نادرست بسیار زیادی انجام شده است. دادههای این دستگاه حذف خواهد شد."</string>
<string name="failed_attempts_now_wiping_user" msgid="469060411789668050">"تلاشهای اشتباه بسیار زیادی انجام شده است. این کاربر حذف خواهد شد."</string>
@@ -684,8 +704,6 @@
<string name="accessibility_ethernet_disconnected" msgid="2832501530856497489">"اترنت قطع شد."</string>
<string name="accessibility_ethernet_connected" msgid="6175942685957461563">"اترنت."</string>
<string name="accessibility_no_calling" msgid="3540827068323895748">"تماس گرفته نشود."</string>
- <string name="avatar_picker_title" msgid="8492884172713170652">"انتخاب عکس نمایه"</string>
- <string name="default_user_icon_description" msgid="6554047177298972638">"نماد کاربر پیشفرض"</string>
<string name="physical_keyboard_title" msgid="4811935435315835220">"صفحهکلید فیزیکی"</string>
<string name="keyboard_layout_dialog_title" msgid="3927180147005616290">"انتخاب جانمایی صفحهکلید"</string>
<string name="keyboard_layout_default_label" msgid="1997292217218546957">"پیشفرض"</string>
diff --git a/packages/SettingsLib/res/values-fi/strings.xml b/packages/SettingsLib/res/values-fi/strings.xml
index cea81b4..14b1701 100644
--- a/packages/SettingsLib/res/values-fi/strings.xml
+++ b/packages/SettingsLib/res/values-fi/strings.xml
@@ -106,6 +106,28 @@
<string name="bluetooth_hearing_aid_left_active" msgid="7084887715570971441">"Aktiivinen, vain vasen"</string>
<string name="bluetooth_hearing_aid_right_active" msgid="8574683234077567230">"Aktiivinen, vain oikea"</string>
<string name="bluetooth_hearing_aid_left_and_right_active" msgid="407704460573163973">"Aktiivinen, vasen ja oikea"</string>
+ <!-- no translation found for bluetooth_active_media_only_battery_level (1164678961213251365) -->
+ <skip />
+ <!-- no translation found for bluetooth_active_media_only_battery_level_untethered (1345174295097854560) -->
+ <skip />
+ <!-- no translation found for bluetooth_battery_level_lea_support (8580950145907305436) -->
+ <skip />
+ <!-- no translation found for bluetooth_battery_level_untethered_lea_support (8534816721698743015) -->
+ <skip />
+ <!-- no translation found for bluetooth_battery_level_untethered_left_lea_support (6605320955858788855) -->
+ <skip />
+ <!-- no translation found for bluetooth_battery_level_untethered_right_lea_support (5717356160322149355) -->
+ <skip />
+ <!-- no translation found for bluetooth_active_media_only_no_battery_level (71106861912593126) -->
+ <skip />
+ <!-- no translation found for bluetooth_saved_device_lea_support (7231323139968285768) -->
+ <skip />
+ <!-- no translation found for bluetooth_hearing_aid_media_only_left_active (1632152540901488645) -->
+ <skip />
+ <!-- no translation found for bluetooth_hearing_aid_media_only_right_active (3854140683042617230) -->
+ <skip />
+ <!-- no translation found for bluetooth_hearing_aid_media_only_left_and_right_active (1299913413062528417) -->
+ <skip />
<string name="bluetooth_profile_a2dp" msgid="4632426382762851724">"Median ääni"</string>
<string name="bluetooth_profile_headset" msgid="5395952236133499331">"Puhelut"</string>
<string name="bluetooth_profile_opp" msgid="6692618568149493430">"Tiedostonsiirto"</string>
@@ -643,8 +665,6 @@
<string name="guest_notification_ephemeral" msgid="7263252466950923871">"Kaikki toiminta poistetaan uloskirjaamisen aikana"</string>
<string name="guest_notification_non_ephemeral" msgid="6843799963012259330">"Voit tallentaa tai poistaa toiminnan poistuessasi"</string>
<string name="guest_notification_non_ephemeral_non_first_login" msgid="8009307983766934876">"Nollaa poistaaksesi istunnon toiminnan nyt, tai voit tallentaa tai poistaa toimintaa poistuessasi"</string>
- <string name="user_image_take_photo" msgid="467512954561638530">"Ota kuva"</string>
- <string name="user_image_choose_photo" msgid="1363820919146782908">"Valitse kuva"</string>
<string name="user_image_photo_selector" msgid="433658323306627093">"Valitse kuva"</string>
<string name="failed_attempts_now_wiping_device" msgid="4016329172216428897">"Liian monta virheellistä yritystä. Laitteen data poistetaan."</string>
<string name="failed_attempts_now_wiping_user" msgid="469060411789668050">"Liian monta virheellistä yritystä. Tämä käyttäjä poistetaan."</string>
@@ -684,8 +704,6 @@
<string name="accessibility_ethernet_disconnected" msgid="2832501530856497489">"Ethernet on irrotettu."</string>
<string name="accessibility_ethernet_connected" msgid="6175942685957461563">"Ethernet"</string>
<string name="accessibility_no_calling" msgid="3540827068323895748">"Ei puheluita."</string>
- <string name="avatar_picker_title" msgid="8492884172713170652">"Valitse profiilikuva"</string>
- <string name="default_user_icon_description" msgid="6554047177298972638">"Oletuskäyttäjäkuvake"</string>
<string name="physical_keyboard_title" msgid="4811935435315835220">"Fyysinen näppäimistö"</string>
<string name="keyboard_layout_dialog_title" msgid="3927180147005616290">"Valitse näppäimistöasettelu"</string>
<string name="keyboard_layout_default_label" msgid="1997292217218546957">"Oletus"</string>
diff --git a/packages/SettingsLib/res/values-fr-rCA/strings.xml b/packages/SettingsLib/res/values-fr-rCA/strings.xml
index f85b6e4..e4ae145 100644
--- a/packages/SettingsLib/res/values-fr-rCA/strings.xml
+++ b/packages/SettingsLib/res/values-fr-rCA/strings.xml
@@ -106,6 +106,28 @@
<string name="bluetooth_hearing_aid_left_active" msgid="7084887715570971441">"Actif, gauche seulement"</string>
<string name="bluetooth_hearing_aid_right_active" msgid="8574683234077567230">"Active, droite seulement"</string>
<string name="bluetooth_hearing_aid_left_and_right_active" msgid="407704460573163973">"Active, gauche et droite"</string>
+ <!-- no translation found for bluetooth_active_media_only_battery_level (1164678961213251365) -->
+ <skip />
+ <!-- no translation found for bluetooth_active_media_only_battery_level_untethered (1345174295097854560) -->
+ <skip />
+ <!-- no translation found for bluetooth_battery_level_lea_support (8580950145907305436) -->
+ <skip />
+ <!-- no translation found for bluetooth_battery_level_untethered_lea_support (8534816721698743015) -->
+ <skip />
+ <!-- no translation found for bluetooth_battery_level_untethered_left_lea_support (6605320955858788855) -->
+ <skip />
+ <!-- no translation found for bluetooth_battery_level_untethered_right_lea_support (5717356160322149355) -->
+ <skip />
+ <!-- no translation found for bluetooth_active_media_only_no_battery_level (71106861912593126) -->
+ <skip />
+ <!-- no translation found for bluetooth_saved_device_lea_support (7231323139968285768) -->
+ <skip />
+ <!-- no translation found for bluetooth_hearing_aid_media_only_left_active (1632152540901488645) -->
+ <skip />
+ <!-- no translation found for bluetooth_hearing_aid_media_only_right_active (3854140683042617230) -->
+ <skip />
+ <!-- no translation found for bluetooth_hearing_aid_media_only_left_and_right_active (1299913413062528417) -->
+ <skip />
<string name="bluetooth_profile_a2dp" msgid="4632426382762851724">"Paramètres audio du support"</string>
<string name="bluetooth_profile_headset" msgid="5395952236133499331">"Appels téléphoniques"</string>
<string name="bluetooth_profile_opp" msgid="6692618568149493430">"Transfert de fichier"</string>
@@ -643,8 +665,6 @@
<string name="guest_notification_ephemeral" msgid="7263252466950923871">"Toute l\'activité sera supprimée à la fin de la session"</string>
<string name="guest_notification_non_ephemeral" msgid="6843799963012259330">"Vous pouvez enregistrer ou supprimer votre activité à la fin"</string>
<string name="guest_notification_non_ephemeral_non_first_login" msgid="8009307983766934876">"Réinitialisez pour supprimer l\'activité de la session maintenant, ou vous pouvez enregistrer ou supprimer l\'activité à la fin de la session"</string>
- <string name="user_image_take_photo" msgid="467512954561638530">"Prendre une photo"</string>
- <string name="user_image_choose_photo" msgid="1363820919146782908">"Sélectionner une image"</string>
<string name="user_image_photo_selector" msgid="433658323306627093">"Sélectionnez une photo"</string>
<string name="failed_attempts_now_wiping_device" msgid="4016329172216428897">"Trop de tentatives incorrectes. Les données de cet appareil seront supprimées."</string>
<string name="failed_attempts_now_wiping_user" msgid="469060411789668050">"Trop de tentatives incorrectes. Cet utilisateur sera supprimé."</string>
@@ -684,8 +704,6 @@
<string name="accessibility_ethernet_disconnected" msgid="2832501530856497489">"Ethernet déconnecté."</string>
<string name="accessibility_ethernet_connected" msgid="6175942685957461563">"Ethernet."</string>
<string name="accessibility_no_calling" msgid="3540827068323895748">"Aucun appel."</string>
- <string name="avatar_picker_title" msgid="8492884172713170652">"Choisir une photo de profil"</string>
- <string name="default_user_icon_description" msgid="6554047177298972638">"Icône d\'utilisateur par défaut"</string>
<string name="physical_keyboard_title" msgid="4811935435315835220">"Clavier physique"</string>
<string name="keyboard_layout_dialog_title" msgid="3927180147005616290">"Sélectionner disposition du clavier"</string>
<string name="keyboard_layout_default_label" msgid="1997292217218546957">"Par défaut"</string>
diff --git a/packages/SettingsLib/res/values-fr/strings.xml b/packages/SettingsLib/res/values-fr/strings.xml
index 6cf0396..09b40ac 100644
--- a/packages/SettingsLib/res/values-fr/strings.xml
+++ b/packages/SettingsLib/res/values-fr/strings.xml
@@ -106,6 +106,28 @@
<string name="bluetooth_hearing_aid_left_active" msgid="7084887715570971441">"Actif, gauche uniquement"</string>
<string name="bluetooth_hearing_aid_right_active" msgid="8574683234077567230">"Actif, droit uniquement"</string>
<string name="bluetooth_hearing_aid_left_and_right_active" msgid="407704460573163973">"Actifs, gauche et droit"</string>
+ <!-- no translation found for bluetooth_active_media_only_battery_level (1164678961213251365) -->
+ <skip />
+ <!-- no translation found for bluetooth_active_media_only_battery_level_untethered (1345174295097854560) -->
+ <skip />
+ <!-- no translation found for bluetooth_battery_level_lea_support (8580950145907305436) -->
+ <skip />
+ <!-- no translation found for bluetooth_battery_level_untethered_lea_support (8534816721698743015) -->
+ <skip />
+ <!-- no translation found for bluetooth_battery_level_untethered_left_lea_support (6605320955858788855) -->
+ <skip />
+ <!-- no translation found for bluetooth_battery_level_untethered_right_lea_support (5717356160322149355) -->
+ <skip />
+ <!-- no translation found for bluetooth_active_media_only_no_battery_level (71106861912593126) -->
+ <skip />
+ <!-- no translation found for bluetooth_saved_device_lea_support (7231323139968285768) -->
+ <skip />
+ <!-- no translation found for bluetooth_hearing_aid_media_only_left_active (1632152540901488645) -->
+ <skip />
+ <!-- no translation found for bluetooth_hearing_aid_media_only_right_active (3854140683042617230) -->
+ <skip />
+ <!-- no translation found for bluetooth_hearing_aid_media_only_left_and_right_active (1299913413062528417) -->
+ <skip />
<string name="bluetooth_profile_a2dp" msgid="4632426382762851724">"Audio multimédia"</string>
<string name="bluetooth_profile_headset" msgid="5395952236133499331">"Appels téléphoniques"</string>
<string name="bluetooth_profile_opp" msgid="6692618568149493430">"Transfert de fichiers"</string>
@@ -643,8 +665,6 @@
<string name="guest_notification_ephemeral" msgid="7263252466950923871">"Toute l\'activité sera supprimée à la fin de la session"</string>
<string name="guest_notification_non_ephemeral" msgid="6843799963012259330">"Vous pouvez enregistrer ou supprimer l\'activité en quittant"</string>
<string name="guest_notification_non_ephemeral_non_first_login" msgid="8009307983766934876">"Réinitialisez la session pour supprimer immédiatement l\'activité. Vous pourrez aussi l\'enregistrer ou la supprimer en quittant la session."</string>
- <string name="user_image_take_photo" msgid="467512954561638530">"Prendre une photo"</string>
- <string name="user_image_choose_photo" msgid="1363820919146782908">"Choisir une image"</string>
<string name="user_image_photo_selector" msgid="433658323306627093">"Sélectionner une photo"</string>
<string name="failed_attempts_now_wiping_device" msgid="4016329172216428897">"Trop de tentatives incorrectes. Les données de cet appareil vont être supprimées."</string>
<string name="failed_attempts_now_wiping_user" msgid="469060411789668050">"Trop de tentatives incorrectes. Ce compte utilisateur va être supprimé."</string>
@@ -684,8 +704,6 @@
<string name="accessibility_ethernet_disconnected" msgid="2832501530856497489">"Ethernet déconnecté"</string>
<string name="accessibility_ethernet_connected" msgid="6175942685957461563">"Ethernet."</string>
<string name="accessibility_no_calling" msgid="3540827068323895748">"Pas d\'appels."</string>
- <string name="avatar_picker_title" msgid="8492884172713170652">"Choisissez une photo de profil"</string>
- <string name="default_user_icon_description" msgid="6554047177298972638">"Icône de l\'utilisateur par défaut"</string>
<string name="physical_keyboard_title" msgid="4811935435315835220">"Clavier physique"</string>
<string name="keyboard_layout_dialog_title" msgid="3927180147005616290">"Sélectionner disposition du clavier"</string>
<string name="keyboard_layout_default_label" msgid="1997292217218546957">"Par défaut"</string>
diff --git a/packages/SettingsLib/res/values-gl/strings.xml b/packages/SettingsLib/res/values-gl/strings.xml
index b4d37e1..db40500 100644
--- a/packages/SettingsLib/res/values-gl/strings.xml
+++ b/packages/SettingsLib/res/values-gl/strings.xml
@@ -106,6 +106,28 @@
<string name="bluetooth_hearing_aid_left_active" msgid="7084887715570971441">"Activo (só o esquerdo)"</string>
<string name="bluetooth_hearing_aid_right_active" msgid="8574683234077567230">"Activo (só o dereito)"</string>
<string name="bluetooth_hearing_aid_left_and_right_active" msgid="407704460573163973">"Activos (o esquerdo e o dereito)"</string>
+ <!-- no translation found for bluetooth_active_media_only_battery_level (1164678961213251365) -->
+ <skip />
+ <!-- no translation found for bluetooth_active_media_only_battery_level_untethered (1345174295097854560) -->
+ <skip />
+ <!-- no translation found for bluetooth_battery_level_lea_support (8580950145907305436) -->
+ <skip />
+ <!-- no translation found for bluetooth_battery_level_untethered_lea_support (8534816721698743015) -->
+ <skip />
+ <!-- no translation found for bluetooth_battery_level_untethered_left_lea_support (6605320955858788855) -->
+ <skip />
+ <!-- no translation found for bluetooth_battery_level_untethered_right_lea_support (5717356160322149355) -->
+ <skip />
+ <!-- no translation found for bluetooth_active_media_only_no_battery_level (71106861912593126) -->
+ <skip />
+ <!-- no translation found for bluetooth_saved_device_lea_support (7231323139968285768) -->
+ <skip />
+ <!-- no translation found for bluetooth_hearing_aid_media_only_left_active (1632152540901488645) -->
+ <skip />
+ <!-- no translation found for bluetooth_hearing_aid_media_only_right_active (3854140683042617230) -->
+ <skip />
+ <!-- no translation found for bluetooth_hearing_aid_media_only_left_and_right_active (1299913413062528417) -->
+ <skip />
<string name="bluetooth_profile_a2dp" msgid="4632426382762851724">"Audio multimedia"</string>
<string name="bluetooth_profile_headset" msgid="5395952236133499331">"Chamadas telefónicas"</string>
<string name="bluetooth_profile_opp" msgid="6692618568149493430">"Transferencia de ficheiros"</string>
@@ -515,7 +537,7 @@
<string name="use_system_language_to_select_input_method_subtypes" msgid="4865195835541387040">"Usar idiomas do sistema"</string>
<string name="failed_to_open_app_settings_toast" msgid="764897252657692092">"Non se puido abrir a configuración de <xliff:g id="SPELL_APPLICATION_NAME">%1$s</xliff:g>"</string>
<string name="ime_security_warning" msgid="6547562217880551450">"Este método de introdución de texto pode recompilar todo o que escribas, incluídos os datos persoais como os contrasinais e os números de tarxetas de crédito. Provén da aplicación <xliff:g id="IME_APPLICATION_NAME">%1$s</xliff:g>. Queres usar este método de introdución de texto?"</string>
- <string name="direct_boot_unaware_dialog_message" msgid="7845398276735021548">"Nota: Tras un reinicio, non se pode iniciar esta aplicación ata que desbloquees o teléfono"</string>
+ <string name="direct_boot_unaware_dialog_message" msgid="7845398276735021548">"Nota: Tras un reinicio, non se poderá iniciar esta aplicación ata que se desbloquee o teléfono"</string>
<string name="ims_reg_title" msgid="8197592958123671062">"Estado de rexistro de IMS"</string>
<string name="ims_reg_status_registered" msgid="884916398194885457">"Rexistrado"</string>
<string name="ims_reg_status_not_registered" msgid="2989287366045704694">"Non rexistrado"</string>
@@ -643,8 +665,6 @@
<string name="guest_notification_ephemeral" msgid="7263252466950923871">"Eliminarase toda a actividade ao saír"</string>
<string name="guest_notification_non_ephemeral" msgid="6843799963012259330">"Podes gardar ou eliminar a túa actividade ao saír"</string>
<string name="guest_notification_non_ephemeral_non_first_login" msgid="8009307983766934876">"Restablece a sesión para eliminar a actividade agora, ou ben gárdaa ou elimínaa ao saír"</string>
- <string name="user_image_take_photo" msgid="467512954561638530">"Tirar foto"</string>
- <string name="user_image_choose_photo" msgid="1363820919146782908">"Escoller imaxe"</string>
<string name="user_image_photo_selector" msgid="433658323306627093">"Seleccionar foto"</string>
<string name="failed_attempts_now_wiping_device" msgid="4016329172216428897">"Realizaches demasiados intentos incorrectos. Eliminaranse os datos deste dispositivo."</string>
<string name="failed_attempts_now_wiping_user" msgid="469060411789668050">"Realizaches demasiados intentos incorrectos. Eliminarase este usuario."</string>
@@ -684,8 +704,6 @@
<string name="accessibility_ethernet_disconnected" msgid="2832501530856497489">"Desconectouse a Ethernet."</string>
<string name="accessibility_ethernet_connected" msgid="6175942685957461563">"Ethernet."</string>
<string name="accessibility_no_calling" msgid="3540827068323895748">"Sen chamadas."</string>
- <string name="avatar_picker_title" msgid="8492884172713170652">"Escolle unha imaxe do perfil"</string>
- <string name="default_user_icon_description" msgid="6554047177298972638">"Icona do usuario predeterminado"</string>
<string name="physical_keyboard_title" msgid="4811935435315835220">"Teclado físico"</string>
<string name="keyboard_layout_dialog_title" msgid="3927180147005616290">"Seleccionar deseño do teclado"</string>
<string name="keyboard_layout_default_label" msgid="1997292217218546957">"Predeterminado"</string>
diff --git a/packages/SettingsLib/res/values-gu/strings.xml b/packages/SettingsLib/res/values-gu/strings.xml
index e00ecba..c1eeca5 100644
--- a/packages/SettingsLib/res/values-gu/strings.xml
+++ b/packages/SettingsLib/res/values-gu/strings.xml
@@ -106,6 +106,28 @@
<string name="bluetooth_hearing_aid_left_active" msgid="7084887715570971441">"સક્રિય, માત્ર ડાબું"</string>
<string name="bluetooth_hearing_aid_right_active" msgid="8574683234077567230">"સક્રિય, માત્ર જમણું"</string>
<string name="bluetooth_hearing_aid_left_and_right_active" msgid="407704460573163973">"સક્રિય, ડાબું અને જમણું બન્ને"</string>
+ <!-- no translation found for bluetooth_active_media_only_battery_level (1164678961213251365) -->
+ <skip />
+ <!-- no translation found for bluetooth_active_media_only_battery_level_untethered (1345174295097854560) -->
+ <skip />
+ <!-- no translation found for bluetooth_battery_level_lea_support (8580950145907305436) -->
+ <skip />
+ <!-- no translation found for bluetooth_battery_level_untethered_lea_support (8534816721698743015) -->
+ <skip />
+ <!-- no translation found for bluetooth_battery_level_untethered_left_lea_support (6605320955858788855) -->
+ <skip />
+ <!-- no translation found for bluetooth_battery_level_untethered_right_lea_support (5717356160322149355) -->
+ <skip />
+ <!-- no translation found for bluetooth_active_media_only_no_battery_level (71106861912593126) -->
+ <skip />
+ <!-- no translation found for bluetooth_saved_device_lea_support (7231323139968285768) -->
+ <skip />
+ <!-- no translation found for bluetooth_hearing_aid_media_only_left_active (1632152540901488645) -->
+ <skip />
+ <!-- no translation found for bluetooth_hearing_aid_media_only_right_active (3854140683042617230) -->
+ <skip />
+ <!-- no translation found for bluetooth_hearing_aid_media_only_left_and_right_active (1299913413062528417) -->
+ <skip />
<string name="bluetooth_profile_a2dp" msgid="4632426382762851724">"મીડિયા ઑડિયો"</string>
<string name="bluetooth_profile_headset" msgid="5395952236133499331">"ફોન કૉલ"</string>
<string name="bluetooth_profile_opp" msgid="6692618568149493430">"ફાઇલ સ્થાનાંતરણ"</string>
@@ -640,11 +662,9 @@
<string name="guest_exit_button" msgid="5774985819191803960">"અતિથિ મોડમાંથી બહાર નીકળો"</string>
<string name="guest_reset_button" msgid="2515069346223503479">"અતિથિ સત્ર રીસેટ કરો"</string>
<string name="guest_exit_quick_settings_button" msgid="1912362095913765471">"અતિથિ મોડમાંથી બહાર નીકળો"</string>
- <string name="guest_notification_ephemeral" msgid="7263252466950923871">"બહાર નીકળતી વખતે તમામ પ્રવૃત્તિ ડિલીટ કરવામાં આવશે"</string>
+ <string name="guest_notification_ephemeral" msgid="7263252466950923871">"બહાર નીકળતી વખતે તમામ ઍક્ટિવિટી ડિલીટ કરવામાં આવશે"</string>
<string name="guest_notification_non_ephemeral" msgid="6843799963012259330">"બહાર નીકળતી વખતે તમે પ્રવૃત્તિ સાચવી કે ડિલીટ કરી શકશો"</string>
<string name="guest_notification_non_ephemeral_non_first_login" msgid="8009307983766934876">"સત્રની પ્રવૃત્તિ હમણાં ડિલીટ કરવા માટે રીસેટ કરો અથવા બહાર નીકળતી વખતે તમે પ્રવૃત્તિ સાચવી કે ડિલીટ કરી શકશો"</string>
- <string name="user_image_take_photo" msgid="467512954561638530">"ફોટો લો"</string>
- <string name="user_image_choose_photo" msgid="1363820919146782908">"છબી પસંદ કરો"</string>
<string name="user_image_photo_selector" msgid="433658323306627093">"ફોટો પસંદ કરો"</string>
<string name="failed_attempts_now_wiping_device" msgid="4016329172216428897">"ઘણા બધા ખોટા પ્રયત્નો. આ ડિવાઇસનો ડેટા ડિલીટ કરવામાં આવશે."</string>
<string name="failed_attempts_now_wiping_user" msgid="469060411789668050">"ઘણા બધા ખોટા પ્રયત્નો. આ વપરાશકર્તાને ડિલીટ કરવામાં આવશે."</string>
@@ -684,8 +704,6 @@
<string name="accessibility_ethernet_disconnected" msgid="2832501530856497489">"ઇથરનેટ ડિસ્કનેક્ટ થયું."</string>
<string name="accessibility_ethernet_connected" msgid="6175942685957461563">"ઇથરનેટ."</string>
<string name="accessibility_no_calling" msgid="3540827068323895748">"કોઈ કૉલિંગ નહીં."</string>
- <string name="avatar_picker_title" msgid="8492884172713170652">"પ્રોફાઇલ ફોટો પસંદ કરો"</string>
- <string name="default_user_icon_description" msgid="6554047177298972638">"ડિફૉલ્ટ વપરાશકર્તાનું આઇકન"</string>
<string name="physical_keyboard_title" msgid="4811935435315835220">"ભૌતિક કીબોર્ડ"</string>
<string name="keyboard_layout_dialog_title" msgid="3927180147005616290">"કીબોર્ડ લેઆઉટ પસંદ કરો"</string>
<string name="keyboard_layout_default_label" msgid="1997292217218546957">"ડિફૉલ્ટ"</string>
diff --git a/packages/SettingsLib/res/values-hi/strings.xml b/packages/SettingsLib/res/values-hi/strings.xml
index 16c5001..a5b3c88 100644
--- a/packages/SettingsLib/res/values-hi/strings.xml
+++ b/packages/SettingsLib/res/values-hi/strings.xml
@@ -106,6 +106,28 @@
<string name="bluetooth_hearing_aid_left_active" msgid="7084887715570971441">"सिर्फ़ बाईं तरफ़ वाला चालू है"</string>
<string name="bluetooth_hearing_aid_right_active" msgid="8574683234077567230">"सिर्फ़ दाईं तरफ़ वाला चालू है"</string>
<string name="bluetooth_hearing_aid_left_and_right_active" msgid="407704460573163973">"बाईं और दाईं तरफ़ वाला चालू है"</string>
+ <!-- no translation found for bluetooth_active_media_only_battery_level (1164678961213251365) -->
+ <skip />
+ <!-- no translation found for bluetooth_active_media_only_battery_level_untethered (1345174295097854560) -->
+ <skip />
+ <!-- no translation found for bluetooth_battery_level_lea_support (8580950145907305436) -->
+ <skip />
+ <!-- no translation found for bluetooth_battery_level_untethered_lea_support (8534816721698743015) -->
+ <skip />
+ <!-- no translation found for bluetooth_battery_level_untethered_left_lea_support (6605320955858788855) -->
+ <skip />
+ <!-- no translation found for bluetooth_battery_level_untethered_right_lea_support (5717356160322149355) -->
+ <skip />
+ <!-- no translation found for bluetooth_active_media_only_no_battery_level (71106861912593126) -->
+ <skip />
+ <!-- no translation found for bluetooth_saved_device_lea_support (7231323139968285768) -->
+ <skip />
+ <!-- no translation found for bluetooth_hearing_aid_media_only_left_active (1632152540901488645) -->
+ <skip />
+ <!-- no translation found for bluetooth_hearing_aid_media_only_right_active (3854140683042617230) -->
+ <skip />
+ <!-- no translation found for bluetooth_hearing_aid_media_only_left_and_right_active (1299913413062528417) -->
+ <skip />
<string name="bluetooth_profile_a2dp" msgid="4632426382762851724">"मीडिया ऑडियो"</string>
<string name="bluetooth_profile_headset" msgid="5395952236133499331">"फ़ोन कॉल"</string>
<string name="bluetooth_profile_opp" msgid="6692618568149493430">"फ़ाइल स्थानांतरण"</string>
@@ -643,8 +665,6 @@
<string name="guest_notification_ephemeral" msgid="7263252466950923871">"बाहर निकलने पर, सभी गतिविधियां मिट जाएंगी"</string>
<string name="guest_notification_non_ephemeral" msgid="6843799963012259330">"बाहर निकलने पर, गतिविधि को मिटाया या सेव किया जा सकता है"</string>
<string name="guest_notification_non_ephemeral_non_first_login" msgid="8009307983766934876">"सेशन की गतिविधि को अभी मिटाने के लिए, रीसेट करें. इसके अलावा, बाहर निकलने पर, गतिविधि को मिटाया या सेव किया जा सकता है"</string>
- <string name="user_image_take_photo" msgid="467512954561638530">"फ़ोटो खींचें"</string>
- <string name="user_image_choose_photo" msgid="1363820919146782908">"कोई इमेज चुनें"</string>
<string name="user_image_photo_selector" msgid="433658323306627093">"फ़ोटो चुनें"</string>
<string name="failed_attempts_now_wiping_device" msgid="4016329172216428897">"कई बार गलत कोशिशें की गई हैं. इस डिवाइस का डेटा मिटा दिया जाएगा."</string>
<string name="failed_attempts_now_wiping_user" msgid="469060411789668050">"कई बार गलत कोशिशें की गई हैं. इस उपयोगकर्ता को मिटा दिया जाएगा."</string>
@@ -684,8 +704,6 @@
<string name="accessibility_ethernet_disconnected" msgid="2832501530856497489">"ईथरनेट डिस्कनेक्ट किया गया."</string>
<string name="accessibility_ethernet_connected" msgid="6175942685957461563">"ईथरनेट."</string>
<string name="accessibility_no_calling" msgid="3540827068323895748">"वॉइस कॉल की सुविधा उपलब्ध नहीं है."</string>
- <string name="avatar_picker_title" msgid="8492884172713170652">"प्रोफ़ाइल फ़ोटो चुनें"</string>
- <string name="default_user_icon_description" msgid="6554047177298972638">"उपयोगकर्ता के लिए डिफ़ॉल्ट आइकॉन"</string>
<string name="physical_keyboard_title" msgid="4811935435315835220">"फ़िज़िकल कीबोर्ड"</string>
<string name="keyboard_layout_dialog_title" msgid="3927180147005616290">"कीबोर्ड का लेआउट चुनें"</string>
<string name="keyboard_layout_default_label" msgid="1997292217218546957">"डिफ़ॉल्ट"</string>
diff --git a/packages/SettingsLib/res/values-hr/strings.xml b/packages/SettingsLib/res/values-hr/strings.xml
index 852bcae..a504c9a0 100644
--- a/packages/SettingsLib/res/values-hr/strings.xml
+++ b/packages/SettingsLib/res/values-hr/strings.xml
@@ -106,6 +106,28 @@
<string name="bluetooth_hearing_aid_left_active" msgid="7084887715570971441">"Aktivno, samo lijevo"</string>
<string name="bluetooth_hearing_aid_right_active" msgid="8574683234077567230">"Aktivno, samo desno"</string>
<string name="bluetooth_hearing_aid_left_and_right_active" msgid="407704460573163973">"Aktivno, lijevo i desno"</string>
+ <!-- no translation found for bluetooth_active_media_only_battery_level (1164678961213251365) -->
+ <skip />
+ <!-- no translation found for bluetooth_active_media_only_battery_level_untethered (1345174295097854560) -->
+ <skip />
+ <!-- no translation found for bluetooth_battery_level_lea_support (8580950145907305436) -->
+ <skip />
+ <!-- no translation found for bluetooth_battery_level_untethered_lea_support (8534816721698743015) -->
+ <skip />
+ <!-- no translation found for bluetooth_battery_level_untethered_left_lea_support (6605320955858788855) -->
+ <skip />
+ <!-- no translation found for bluetooth_battery_level_untethered_right_lea_support (5717356160322149355) -->
+ <skip />
+ <!-- no translation found for bluetooth_active_media_only_no_battery_level (71106861912593126) -->
+ <skip />
+ <!-- no translation found for bluetooth_saved_device_lea_support (7231323139968285768) -->
+ <skip />
+ <!-- no translation found for bluetooth_hearing_aid_media_only_left_active (1632152540901488645) -->
+ <skip />
+ <!-- no translation found for bluetooth_hearing_aid_media_only_right_active (3854140683042617230) -->
+ <skip />
+ <!-- no translation found for bluetooth_hearing_aid_media_only_left_and_right_active (1299913413062528417) -->
+ <skip />
<string name="bluetooth_profile_a2dp" msgid="4632426382762851724">"Zvuk medija"</string>
<string name="bluetooth_profile_headset" msgid="5395952236133499331">"Telefonski pozivi"</string>
<string name="bluetooth_profile_opp" msgid="6692618568149493430">"Prijenos datoteke"</string>
@@ -643,8 +665,6 @@
<string name="guest_notification_ephemeral" msgid="7263252466950923871">"Sve će se aktivnosti izbrisati po izlasku"</string>
<string name="guest_notification_non_ephemeral" msgid="6843799963012259330">"Svoje aktivnosti možete spremiti ili izbrisati na izlasku"</string>
<string name="guest_notification_non_ephemeral_non_first_login" msgid="8009307983766934876">"Poništite da odmah izbrišete aktivnost sesije. Inače je možete spremiti ili izbrisati na izlasku."</string>
- <string name="user_image_take_photo" msgid="467512954561638530">"Fotografiraj"</string>
- <string name="user_image_choose_photo" msgid="1363820919146782908">"Odaberi sliku"</string>
<string name="user_image_photo_selector" msgid="433658323306627093">"Odabir slike"</string>
<string name="failed_attempts_now_wiping_device" msgid="4016329172216428897">"Previše netočnih pokušaja. S uređaja će se izbrisati podaci."</string>
<string name="failed_attempts_now_wiping_user" msgid="469060411789668050">"Previše netočnih pokušaja. Ovaj će se korisnik izbrisati."</string>
@@ -684,8 +704,6 @@
<string name="accessibility_ethernet_disconnected" msgid="2832501530856497489">"Prekinuta je veza s ethernetom."</string>
<string name="accessibility_ethernet_connected" msgid="6175942685957461563">"Ethernet."</string>
<string name="accessibility_no_calling" msgid="3540827068323895748">"Bez poziva."</string>
- <string name="avatar_picker_title" msgid="8492884172713170652">"Odaberite profilnu sliku"</string>
- <string name="default_user_icon_description" msgid="6554047177298972638">"Ikona zadanog korisnika"</string>
<string name="physical_keyboard_title" msgid="4811935435315835220">"Fizička tipkovnica"</string>
<string name="keyboard_layout_dialog_title" msgid="3927180147005616290">"Odaberite raspored tipkovnice"</string>
<string name="keyboard_layout_default_label" msgid="1997292217218546957">"Zadano"</string>
diff --git a/packages/SettingsLib/res/values-hu/strings.xml b/packages/SettingsLib/res/values-hu/strings.xml
index f7517ed..3838d7d0 100644
--- a/packages/SettingsLib/res/values-hu/strings.xml
+++ b/packages/SettingsLib/res/values-hu/strings.xml
@@ -106,6 +106,28 @@
<string name="bluetooth_hearing_aid_left_active" msgid="7084887715570971441">"Aktív, csak bal"</string>
<string name="bluetooth_hearing_aid_right_active" msgid="8574683234077567230">"Aktív, csak jobb"</string>
<string name="bluetooth_hearing_aid_left_and_right_active" msgid="407704460573163973">"Aktív, bal és jobb"</string>
+ <!-- no translation found for bluetooth_active_media_only_battery_level (1164678961213251365) -->
+ <skip />
+ <!-- no translation found for bluetooth_active_media_only_battery_level_untethered (1345174295097854560) -->
+ <skip />
+ <!-- no translation found for bluetooth_battery_level_lea_support (8580950145907305436) -->
+ <skip />
+ <!-- no translation found for bluetooth_battery_level_untethered_lea_support (8534816721698743015) -->
+ <skip />
+ <!-- no translation found for bluetooth_battery_level_untethered_left_lea_support (6605320955858788855) -->
+ <skip />
+ <!-- no translation found for bluetooth_battery_level_untethered_right_lea_support (5717356160322149355) -->
+ <skip />
+ <!-- no translation found for bluetooth_active_media_only_no_battery_level (71106861912593126) -->
+ <skip />
+ <!-- no translation found for bluetooth_saved_device_lea_support (7231323139968285768) -->
+ <skip />
+ <!-- no translation found for bluetooth_hearing_aid_media_only_left_active (1632152540901488645) -->
+ <skip />
+ <!-- no translation found for bluetooth_hearing_aid_media_only_right_active (3854140683042617230) -->
+ <skip />
+ <!-- no translation found for bluetooth_hearing_aid_media_only_left_and_right_active (1299913413062528417) -->
+ <skip />
<string name="bluetooth_profile_a2dp" msgid="4632426382762851724">"Médiahang"</string>
<string name="bluetooth_profile_headset" msgid="5395952236133499331">"Telefonhívások"</string>
<string name="bluetooth_profile_opp" msgid="6692618568149493430">"Fájlátvitel"</string>
@@ -643,8 +665,6 @@
<string name="guest_notification_ephemeral" msgid="7263252466950923871">"A kilépéssel minden tevékenység törlődik"</string>
<string name="guest_notification_non_ephemeral" msgid="6843799963012259330">"A kilépéskor mentheti vagy törölheti a tevékenységeket"</string>
<string name="guest_notification_non_ephemeral_non_first_login" msgid="8009307983766934876">"Visszaállítással azonnal törölheti, illetve kilépéskor mentheti vagy törölheti a tevékenységeket"</string>
- <string name="user_image_take_photo" msgid="467512954561638530">"Fotó készítése"</string>
- <string name="user_image_choose_photo" msgid="1363820919146782908">"Kép kiválasztása"</string>
<string name="user_image_photo_selector" msgid="433658323306627093">"Fotó kiválasztása"</string>
<string name="failed_attempts_now_wiping_device" msgid="4016329172216428897">"Túl sok sikertelen próbálkozás. A rendszer törli az adatokat az eszközről."</string>
<string name="failed_attempts_now_wiping_user" msgid="469060411789668050">"Túl sok sikertelen próbálkozás. A rendszer törli ezt a felhasználót."</string>
@@ -684,8 +704,6 @@
<string name="accessibility_ethernet_disconnected" msgid="2832501530856497489">"Ethernet leválasztva."</string>
<string name="accessibility_ethernet_connected" msgid="6175942685957461563">"Ethernet."</string>
<string name="accessibility_no_calling" msgid="3540827068323895748">"Nem kezdeményezhet hanghívást."</string>
- <string name="avatar_picker_title" msgid="8492884172713170652">"Profilkép választása"</string>
- <string name="default_user_icon_description" msgid="6554047177298972638">"Alapértelmezett felhasználó ikonja"</string>
<string name="physical_keyboard_title" msgid="4811935435315835220">"Fizikai billentyűzet"</string>
<string name="keyboard_layout_dialog_title" msgid="3927180147005616290">"Billentyűzetkiosztás kiválasztása"</string>
<string name="keyboard_layout_default_label" msgid="1997292217218546957">"Alapértelmezett"</string>
diff --git a/packages/SettingsLib/res/values-hy/strings.xml b/packages/SettingsLib/res/values-hy/strings.xml
index 70a4f6c..0069175 100644
--- a/packages/SettingsLib/res/values-hy/strings.xml
+++ b/packages/SettingsLib/res/values-hy/strings.xml
@@ -106,6 +106,28 @@
<string name="bluetooth_hearing_aid_left_active" msgid="7084887715570971441">"Ակտիվ, միայն ձախ"</string>
<string name="bluetooth_hearing_aid_right_active" msgid="8574683234077567230">"Ակտիվ, միայն աջ"</string>
<string name="bluetooth_hearing_aid_left_and_right_active" msgid="407704460573163973">"Ակտիվ, ձախ և աջ"</string>
+ <!-- no translation found for bluetooth_active_media_only_battery_level (1164678961213251365) -->
+ <skip />
+ <!-- no translation found for bluetooth_active_media_only_battery_level_untethered (1345174295097854560) -->
+ <skip />
+ <!-- no translation found for bluetooth_battery_level_lea_support (8580950145907305436) -->
+ <skip />
+ <!-- no translation found for bluetooth_battery_level_untethered_lea_support (8534816721698743015) -->
+ <skip />
+ <!-- no translation found for bluetooth_battery_level_untethered_left_lea_support (6605320955858788855) -->
+ <skip />
+ <!-- no translation found for bluetooth_battery_level_untethered_right_lea_support (5717356160322149355) -->
+ <skip />
+ <!-- no translation found for bluetooth_active_media_only_no_battery_level (71106861912593126) -->
+ <skip />
+ <!-- no translation found for bluetooth_saved_device_lea_support (7231323139968285768) -->
+ <skip />
+ <!-- no translation found for bluetooth_hearing_aid_media_only_left_active (1632152540901488645) -->
+ <skip />
+ <!-- no translation found for bluetooth_hearing_aid_media_only_right_active (3854140683042617230) -->
+ <skip />
+ <!-- no translation found for bluetooth_hearing_aid_media_only_left_and_right_active (1299913413062528417) -->
+ <skip />
<string name="bluetooth_profile_a2dp" msgid="4632426382762851724">"Մեդիա աուդիո"</string>
<string name="bluetooth_profile_headset" msgid="5395952236133499331">"Հեռախոսազանգեր"</string>
<string name="bluetooth_profile_opp" msgid="6692618568149493430">"Ֆայլերի փոխանցում"</string>
@@ -643,8 +665,6 @@
<string name="guest_notification_ephemeral" msgid="7263252466950923871">"Եթե դուրս գաք, ամբողջ պատմությունը կջնջվի"</string>
<string name="guest_notification_non_ephemeral" msgid="6843799963012259330">"Դուրս գալիս կարող եք պահել կամ ջնջել ձեր պատմությունը"</string>
<string name="guest_notification_non_ephemeral_non_first_login" msgid="8009307983766934876">"Վերակայեք աշխատաշրջանի պատմությունը հիմա կամ պահեք/ջնջեք այն դուրս գալիս"</string>
- <string name="user_image_take_photo" msgid="467512954561638530">"Լուսանկարել"</string>
- <string name="user_image_choose_photo" msgid="1363820919146782908">"Ընտրել պատկեր"</string>
<string name="user_image_photo_selector" msgid="433658323306627093">"Ընտրեք լուսանկար"</string>
<string name="failed_attempts_now_wiping_device" msgid="4016329172216428897">"Չափից շատ սխալ փորձեր են արվել։ Այս սարքի տվյալները կջնջվեն։"</string>
<string name="failed_attempts_now_wiping_user" msgid="469060411789668050">"Չափից շատ սխալ փորձեր են արվել։ Oգտատիրոջ պրոֆիլը կջնջվի։"</string>
@@ -684,8 +704,6 @@
<string name="accessibility_ethernet_disconnected" msgid="2832501530856497489">"Ethernet-ը անջատված է:"</string>
<string name="accessibility_ethernet_connected" msgid="6175942685957461563">"Ethernet։"</string>
<string name="accessibility_no_calling" msgid="3540827068323895748">"Զանգել հնարավոր չէ։"</string>
- <string name="avatar_picker_title" msgid="8492884172713170652">"Ընտրեք պրոֆիլի նկար"</string>
- <string name="default_user_icon_description" msgid="6554047177298972638">"Օգտատիրոջ կանխադրված պատկերակ"</string>
<string name="physical_keyboard_title" msgid="4811935435315835220">"Ֆիզիկական ստեղնաշար"</string>
<string name="keyboard_layout_dialog_title" msgid="3927180147005616290">"Ընտրեք ստեղնաշարի դասավորությունը"</string>
<string name="keyboard_layout_default_label" msgid="1997292217218546957">"Կանխադրված"</string>
diff --git a/packages/SettingsLib/res/values-in/strings.xml b/packages/SettingsLib/res/values-in/strings.xml
index d1a0112..6254f7b 100644
--- a/packages/SettingsLib/res/values-in/strings.xml
+++ b/packages/SettingsLib/res/values-in/strings.xml
@@ -106,6 +106,28 @@
<string name="bluetooth_hearing_aid_left_active" msgid="7084887715570971441">"Aktif, hanya kiri"</string>
<string name="bluetooth_hearing_aid_right_active" msgid="8574683234077567230">"Aktif, hanya kanan"</string>
<string name="bluetooth_hearing_aid_left_and_right_active" msgid="407704460573163973">"Aktif, kiri dan kanan"</string>
+ <!-- no translation found for bluetooth_active_media_only_battery_level (1164678961213251365) -->
+ <skip />
+ <!-- no translation found for bluetooth_active_media_only_battery_level_untethered (1345174295097854560) -->
+ <skip />
+ <!-- no translation found for bluetooth_battery_level_lea_support (8580950145907305436) -->
+ <skip />
+ <!-- no translation found for bluetooth_battery_level_untethered_lea_support (8534816721698743015) -->
+ <skip />
+ <!-- no translation found for bluetooth_battery_level_untethered_left_lea_support (6605320955858788855) -->
+ <skip />
+ <!-- no translation found for bluetooth_battery_level_untethered_right_lea_support (5717356160322149355) -->
+ <skip />
+ <!-- no translation found for bluetooth_active_media_only_no_battery_level (71106861912593126) -->
+ <skip />
+ <!-- no translation found for bluetooth_saved_device_lea_support (7231323139968285768) -->
+ <skip />
+ <!-- no translation found for bluetooth_hearing_aid_media_only_left_active (1632152540901488645) -->
+ <skip />
+ <!-- no translation found for bluetooth_hearing_aid_media_only_right_active (3854140683042617230) -->
+ <skip />
+ <!-- no translation found for bluetooth_hearing_aid_media_only_left_and_right_active (1299913413062528417) -->
+ <skip />
<string name="bluetooth_profile_a2dp" msgid="4632426382762851724">"Audio media"</string>
<string name="bluetooth_profile_headset" msgid="5395952236133499331">"Panggilan telepon"</string>
<string name="bluetooth_profile_opp" msgid="6692618568149493430">"Transfer file"</string>
@@ -643,8 +665,6 @@
<string name="guest_notification_ephemeral" msgid="7263252466950923871">"Semua aktivitas akan dihapus saat Anda keluar"</string>
<string name="guest_notification_non_ephemeral" msgid="6843799963012259330">"Anda dapat menyimpan atau menghapus aktivitas saat keluar"</string>
<string name="guest_notification_non_ephemeral_non_first_login" msgid="8009307983766934876">"Reset untuk hapus aktivitas sesi sekarang, atau simpan atau hapus aktivitas saat keluar"</string>
- <string name="user_image_take_photo" msgid="467512954561638530">"Ambil foto"</string>
- <string name="user_image_choose_photo" msgid="1363820919146782908">"Pilih gambar"</string>
<string name="user_image_photo_selector" msgid="433658323306627093">"Pilih foto"</string>
<string name="failed_attempts_now_wiping_device" msgid="4016329172216428897">"Terlalu banyak percobaan yang salah. Data perangkat ini akan dihapus."</string>
<string name="failed_attempts_now_wiping_user" msgid="469060411789668050">"Terlalu banyak percobaan yang salah. Pengguna ini akan dihapus."</string>
@@ -684,8 +704,6 @@
<string name="accessibility_ethernet_disconnected" msgid="2832501530856497489">"Ethernet terputus."</string>
<string name="accessibility_ethernet_connected" msgid="6175942685957461563">"Ethernet."</string>
<string name="accessibility_no_calling" msgid="3540827068323895748">"Tidak ada panggilan."</string>
- <string name="avatar_picker_title" msgid="8492884172713170652">"Pilih foto profil"</string>
- <string name="default_user_icon_description" msgid="6554047177298972638">"Ikon pengguna default"</string>
<string name="physical_keyboard_title" msgid="4811935435315835220">"Keyboard fisik"</string>
<string name="keyboard_layout_dialog_title" msgid="3927180147005616290">"Pilih tata letak keyboard"</string>
<string name="keyboard_layout_default_label" msgid="1997292217218546957">"Default"</string>
diff --git a/packages/SettingsLib/res/values-is/strings.xml b/packages/SettingsLib/res/values-is/strings.xml
index 0694fb6..0f57670 100644
--- a/packages/SettingsLib/res/values-is/strings.xml
+++ b/packages/SettingsLib/res/values-is/strings.xml
@@ -106,6 +106,28 @@
<string name="bluetooth_hearing_aid_left_active" msgid="7084887715570971441">"Virkt, aðeins vinstra"</string>
<string name="bluetooth_hearing_aid_right_active" msgid="8574683234077567230">"Virkt, aðeins hægra"</string>
<string name="bluetooth_hearing_aid_left_and_right_active" msgid="407704460573163973">"Virkt, vinstra og hægra"</string>
+ <!-- no translation found for bluetooth_active_media_only_battery_level (1164678961213251365) -->
+ <skip />
+ <!-- no translation found for bluetooth_active_media_only_battery_level_untethered (1345174295097854560) -->
+ <skip />
+ <!-- no translation found for bluetooth_battery_level_lea_support (8580950145907305436) -->
+ <skip />
+ <!-- no translation found for bluetooth_battery_level_untethered_lea_support (8534816721698743015) -->
+ <skip />
+ <!-- no translation found for bluetooth_battery_level_untethered_left_lea_support (6605320955858788855) -->
+ <skip />
+ <!-- no translation found for bluetooth_battery_level_untethered_right_lea_support (5717356160322149355) -->
+ <skip />
+ <!-- no translation found for bluetooth_active_media_only_no_battery_level (71106861912593126) -->
+ <skip />
+ <!-- no translation found for bluetooth_saved_device_lea_support (7231323139968285768) -->
+ <skip />
+ <!-- no translation found for bluetooth_hearing_aid_media_only_left_active (1632152540901488645) -->
+ <skip />
+ <!-- no translation found for bluetooth_hearing_aid_media_only_right_active (3854140683042617230) -->
+ <skip />
+ <!-- no translation found for bluetooth_hearing_aid_media_only_left_and_right_active (1299913413062528417) -->
+ <skip />
<string name="bluetooth_profile_a2dp" msgid="4632426382762851724">"Hljóð efnis"</string>
<string name="bluetooth_profile_headset" msgid="5395952236133499331">"Símtöl"</string>
<string name="bluetooth_profile_opp" msgid="6692618568149493430">"Skráaflutningur"</string>
@@ -643,8 +665,6 @@
<string name="guest_notification_ephemeral" msgid="7263252466950923871">"Öllum aðgerðum verður eytt þegar lotu er lokað"</string>
<string name="guest_notification_non_ephemeral" msgid="6843799963012259330">"Þú getur vistað eða eytt aðgerðum þegar þú lokar"</string>
<string name="guest_notification_non_ephemeral_non_first_login" msgid="8009307983766934876">"Endurstilltu til að eyða aðgerðum lotu núna, eða vistaðu eða eyddu aðgerðum þegar þú lokar"</string>
- <string name="user_image_take_photo" msgid="467512954561638530">"Taka mynd"</string>
- <string name="user_image_choose_photo" msgid="1363820919146782908">"Velja mynd"</string>
<string name="user_image_photo_selector" msgid="433658323306627093">"Velja mynd"</string>
<string name="failed_attempts_now_wiping_device" msgid="4016329172216428897">"Of margar rangar tilraunir. Gögnum tækisins verður eytt."</string>
<string name="failed_attempts_now_wiping_user" msgid="469060411789668050">"Of margar rangar tilraunir. Þessum notanda verður eytt."</string>
@@ -684,8 +704,6 @@
<string name="accessibility_ethernet_disconnected" msgid="2832501530856497489">"Ethernet aftengt."</string>
<string name="accessibility_ethernet_connected" msgid="6175942685957461563">"Ethernet."</string>
<string name="accessibility_no_calling" msgid="3540827068323895748">"Engin símtöl."</string>
- <string name="avatar_picker_title" msgid="8492884172713170652">"Veldu prófílmynd"</string>
- <string name="default_user_icon_description" msgid="6554047177298972638">"Tákn sjálfgefins notanda"</string>
<string name="physical_keyboard_title" msgid="4811935435315835220">"Vélbúnaðarlyklaborð"</string>
<string name="keyboard_layout_dialog_title" msgid="3927180147005616290">"Veldu lyklaskipan"</string>
<string name="keyboard_layout_default_label" msgid="1997292217218546957">"Sjálfgefið"</string>
diff --git a/packages/SettingsLib/res/values-it/strings.xml b/packages/SettingsLib/res/values-it/strings.xml
index 70ce686..9502374 100644
--- a/packages/SettingsLib/res/values-it/strings.xml
+++ b/packages/SettingsLib/res/values-it/strings.xml
@@ -106,6 +106,28 @@
<string name="bluetooth_hearing_aid_left_active" msgid="7084887715570971441">"Attiva, solo sinistra"</string>
<string name="bluetooth_hearing_aid_right_active" msgid="8574683234077567230">"Attiva, solo destra"</string>
<string name="bluetooth_hearing_aid_left_and_right_active" msgid="407704460573163973">"Attivo, destra e sinistra"</string>
+ <!-- no translation found for bluetooth_active_media_only_battery_level (1164678961213251365) -->
+ <skip />
+ <!-- no translation found for bluetooth_active_media_only_battery_level_untethered (1345174295097854560) -->
+ <skip />
+ <!-- no translation found for bluetooth_battery_level_lea_support (8580950145907305436) -->
+ <skip />
+ <!-- no translation found for bluetooth_battery_level_untethered_lea_support (8534816721698743015) -->
+ <skip />
+ <!-- no translation found for bluetooth_battery_level_untethered_left_lea_support (6605320955858788855) -->
+ <skip />
+ <!-- no translation found for bluetooth_battery_level_untethered_right_lea_support (5717356160322149355) -->
+ <skip />
+ <!-- no translation found for bluetooth_active_media_only_no_battery_level (71106861912593126) -->
+ <skip />
+ <!-- no translation found for bluetooth_saved_device_lea_support (7231323139968285768) -->
+ <skip />
+ <!-- no translation found for bluetooth_hearing_aid_media_only_left_active (1632152540901488645) -->
+ <skip />
+ <!-- no translation found for bluetooth_hearing_aid_media_only_right_active (3854140683042617230) -->
+ <skip />
+ <!-- no translation found for bluetooth_hearing_aid_media_only_left_and_right_active (1299913413062528417) -->
+ <skip />
<string name="bluetooth_profile_a2dp" msgid="4632426382762851724">"Audio multimediale"</string>
<string name="bluetooth_profile_headset" msgid="5395952236133499331">"Telefonate"</string>
<string name="bluetooth_profile_opp" msgid="6692618568149493430">"Trasferimento file"</string>
@@ -643,8 +665,6 @@
<string name="guest_notification_ephemeral" msgid="7263252466950923871">"Quando esci verrà eliminata tutta l\'attività"</string>
<string name="guest_notification_non_ephemeral" msgid="6843799963012259330">"Quando esci puoi salvare o eliminare la tua attività"</string>
<string name="guest_notification_non_ephemeral_non_first_login" msgid="8009307983766934876">"Reimposta la sessione per eliminare subito l\'attività, oppure salvala o eliminala quando esci"</string>
- <string name="user_image_take_photo" msgid="467512954561638530">"Scatta una foto"</string>
- <string name="user_image_choose_photo" msgid="1363820919146782908">"Scegli un\'immagine"</string>
<string name="user_image_photo_selector" msgid="433658323306627093">"Seleziona la foto"</string>
<string name="failed_attempts_now_wiping_device" msgid="4016329172216428897">"Troppi tentativi sbagliati. I dati del dispositivo verranno eliminati."</string>
<string name="failed_attempts_now_wiping_user" msgid="469060411789668050">"Troppi tentativi sbagliati. Questo utente verrà eliminato."</string>
@@ -684,8 +704,6 @@
<string name="accessibility_ethernet_disconnected" msgid="2832501530856497489">"Connessione Ethernet annullata."</string>
<string name="accessibility_ethernet_connected" msgid="6175942685957461563">"Ethernet."</string>
<string name="accessibility_no_calling" msgid="3540827068323895748">"Chiamate non disponibili."</string>
- <string name="avatar_picker_title" msgid="8492884172713170652">"Scegli un\'immagine del profilo"</string>
- <string name="default_user_icon_description" msgid="6554047177298972638">"Icona dell\'utente predefinito"</string>
<string name="physical_keyboard_title" msgid="4811935435315835220">"Tastiera fisica"</string>
<string name="keyboard_layout_dialog_title" msgid="3927180147005616290">"Scegli layout tastiera"</string>
<string name="keyboard_layout_default_label" msgid="1997292217218546957">"Predefinito"</string>
diff --git a/packages/SettingsLib/res/values-iw/strings.xml b/packages/SettingsLib/res/values-iw/strings.xml
index 2a833b3..dea8ca3 100644
--- a/packages/SettingsLib/res/values-iw/strings.xml
+++ b/packages/SettingsLib/res/values-iw/strings.xml
@@ -106,6 +106,28 @@
<string name="bluetooth_hearing_aid_left_active" msgid="7084887715570971441">"פועל: שמאל בלבד"</string>
<string name="bluetooth_hearing_aid_right_active" msgid="8574683234077567230">"פועל: ימין בלבד"</string>
<string name="bluetooth_hearing_aid_left_and_right_active" msgid="407704460573163973">"פועל: ימין ושמאל"</string>
+ <!-- no translation found for bluetooth_active_media_only_battery_level (1164678961213251365) -->
+ <skip />
+ <!-- no translation found for bluetooth_active_media_only_battery_level_untethered (1345174295097854560) -->
+ <skip />
+ <!-- no translation found for bluetooth_battery_level_lea_support (8580950145907305436) -->
+ <skip />
+ <!-- no translation found for bluetooth_battery_level_untethered_lea_support (8534816721698743015) -->
+ <skip />
+ <!-- no translation found for bluetooth_battery_level_untethered_left_lea_support (6605320955858788855) -->
+ <skip />
+ <!-- no translation found for bluetooth_battery_level_untethered_right_lea_support (5717356160322149355) -->
+ <skip />
+ <!-- no translation found for bluetooth_active_media_only_no_battery_level (71106861912593126) -->
+ <skip />
+ <!-- no translation found for bluetooth_saved_device_lea_support (7231323139968285768) -->
+ <skip />
+ <!-- no translation found for bluetooth_hearing_aid_media_only_left_active (1632152540901488645) -->
+ <skip />
+ <!-- no translation found for bluetooth_hearing_aid_media_only_right_active (3854140683042617230) -->
+ <skip />
+ <!-- no translation found for bluetooth_hearing_aid_media_only_left_and_right_active (1299913413062528417) -->
+ <skip />
<string name="bluetooth_profile_a2dp" msgid="4632426382762851724">"אודיו של מדיה"</string>
<string name="bluetooth_profile_headset" msgid="5395952236133499331">"שיחות טלפון"</string>
<string name="bluetooth_profile_opp" msgid="6692618568149493430">"העברת קבצים"</string>
@@ -552,7 +574,7 @@
<string name="media_transfer_this_device_name_tablet" msgid="2975593806278422086">"הטאבלט הזה"</string>
<!-- no translation found for media_transfer_this_device_name_tv (5285685336836896535) -->
<skip />
- <string name="media_transfer_dock_speaker_device_name" msgid="2856219597113881950">"הרמקול של אביזר העגינה"</string>
+ <string name="media_transfer_dock_speaker_device_name" msgid="2856219597113881950">"רמקול של אביזר העגינה"</string>
<string name="media_transfer_external_device_name" msgid="2588672258721846418">"מכשיר חיצוני"</string>
<string name="media_transfer_default_device_name" msgid="4315604017399871828">"המכשיר המחובר"</string>
<string name="media_transfer_this_phone" msgid="7194341457812151531">"הטלפון הזה"</string>
@@ -643,8 +665,6 @@
<string name="guest_notification_ephemeral" msgid="7263252466950923871">"כל הפעילות תימחק ביציאה"</string>
<string name="guest_notification_non_ephemeral" msgid="6843799963012259330">"אפשר לשמור או למחוק את הפעילות שלך ביציאה"</string>
<string name="guest_notification_non_ephemeral_non_first_login" msgid="8009307983766934876">"ניתן לאפס כדי למחוק את הפעילות מהסשן כעת, או לשמור או למחוק את הפעילות ביציאה"</string>
- <string name="user_image_take_photo" msgid="467512954561638530">"צילום תמונה"</string>
- <string name="user_image_choose_photo" msgid="1363820919146782908">"לבחירת תמונה"</string>
<string name="user_image_photo_selector" msgid="433658323306627093">"בחירת תמונה"</string>
<string name="failed_attempts_now_wiping_device" msgid="4016329172216428897">"נעשו יותר מדי ניסיונות שגויים. הנתונים במכשיר יימחקו."</string>
<string name="failed_attempts_now_wiping_user" msgid="469060411789668050">"נעשו יותר מדי ניסיונות שגויים. המשתמש הזה יימחק."</string>
@@ -684,8 +704,6 @@
<string name="accessibility_ethernet_disconnected" msgid="2832501530856497489">"אתרנט מנותק."</string>
<string name="accessibility_ethernet_connected" msgid="6175942685957461563">"אתרנט."</string>
<string name="accessibility_no_calling" msgid="3540827068323895748">"אין שיחות."</string>
- <string name="avatar_picker_title" msgid="8492884172713170652">"בחירה של תמונת פרופיל"</string>
- <string name="default_user_icon_description" msgid="6554047177298972638">"סמל המשתמש שמוגדר כברירת מחדל"</string>
<string name="physical_keyboard_title" msgid="4811935435315835220">"מקלדת פיזית"</string>
<string name="keyboard_layout_dialog_title" msgid="3927180147005616290">"בחירה של פריסת המקלדת"</string>
<string name="keyboard_layout_default_label" msgid="1997292217218546957">"ברירת מחדל"</string>
diff --git a/packages/SettingsLib/res/values-ja/strings.xml b/packages/SettingsLib/res/values-ja/strings.xml
index 1d9dc3f..c7f3c0a 100644
--- a/packages/SettingsLib/res/values-ja/strings.xml
+++ b/packages/SettingsLib/res/values-ja/strings.xml
@@ -106,6 +106,28 @@
<string name="bluetooth_hearing_aid_left_active" msgid="7084887715570971441">"有効、左のみ"</string>
<string name="bluetooth_hearing_aid_right_active" msgid="8574683234077567230">"有効、右のみ"</string>
<string name="bluetooth_hearing_aid_left_and_right_active" msgid="407704460573163973">"有効、左と右"</string>
+ <!-- no translation found for bluetooth_active_media_only_battery_level (1164678961213251365) -->
+ <skip />
+ <!-- no translation found for bluetooth_active_media_only_battery_level_untethered (1345174295097854560) -->
+ <skip />
+ <!-- no translation found for bluetooth_battery_level_lea_support (8580950145907305436) -->
+ <skip />
+ <!-- no translation found for bluetooth_battery_level_untethered_lea_support (8534816721698743015) -->
+ <skip />
+ <!-- no translation found for bluetooth_battery_level_untethered_left_lea_support (6605320955858788855) -->
+ <skip />
+ <!-- no translation found for bluetooth_battery_level_untethered_right_lea_support (5717356160322149355) -->
+ <skip />
+ <!-- no translation found for bluetooth_active_media_only_no_battery_level (71106861912593126) -->
+ <skip />
+ <!-- no translation found for bluetooth_saved_device_lea_support (7231323139968285768) -->
+ <skip />
+ <!-- no translation found for bluetooth_hearing_aid_media_only_left_active (1632152540901488645) -->
+ <skip />
+ <!-- no translation found for bluetooth_hearing_aid_media_only_right_active (3854140683042617230) -->
+ <skip />
+ <!-- no translation found for bluetooth_hearing_aid_media_only_left_and_right_active (1299913413062528417) -->
+ <skip />
<string name="bluetooth_profile_a2dp" msgid="4632426382762851724">"メディアの音声"</string>
<string name="bluetooth_profile_headset" msgid="5395952236133499331">"電話"</string>
<string name="bluetooth_profile_opp" msgid="6692618568149493430">"ファイル転送"</string>
@@ -145,7 +167,7 @@
<string name="bluetooth_pairing_decline" msgid="6483118841204885890">"キャンセル"</string>
<string name="bluetooth_pairing_will_share_phonebook" msgid="3064334458659165176">"ペア設定により、接続時に連絡先や通話履歴へのアクセスが許可されます。"</string>
<string name="bluetooth_pairing_error_message" msgid="6626399020672335565">"<xliff:g id="DEVICE_NAME">%1$s</xliff:g>をペアに設定できません。"</string>
- <string name="bluetooth_pairing_pin_error_message" msgid="264422127613704940">"PINまたはパスキーが正しくないため、<xliff:g id="DEVICE_NAME">%1$s</xliff:g>をペアに設定できませんでした。"</string>
+ <string name="bluetooth_pairing_pin_error_message" msgid="264422127613704940">"PIN またはパスキーが正しくないため、<xliff:g id="DEVICE_NAME">%1$s</xliff:g> をペアに設定できませんでした。"</string>
<string name="bluetooth_pairing_device_down_error_message" msgid="2554424863101358857">"<xliff:g id="DEVICE_NAME">%1$s</xliff:g>と通信できません。"</string>
<string name="bluetooth_pairing_rejected_error_message" msgid="5943444352777314442">"ペア設定が<xliff:g id="DEVICE_NAME">%1$s</xliff:g>に拒否されました。"</string>
<string name="bluetooth_talkback_computer" msgid="3736623135703893773">"コンピュータ"</string>
@@ -643,8 +665,6 @@
<string name="guest_notification_ephemeral" msgid="7263252466950923871">"終了時にすべてのアクティビティが削除されます"</string>
<string name="guest_notification_non_ephemeral" msgid="6843799963012259330">"終了時にアクティビティを保存、削除できます"</string>
<string name="guest_notification_non_ephemeral_non_first_login" msgid="8009307983766934876">"アクティビティは、リセットして今すぐ削除するか、終了時に保存または削除できます"</string>
- <string name="user_image_take_photo" msgid="467512954561638530">"写真を撮る"</string>
- <string name="user_image_choose_photo" msgid="1363820919146782908">"画像を選択"</string>
<string name="user_image_photo_selector" msgid="433658323306627093">"写真を選択"</string>
<string name="failed_attempts_now_wiping_device" msgid="4016329172216428897">"間違えた回数が上限を超えました。このデバイスのデータが削除されます。"</string>
<string name="failed_attempts_now_wiping_user" msgid="469060411789668050">"間違えた回数が上限を超えました。このユーザーが削除されます。"</string>
@@ -684,8 +704,6 @@
<string name="accessibility_ethernet_disconnected" msgid="2832501530856497489">"イーサネット接続を解除しました。"</string>
<string name="accessibility_ethernet_connected" msgid="6175942685957461563">"イーサネット。"</string>
<string name="accessibility_no_calling" msgid="3540827068323895748">"通話なし。"</string>
- <string name="avatar_picker_title" msgid="8492884172713170652">"プロフィール写真の選択"</string>
- <string name="default_user_icon_description" msgid="6554047177298972638">"デフォルト ユーザー アイコン"</string>
<string name="physical_keyboard_title" msgid="4811935435315835220">"物理キーボード"</string>
<string name="keyboard_layout_dialog_title" msgid="3927180147005616290">"キーボード レイアウトの選択"</string>
<string name="keyboard_layout_default_label" msgid="1997292217218546957">"デフォルト"</string>
diff --git a/packages/SettingsLib/res/values-ka/strings.xml b/packages/SettingsLib/res/values-ka/strings.xml
index 12a342c..a94a401 100644
--- a/packages/SettingsLib/res/values-ka/strings.xml
+++ b/packages/SettingsLib/res/values-ka/strings.xml
@@ -106,6 +106,28 @@
<string name="bluetooth_hearing_aid_left_active" msgid="7084887715570971441">"აქტიური, მხოლოდ მარცხნივ"</string>
<string name="bluetooth_hearing_aid_right_active" msgid="8574683234077567230">"აქტიური, მხოლოდ მარჯვნივ"</string>
<string name="bluetooth_hearing_aid_left_and_right_active" msgid="407704460573163973">"აქტიური, მარცხნივ და მარჯვნივ"</string>
+ <!-- no translation found for bluetooth_active_media_only_battery_level (1164678961213251365) -->
+ <skip />
+ <!-- no translation found for bluetooth_active_media_only_battery_level_untethered (1345174295097854560) -->
+ <skip />
+ <!-- no translation found for bluetooth_battery_level_lea_support (8580950145907305436) -->
+ <skip />
+ <!-- no translation found for bluetooth_battery_level_untethered_lea_support (8534816721698743015) -->
+ <skip />
+ <!-- no translation found for bluetooth_battery_level_untethered_left_lea_support (6605320955858788855) -->
+ <skip />
+ <!-- no translation found for bluetooth_battery_level_untethered_right_lea_support (5717356160322149355) -->
+ <skip />
+ <!-- no translation found for bluetooth_active_media_only_no_battery_level (71106861912593126) -->
+ <skip />
+ <!-- no translation found for bluetooth_saved_device_lea_support (7231323139968285768) -->
+ <skip />
+ <!-- no translation found for bluetooth_hearing_aid_media_only_left_active (1632152540901488645) -->
+ <skip />
+ <!-- no translation found for bluetooth_hearing_aid_media_only_right_active (3854140683042617230) -->
+ <skip />
+ <!-- no translation found for bluetooth_hearing_aid_media_only_left_and_right_active (1299913413062528417) -->
+ <skip />
<string name="bluetooth_profile_a2dp" msgid="4632426382762851724">"მედია აუდიო"</string>
<string name="bluetooth_profile_headset" msgid="5395952236133499331">"სატელეფონო ზარები"</string>
<string name="bluetooth_profile_opp" msgid="6692618568149493430">"ფაილების გადაცემა"</string>
@@ -552,7 +574,7 @@
<string name="media_transfer_this_device_name_tablet" msgid="2975593806278422086">"ეს ტაბლეტი"</string>
<!-- no translation found for media_transfer_this_device_name_tv (5285685336836896535) -->
<skip />
- <string name="media_transfer_dock_speaker_device_name" msgid="2856219597113881950">"დინამიკის სამაგრი"</string>
+ <string name="media_transfer_dock_speaker_device_name" msgid="2856219597113881950">"სამაგრის დინამიკი"</string>
<string name="media_transfer_external_device_name" msgid="2588672258721846418">"გარე მოწყობილობა"</string>
<string name="media_transfer_default_device_name" msgid="4315604017399871828">"დაკავშირებული მოწყობილობა"</string>
<string name="media_transfer_this_phone" msgid="7194341457812151531">"ეს ტელეფონი"</string>
@@ -616,7 +638,7 @@
<string name="add_user_failed" msgid="4809887794313944872">"ახალი მომხმარებლის შექმნა ვერ მოხერხდა"</string>
<string name="add_guest_failed" msgid="8074548434469843443">"ახალი სტუმრის შექმნა ვერ მოხერხდა"</string>
<string name="user_nickname" msgid="262624187455825083">"მეტსახელი"</string>
- <string name="edit_user_info_message" msgid="6677556031419002895">"თქვენ მიერ არჩეული სახელი და სურათი ამ მოწყობილობით მოსარგებლე ნებისმიერი პირისთვის იქნება ხილვადი."</string>
+ <string name="edit_user_info_message" msgid="6677556031419002895">"სახელი და სურათი, რომელსაც აირჩევთ, ხილვადი იქნება ამ მოწყობილობით მოსარგებლე ნებისმიერი პირისთვის."</string>
<string name="user_add_user" msgid="7876449291500212468">"მომხმარებლის დამატება"</string>
<string name="guest_new_guest" msgid="3482026122932643557">"სტუმრის დამატება"</string>
<string name="guest_exit_guest" msgid="5908239569510734136">"სტუმრის ამოშლა"</string>
@@ -643,8 +665,6 @@
<string name="guest_notification_ephemeral" msgid="7263252466950923871">"გასვლისას ყველა აქტივობა წაიშლება"</string>
<string name="guest_notification_non_ephemeral" msgid="6843799963012259330">"გასვლისას შეგიძლიათ შეინახოთ ან წაშალოთ თქვენი აქტივობა"</string>
<string name="guest_notification_non_ephemeral_non_first_login" msgid="8009307983766934876">"გადააყენეთ სესიის აქტივობის ახლა წასაშლელად. შენახვა/წაშლა გასვლისასაც შეიძლება."</string>
- <string name="user_image_take_photo" msgid="467512954561638530">"ფოტოს გადაღება"</string>
- <string name="user_image_choose_photo" msgid="1363820919146782908">"აირჩიეთ სურათი"</string>
<string name="user_image_photo_selector" msgid="433658323306627093">"ფოტოს არჩევა"</string>
<string name="failed_attempts_now_wiping_device" msgid="4016329172216428897">"დაფიქსირდა ზედმეტად ბევრი არასწორი მცდელობა. შედეგად, ამ მოწყობილობის მონაცემები წაიშლება."</string>
<string name="failed_attempts_now_wiping_user" msgid="469060411789668050">"დაფიქსირდა ზედმეტად ბევრი არასწორი მცდელობა. შედეგად, ეს მომხმარებელი წაიშლება."</string>
@@ -684,8 +704,6 @@
<string name="accessibility_ethernet_disconnected" msgid="2832501530856497489">"Ethernet კავშირი შეწყვეტილია."</string>
<string name="accessibility_ethernet_connected" msgid="6175942685957461563">"Ethernet."</string>
<string name="accessibility_no_calling" msgid="3540827068323895748">"ზარების გარეშე."</string>
- <string name="avatar_picker_title" msgid="8492884172713170652">"აირჩიეთ პროფილის სურათი"</string>
- <string name="default_user_icon_description" msgid="6554047177298972638">"მომხმარებლის ნაგულისხმევი ხატულა"</string>
<string name="physical_keyboard_title" msgid="4811935435315835220">"ფიზიკური კლავიატურა"</string>
<string name="keyboard_layout_dialog_title" msgid="3927180147005616290">"აირჩიე კლავიატურის განლაგება"</string>
<string name="keyboard_layout_default_label" msgid="1997292217218546957">"ნაგულისხმევი"</string>
diff --git a/packages/SettingsLib/res/values-kk/strings.xml b/packages/SettingsLib/res/values-kk/strings.xml
index 6682df5..1c80ad4 100644
--- a/packages/SettingsLib/res/values-kk/strings.xml
+++ b/packages/SettingsLib/res/values-kk/strings.xml
@@ -106,6 +106,28 @@
<string name="bluetooth_hearing_aid_left_active" msgid="7084887715570971441">"Тек сол жағы қосулы"</string>
<string name="bluetooth_hearing_aid_right_active" msgid="8574683234077567230">"Тек оң жағы қосулы"</string>
<string name="bluetooth_hearing_aid_left_and_right_active" msgid="407704460573163973">"Екеуі де қосулы"</string>
+ <!-- no translation found for bluetooth_active_media_only_battery_level (1164678961213251365) -->
+ <skip />
+ <!-- no translation found for bluetooth_active_media_only_battery_level_untethered (1345174295097854560) -->
+ <skip />
+ <!-- no translation found for bluetooth_battery_level_lea_support (8580950145907305436) -->
+ <skip />
+ <!-- no translation found for bluetooth_battery_level_untethered_lea_support (8534816721698743015) -->
+ <skip />
+ <!-- no translation found for bluetooth_battery_level_untethered_left_lea_support (6605320955858788855) -->
+ <skip />
+ <!-- no translation found for bluetooth_battery_level_untethered_right_lea_support (5717356160322149355) -->
+ <skip />
+ <!-- no translation found for bluetooth_active_media_only_no_battery_level (71106861912593126) -->
+ <skip />
+ <!-- no translation found for bluetooth_saved_device_lea_support (7231323139968285768) -->
+ <skip />
+ <!-- no translation found for bluetooth_hearing_aid_media_only_left_active (1632152540901488645) -->
+ <skip />
+ <!-- no translation found for bluetooth_hearing_aid_media_only_right_active (3854140683042617230) -->
+ <skip />
+ <!-- no translation found for bluetooth_hearing_aid_media_only_left_and_right_active (1299913413062528417) -->
+ <skip />
<string name="bluetooth_profile_a2dp" msgid="4632426382762851724">"Mультимeдиа дыбысы"</string>
<string name="bluetooth_profile_headset" msgid="5395952236133499331">"Телефон қоңыраулары"</string>
<string name="bluetooth_profile_opp" msgid="6692618568149493430">"Файл жіберу"</string>
@@ -480,7 +502,7 @@
<string name="battery_info_status_charging" msgid="4279958015430387405">"Зарядталуда"</string>
<string name="battery_info_status_charging_fast" msgid="8027559755902954885">"Жылдам зарядтау"</string>
<string name="battery_info_status_charging_slow" msgid="3190803837168962319">"Баяу зарядталуда"</string>
- <string name="battery_info_status_charging_wireless" msgid="8924722966861282197">"Сымсыз зарядталуда"</string>
+ <string name="battery_info_status_charging_wireless" msgid="8924722966861282197">"Сымсыз зарядталып жатыр"</string>
<string name="battery_info_status_charging_dock" msgid="8573274094093364791">"Зарядталып жатыр."</string>
<string name="battery_info_status_discharging" msgid="6962689305413556485">"Зарядталу орындалып жатқан жоқ"</string>
<string name="battery_info_status_not_charging" msgid="1103084691314264664">"Құрылғы жалғанған, бірақ зарядталып жатқан жоқ."</string>
@@ -515,7 +537,7 @@
<string name="use_system_language_to_select_input_method_subtypes" msgid="4865195835541387040">"Жүйелік тілдерді пайдалану"</string>
<string name="failed_to_open_app_settings_toast" msgid="764897252657692092">"<xliff:g id="SPELL_APPLICATION_NAME">%1$s</xliff:g> қолданбасы үшін параметрлерді ашу орындалмады"</string>
<string name="ime_security_warning" msgid="6547562217880551450">"Бұл енгізу әдісі сіз терген барлық мәтінді, кілтсөз және кредит карта нөмірлері сияқты жеке ақпаратты қоса, жинауы мүмкін. Бұл <xliff:g id="IME_APPLICATION_NAME">%1$s</xliff:g> қолданбасы арқылы жасалады. Осы әдіс қолданылсын ба?"</string>
- <string name="direct_boot_unaware_dialog_message" msgid="7845398276735021548">"Ескертпе: қайта жүктегеннен кейін, телефонның құлпын ашпайынша, бұл қолданба іске қосылмайды"</string>
+ <string name="direct_boot_unaware_dialog_message" msgid="7845398276735021548">"Ескертпе: қайта жүктегеннен кейін, телефонның құлпын ашпайынша, бұл қолданба іске қосылмайды."</string>
<string name="ims_reg_title" msgid="8197592958123671062">"IMS тіркеу күйі"</string>
<string name="ims_reg_status_registered" msgid="884916398194885457">"Тіркелген"</string>
<string name="ims_reg_status_not_registered" msgid="2989287366045704694">"Тіркелмеген"</string>
@@ -552,7 +574,7 @@
<string name="media_transfer_this_device_name_tablet" msgid="2975593806278422086">"Осы планшет"</string>
<!-- no translation found for media_transfer_this_device_name_tv (5285685336836896535) -->
<skip />
- <string name="media_transfer_dock_speaker_device_name" msgid="2856219597113881950">"Қондыру динамигі"</string>
+ <string name="media_transfer_dock_speaker_device_name" msgid="2856219597113881950">"Динамигі бар қондыру станциясы"</string>
<string name="media_transfer_external_device_name" msgid="2588672258721846418">"Сыртқы құрылғы"</string>
<string name="media_transfer_default_device_name" msgid="4315604017399871828">"Жалғанған құрылғы"</string>
<string name="media_transfer_this_phone" msgid="7194341457812151531">"Осы телефон"</string>
@@ -643,8 +665,6 @@
<string name="guest_notification_ephemeral" msgid="7263252466950923871">"Шыққанда барлық әрекет жойылады."</string>
<string name="guest_notification_non_ephemeral" msgid="6843799963012259330">"Шыққанда барлық әрекетті сақтай немесе жоя аласыз."</string>
<string name="guest_notification_non_ephemeral_non_first_login" msgid="8009307983766934876">"Сеанс дерегін жою үшін оны бастапқы күйге қайтарыңыз. Деректі шығар кезде де сақтауға не жоюға болады."</string>
- <string name="user_image_take_photo" msgid="467512954561638530">"Фотосуретке түсіру"</string>
- <string name="user_image_choose_photo" msgid="1363820919146782908">"Сурет таңдау"</string>
<string name="user_image_photo_selector" msgid="433658323306627093">"Фотосурет таңдау"</string>
<string name="failed_attempts_now_wiping_device" msgid="4016329172216428897">"Тым көп қате әрекет жасалды. Бұл құрылғының деректері жойылады."</string>
<string name="failed_attempts_now_wiping_user" msgid="469060411789668050">"Тым көп қате әрекет жасалды. Бұл пайдаланушы жойылады."</string>
@@ -684,8 +704,6 @@
<string name="accessibility_ethernet_disconnected" msgid="2832501530856497489">"Ethernet ажыратылған."</string>
<string name="accessibility_ethernet_connected" msgid="6175942685957461563">"Ethernet."</string>
<string name="accessibility_no_calling" msgid="3540827068323895748">"Қоңырау шалу мүмкін емес."</string>
- <string name="avatar_picker_title" msgid="8492884172713170652">"Профиль суретін таңдау"</string>
- <string name="default_user_icon_description" msgid="6554047177298972638">"Әдепкі пайдаланушы белгішесі"</string>
<string name="physical_keyboard_title" msgid="4811935435315835220">"Пернетақта"</string>
<string name="keyboard_layout_dialog_title" msgid="3927180147005616290">"Пернетақтаның орналасу ретін таңдау"</string>
<string name="keyboard_layout_default_label" msgid="1997292217218546957">"Әдепкі"</string>
diff --git a/packages/SettingsLib/res/values-km/strings.xml b/packages/SettingsLib/res/values-km/strings.xml
index 3131e96..23bd55c 100644
--- a/packages/SettingsLib/res/values-km/strings.xml
+++ b/packages/SettingsLib/res/values-km/strings.xml
@@ -106,6 +106,28 @@
<string name="bluetooth_hearing_aid_left_active" msgid="7084887715570971441">"សកម្ម ខាងឆ្វេងតែប៉ុណ្ណោះ"</string>
<string name="bluetooth_hearing_aid_right_active" msgid="8574683234077567230">"សកម្មខាងស្ដាំតែប៉ុណ្ណោះ"</string>
<string name="bluetooth_hearing_aid_left_and_right_active" msgid="407704460573163973">"សកម្មខាងឆ្វេង និងស្ដាំ"</string>
+ <!-- no translation found for bluetooth_active_media_only_battery_level (1164678961213251365) -->
+ <skip />
+ <!-- no translation found for bluetooth_active_media_only_battery_level_untethered (1345174295097854560) -->
+ <skip />
+ <!-- no translation found for bluetooth_battery_level_lea_support (8580950145907305436) -->
+ <skip />
+ <!-- no translation found for bluetooth_battery_level_untethered_lea_support (8534816721698743015) -->
+ <skip />
+ <!-- no translation found for bluetooth_battery_level_untethered_left_lea_support (6605320955858788855) -->
+ <skip />
+ <!-- no translation found for bluetooth_battery_level_untethered_right_lea_support (5717356160322149355) -->
+ <skip />
+ <!-- no translation found for bluetooth_active_media_only_no_battery_level (71106861912593126) -->
+ <skip />
+ <!-- no translation found for bluetooth_saved_device_lea_support (7231323139968285768) -->
+ <skip />
+ <!-- no translation found for bluetooth_hearing_aid_media_only_left_active (1632152540901488645) -->
+ <skip />
+ <!-- no translation found for bluetooth_hearing_aid_media_only_right_active (3854140683042617230) -->
+ <skip />
+ <!-- no translation found for bluetooth_hearing_aid_media_only_left_and_right_active (1299913413062528417) -->
+ <skip />
<string name="bluetooth_profile_a2dp" msgid="4632426382762851724">"សំឡេងមេឌៀ"</string>
<string name="bluetooth_profile_headset" msgid="5395952236133499331">"ការហៅទូរសព្ទ"</string>
<string name="bluetooth_profile_opp" msgid="6692618568149493430">"ផ្ទេរឯកសារ"</string>
@@ -552,7 +574,7 @@
<string name="media_transfer_this_device_name_tablet" msgid="2975593806278422086">"ថេប្លេតនេះ"</string>
<!-- no translation found for media_transfer_this_device_name_tv (5285685336836896535) -->
<skip />
- <string name="media_transfer_dock_speaker_device_name" msgid="2856219597113881950">"ឧបករណ៍បំពងសំឡេងដែលមានជើងភ្ជាប់"</string>
+ <string name="media_transfer_dock_speaker_device_name" msgid="2856219597113881950">"ឧបាល័រជើងទម្រ"</string>
<string name="media_transfer_external_device_name" msgid="2588672258721846418">"ឧបករណ៍ខាងក្រៅ"</string>
<string name="media_transfer_default_device_name" msgid="4315604017399871828">"ឧបករណ៍ដែលបានភ្ជាប់"</string>
<string name="media_transfer_this_phone" msgid="7194341457812151531">"ទូរសព្ទនេះ"</string>
@@ -643,8 +665,6 @@
<string name="guest_notification_ephemeral" msgid="7263252466950923871">"សកម្មភាពទាំងអស់នឹងត្រូវលុបនៅពេលចាកចេញ"</string>
<string name="guest_notification_non_ephemeral" msgid="6843799963012259330">"អ្នកអាចរក្សាទុក ឬលុបសកម្មភាពរបស់អ្នកនៅពេលចាកចេញ"</string>
<string name="guest_notification_non_ephemeral_non_first_login" msgid="8009307983766934876">"កំណត់ឡើងវិញ ដើម្បីលុបសកម្មភាពក្នុងវគ្គឥឡូវនេះ ឬអ្នកអាចរក្សាទុកឬលុបសកម្មភាពនៅពេលចាកចេញ"</string>
- <string name="user_image_take_photo" msgid="467512954561638530">"ថតរូប"</string>
- <string name="user_image_choose_photo" msgid="1363820919146782908">"ជ្រើសរើសរូបភាព"</string>
<string name="user_image_photo_selector" msgid="433658323306627093">"ជ្រើសរើសរូបថត"</string>
<string name="failed_attempts_now_wiping_device" msgid="4016329172216428897">"ដោយសារមានការព្យាយាមដោះសោមិនត្រឹមត្រូវច្រើនដងពេក ទិន្នន័យរបស់ឧបករណ៍នេះនឹងត្រូវបានលុប។"</string>
<string name="failed_attempts_now_wiping_user" msgid="469060411789668050">"ដោយសារមានការព្យាយាមដោះសោមិនត្រឹមត្រូវច្រើនដងពេក អ្នកប្រើប្រាស់នេះនឹងត្រូវបានលុប។"</string>
@@ -684,8 +704,6 @@
<string name="accessibility_ethernet_disconnected" msgid="2832501530856497489">"បានផ្តាច់អ៊ីសឺរណិត។"</string>
<string name="accessibility_ethernet_connected" msgid="6175942685957461563">"អ៊ីសឺរណិត។"</string>
<string name="accessibility_no_calling" msgid="3540827068323895748">"គ្មានការហៅទូរសព្ទទេ។"</string>
- <string name="avatar_picker_title" msgid="8492884172713170652">"ជ្រើសរើសរូបភាពកម្រងព័ត៌មាន"</string>
- <string name="default_user_icon_description" msgid="6554047177298972638">"រូបអ្នកប្រើប្រាស់លំនាំដើម"</string>
<string name="physical_keyboard_title" msgid="4811935435315835220">"ក្ដារចុចរូបវន្ត"</string>
<string name="keyboard_layout_dialog_title" msgid="3927180147005616290">"ជ្រើសរើសប្លង់ក្ដារចុច"</string>
<string name="keyboard_layout_default_label" msgid="1997292217218546957">"លំនាំដើម"</string>
diff --git a/packages/SettingsLib/res/values-kn/strings.xml b/packages/SettingsLib/res/values-kn/strings.xml
index 78c149f..c636dd5 100644
--- a/packages/SettingsLib/res/values-kn/strings.xml
+++ b/packages/SettingsLib/res/values-kn/strings.xml
@@ -106,6 +106,28 @@
<string name="bluetooth_hearing_aid_left_active" msgid="7084887715570971441">"ಎಡಕಿವಿಯ ಸಾಧನ ಮಾತ್ರ ಸಕ್ರಿಯವಾಗಿದೆ"</string>
<string name="bluetooth_hearing_aid_right_active" msgid="8574683234077567230">"ಬಲಕಿವಿಯ ಸಾಧನ ಮಾತ್ರ ಸಕ್ರಿಯವಾಗಿದೆ"</string>
<string name="bluetooth_hearing_aid_left_and_right_active" msgid="407704460573163973">"ಎಡ ಮತ್ತು ಬಲಕಿವಿಯ ಸಾಧನಗಳು ಸಕ್ರಿಯವಾಗಿವೆ"</string>
+ <!-- no translation found for bluetooth_active_media_only_battery_level (1164678961213251365) -->
+ <skip />
+ <!-- no translation found for bluetooth_active_media_only_battery_level_untethered (1345174295097854560) -->
+ <skip />
+ <!-- no translation found for bluetooth_battery_level_lea_support (8580950145907305436) -->
+ <skip />
+ <!-- no translation found for bluetooth_battery_level_untethered_lea_support (8534816721698743015) -->
+ <skip />
+ <!-- no translation found for bluetooth_battery_level_untethered_left_lea_support (6605320955858788855) -->
+ <skip />
+ <!-- no translation found for bluetooth_battery_level_untethered_right_lea_support (5717356160322149355) -->
+ <skip />
+ <!-- no translation found for bluetooth_active_media_only_no_battery_level (71106861912593126) -->
+ <skip />
+ <!-- no translation found for bluetooth_saved_device_lea_support (7231323139968285768) -->
+ <skip />
+ <!-- no translation found for bluetooth_hearing_aid_media_only_left_active (1632152540901488645) -->
+ <skip />
+ <!-- no translation found for bluetooth_hearing_aid_media_only_right_active (3854140683042617230) -->
+ <skip />
+ <!-- no translation found for bluetooth_hearing_aid_media_only_left_and_right_active (1299913413062528417) -->
+ <skip />
<string name="bluetooth_profile_a2dp" msgid="4632426382762851724">"ಮಾಧ್ಯಮ ಆಡಿಯೋ"</string>
<string name="bluetooth_profile_headset" msgid="5395952236133499331">"ಫೋನ್ ಕರೆಗಳು"</string>
<string name="bluetooth_profile_opp" msgid="6692618568149493430">"ಫೈಲ್ ವರ್ಗಾವಣೆ"</string>
@@ -643,8 +665,6 @@
<string name="guest_notification_ephemeral" msgid="7263252466950923871">"ನಿರ್ಗಮಿಸುವಾಗ ಎಲ್ಲಾ ಚಟುವಟಿಕೆಯನ್ನು ಅಳಿಸಲಾಗುತ್ತದೆ"</string>
<string name="guest_notification_non_ephemeral" msgid="6843799963012259330">"ನಿರ್ಗಮಿಸುವಾಗ ನಿಮ್ಮ ಚಟುವಟಿಕೆಯನ್ನು ನೀವು ಉಳಿಸಬಹುದು ಅಥವಾ ಅಳಿಸಬಹುದು"</string>
<string name="guest_notification_non_ephemeral_non_first_login" msgid="8009307983766934876">"ಸೆಶನ್ ಚಟುವಟಿಕೆಯನ್ನು ಈಗ ಅಳಿಸಲು ರೀಸೆಟ್ ಮಾಡಿ ಅಥವಾ ನಿರ್ಗಮಿಸುವಾಗ ನೀವು ಚಟುವಟಿಕೆಯನ್ನು ಉಳಿಸಬಹುದು ಅಥವಾ ಅಳಿಸಬಹುದು"</string>
- <string name="user_image_take_photo" msgid="467512954561638530">"ಫೋಟೋ ತೆಗೆದುಕೊಳ್ಳಿ"</string>
- <string name="user_image_choose_photo" msgid="1363820919146782908">"ಚಿತ್ರವನ್ನು ಆರಿಸಿ"</string>
<string name="user_image_photo_selector" msgid="433658323306627093">"ಫೋಟೋ ಆಯ್ಕೆಮಾಡಿ"</string>
<string name="failed_attempts_now_wiping_device" msgid="4016329172216428897">"ಹಲವಾರು ಬಾರಿ ತಪ್ಪಾಗಿ ಪ್ರಯತ್ನಿಸಿದ್ದೀರಿ. ಈ ಸಾಧನದ ಡೇಟಾವನ್ನು ಅಳಿಸಲಾಗುತ್ತದೆ."</string>
<string name="failed_attempts_now_wiping_user" msgid="469060411789668050">"ಹಲವಾರು ಬಾರಿ ತಪ್ಪಾಗಿ ಪ್ರಯತ್ನಿಸಿದ್ದೀರಿ. ಈ ಬಳಕೆದಾರರನ್ನು ಅಳಿಸಲಾಗುತ್ತದೆ."</string>
@@ -684,8 +704,6 @@
<string name="accessibility_ethernet_disconnected" msgid="2832501530856497489">"ಇಥರ್ನೆಟ್ ಸಂಪರ್ಕ ಕಡಿತಗೊಳಿಸಲಾಗಿದೆ."</string>
<string name="accessibility_ethernet_connected" msgid="6175942685957461563">"ಇಥರ್ನೆಟ್."</string>
<string name="accessibility_no_calling" msgid="3540827068323895748">"ಕರೆ ಮಾಡಲಾಗುವುದಿಲ್ಲ."</string>
- <string name="avatar_picker_title" msgid="8492884172713170652">"ಪ್ರೊಫೈಲ್ ಚಿತ್ರವನ್ನು ಆಯ್ಕೆ ಮಾಡಿ"</string>
- <string name="default_user_icon_description" msgid="6554047177298972638">"ಡೀಫಾಲ್ಟ್ ಬಳಕೆದಾರರ ಐಕಾನ್"</string>
<string name="physical_keyboard_title" msgid="4811935435315835220">"ಭೌತಿಕ ಕೀಬೋರ್ಡ್"</string>
<string name="keyboard_layout_dialog_title" msgid="3927180147005616290">"ಕೀಬೋರ್ಡ್ ಲೇಔಟ್ ಆರಿಸಿ"</string>
<string name="keyboard_layout_default_label" msgid="1997292217218546957">"ಡೀಫಾಲ್ಟ್"</string>
diff --git a/packages/SettingsLib/res/values-ko/strings.xml b/packages/SettingsLib/res/values-ko/strings.xml
index 6c721fe..f193fef 100644
--- a/packages/SettingsLib/res/values-ko/strings.xml
+++ b/packages/SettingsLib/res/values-ko/strings.xml
@@ -106,6 +106,28 @@
<string name="bluetooth_hearing_aid_left_active" msgid="7084887715570971441">"활성, 왼쪽만"</string>
<string name="bluetooth_hearing_aid_right_active" msgid="8574683234077567230">"활성, 오른쪽만"</string>
<string name="bluetooth_hearing_aid_left_and_right_active" msgid="407704460573163973">"활성, 왼쪽 및 오른쪽"</string>
+ <!-- no translation found for bluetooth_active_media_only_battery_level (1164678961213251365) -->
+ <skip />
+ <!-- no translation found for bluetooth_active_media_only_battery_level_untethered (1345174295097854560) -->
+ <skip />
+ <!-- no translation found for bluetooth_battery_level_lea_support (8580950145907305436) -->
+ <skip />
+ <!-- no translation found for bluetooth_battery_level_untethered_lea_support (8534816721698743015) -->
+ <skip />
+ <!-- no translation found for bluetooth_battery_level_untethered_left_lea_support (6605320955858788855) -->
+ <skip />
+ <!-- no translation found for bluetooth_battery_level_untethered_right_lea_support (5717356160322149355) -->
+ <skip />
+ <!-- no translation found for bluetooth_active_media_only_no_battery_level (71106861912593126) -->
+ <skip />
+ <!-- no translation found for bluetooth_saved_device_lea_support (7231323139968285768) -->
+ <skip />
+ <!-- no translation found for bluetooth_hearing_aid_media_only_left_active (1632152540901488645) -->
+ <skip />
+ <!-- no translation found for bluetooth_hearing_aid_media_only_right_active (3854140683042617230) -->
+ <skip />
+ <!-- no translation found for bluetooth_hearing_aid_media_only_left_and_right_active (1299913413062528417) -->
+ <skip />
<string name="bluetooth_profile_a2dp" msgid="4632426382762851724">"미디어 오디오"</string>
<string name="bluetooth_profile_headset" msgid="5395952236133499331">"전화 통화"</string>
<string name="bluetooth_profile_opp" msgid="6692618568149493430">"파일 전송"</string>
@@ -145,7 +167,7 @@
<string name="bluetooth_pairing_decline" msgid="6483118841204885890">"취소"</string>
<string name="bluetooth_pairing_will_share_phonebook" msgid="3064334458659165176">"페어링하면 연결 시 연락처 및 통화 기록에 액세스할 수 있습니다."</string>
<string name="bluetooth_pairing_error_message" msgid="6626399020672335565">"<xliff:g id="DEVICE_NAME">%1$s</xliff:g>와(과) 페어링하지 못했습니다."</string>
- <string name="bluetooth_pairing_pin_error_message" msgid="264422127613704940">"PIN 또는 패스키가 잘못되어 <xliff:g id="DEVICE_NAME">%1$s</xliff:g>와 페어링하지 못했습니다."</string>
+ <string name="bluetooth_pairing_pin_error_message" msgid="264422127613704940">"PIN 또는 패스키가 잘못되어 <xliff:g id="DEVICE_NAME">%1$s</xliff:g> 기기와 페어링할 수 없습니다."</string>
<string name="bluetooth_pairing_device_down_error_message" msgid="2554424863101358857">"<xliff:g id="DEVICE_NAME">%1$s</xliff:g>와(과) 통신할 수 없습니다."</string>
<string name="bluetooth_pairing_rejected_error_message" msgid="5943444352777314442">"<xliff:g id="DEVICE_NAME">%1$s</xliff:g>에서 페어링을 거부했습니다."</string>
<string name="bluetooth_talkback_computer" msgid="3736623135703893773">"컴퓨터"</string>
@@ -643,8 +665,6 @@
<string name="guest_notification_ephemeral" msgid="7263252466950923871">"종료하면 모든 활동이 삭제됩니다."</string>
<string name="guest_notification_non_ephemeral" msgid="6843799963012259330">"종료 시 활동을 저장하거나 삭제할 수 있습니다."</string>
<string name="guest_notification_non_ephemeral_non_first_login" msgid="8009307983766934876">"지금 재설정하여 활동 세션을 삭제하거나 종료 시 활동을 저장 또는 삭제할 수 있습니다."</string>
- <string name="user_image_take_photo" msgid="467512954561638530">"사진 찍기"</string>
- <string name="user_image_choose_photo" msgid="1363820919146782908">"이미지 선택"</string>
<string name="user_image_photo_selector" msgid="433658323306627093">"사진 선택"</string>
<string name="failed_attempts_now_wiping_device" msgid="4016329172216428897">"잘못된 시도 횟수가 너무 많습니다. 이 기기의 데이터가 삭제됩니다."</string>
<string name="failed_attempts_now_wiping_user" msgid="469060411789668050">"잘못된 시도 횟수가 너무 많습니다. 이 사용자가 삭제됩니다."</string>
@@ -684,8 +704,6 @@
<string name="accessibility_ethernet_disconnected" msgid="2832501530856497489">"이더넷에서 연결 해제되었습니다."</string>
<string name="accessibility_ethernet_connected" msgid="6175942685957461563">"이더넷에 연결되었습니다."</string>
<string name="accessibility_no_calling" msgid="3540827068323895748">"통화 모드가 없습니다."</string>
- <string name="avatar_picker_title" msgid="8492884172713170652">"프로필 사진 선택하기"</string>
- <string name="default_user_icon_description" msgid="6554047177298972638">"기본 사용자 아이콘"</string>
<string name="physical_keyboard_title" msgid="4811935435315835220">"물리적 키보드"</string>
<string name="keyboard_layout_dialog_title" msgid="3927180147005616290">"키보드 레이아웃 선택"</string>
<string name="keyboard_layout_default_label" msgid="1997292217218546957">"기본"</string>
diff --git a/packages/SettingsLib/res/values-ky/strings.xml b/packages/SettingsLib/res/values-ky/strings.xml
index e406c2c..86426fa 100644
--- a/packages/SettingsLib/res/values-ky/strings.xml
+++ b/packages/SettingsLib/res/values-ky/strings.xml
@@ -106,6 +106,28 @@
<string name="bluetooth_hearing_aid_left_active" msgid="7084887715570971441">"Иштеп жатат, сол кулак гана"</string>
<string name="bluetooth_hearing_aid_right_active" msgid="8574683234077567230">"Жигердүү, оң кулакчын гана"</string>
<string name="bluetooth_hearing_aid_left_and_right_active" msgid="407704460573163973">"Жигердүү, сол жана оң кулакчын"</string>
+ <!-- no translation found for bluetooth_active_media_only_battery_level (1164678961213251365) -->
+ <skip />
+ <!-- no translation found for bluetooth_active_media_only_battery_level_untethered (1345174295097854560) -->
+ <skip />
+ <!-- no translation found for bluetooth_battery_level_lea_support (8580950145907305436) -->
+ <skip />
+ <!-- no translation found for bluetooth_battery_level_untethered_lea_support (8534816721698743015) -->
+ <skip />
+ <!-- no translation found for bluetooth_battery_level_untethered_left_lea_support (6605320955858788855) -->
+ <skip />
+ <!-- no translation found for bluetooth_battery_level_untethered_right_lea_support (5717356160322149355) -->
+ <skip />
+ <!-- no translation found for bluetooth_active_media_only_no_battery_level (71106861912593126) -->
+ <skip />
+ <!-- no translation found for bluetooth_saved_device_lea_support (7231323139968285768) -->
+ <skip />
+ <!-- no translation found for bluetooth_hearing_aid_media_only_left_active (1632152540901488645) -->
+ <skip />
+ <!-- no translation found for bluetooth_hearing_aid_media_only_right_active (3854140683042617230) -->
+ <skip />
+ <!-- no translation found for bluetooth_hearing_aid_media_only_left_and_right_active (1299913413062528417) -->
+ <skip />
<string name="bluetooth_profile_a2dp" msgid="4632426382762851724">"Аудио"</string>
<string name="bluetooth_profile_headset" msgid="5395952236133499331">"Телефон чалуулар"</string>
<string name="bluetooth_profile_opp" msgid="6692618568149493430">"Файл алмашуу"</string>
@@ -552,7 +574,7 @@
<string name="media_transfer_this_device_name_tablet" msgid="2975593806278422086">"Ушул планшет"</string>
<!-- no translation found for media_transfer_this_device_name_tv (5285685336836896535) -->
<skip />
- <string name="media_transfer_dock_speaker_device_name" msgid="2856219597113881950">"Док бекети үчүн динамик"</string>
+ <string name="media_transfer_dock_speaker_device_name" msgid="2856219597113881950">"Док бекеттин динамиги"</string>
<string name="media_transfer_external_device_name" msgid="2588672258721846418">"Тышкы түзмөк"</string>
<string name="media_transfer_default_device_name" msgid="4315604017399871828">"Туташкан түзмөк"</string>
<string name="media_transfer_this_phone" msgid="7194341457812151531">"Ушул телефон"</string>
@@ -643,8 +665,6 @@
<string name="guest_notification_ephemeral" msgid="7263252466950923871">"Чыксаңыз, бардык аракеттер өчүп калат"</string>
<string name="guest_notification_non_ephemeral" msgid="6843799963012259330">"Чыгуудан мурун аракеттериңизди сактап же жок кылсаңыз болот"</string>
<string name="guest_notification_non_ephemeral_non_first_login" msgid="8009307983766934876">"Сеанстагы аракеттерди азыр өчүрсөңүз болот же чыгып баратып өчүрүп же сактап коюңуз"</string>
- <string name="user_image_take_photo" msgid="467512954561638530">"Сүрөткө тартуу"</string>
- <string name="user_image_choose_photo" msgid="1363820919146782908">"Сүрөт тандаңыз"</string>
<string name="user_image_photo_selector" msgid="433658323306627093">"Сүрөт тандаңыз"</string>
<string name="failed_attempts_now_wiping_device" msgid="4016329172216428897">"Өтө көп жолу туура эмес аракет кылынды. Бул түзмөктүн дайындары жок кылынат."</string>
<string name="failed_attempts_now_wiping_user" msgid="469060411789668050">"Өтө көп жолу жаңылдыңыз. Бул колдонуучу өчүрүлөт."</string>
@@ -684,8 +704,6 @@
<string name="accessibility_ethernet_disconnected" msgid="2832501530856497489">"Ethernet ажырады."</string>
<string name="accessibility_ethernet_connected" msgid="6175942685957461563">"Ethernet."</string>
<string name="accessibility_no_calling" msgid="3540827068323895748">"Чалуу жок."</string>
- <string name="avatar_picker_title" msgid="8492884172713170652">"Профилдин сүрөтүн тандоо"</string>
- <string name="default_user_icon_description" msgid="6554047177298972638">"Демейки колдонуучунун сүрөтчөсү"</string>
<string name="physical_keyboard_title" msgid="4811935435315835220">"Аппараттык баскычтоп"</string>
<string name="keyboard_layout_dialog_title" msgid="3927180147005616290">"Тергичтин жайылмасын тандоо"</string>
<string name="keyboard_layout_default_label" msgid="1997292217218546957">"Демейки"</string>
diff --git a/packages/SettingsLib/res/values-lo/strings.xml b/packages/SettingsLib/res/values-lo/strings.xml
index 7b2843eed..ad1529d 100644
--- a/packages/SettingsLib/res/values-lo/strings.xml
+++ b/packages/SettingsLib/res/values-lo/strings.xml
@@ -106,6 +106,28 @@
<string name="bluetooth_hearing_aid_left_active" msgid="7084887715570971441">"ນຳໃຊ້ຢູ່, ຊ້າຍເທົ່ານັ້ນ"</string>
<string name="bluetooth_hearing_aid_right_active" msgid="8574683234077567230">"ນຳໃຊ້ຢູ່, ຂວາເທົ່ານັ້ນ"</string>
<string name="bluetooth_hearing_aid_left_and_right_active" msgid="407704460573163973">"ນຳໃຊ້ຢູ່, ຊ້າຍ ແລະ ຂວາ"</string>
+ <!-- no translation found for bluetooth_active_media_only_battery_level (1164678961213251365) -->
+ <skip />
+ <!-- no translation found for bluetooth_active_media_only_battery_level_untethered (1345174295097854560) -->
+ <skip />
+ <!-- no translation found for bluetooth_battery_level_lea_support (8580950145907305436) -->
+ <skip />
+ <!-- no translation found for bluetooth_battery_level_untethered_lea_support (8534816721698743015) -->
+ <skip />
+ <!-- no translation found for bluetooth_battery_level_untethered_left_lea_support (6605320955858788855) -->
+ <skip />
+ <!-- no translation found for bluetooth_battery_level_untethered_right_lea_support (5717356160322149355) -->
+ <skip />
+ <!-- no translation found for bluetooth_active_media_only_no_battery_level (71106861912593126) -->
+ <skip />
+ <!-- no translation found for bluetooth_saved_device_lea_support (7231323139968285768) -->
+ <skip />
+ <!-- no translation found for bluetooth_hearing_aid_media_only_left_active (1632152540901488645) -->
+ <skip />
+ <!-- no translation found for bluetooth_hearing_aid_media_only_right_active (3854140683042617230) -->
+ <skip />
+ <!-- no translation found for bluetooth_hearing_aid_media_only_left_and_right_active (1299913413062528417) -->
+ <skip />
<string name="bluetooth_profile_a2dp" msgid="4632426382762851724">"ສຽງ"</string>
<string name="bluetooth_profile_headset" msgid="5395952236133499331">"ການໂທ"</string>
<string name="bluetooth_profile_opp" msgid="6692618568149493430">"ການໂອນຍ້າຍໄຟລ໌"</string>
@@ -643,8 +665,6 @@
<string name="guest_notification_ephemeral" msgid="7263252466950923871">"ການເຄື່ອນໄຫວທັງໝົດຈະຖືກລຶບໃນຕອນອອກ"</string>
<string name="guest_notification_non_ephemeral" msgid="6843799963012259330">"ທ່ານສາມາດບັນທຶກ ຫຼື ລຶບການເຄື່ອນໄຫວຂອງທ່ານໃນຕອນອອກໄດ້"</string>
<string name="guest_notification_non_ephemeral_non_first_login" msgid="8009307983766934876">"ຣີເຊັດເພື່ອລຶບການເຄື່ອນໄຫວເຊດຊັນຕອນນີ້ ຫຼື ທ່ານສາມາດບັນທຶກ ຫຼື ລຶບການເຄື່ອນໄຫວໃນຕອນອອກໄດ້"</string>
- <string name="user_image_take_photo" msgid="467512954561638530">"ຖ່າຍຮູບ"</string>
- <string name="user_image_choose_photo" msgid="1363820919146782908">"ເລືອກຮູບ"</string>
<string name="user_image_photo_selector" msgid="433658323306627093">"ເລືອກຮູບ"</string>
<string name="failed_attempts_now_wiping_device" msgid="4016329172216428897">"ພະຍາຍາມປົດລັອກບໍ່ສຳເລັດຫຼາຍເທື່ອເກີນໄປ. ຂໍ້ມູນຂອງອຸປະກອນນີ້ຈະຖືກລຶບອອກ."</string>
<string name="failed_attempts_now_wiping_user" msgid="469060411789668050">"ພະຍາຍາມປົດລັອກບໍ່ສຳເລັດຫຼາຍເທື່ອເກີນໄປ. ຜູ້ໃຊ້ນີ້ຈະຖືກລຶບຂໍ້ມູນອອກ."</string>
@@ -684,8 +704,6 @@
<string name="accessibility_ethernet_disconnected" msgid="2832501530856497489">"ອີເທີເນັດຕັດເຊື່ອມຕໍ່ແລ້ວ."</string>
<string name="accessibility_ethernet_connected" msgid="6175942685957461563">"ອີເທີເນັດ."</string>
<string name="accessibility_no_calling" msgid="3540827068323895748">"ບໍ່ສາມາດໂທສຽງໄດ້."</string>
- <string name="avatar_picker_title" msgid="8492884172713170652">"ເລືອກຮູບໂປຣໄຟລ໌"</string>
- <string name="default_user_icon_description" msgid="6554047177298972638">"ໄອຄອນຜູ້ໃຊ້ເລີ່ມຕົ້ນ"</string>
<string name="physical_keyboard_title" msgid="4811935435315835220">"ແປ້ນພິມພາຍນອກ"</string>
<string name="keyboard_layout_dialog_title" msgid="3927180147005616290">"ເລືອກຮູບແບບແປ້ນພິມ"</string>
<string name="keyboard_layout_default_label" msgid="1997292217218546957">"ຄ່າເລີ່ມຕົ້ນ"</string>
diff --git a/packages/SettingsLib/res/values-lt/strings.xml b/packages/SettingsLib/res/values-lt/strings.xml
index 938a1f6..10ef2c4 100644
--- a/packages/SettingsLib/res/values-lt/strings.xml
+++ b/packages/SettingsLib/res/values-lt/strings.xml
@@ -106,6 +106,28 @@
<string name="bluetooth_hearing_aid_left_active" msgid="7084887715570971441">"Aktyvus, tik kairysis"</string>
<string name="bluetooth_hearing_aid_right_active" msgid="8574683234077567230">"Aktyvus, tik dešinysis"</string>
<string name="bluetooth_hearing_aid_left_and_right_active" msgid="407704460573163973">"Aktyvus, kairysis ir dešinysis"</string>
+ <!-- no translation found for bluetooth_active_media_only_battery_level (1164678961213251365) -->
+ <skip />
+ <!-- no translation found for bluetooth_active_media_only_battery_level_untethered (1345174295097854560) -->
+ <skip />
+ <!-- no translation found for bluetooth_battery_level_lea_support (8580950145907305436) -->
+ <skip />
+ <!-- no translation found for bluetooth_battery_level_untethered_lea_support (8534816721698743015) -->
+ <skip />
+ <!-- no translation found for bluetooth_battery_level_untethered_left_lea_support (6605320955858788855) -->
+ <skip />
+ <!-- no translation found for bluetooth_battery_level_untethered_right_lea_support (5717356160322149355) -->
+ <skip />
+ <!-- no translation found for bluetooth_active_media_only_no_battery_level (71106861912593126) -->
+ <skip />
+ <!-- no translation found for bluetooth_saved_device_lea_support (7231323139968285768) -->
+ <skip />
+ <!-- no translation found for bluetooth_hearing_aid_media_only_left_active (1632152540901488645) -->
+ <skip />
+ <!-- no translation found for bluetooth_hearing_aid_media_only_right_active (3854140683042617230) -->
+ <skip />
+ <!-- no translation found for bluetooth_hearing_aid_media_only_left_and_right_active (1299913413062528417) -->
+ <skip />
<string name="bluetooth_profile_a2dp" msgid="4632426382762851724">"Medijos garsas"</string>
<string name="bluetooth_profile_headset" msgid="5395952236133499331">"Telefono skambučiai"</string>
<string name="bluetooth_profile_opp" msgid="6692618568149493430">"Failo perkėlimas"</string>
@@ -643,8 +665,6 @@
<string name="guest_notification_ephemeral" msgid="7263252466950923871">"Išėjus iš režimo visa veikla bus ištrinta"</string>
<string name="guest_notification_non_ephemeral" msgid="6843799963012259330">"Išeidami galite išsaugoti arba ištrinti savo veiklą"</string>
<string name="guest_notification_non_ephemeral_non_first_login" msgid="8009307983766934876">"Nustatykite iš naujo, jei norite ištrinti sesijos veiklą dabar, arba galite išeidami išsaugoti ar ištrinti veiklą"</string>
- <string name="user_image_take_photo" msgid="467512954561638530">"Fotografuoti"</string>
- <string name="user_image_choose_photo" msgid="1363820919146782908">"Pasirinkti vaizdą"</string>
<string name="user_image_photo_selector" msgid="433658323306627093">"Pasirinkti nuotrauką"</string>
<string name="failed_attempts_now_wiping_device" msgid="4016329172216428897">"Per daug netinkamų bandymų. Šio įrenginio duomenys bus ištrinti."</string>
<string name="failed_attempts_now_wiping_user" msgid="469060411789668050">"Per daug netinkamų bandymų. Šis naudotojas bus ištrintas."</string>
@@ -684,8 +704,6 @@
<string name="accessibility_ethernet_disconnected" msgid="2832501530856497489">"Atsijungta nuo eterneto."</string>
<string name="accessibility_ethernet_connected" msgid="6175942685957461563">"Eternetas."</string>
<string name="accessibility_no_calling" msgid="3540827068323895748">"Nekviečiama."</string>
- <string name="avatar_picker_title" msgid="8492884172713170652">"Pasirinkite profilio nuotrauką"</string>
- <string name="default_user_icon_description" msgid="6554047177298972638">"Numatytojo naudotojo piktograma"</string>
<string name="physical_keyboard_title" msgid="4811935435315835220">"Fizinė klaviatūra"</string>
<string name="keyboard_layout_dialog_title" msgid="3927180147005616290">"Klaviatūros išdėstymo pasirinkimas"</string>
<string name="keyboard_layout_default_label" msgid="1997292217218546957">"Numatytasis"</string>
diff --git a/packages/SettingsLib/res/values-lv/strings.xml b/packages/SettingsLib/res/values-lv/strings.xml
index 9985a98..c52e9dd 100644
--- a/packages/SettingsLib/res/values-lv/strings.xml
+++ b/packages/SettingsLib/res/values-lv/strings.xml
@@ -106,6 +106,28 @@
<string name="bluetooth_hearing_aid_left_active" msgid="7084887715570971441">"Ierīce aktīva, tikai kreisā auss"</string>
<string name="bluetooth_hearing_aid_right_active" msgid="8574683234077567230">"Ierīce aktīva, tikai labā auss"</string>
<string name="bluetooth_hearing_aid_left_and_right_active" msgid="407704460573163973">"Ierīces aktīvas, kreisā un labā auss"</string>
+ <!-- no translation found for bluetooth_active_media_only_battery_level (1164678961213251365) -->
+ <skip />
+ <!-- no translation found for bluetooth_active_media_only_battery_level_untethered (1345174295097854560) -->
+ <skip />
+ <!-- no translation found for bluetooth_battery_level_lea_support (8580950145907305436) -->
+ <skip />
+ <!-- no translation found for bluetooth_battery_level_untethered_lea_support (8534816721698743015) -->
+ <skip />
+ <!-- no translation found for bluetooth_battery_level_untethered_left_lea_support (6605320955858788855) -->
+ <skip />
+ <!-- no translation found for bluetooth_battery_level_untethered_right_lea_support (5717356160322149355) -->
+ <skip />
+ <!-- no translation found for bluetooth_active_media_only_no_battery_level (71106861912593126) -->
+ <skip />
+ <!-- no translation found for bluetooth_saved_device_lea_support (7231323139968285768) -->
+ <skip />
+ <!-- no translation found for bluetooth_hearing_aid_media_only_left_active (1632152540901488645) -->
+ <skip />
+ <!-- no translation found for bluetooth_hearing_aid_media_only_right_active (3854140683042617230) -->
+ <skip />
+ <!-- no translation found for bluetooth_hearing_aid_media_only_left_and_right_active (1299913413062528417) -->
+ <skip />
<string name="bluetooth_profile_a2dp" msgid="4632426382762851724">"Multivides audio"</string>
<string name="bluetooth_profile_headset" msgid="5395952236133499331">"Tālruņa zvani"</string>
<string name="bluetooth_profile_opp" msgid="6692618568149493430">"Failu pārsūtīšana"</string>
@@ -643,8 +665,6 @@
<string name="guest_notification_ephemeral" msgid="7263252466950923871">"Izejot tiks dzēstas visas darbības"</string>
<string name="guest_notification_non_ephemeral" msgid="6843799963012259330">"Izejot varat saglabāt vai dzēst savas darbības"</string>
<string name="guest_notification_non_ephemeral_non_first_login" msgid="8009307983766934876">"Atiestatiet, lai tagad dzēstu sesijas darbības. Izejot varēsiet saglabāt vai dzēst darbības."</string>
- <string name="user_image_take_photo" msgid="467512954561638530">"Uzņemt fotoattēlu"</string>
- <string name="user_image_choose_photo" msgid="1363820919146782908">"Izvēlēties attēlu"</string>
<string name="user_image_photo_selector" msgid="433658323306627093">"Atlasīt fotoattēlu"</string>
<string name="failed_attempts_now_wiping_device" msgid="4016329172216428897">"Pārāk daudz nesekmīgu mēģinājumu. Dati šajā ierīcē tiks dzēsti."</string>
<string name="failed_attempts_now_wiping_user" msgid="469060411789668050">"Pārāk daudz nesekmīgu mēģinājumu. Šis lietotājs tiks dzēsts."</string>
@@ -684,8 +704,6 @@
<string name="accessibility_ethernet_disconnected" msgid="2832501530856497489">"Pārtraukts savienojums ar tīklu Ethernet."</string>
<string name="accessibility_ethernet_connected" msgid="6175942685957461563">"Tīkls Ethernet"</string>
<string name="accessibility_no_calling" msgid="3540827068323895748">"Zvanīšana nav pieejama."</string>
- <string name="avatar_picker_title" msgid="8492884172713170652">"Profila attēla izvēle"</string>
- <string name="default_user_icon_description" msgid="6554047177298972638">"Noklusējuma lietotāja ikona"</string>
<string name="physical_keyboard_title" msgid="4811935435315835220">"Fiziskā tastatūra"</string>
<string name="keyboard_layout_dialog_title" msgid="3927180147005616290">"Tastatūras izkārtojuma izvēle"</string>
<string name="keyboard_layout_default_label" msgid="1997292217218546957">"Noklusējums"</string>
diff --git a/packages/SettingsLib/res/values-mk/strings.xml b/packages/SettingsLib/res/values-mk/strings.xml
index 96e267a..554b92e 100644
--- a/packages/SettingsLib/res/values-mk/strings.xml
+++ b/packages/SettingsLib/res/values-mk/strings.xml
@@ -106,6 +106,28 @@
<string name="bluetooth_hearing_aid_left_active" msgid="7084887715570971441">"Активно, само лево"</string>
<string name="bluetooth_hearing_aid_right_active" msgid="8574683234077567230">"Активно, само десно"</string>
<string name="bluetooth_hearing_aid_left_and_right_active" msgid="407704460573163973">"Активно, лево и десно"</string>
+ <!-- no translation found for bluetooth_active_media_only_battery_level (1164678961213251365) -->
+ <skip />
+ <!-- no translation found for bluetooth_active_media_only_battery_level_untethered (1345174295097854560) -->
+ <skip />
+ <!-- no translation found for bluetooth_battery_level_lea_support (8580950145907305436) -->
+ <skip />
+ <!-- no translation found for bluetooth_battery_level_untethered_lea_support (8534816721698743015) -->
+ <skip />
+ <!-- no translation found for bluetooth_battery_level_untethered_left_lea_support (6605320955858788855) -->
+ <skip />
+ <!-- no translation found for bluetooth_battery_level_untethered_right_lea_support (5717356160322149355) -->
+ <skip />
+ <!-- no translation found for bluetooth_active_media_only_no_battery_level (71106861912593126) -->
+ <skip />
+ <!-- no translation found for bluetooth_saved_device_lea_support (7231323139968285768) -->
+ <skip />
+ <!-- no translation found for bluetooth_hearing_aid_media_only_left_active (1632152540901488645) -->
+ <skip />
+ <!-- no translation found for bluetooth_hearing_aid_media_only_right_active (3854140683042617230) -->
+ <skip />
+ <!-- no translation found for bluetooth_hearing_aid_media_only_left_and_right_active (1299913413062528417) -->
+ <skip />
<string name="bluetooth_profile_a2dp" msgid="4632426382762851724">"Звук на аудио/видео"</string>
<string name="bluetooth_profile_headset" msgid="5395952236133499331">"Телефонски повици"</string>
<string name="bluetooth_profile_opp" msgid="6692618568149493430">"Пренос на датотека"</string>
@@ -643,8 +665,6 @@
<string name="guest_notification_ephemeral" msgid="7263252466950923871">"Целата активност ќе се избрише при излегувањето"</string>
<string name="guest_notification_non_ephemeral" msgid="6843799963012259330">"Може да ја зачувате или избришете вашата активност при излегувањето"</string>
<string name="guest_notification_non_ephemeral_non_first_login" msgid="8009307983766934876">"Ресетирајте за да ја избришете активноста на сесијата сега или може да ја зачувате или избришете активноста при излегувањето"</string>
- <string name="user_image_take_photo" msgid="467512954561638530">"Фотографирајте"</string>
- <string name="user_image_choose_photo" msgid="1363820919146782908">"Одберете слика"</string>
<string name="user_image_photo_selector" msgid="433658323306627093">"Изберете фотографија"</string>
<string name="failed_attempts_now_wiping_device" msgid="4016329172216428897">"Премногу неточни обиди. Податоците на уредов ќе се избришат."</string>
<string name="failed_attempts_now_wiping_user" msgid="469060411789668050">"Премногу погрешни обиди. Корисников ќе се избрише."</string>
@@ -684,8 +704,6 @@
<string name="accessibility_ethernet_disconnected" msgid="2832501530856497489">"Етернетот е исклучен."</string>
<string name="accessibility_ethernet_connected" msgid="6175942685957461563">"Етернет."</string>
<string name="accessibility_no_calling" msgid="3540827068323895748">"Без повици."</string>
- <string name="avatar_picker_title" msgid="8492884172713170652">"Изберете профилна слика"</string>
- <string name="default_user_icon_description" msgid="6554047177298972638">"Икона за стандарден корисник"</string>
<string name="physical_keyboard_title" msgid="4811935435315835220">"Физичка тастатура"</string>
<string name="keyboard_layout_dialog_title" msgid="3927180147005616290">"Избери распоред на тастатура"</string>
<string name="keyboard_layout_default_label" msgid="1997292217218546957">"Стандардно"</string>
diff --git a/packages/SettingsLib/res/values-ml/strings.xml b/packages/SettingsLib/res/values-ml/strings.xml
index d1b43c5..61bcc44 100644
--- a/packages/SettingsLib/res/values-ml/strings.xml
+++ b/packages/SettingsLib/res/values-ml/strings.xml
@@ -106,6 +106,28 @@
<string name="bluetooth_hearing_aid_left_active" msgid="7084887715570971441">"സജീവമാണ്, ഇടത്തേത് മാത്രം"</string>
<string name="bluetooth_hearing_aid_right_active" msgid="8574683234077567230">"സജീവമാണ്, വലത്തേത് മാത്രം"</string>
<string name="bluetooth_hearing_aid_left_and_right_active" msgid="407704460573163973">"സജീവമാണ്, ഇടത്തേതും വലത്തേതും"</string>
+ <!-- no translation found for bluetooth_active_media_only_battery_level (1164678961213251365) -->
+ <skip />
+ <!-- no translation found for bluetooth_active_media_only_battery_level_untethered (1345174295097854560) -->
+ <skip />
+ <!-- no translation found for bluetooth_battery_level_lea_support (8580950145907305436) -->
+ <skip />
+ <!-- no translation found for bluetooth_battery_level_untethered_lea_support (8534816721698743015) -->
+ <skip />
+ <!-- no translation found for bluetooth_battery_level_untethered_left_lea_support (6605320955858788855) -->
+ <skip />
+ <!-- no translation found for bluetooth_battery_level_untethered_right_lea_support (5717356160322149355) -->
+ <skip />
+ <!-- no translation found for bluetooth_active_media_only_no_battery_level (71106861912593126) -->
+ <skip />
+ <!-- no translation found for bluetooth_saved_device_lea_support (7231323139968285768) -->
+ <skip />
+ <!-- no translation found for bluetooth_hearing_aid_media_only_left_active (1632152540901488645) -->
+ <skip />
+ <!-- no translation found for bluetooth_hearing_aid_media_only_right_active (3854140683042617230) -->
+ <skip />
+ <!-- no translation found for bluetooth_hearing_aid_media_only_left_and_right_active (1299913413062528417) -->
+ <skip />
<string name="bluetooth_profile_a2dp" msgid="4632426382762851724">"മീഡിയ ഓഡിയോ"</string>
<string name="bluetooth_profile_headset" msgid="5395952236133499331">"ഫോണ് കോളുകൾ"</string>
<string name="bluetooth_profile_opp" msgid="6692618568149493430">"ഫയൽ കൈമാറൽ"</string>
@@ -643,8 +665,6 @@
<string name="guest_notification_ephemeral" msgid="7263252466950923871">"പുറത്തുകടക്കുമ്പോൾ എല്ലാ ആക്റ്റിവിറ്റിയും ഇല്ലാതാക്കും"</string>
<string name="guest_notification_non_ephemeral" msgid="6843799963012259330">"പുറത്തുകടക്കുമ്പോൾ ആക്റ്റിവിറ്റി സംരക്ഷിക്കുകയോ ഇല്ലാതാക്കുകയോ ചെയ്യാം"</string>
<string name="guest_notification_non_ephemeral_non_first_login" msgid="8009307983766934876">"സെഷൻ ആക്റ്റിവിറ്റി ഇപ്പോൾ ഇല്ലാതാക്കാൻ റീസെറ്റ് ചെയ്യുക അല്ലെങ്കിൽ പുറത്തുകടക്കുമ്പോൾ ആക്റ്റിവിറ്റി സംരക്ഷിക്കുകയോ ഇല്ലാതാക്കുകയോ ചെയ്യാം"</string>
- <string name="user_image_take_photo" msgid="467512954561638530">"ഒരു ഫോട്ടോ എടുക്കുക"</string>
- <string name="user_image_choose_photo" msgid="1363820919146782908">"ഒരു ചിത്രം തിരഞ്ഞെടുക്കുക"</string>
<string name="user_image_photo_selector" msgid="433658323306627093">"ഫോട്ടോ തിരഞ്ഞെടുക്കുക"</string>
<string name="failed_attempts_now_wiping_device" msgid="4016329172216428897">"ഒരുപാട് തെറ്റായ ശ്രമങ്ങൾ. ഈ ഉപകരണത്തിലെ ഡാറ്റ ഇല്ലാതാക്കപ്പെടും."</string>
<string name="failed_attempts_now_wiping_user" msgid="469060411789668050">"ഒരുപാട് തെറ്റായ ശ്രമങ്ങൾ. ഈ ഉപയോക്താവ് ഇല്ലാതാക്കപ്പെടും."</string>
@@ -684,8 +704,6 @@
<string name="accessibility_ethernet_disconnected" msgid="2832501530856497489">"ഇതർനെറ്റ് വിച്ഛേദിച്ചു."</string>
<string name="accessibility_ethernet_connected" msgid="6175942685957461563">"ഇതർനെറ്റ്."</string>
<string name="accessibility_no_calling" msgid="3540827068323895748">"വോയ്സ് കോൾ ലഭ്യമല്ല."</string>
- <string name="avatar_picker_title" msgid="8492884172713170652">"പ്രൊഫൈൽ ചിത്രം തിരഞ്ഞെടുക്കുക"</string>
- <string name="default_user_icon_description" msgid="6554047177298972638">"ഡിഫോൾട്ട് ഉപയോക്തൃ ഐക്കൺ"</string>
<string name="physical_keyboard_title" msgid="4811935435315835220">"ഫിസിക്കൽ കീബോർഡ്"</string>
<string name="keyboard_layout_dialog_title" msgid="3927180147005616290">"കീബോർഡ് ലേഔട്ട് തിരഞ്ഞെടുക്കുക"</string>
<string name="keyboard_layout_default_label" msgid="1997292217218546957">"ഡിഫോൾട്ട്"</string>
diff --git a/packages/SettingsLib/res/values-mn/strings.xml b/packages/SettingsLib/res/values-mn/strings.xml
index 004400a..c2c22e6 100644
--- a/packages/SettingsLib/res/values-mn/strings.xml
+++ b/packages/SettingsLib/res/values-mn/strings.xml
@@ -106,6 +106,28 @@
<string name="bluetooth_hearing_aid_left_active" msgid="7084887715570971441">"Идэвхтэй, зөвхөн зүүн тал"</string>
<string name="bluetooth_hearing_aid_right_active" msgid="8574683234077567230">"Идэвхтэй, зөвхөн баруун тал"</string>
<string name="bluetooth_hearing_aid_left_and_right_active" msgid="407704460573163973">"Идэвхтэй, зүүн болон баруун тал"</string>
+ <!-- no translation found for bluetooth_active_media_only_battery_level (1164678961213251365) -->
+ <skip />
+ <!-- no translation found for bluetooth_active_media_only_battery_level_untethered (1345174295097854560) -->
+ <skip />
+ <!-- no translation found for bluetooth_battery_level_lea_support (8580950145907305436) -->
+ <skip />
+ <!-- no translation found for bluetooth_battery_level_untethered_lea_support (8534816721698743015) -->
+ <skip />
+ <!-- no translation found for bluetooth_battery_level_untethered_left_lea_support (6605320955858788855) -->
+ <skip />
+ <!-- no translation found for bluetooth_battery_level_untethered_right_lea_support (5717356160322149355) -->
+ <skip />
+ <!-- no translation found for bluetooth_active_media_only_no_battery_level (71106861912593126) -->
+ <skip />
+ <!-- no translation found for bluetooth_saved_device_lea_support (7231323139968285768) -->
+ <skip />
+ <!-- no translation found for bluetooth_hearing_aid_media_only_left_active (1632152540901488645) -->
+ <skip />
+ <!-- no translation found for bluetooth_hearing_aid_media_only_right_active (3854140683042617230) -->
+ <skip />
+ <!-- no translation found for bluetooth_hearing_aid_media_only_left_and_right_active (1299913413062528417) -->
+ <skip />
<string name="bluetooth_profile_a2dp" msgid="4632426382762851724">"Медиа аудио"</string>
<string name="bluetooth_profile_headset" msgid="5395952236133499331">"Утасны дуудлага"</string>
<string name="bluetooth_profile_opp" msgid="6692618568149493430">"Файл дамжуулалт"</string>
@@ -643,8 +665,6 @@
<string name="guest_notification_ephemeral" msgid="7263252466950923871">"Бүх үйл ажиллагааг гарах үед устгана"</string>
<string name="guest_notification_non_ephemeral" msgid="6843799963012259330">"Та гарахдаа үйл ажиллагаагаа хадгалах эсвэл устгах боломжтой"</string>
<string name="guest_notification_non_ephemeral_non_first_login" msgid="8009307983766934876">"Харилцан үйлдлийн үйл ажиллагааг одоо устгахын тулд шинэчлэх эсвэл та гарахдаа үйл ажиллагааг хадгалах, устгах боломжтой"</string>
- <string name="user_image_take_photo" msgid="467512954561638530">"Зураг авах"</string>
- <string name="user_image_choose_photo" msgid="1363820919146782908">"Зураг сонгох"</string>
<string name="user_image_photo_selector" msgid="433658323306627093">"Зураг сонгох"</string>
<string name="failed_attempts_now_wiping_device" msgid="4016329172216428897">"Түгжээг хэт олон удаа буруу оруулсан тул энэ төхөөрөмжийн өгөгдлийг устгах болно."</string>
<string name="failed_attempts_now_wiping_user" msgid="469060411789668050">"Түгжээг хэт олон удаа буруу оруулсан тул энэ хэрэглэгчийг устгах болно."</string>
@@ -684,8 +704,6 @@
<string name="accessibility_ethernet_disconnected" msgid="2832501530856497489">"Ethernet саллаа."</string>
<string name="accessibility_ethernet_connected" msgid="6175942685957461563">"Этернэт."</string>
<string name="accessibility_no_calling" msgid="3540827068323895748">"Дуудлага байхгүй."</string>
- <string name="avatar_picker_title" msgid="8492884172713170652">"Профайл зураг сонгох"</string>
- <string name="default_user_icon_description" msgid="6554047177298972638">"Өгөгдмөл хэрэглэгчийн дүрс тэмдэг"</string>
<string name="physical_keyboard_title" msgid="4811935435315835220">"Биет гар"</string>
<string name="keyboard_layout_dialog_title" msgid="3927180147005616290">"Гарын бүдүүвчийг сонгох"</string>
<string name="keyboard_layout_default_label" msgid="1997292217218546957">"Өгөгдмөл"</string>
diff --git a/packages/SettingsLib/res/values-mr/strings.xml b/packages/SettingsLib/res/values-mr/strings.xml
index c59023c..1e56118 100644
--- a/packages/SettingsLib/res/values-mr/strings.xml
+++ b/packages/SettingsLib/res/values-mr/strings.xml
@@ -106,6 +106,28 @@
<string name="bluetooth_hearing_aid_left_active" msgid="7084887715570971441">"फक्त डावे अॅक्टिव्ह आहे"</string>
<string name="bluetooth_hearing_aid_right_active" msgid="8574683234077567230">"फक्त उजवे अॅक्टिव्ह आहे"</string>
<string name="bluetooth_hearing_aid_left_and_right_active" msgid="407704460573163973">"डावे आणि उजवे अॅक्टिव्ह आहे"</string>
+ <!-- no translation found for bluetooth_active_media_only_battery_level (1164678961213251365) -->
+ <skip />
+ <!-- no translation found for bluetooth_active_media_only_battery_level_untethered (1345174295097854560) -->
+ <skip />
+ <!-- no translation found for bluetooth_battery_level_lea_support (8580950145907305436) -->
+ <skip />
+ <!-- no translation found for bluetooth_battery_level_untethered_lea_support (8534816721698743015) -->
+ <skip />
+ <!-- no translation found for bluetooth_battery_level_untethered_left_lea_support (6605320955858788855) -->
+ <skip />
+ <!-- no translation found for bluetooth_battery_level_untethered_right_lea_support (5717356160322149355) -->
+ <skip />
+ <!-- no translation found for bluetooth_active_media_only_no_battery_level (71106861912593126) -->
+ <skip />
+ <!-- no translation found for bluetooth_saved_device_lea_support (7231323139968285768) -->
+ <skip />
+ <!-- no translation found for bluetooth_hearing_aid_media_only_left_active (1632152540901488645) -->
+ <skip />
+ <!-- no translation found for bluetooth_hearing_aid_media_only_right_active (3854140683042617230) -->
+ <skip />
+ <!-- no translation found for bluetooth_hearing_aid_media_only_left_and_right_active (1299913413062528417) -->
+ <skip />
<string name="bluetooth_profile_a2dp" msgid="4632426382762851724">"मीडिया ऑडिओ"</string>
<string name="bluetooth_profile_headset" msgid="5395952236133499331">"फोन कॉल"</string>
<string name="bluetooth_profile_opp" msgid="6692618568149493430">"फाइल स्थानांतरण"</string>
@@ -643,8 +665,6 @@
<string name="guest_notification_ephemeral" msgid="7263252466950923871">"बाहेर पडल्यावर सर्व अॅक्टिव्हिटी हटवली जाईल"</string>
<string name="guest_notification_non_ephemeral" msgid="6843799963012259330">"बाहेर पडल्यावर तुमची अॅक्टिव्हिटी सेव्ह करू किंवा हटवू शकता"</string>
<string name="guest_notification_non_ephemeral_non_first_login" msgid="8009307983766934876">"सत्र अॅक्टिव्हिटी आता हटवण्यासाठी रीसेट करा किंवा तुम्ही बाहेर पडल्यावर अॅक्टिव्हिटी सेव्ह करू अथवा हटवू शकता"</string>
- <string name="user_image_take_photo" msgid="467512954561638530">"फोटो काढा"</string>
- <string name="user_image_choose_photo" msgid="1363820919146782908">"इमेज निवडा"</string>
<string name="user_image_photo_selector" msgid="433658323306627093">"फोटो निवडा"</string>
<string name="failed_attempts_now_wiping_device" msgid="4016329172216428897">"बरेच चुकीचे प्रयत्न. या डिव्हाइसचा डेटा हटवला जाईल."</string>
<string name="failed_attempts_now_wiping_user" msgid="469060411789668050">"बरेच चुकीचे प्रयत्न. हा वापरकर्ता हटवला जाईल."</string>
@@ -684,8 +704,6 @@
<string name="accessibility_ethernet_disconnected" msgid="2832501530856497489">"इथरनेट डिस्कनेक्ट केले."</string>
<string name="accessibility_ethernet_connected" msgid="6175942685957461563">"इथरनेट."</string>
<string name="accessibility_no_calling" msgid="3540827068323895748">"कॉलिंग उपलब्ध नाही."</string>
- <string name="avatar_picker_title" msgid="8492884172713170652">"प्रोफाइल फोटो निवडा"</string>
- <string name="default_user_icon_description" msgid="6554047177298972638">"डीफॉल्ट वापरकर्ता आयकन"</string>
<string name="physical_keyboard_title" msgid="4811935435315835220">"वास्तविक कीबोर्ड"</string>
<string name="keyboard_layout_dialog_title" msgid="3927180147005616290">"किबोर्ड लेआउट निवडा"</string>
<string name="keyboard_layout_default_label" msgid="1997292217218546957">"डीफॉल्ट"</string>
diff --git a/packages/SettingsLib/res/values-ms/strings.xml b/packages/SettingsLib/res/values-ms/strings.xml
index 0313667..a93c459 100644
--- a/packages/SettingsLib/res/values-ms/strings.xml
+++ b/packages/SettingsLib/res/values-ms/strings.xml
@@ -106,6 +106,28 @@
<string name="bluetooth_hearing_aid_left_active" msgid="7084887715570971441">"Aktif, kiri sahaja"</string>
<string name="bluetooth_hearing_aid_right_active" msgid="8574683234077567230">"Aktif, kanan sahaja"</string>
<string name="bluetooth_hearing_aid_left_and_right_active" msgid="407704460573163973">"Aktif, kiri dan kanan"</string>
+ <!-- no translation found for bluetooth_active_media_only_battery_level (1164678961213251365) -->
+ <skip />
+ <!-- no translation found for bluetooth_active_media_only_battery_level_untethered (1345174295097854560) -->
+ <skip />
+ <!-- no translation found for bluetooth_battery_level_lea_support (8580950145907305436) -->
+ <skip />
+ <!-- no translation found for bluetooth_battery_level_untethered_lea_support (8534816721698743015) -->
+ <skip />
+ <!-- no translation found for bluetooth_battery_level_untethered_left_lea_support (6605320955858788855) -->
+ <skip />
+ <!-- no translation found for bluetooth_battery_level_untethered_right_lea_support (5717356160322149355) -->
+ <skip />
+ <!-- no translation found for bluetooth_active_media_only_no_battery_level (71106861912593126) -->
+ <skip />
+ <!-- no translation found for bluetooth_saved_device_lea_support (7231323139968285768) -->
+ <skip />
+ <!-- no translation found for bluetooth_hearing_aid_media_only_left_active (1632152540901488645) -->
+ <skip />
+ <!-- no translation found for bluetooth_hearing_aid_media_only_right_active (3854140683042617230) -->
+ <skip />
+ <!-- no translation found for bluetooth_hearing_aid_media_only_left_and_right_active (1299913413062528417) -->
+ <skip />
<string name="bluetooth_profile_a2dp" msgid="4632426382762851724">"Audio media"</string>
<string name="bluetooth_profile_headset" msgid="5395952236133499331">"Panggilan telefon"</string>
<string name="bluetooth_profile_opp" msgid="6692618568149493430">"Pemindahan fail"</string>
@@ -478,7 +500,7 @@
<string name="power_charging_future_paused" msgid="1809543660923642799">"<xliff:g id="LEVEL">%1$s</xliff:g> - Mengecas"</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 dgn cepat"</string>
+ <string name="battery_info_status_charging_fast" msgid="8027559755902954885">"Mengecas pantas"</string>
<string name="battery_info_status_charging_slow" msgid="3190803837168962319">"Mengecas perlahan"</string>
<string name="battery_info_status_charging_wireless" msgid="8924722966861282197">"Mengecas tanpa wayar"</string>
<string name="battery_info_status_charging_dock" msgid="8573274094093364791">"Pengecasan"</string>
@@ -643,8 +665,6 @@
<string name="guest_notification_ephemeral" msgid="7263252466950923871">"Semua aktiviti akan dipadamkan semasa keluar"</string>
<string name="guest_notification_non_ephemeral" msgid="6843799963012259330">"Aktiviti anda boleh disimpan atau dipadam semasa keluar"</string>
<string name="guest_notification_non_ephemeral_non_first_login" msgid="8009307983766934876">"Tetapkan semula sesi untuk memadamkan aktiviti sesi sekarang atau anda boleh menyimpan atau memadamkan aktiviti semasa keluar"</string>
- <string name="user_image_take_photo" msgid="467512954561638530">"Ambil foto"</string>
- <string name="user_image_choose_photo" msgid="1363820919146782908">"Pilih imej"</string>
<string name="user_image_photo_selector" msgid="433658323306627093">"Pilih foto"</string>
<string name="failed_attempts_now_wiping_device" msgid="4016329172216428897">"Terlalu banyak percubaan yang salah. Data peranti ini akan dipadamkan."</string>
<string name="failed_attempts_now_wiping_user" msgid="469060411789668050">"Terlalu banyak percubaan yang salah. Pengguna ini akan dipadamkan."</string>
@@ -684,8 +704,6 @@
<string name="accessibility_ethernet_disconnected" msgid="2832501530856497489">"Ethernet diputuskan sambungan."</string>
<string name="accessibility_ethernet_connected" msgid="6175942685957461563">"Ethernet."</string>
<string name="accessibility_no_calling" msgid="3540827068323895748">"Tiada panggilan."</string>
- <string name="avatar_picker_title" msgid="8492884172713170652">"Pilih gambar profil"</string>
- <string name="default_user_icon_description" msgid="6554047177298972638">"Ikon pengguna lalai"</string>
<string name="physical_keyboard_title" msgid="4811935435315835220">"Papan kekunci fizikal"</string>
<string name="keyboard_layout_dialog_title" msgid="3927180147005616290">"Pilih susun atur papan kekunci"</string>
<string name="keyboard_layout_default_label" msgid="1997292217218546957">"Lalai"</string>
diff --git a/packages/SettingsLib/res/values-my/strings.xml b/packages/SettingsLib/res/values-my/strings.xml
index 65e2e4c..7880c37 100644
--- a/packages/SettingsLib/res/values-my/strings.xml
+++ b/packages/SettingsLib/res/values-my/strings.xml
@@ -106,6 +106,28 @@
<string name="bluetooth_hearing_aid_left_active" msgid="7084887715570971441">"ဖွင့်ထားသည်၊ ဘယ်သီးသန့်"</string>
<string name="bluetooth_hearing_aid_right_active" msgid="8574683234077567230">"ဖွင့်ထားသည်၊ ညာသီးသန့်"</string>
<string name="bluetooth_hearing_aid_left_and_right_active" msgid="407704460573163973">"ဖွင့်ထားသည်၊ ဘယ်နှင့် ညာ"</string>
+ <!-- no translation found for bluetooth_active_media_only_battery_level (1164678961213251365) -->
+ <skip />
+ <!-- no translation found for bluetooth_active_media_only_battery_level_untethered (1345174295097854560) -->
+ <skip />
+ <!-- no translation found for bluetooth_battery_level_lea_support (8580950145907305436) -->
+ <skip />
+ <!-- no translation found for bluetooth_battery_level_untethered_lea_support (8534816721698743015) -->
+ <skip />
+ <!-- no translation found for bluetooth_battery_level_untethered_left_lea_support (6605320955858788855) -->
+ <skip />
+ <!-- no translation found for bluetooth_battery_level_untethered_right_lea_support (5717356160322149355) -->
+ <skip />
+ <!-- no translation found for bluetooth_active_media_only_no_battery_level (71106861912593126) -->
+ <skip />
+ <!-- no translation found for bluetooth_saved_device_lea_support (7231323139968285768) -->
+ <skip />
+ <!-- no translation found for bluetooth_hearing_aid_media_only_left_active (1632152540901488645) -->
+ <skip />
+ <!-- no translation found for bluetooth_hearing_aid_media_only_right_active (3854140683042617230) -->
+ <skip />
+ <!-- no translation found for bluetooth_hearing_aid_media_only_left_and_right_active (1299913413062528417) -->
+ <skip />
<string name="bluetooth_profile_a2dp" msgid="4632426382762851724">"မီဒီယာ အသံ"</string>
<string name="bluetooth_profile_headset" msgid="5395952236133499331">"ဖုန်းခေါ်ဆိုမှုများ"</string>
<string name="bluetooth_profile_opp" msgid="6692618568149493430">"ဖိုင်လွဲပြောင်းခြင်း"</string>
@@ -389,7 +411,7 @@
<string name="show_non_rect_clip" msgid="7499758654867881817">"စတုဂံပုံမကျသော ဖြတ်ပိုင်း လုပ်ဆောင်ချက်များကို အမှားဖယ်ရှားရန်"</string>
<string name="track_frame_time" msgid="522674651937771106">"HWUI ပရိုဖိုင် ဆောင်ရွက်ခြင်း"</string>
<string name="enable_gpu_debug_layers" msgid="4986675516188740397">"GPU အမှားရှာအလွှာဖွင့်ရန်"</string>
- <string name="enable_gpu_debug_layers_summary" msgid="4921521407377170481">"အမှားရှာအက်ပ်များအတွက် GPU အမှားရှာအလွှာများ ထည့်သွင်းခွင့်ပြုပါ"</string>
+ <string name="enable_gpu_debug_layers_summary" msgid="4921521407377170481">"အမှားရှာအက်ပ်များအတွက် GPU အမှားရှာအလွှာများ ဖွင့်ခွင့်ပြုသည်"</string>
<string name="enable_verbose_vendor_logging" msgid="1196698788267682072">"အကျယ်ရှင်းလင်းချက်ပံ့ပိုးသူ မှတ်တမ်းဖွင့်ရန်"</string>
<string name="enable_verbose_vendor_logging_summary" msgid="5426292185780393708">"ချွတ်ယွင်းမှု အစီရင်ခံချက်တွင် စက်ပစ္စည်းအလိုက် ထုတ်လုပ်သူမှတ်တမ်းများကို ထည့်သွင်းခြင်းဖြင့် ကိုယ်ရေးကိုယ်တာ အချက်အလက်များ ပါဝင်ခြင်း၊ ဘက်ထရီပိုသုံးခြင်း နှင့်/သို့မဟုတ် သိုလှောင်ခန်းပိုသုံးခြင်းတို့ ဖြစ်စေနိုင်သည်။"</string>
<string name="window_animation_scale_title" msgid="5236381298376812508">"လှုပ်ရှားသက်ဝင်ပုံစကေး"</string>
@@ -643,8 +665,6 @@
<string name="guest_notification_ephemeral" msgid="7263252466950923871">"ထွက်သည့်အခါ လုပ်ဆောင်ချက်အားလုံးကို ဖျက်လိုက်မည်"</string>
<string name="guest_notification_non_ephemeral" msgid="6843799963012259330">"ထွက်သည့်အခါ လုပ်ဆောင်ချက်ကို သိမ်းနိုင် (သို့) ဖျက်နိုင်သည်"</string>
<string name="guest_notification_non_ephemeral_non_first_login" msgid="8009307983766934876">"စက်ရှင်လုပ်ဆောင်ချက်ကို ယခုဖျက်ရန် ပြင်ဆင်သတ်မှတ်နိုင်သည် (သို့) ထွက်သည့်အခါ သိမ်းနိုင်၊ ဖျက်နိုင်သည်"</string>
- <string name="user_image_take_photo" msgid="467512954561638530">"ဓာတ်ပုံရိုက်ရန်"</string>
- <string name="user_image_choose_photo" msgid="1363820919146782908">"ပုံရွေးရန်"</string>
<string name="user_image_photo_selector" msgid="433658323306627093">"ဓာတ်ပုံရွေးရန်"</string>
<string name="failed_attempts_now_wiping_device" msgid="4016329172216428897">"မှားယွင်းသည့် အကြိမ်ရေ အလွန်များနေပါပြီ။ ဤစက်၏ ဒေတာကို ဖျက်လိုက်ပါမည်။"</string>
<string name="failed_attempts_now_wiping_user" msgid="469060411789668050">"မှားယွင်းသည့် အကြိမ်ရေ အလွန်များနေပါပြီ။ ဤအသုံးပြုသူကို ဖျက်လိုက်ပါမည်။"</string>
@@ -684,8 +704,6 @@
<string name="accessibility_ethernet_disconnected" msgid="2832501530856497489">"Ethernet နှင့်ချိတ်ဆက်မှုပြတ်တောက်"</string>
<string name="accessibility_ethernet_connected" msgid="6175942685957461563">"အီသာနက်။"</string>
<string name="accessibility_no_calling" msgid="3540827068323895748">"ခေါ်ဆိုမှု မရှိပါ။"</string>
- <string name="avatar_picker_title" msgid="8492884172713170652">"ပရိုဖိုင်ပုံ ရွေးပါ"</string>
- <string name="default_user_icon_description" msgid="6554047177298972638">"မူရင်းအသုံးပြုသူ သင်္ကေတ"</string>
<string name="physical_keyboard_title" msgid="4811935435315835220">"ပကတိ ကီးဘုတ်"</string>
<string name="keyboard_layout_dialog_title" msgid="3927180147005616290">"လက်ကွက်အပြင်အဆင်ရွေးချယ်ခြင်း"</string>
<string name="keyboard_layout_default_label" msgid="1997292217218546957">"မူရင်း"</string>
diff --git a/packages/SettingsLib/res/values-nb/strings.xml b/packages/SettingsLib/res/values-nb/strings.xml
index 28585b5..0eacc5e 100644
--- a/packages/SettingsLib/res/values-nb/strings.xml
+++ b/packages/SettingsLib/res/values-nb/strings.xml
@@ -106,6 +106,28 @@
<string name="bluetooth_hearing_aid_left_active" msgid="7084887715570971441">"Aktiv, bare venstre"</string>
<string name="bluetooth_hearing_aid_right_active" msgid="8574683234077567230">"Aktiv, bare høyre"</string>
<string name="bluetooth_hearing_aid_left_and_right_active" msgid="407704460573163973">"Aktiv, venstre og høyre"</string>
+ <!-- no translation found for bluetooth_active_media_only_battery_level (1164678961213251365) -->
+ <skip />
+ <!-- no translation found for bluetooth_active_media_only_battery_level_untethered (1345174295097854560) -->
+ <skip />
+ <!-- no translation found for bluetooth_battery_level_lea_support (8580950145907305436) -->
+ <skip />
+ <!-- no translation found for bluetooth_battery_level_untethered_lea_support (8534816721698743015) -->
+ <skip />
+ <!-- no translation found for bluetooth_battery_level_untethered_left_lea_support (6605320955858788855) -->
+ <skip />
+ <!-- no translation found for bluetooth_battery_level_untethered_right_lea_support (5717356160322149355) -->
+ <skip />
+ <!-- no translation found for bluetooth_active_media_only_no_battery_level (71106861912593126) -->
+ <skip />
+ <!-- no translation found for bluetooth_saved_device_lea_support (7231323139968285768) -->
+ <skip />
+ <!-- no translation found for bluetooth_hearing_aid_media_only_left_active (1632152540901488645) -->
+ <skip />
+ <!-- no translation found for bluetooth_hearing_aid_media_only_right_active (3854140683042617230) -->
+ <skip />
+ <!-- no translation found for bluetooth_hearing_aid_media_only_left_and_right_active (1299913413062528417) -->
+ <skip />
<string name="bluetooth_profile_a2dp" msgid="4632426382762851724">"Medielyd"</string>
<string name="bluetooth_profile_headset" msgid="5395952236133499331">"Telefonsamtaler"</string>
<string name="bluetooth_profile_opp" msgid="6692618568149493430">"Filoverføring"</string>
@@ -643,8 +665,6 @@
<string name="guest_notification_ephemeral" msgid="7263252466950923871">"All aktivitet slettes når du avslutter"</string>
<string name="guest_notification_non_ephemeral" msgid="6843799963012259330">"Du kan lagre eller slette aktiviteten når du avslutter"</string>
<string name="guest_notification_non_ephemeral_non_first_login" msgid="8009307983766934876">"Tilbakestill for å slette øktaktivitet nå, eller du kan lagre eller slette aktivitet når du avslutter"</string>
- <string name="user_image_take_photo" msgid="467512954561638530">"Ta et bilde"</string>
- <string name="user_image_choose_photo" msgid="1363820919146782908">"Velg et bilde"</string>
<string name="user_image_photo_selector" msgid="433658323306627093">"Velg et bilde"</string>
<string name="failed_attempts_now_wiping_device" msgid="4016329172216428897">"For mange mislykkede forsøk. Dataene på denne enheten blir slettet."</string>
<string name="failed_attempts_now_wiping_user" msgid="469060411789668050">"For mange mislykkede forsøk. Denne brukeren blir slettet."</string>
@@ -684,8 +704,6 @@
<string name="accessibility_ethernet_disconnected" msgid="2832501530856497489">"Ethernet er frakoblet."</string>
<string name="accessibility_ethernet_connected" msgid="6175942685957461563">"Ethernet."</string>
<string name="accessibility_no_calling" msgid="3540827068323895748">"Ingen ringing."</string>
- <string name="avatar_picker_title" msgid="8492884172713170652">"Velg et profilbilde"</string>
- <string name="default_user_icon_description" msgid="6554047177298972638">"Standard brukerikon"</string>
<string name="physical_keyboard_title" msgid="4811935435315835220">"Fysisk tastatur"</string>
<string name="keyboard_layout_dialog_title" msgid="3927180147005616290">"Velg et tastaturoppsett"</string>
<string name="keyboard_layout_default_label" msgid="1997292217218546957">"Standard"</string>
diff --git a/packages/SettingsLib/res/values-ne/strings.xml b/packages/SettingsLib/res/values-ne/strings.xml
index 4c5d594..e2236cc 100644
--- a/packages/SettingsLib/res/values-ne/strings.xml
+++ b/packages/SettingsLib/res/values-ne/strings.xml
@@ -106,6 +106,28 @@
<string name="bluetooth_hearing_aid_left_active" msgid="7084887715570971441">"बायाँ मात्र अन छ"</string>
<string name="bluetooth_hearing_aid_right_active" msgid="8574683234077567230">"सक्रिय, दायाँ मात्र"</string>
<string name="bluetooth_hearing_aid_left_and_right_active" msgid="407704460573163973">"सक्रिय, बायाँ र दायाँ"</string>
+ <!-- no translation found for bluetooth_active_media_only_battery_level (1164678961213251365) -->
+ <skip />
+ <!-- no translation found for bluetooth_active_media_only_battery_level_untethered (1345174295097854560) -->
+ <skip />
+ <!-- no translation found for bluetooth_battery_level_lea_support (8580950145907305436) -->
+ <skip />
+ <!-- no translation found for bluetooth_battery_level_untethered_lea_support (8534816721698743015) -->
+ <skip />
+ <!-- no translation found for bluetooth_battery_level_untethered_left_lea_support (6605320955858788855) -->
+ <skip />
+ <!-- no translation found for bluetooth_battery_level_untethered_right_lea_support (5717356160322149355) -->
+ <skip />
+ <!-- no translation found for bluetooth_active_media_only_no_battery_level (71106861912593126) -->
+ <skip />
+ <!-- no translation found for bluetooth_saved_device_lea_support (7231323139968285768) -->
+ <skip />
+ <!-- no translation found for bluetooth_hearing_aid_media_only_left_active (1632152540901488645) -->
+ <skip />
+ <!-- no translation found for bluetooth_hearing_aid_media_only_right_active (3854140683042617230) -->
+ <skip />
+ <!-- no translation found for bluetooth_hearing_aid_media_only_left_and_right_active (1299913413062528417) -->
+ <skip />
<string name="bluetooth_profile_a2dp" msgid="4632426382762851724">"मिडिया अडियो"</string>
<string name="bluetooth_profile_headset" msgid="5395952236133499331">"फोन कलहरू"</string>
<string name="bluetooth_profile_opp" msgid="6692618568149493430">"फाइल स्थानान्तरण"</string>
@@ -515,7 +537,7 @@
<string name="use_system_language_to_select_input_method_subtypes" msgid="4865195835541387040">"सिष्टममा भएका भाषा प्रयोग गरियोस्"</string>
<string name="failed_to_open_app_settings_toast" msgid="764897252657692092">"<xliff:g id="SPELL_APPLICATION_NAME">%1$s</xliff:g>का लागि सेटिङहरू खोल्न विफल भयो।"</string>
<string name="ime_security_warning" msgid="6547562217880551450">"यस इनपुट विधिले तपाईँले टाइप गर्नुहुने सम्पूर्ण पाठ बटु्ल्न सक्छ, व्यक्तिगत डेटा जस्तै पासवर्ड र क्रेडिट कार्ड नम्बर लगायतका। यो <xliff:g id="IME_APPLICATION_NAME">%1$s</xliff:g> अनुप्रयोगबाट आउँदछ। यो इनपुट विधि प्रयोग गर्ने हो?"</string>
- <string name="direct_boot_unaware_dialog_message" msgid="7845398276735021548">"टिपोट: पुनःबुट पछि तपाईँले आफ्नो फोनलाई अनलक नगरेसम्म यो एप सुरु हुन सक्दैन"</string>
+ <string name="direct_boot_unaware_dialog_message" msgid="7845398276735021548">"नोट: रिबुट गरेपछि तपाईंले आफ्नो फोन अनलक नगरेसम्म यो एप सुरु हुँदैन"</string>
<string name="ims_reg_title" msgid="8197592958123671062">"IMS दर्ताको स्थिति"</string>
<string name="ims_reg_status_registered" msgid="884916398194885457">"दर्ता गरिएको"</string>
<string name="ims_reg_status_not_registered" msgid="2989287366045704694">"दर्ता नगरिएको"</string>
@@ -643,8 +665,6 @@
<string name="guest_notification_ephemeral" msgid="7263252466950923871">"अतिथि मोडबाट बाहिरिँदा सबै क्रियाकलाप मेटाइने छ"</string>
<string name="guest_notification_non_ephemeral" msgid="6843799963012259330">"तपाईं अतिथि मोडबाट बाहिरिँदा आफ्ना क्रियाकलाप सेभ गर्ने वा मेटाउने विकल्प रोज्न सक्नुहुन्छ"</string>
<string name="guest_notification_non_ephemeral_non_first_login" msgid="8009307983766934876">"यो सत्रमा गरिएका क्रियाकलाप अहिले नै मेटाउन रिसेट गर्नुहोस्, अथवा तपाईं अतिथि मोडबाट बाहिरिँदा आफ्ना क्रियाकलाप सेभ गर्ने वा मेटाउने विकल्प रोज्न सक्नुहुन्छ"</string>
- <string name="user_image_take_photo" msgid="467512954561638530">"फोटो खिच्नुहोस्"</string>
- <string name="user_image_choose_photo" msgid="1363820919146782908">"कुनै फोटो छनौट गर्नुहोस्"</string>
<string name="user_image_photo_selector" msgid="433658323306627093">"फोटो चयन गर्नुहोस्"</string>
<string name="failed_attempts_now_wiping_device" msgid="4016329172216428897">"धेरै पटक गलत तरिकाले अनलक गर्ने प्रयास गरियो। यो डिभाइसमा भएको डेटा मेटाइने छ।"</string>
<string name="failed_attempts_now_wiping_user" msgid="469060411789668050">"धेरै पटक गलत तरिकाले अनलक गर्ने प्रयास गरियो। यो प्रयोगकर्ता मेटाइने छ।"</string>
@@ -684,8 +704,6 @@
<string name="accessibility_ethernet_disconnected" msgid="2832501530856497489">"इथरनेट विच्छेद भयो।"</string>
<string name="accessibility_ethernet_connected" msgid="6175942685957461563">"इथरनेट।"</string>
<string name="accessibility_no_calling" msgid="3540827068323895748">"कल गर्ने सुविधा उपलब्ध छैन।"</string>
- <string name="avatar_picker_title" msgid="8492884172713170652">"प्रोफाइल फोटो छान्नुहोस्"</string>
- <string name="default_user_icon_description" msgid="6554047177298972638">"प्रयोगकर्ताको डिफल्ट आइकन"</string>
<string name="physical_keyboard_title" msgid="4811935435315835220">"भौतिक किबोर्ड"</string>
<string name="keyboard_layout_dialog_title" msgid="3927180147005616290">"किबोर्ड लेआउट छान्नुहोस्"</string>
<string name="keyboard_layout_default_label" msgid="1997292217218546957">"डिफल्ट"</string>
diff --git a/packages/SettingsLib/res/values-nl/strings.xml b/packages/SettingsLib/res/values-nl/strings.xml
index fac6151..801c73f 100644
--- a/packages/SettingsLib/res/values-nl/strings.xml
+++ b/packages/SettingsLib/res/values-nl/strings.xml
@@ -106,6 +106,28 @@
<string name="bluetooth_hearing_aid_left_active" msgid="7084887715570971441">"Actief, alleen links"</string>
<string name="bluetooth_hearing_aid_right_active" msgid="8574683234077567230">"Actief, alleen rechts"</string>
<string name="bluetooth_hearing_aid_left_and_right_active" msgid="407704460573163973">"Actief, links en rechts"</string>
+ <!-- no translation found for bluetooth_active_media_only_battery_level (1164678961213251365) -->
+ <skip />
+ <!-- no translation found for bluetooth_active_media_only_battery_level_untethered (1345174295097854560) -->
+ <skip />
+ <!-- no translation found for bluetooth_battery_level_lea_support (8580950145907305436) -->
+ <skip />
+ <!-- no translation found for bluetooth_battery_level_untethered_lea_support (8534816721698743015) -->
+ <skip />
+ <!-- no translation found for bluetooth_battery_level_untethered_left_lea_support (6605320955858788855) -->
+ <skip />
+ <!-- no translation found for bluetooth_battery_level_untethered_right_lea_support (5717356160322149355) -->
+ <skip />
+ <!-- no translation found for bluetooth_active_media_only_no_battery_level (71106861912593126) -->
+ <skip />
+ <!-- no translation found for bluetooth_saved_device_lea_support (7231323139968285768) -->
+ <skip />
+ <!-- no translation found for bluetooth_hearing_aid_media_only_left_active (1632152540901488645) -->
+ <skip />
+ <!-- no translation found for bluetooth_hearing_aid_media_only_right_active (3854140683042617230) -->
+ <skip />
+ <!-- no translation found for bluetooth_hearing_aid_media_only_left_and_right_active (1299913413062528417) -->
+ <skip />
<string name="bluetooth_profile_a2dp" msgid="4632426382762851724">"Media-audio"</string>
<string name="bluetooth_profile_headset" msgid="5395952236133499331">"Telefoongesprekken"</string>
<string name="bluetooth_profile_opp" msgid="6692618568149493430">"Bestandsoverdracht"</string>
@@ -515,7 +537,7 @@
<string name="use_system_language_to_select_input_method_subtypes" msgid="4865195835541387040">"Gebruik systeemtalen"</string>
<string name="failed_to_open_app_settings_toast" msgid="764897252657692092">"Instellingen openen voor <xliff:g id="SPELL_APPLICATION_NAME">%1$s</xliff:g> mislukt"</string>
<string name="ime_security_warning" msgid="6547562217880551450">"Deze invoermethode verzamelt mogelijk alle tekst die je typt, inclusief persoonsgegevens zoals wachtwoorden en creditcardnummers. De methode is afkomstig uit de app <xliff:g id="IME_APPLICATION_NAME">%1$s</xliff:g>. Deze invoermethode aanzetten?"</string>
- <string name="direct_boot_unaware_dialog_message" msgid="7845398276735021548">"Opmerking: Wanneer je telefoon opnieuw is opgestart, kan deze app pas worden gestart nadat je je telefoon hebt ontgrendeld"</string>
+ <string name="direct_boot_unaware_dialog_message" msgid="7845398276735021548">"Opmerking: Nadat je de telefoon opnieuw opstart, wordt deze app pas gestart nadat je de telefoon ontgrendelt"</string>
<string name="ims_reg_title" msgid="8197592958123671062">"IMS-registratiestatus"</string>
<string name="ims_reg_status_registered" msgid="884916398194885457">"Geregistreerd"</string>
<string name="ims_reg_status_not_registered" msgid="2989287366045704694">"Niet geregistreerd"</string>
@@ -643,8 +665,6 @@
<string name="guest_notification_ephemeral" msgid="7263252466950923871">"Alle activiteit wordt na het afsluiten verwijderd"</string>
<string name="guest_notification_non_ephemeral" msgid="6843799963012259330">"Je kunt je activiteit bij afsluiten opslaan of verwijderen"</string>
<string name="guest_notification_non_ephemeral_non_first_login" msgid="8009307983766934876">"Voer een reset uit om de sessie-activiteit nu te verwijderen of verwijder of sla je activiteit op bij afsluiten"</string>
- <string name="user_image_take_photo" msgid="467512954561638530">"Foto maken"</string>
- <string name="user_image_choose_photo" msgid="1363820919146782908">"Afbeelding kiezen"</string>
<string name="user_image_photo_selector" msgid="433658323306627093">"Foto selecteren"</string>
<string name="failed_attempts_now_wiping_device" msgid="4016329172216428897">"Te veel onjuiste pogingen. De gegevens van dit apparaat worden verwijderd."</string>
<string name="failed_attempts_now_wiping_user" msgid="469060411789668050">"Te veel onjuiste pogingen. Deze gebruiker wordt verwijderd."</string>
@@ -684,8 +704,6 @@
<string name="accessibility_ethernet_disconnected" msgid="2832501530856497489">"Ethernetverbinding verbroken."</string>
<string name="accessibility_ethernet_connected" msgid="6175942685957461563">"Ethernet."</string>
<string name="accessibility_no_calling" msgid="3540827068323895748">"Geen gesprekken."</string>
- <string name="avatar_picker_title" msgid="8492884172713170652">"Kies een profielfoto"</string>
- <string name="default_user_icon_description" msgid="6554047177298972638">"Standaard gebruikersicoon"</string>
<string name="physical_keyboard_title" msgid="4811935435315835220">"Fysiek toetsenbord"</string>
<string name="keyboard_layout_dialog_title" msgid="3927180147005616290">"Toetsenbordindeling kiezen"</string>
<string name="keyboard_layout_default_label" msgid="1997292217218546957">"Standaard"</string>
diff --git a/packages/SettingsLib/res/values-or/strings.xml b/packages/SettingsLib/res/values-or/strings.xml
index ff01e7e..3cbbc05 100644
--- a/packages/SettingsLib/res/values-or/strings.xml
+++ b/packages/SettingsLib/res/values-or/strings.xml
@@ -106,6 +106,28 @@
<string name="bluetooth_hearing_aid_left_active" msgid="7084887715570971441">"ସକ୍ରିୟ, କେବଳ ବାମ"</string>
<string name="bluetooth_hearing_aid_right_active" msgid="8574683234077567230">"ସକ୍ରିୟ, କେବଳ ଡାହାଣ"</string>
<string name="bluetooth_hearing_aid_left_and_right_active" msgid="407704460573163973">"ସକ୍ରିୟ, ବାମ ଏବଂ ଡାହାଣ"</string>
+ <!-- no translation found for bluetooth_active_media_only_battery_level (1164678961213251365) -->
+ <skip />
+ <!-- no translation found for bluetooth_active_media_only_battery_level_untethered (1345174295097854560) -->
+ <skip />
+ <!-- no translation found for bluetooth_battery_level_lea_support (8580950145907305436) -->
+ <skip />
+ <!-- no translation found for bluetooth_battery_level_untethered_lea_support (8534816721698743015) -->
+ <skip />
+ <!-- no translation found for bluetooth_battery_level_untethered_left_lea_support (6605320955858788855) -->
+ <skip />
+ <!-- no translation found for bluetooth_battery_level_untethered_right_lea_support (5717356160322149355) -->
+ <skip />
+ <!-- no translation found for bluetooth_active_media_only_no_battery_level (71106861912593126) -->
+ <skip />
+ <!-- no translation found for bluetooth_saved_device_lea_support (7231323139968285768) -->
+ <skip />
+ <!-- no translation found for bluetooth_hearing_aid_media_only_left_active (1632152540901488645) -->
+ <skip />
+ <!-- no translation found for bluetooth_hearing_aid_media_only_right_active (3854140683042617230) -->
+ <skip />
+ <!-- no translation found for bluetooth_hearing_aid_media_only_left_and_right_active (1299913413062528417) -->
+ <skip />
<string name="bluetooth_profile_a2dp" msgid="4632426382762851724">"ମିଡିଆ ଅଡିଓ"</string>
<string name="bluetooth_profile_headset" msgid="5395952236133499331">"ଫୋନ୍ କଲ୍ଗୁଡ଼ିକ"</string>
<string name="bluetooth_profile_opp" msgid="6692618568149493430">"ଫାଇଲ୍ ଟ୍ରାନ୍ସଫର୍"</string>
@@ -303,7 +325,7 @@
<string name="select_private_dns_configuration_title" msgid="7887550926056143018">"ପ୍ରାଇଭେଟ DNS"</string>
<string name="select_private_dns_configuration_dialog_title" msgid="3731422918335951912">"ବ୍ୟକ୍ତିଗତ DNS ମୋଡ୍ ବାଛନ୍ତୁ"</string>
<string name="private_dns_mode_off" msgid="7065962499349997041">"ବନ୍ଦ"</string>
- <string name="private_dns_mode_opportunistic" msgid="1947864819060442354">"ଅଟୋମେଟିକ"</string>
+ <string name="private_dns_mode_opportunistic" msgid="1947864819060442354">"ସ୍ୱତଃ"</string>
<string name="private_dns_mode_provider" msgid="3619040641762557028">"ବ୍ୟକ୍ତିଗତ DNS ପ୍ରଦାତା ହୋଷ୍ଟନାମ"</string>
<string name="private_dns_mode_provider_hostname_hint" msgid="6564868953748514595">"DNS ପ୍ରଦାନକାରୀଙ୍କ ହୋଷ୍ଟନାମ ଲେଖନ୍ତୁ"</string>
<string name="private_dns_mode_provider_failure" msgid="8356259467861515108">"କନେକ୍ଟ କରିହେଲା ନାହିଁ"</string>
@@ -643,8 +665,6 @@
<string name="guest_notification_ephemeral" msgid="7263252466950923871">"ବାହାରିବା ସମୟରେ ସମସ୍ତ କାର୍ଯ୍ୟକଳାପକୁ ଡିଲିଟ କରାଯିବ"</string>
<string name="guest_notification_non_ephemeral" msgid="6843799963012259330">"ବାହାରିବା ସମୟରେ ଆପଣଙ୍କର କାର୍ଯ୍ୟକଳାପକୁ ସେଭ ବା ଡିଲିଟ କରିପାରିବେ"</string>
<string name="guest_notification_non_ephemeral_non_first_login" msgid="8009307983766934876">"ବର୍ତ୍ତମାନ ସେସନ କାର୍ଯ୍ୟକଳାପକୁ ଡିଲିଟ କରିବାକୁ ରିସେଟ କରନ୍ତୁ କିମ୍ବା ବାହାରିବା ସମୟରେ ଆପଣ କାର୍ଯ୍ୟକଳାପକୁ ସେଭ କିମ୍ବା ଡିଲିଟ କରିପାରିବେ"</string>
- <string name="user_image_take_photo" msgid="467512954561638530">"ଗୋଟିଏ ଫଟୋ ଉଠାନ୍ତୁ"</string>
- <string name="user_image_choose_photo" msgid="1363820919146782908">"ଏକ ଛବି ବାଛନ୍ତୁ"</string>
<string name="user_image_photo_selector" msgid="433658323306627093">"ଫଟୋ ବାଛନ୍ତୁ"</string>
<string name="failed_attempts_now_wiping_device" msgid="4016329172216428897">"ଅନେକଗୁଡ଼ିଏ ଭୁଲ ପ୍ରଚେଷ୍ଟା। ଏହି ଡିଭାଇସର ଡାଟା ଡିଲିଟ ହୋଇଯିବ।"</string>
<string name="failed_attempts_now_wiping_user" msgid="469060411789668050">"ଅନେକଗୁଡ଼ିଏ ଭୁଲ ପ୍ରଚେଷ୍ଟା। ଏହି ଉପଯୋଗକର୍ତ୍ତାଙ୍କୁ ଡିଲିଟ କରିଦିଆଯିବ।"</string>
@@ -684,8 +704,6 @@
<string name="accessibility_ethernet_disconnected" msgid="2832501530856497489">"ଇଥରନେଟ୍ ବିଚ୍ଛିନ୍ନ ହୋଇଛି।"</string>
<string name="accessibility_ethernet_connected" msgid="6175942685957461563">"ଇଥରନେଟ୍।"</string>
<string name="accessibility_no_calling" msgid="3540827068323895748">"କୌଣସି କଲିଂ ନାହିଁ।"</string>
- <string name="avatar_picker_title" msgid="8492884172713170652">"ଏକ ପ୍ରୋଫାଇଲ ଛବି ବାଛନ୍ତୁ"</string>
- <string name="default_user_icon_description" msgid="6554047177298972638">"ଡିଫଲ୍ଟ ୟୁଜର ଆଇକନ"</string>
<string name="physical_keyboard_title" msgid="4811935435315835220">"ଫିଜିକାଲ କୀବୋର୍ଡ"</string>
<string name="keyboard_layout_dialog_title" msgid="3927180147005616290">"କୀବୋର୍ଡ ଲେଆଉଟ ବାଛନ୍ତୁ"</string>
<string name="keyboard_layout_default_label" msgid="1997292217218546957">"ଡିଫଲ୍ଟ"</string>
diff --git a/packages/SettingsLib/res/values-pa/strings.xml b/packages/SettingsLib/res/values-pa/strings.xml
index 1162508..2105852 100644
--- a/packages/SettingsLib/res/values-pa/strings.xml
+++ b/packages/SettingsLib/res/values-pa/strings.xml
@@ -106,6 +106,28 @@
<string name="bluetooth_hearing_aid_left_active" msgid="7084887715570971441">"ਕਿਰਿਆਸ਼ੀਲ, ਸਿਰਫ਼ ਖੱਬਾ"</string>
<string name="bluetooth_hearing_aid_right_active" msgid="8574683234077567230">"ਕਿਰਿਆਸ਼ੀਲ, ਸਿਰਫ਼ ਸੱਜਾ"</string>
<string name="bluetooth_hearing_aid_left_and_right_active" msgid="407704460573163973">"ਕਿਰਿਆਸ਼ੀਲ, ਖੱਬਾ ਅਤੇ ਸੱਜਾ"</string>
+ <!-- no translation found for bluetooth_active_media_only_battery_level (1164678961213251365) -->
+ <skip />
+ <!-- no translation found for bluetooth_active_media_only_battery_level_untethered (1345174295097854560) -->
+ <skip />
+ <!-- no translation found for bluetooth_battery_level_lea_support (8580950145907305436) -->
+ <skip />
+ <!-- no translation found for bluetooth_battery_level_untethered_lea_support (8534816721698743015) -->
+ <skip />
+ <!-- no translation found for bluetooth_battery_level_untethered_left_lea_support (6605320955858788855) -->
+ <skip />
+ <!-- no translation found for bluetooth_battery_level_untethered_right_lea_support (5717356160322149355) -->
+ <skip />
+ <!-- no translation found for bluetooth_active_media_only_no_battery_level (71106861912593126) -->
+ <skip />
+ <!-- no translation found for bluetooth_saved_device_lea_support (7231323139968285768) -->
+ <skip />
+ <!-- no translation found for bluetooth_hearing_aid_media_only_left_active (1632152540901488645) -->
+ <skip />
+ <!-- no translation found for bluetooth_hearing_aid_media_only_right_active (3854140683042617230) -->
+ <skip />
+ <!-- no translation found for bluetooth_hearing_aid_media_only_left_and_right_active (1299913413062528417) -->
+ <skip />
<string name="bluetooth_profile_a2dp" msgid="4632426382762851724">"ਮੀਡੀਆ ਆਡੀਓ"</string>
<string name="bluetooth_profile_headset" msgid="5395952236133499331">"ਫ਼ੋਨ ਕਾਲਾਂ"</string>
<string name="bluetooth_profile_opp" msgid="6692618568149493430">"ਫਾਈਲ ਟ੍ਰਾਂਸਫਰ"</string>
@@ -643,8 +665,6 @@
<string name="guest_notification_ephemeral" msgid="7263252466950923871">"ਬਾਹਰ ਜਾਣ \'ਤੇ ਸਾਰੀ ਸਰਗਰਮੀ ਮਿਟਾ ਦਿੱਤੀ ਜਾਵੇਗੀ"</string>
<string name="guest_notification_non_ephemeral" msgid="6843799963012259330">"ਤੁਸੀਂ ਬਾਹਰ ਜਾਣ \'ਤੇ ਆਪਣੀ ਸਰਗਰਮੀ ਰੱਖਿਅਤ ਕਰ ਜਾਂ ਮਿਟਾ ਸਕਦੇ ਹੋ"</string>
<string name="guest_notification_non_ephemeral_non_first_login" msgid="8009307983766934876">"ਸੈਸ਼ਨ ਦੀ ਸਰਗਰਮੀ ਹੁਣੇ ਮਿਟਾਉਣ ਲਈ ਰੀਸੈੱਟ ਕਰੋ ਜਾਂ ਤੁਸੀਂ ਬਾਹਰ ਜਾਣ \'ਤੇ ਸਰਗਰਮੀ ਨੂੰ ਰੱਖਿਅਤ ਕਰ ਜਾਂ ਮਿਟਾ ਸਕਦੇ ਹੋ"</string>
- <string name="user_image_take_photo" msgid="467512954561638530">"ਇੱਕ ਫ਼ੋਟੋ ਖਿੱਚੋ"</string>
- <string name="user_image_choose_photo" msgid="1363820919146782908">"ਕੋਈ ਚਿੱਤਰ ਚੁਣੋ"</string>
<string name="user_image_photo_selector" msgid="433658323306627093">"ਫ਼ੋਟੋ ਚੁਣੋ"</string>
<string name="failed_attempts_now_wiping_device" msgid="4016329172216428897">"ਬਹੁਤ ਸਾਰੀਆਂ ਗਲਤ ਕੋਸ਼ਿਸ਼ਾਂ। ਇਸ ਡੀਵਾਈਸ ਦਾ ਡਾਟਾ ਮਿਟਾ ਦਿੱਤਾ ਜਾਵੇਗਾ।"</string>
<string name="failed_attempts_now_wiping_user" msgid="469060411789668050">"ਬਹੁਤ ਸਾਰੀਆਂ ਗਲਤ ਕੋਸ਼ਿਸ਼ਾਂ। ਇਸ ਵਰਤੋਂਕਾਰ ਨੂੰ ਮਿਟਾ ਦਿੱਤਾ ਜਾਵੇਗਾ।"</string>
@@ -684,8 +704,6 @@
<string name="accessibility_ethernet_disconnected" msgid="2832501530856497489">"ਈਥਰਨੈੱਟ ਡਿਸਕਨੈਕਟ ਹੋ ਗਿਆ।"</string>
<string name="accessibility_ethernet_connected" msgid="6175942685957461563">"ਈਥਰਨੈੱਟ।"</string>
<string name="accessibility_no_calling" msgid="3540827068323895748">"ਕਾਲਿੰਗ ਸੇਵਾ ਉਪਲਬਧ ਨਹੀਂ ਹੈ।"</string>
- <string name="avatar_picker_title" msgid="8492884172713170652">"ਕੋਈ ਪ੍ਰੋਫਾਈਲ ਤਸਵੀਰ ਚੁਣੋ"</string>
- <string name="default_user_icon_description" msgid="6554047177298972638">"ਪੂਰਵ-ਨਿਰਧਾਰਿਤ ਵਰਤੋਂਕਾਰ ਪ੍ਰਤੀਕ"</string>
<string name="physical_keyboard_title" msgid="4811935435315835220">"ਭੌਤਿਕ ਕੀ-ਬੋਰਡ"</string>
<string name="keyboard_layout_dialog_title" msgid="3927180147005616290">"ਕੀ-ਬੋਰਡ ਖਾਕਾ ਚੁਣੋ"</string>
<string name="keyboard_layout_default_label" msgid="1997292217218546957">"ਪੂਰਵ-ਨਿਰਧਾਰਿਤ"</string>
diff --git a/packages/SettingsLib/res/values-pl/strings.xml b/packages/SettingsLib/res/values-pl/strings.xml
index 142c364..93e65af 100644
--- a/packages/SettingsLib/res/values-pl/strings.xml
+++ b/packages/SettingsLib/res/values-pl/strings.xml
@@ -106,6 +106,28 @@
<string name="bluetooth_hearing_aid_left_active" msgid="7084887715570971441">"Aktywne, tylko lewa strona"</string>
<string name="bluetooth_hearing_aid_right_active" msgid="8574683234077567230">"Aktywne, tylko prawa strona"</string>
<string name="bluetooth_hearing_aid_left_and_right_active" msgid="407704460573163973">"Aktywny, lewa i prawa strona"</string>
+ <!-- no translation found for bluetooth_active_media_only_battery_level (1164678961213251365) -->
+ <skip />
+ <!-- no translation found for bluetooth_active_media_only_battery_level_untethered (1345174295097854560) -->
+ <skip />
+ <!-- no translation found for bluetooth_battery_level_lea_support (8580950145907305436) -->
+ <skip />
+ <!-- no translation found for bluetooth_battery_level_untethered_lea_support (8534816721698743015) -->
+ <skip />
+ <!-- no translation found for bluetooth_battery_level_untethered_left_lea_support (6605320955858788855) -->
+ <skip />
+ <!-- no translation found for bluetooth_battery_level_untethered_right_lea_support (5717356160322149355) -->
+ <skip />
+ <!-- no translation found for bluetooth_active_media_only_no_battery_level (71106861912593126) -->
+ <skip />
+ <!-- no translation found for bluetooth_saved_device_lea_support (7231323139968285768) -->
+ <skip />
+ <!-- no translation found for bluetooth_hearing_aid_media_only_left_active (1632152540901488645) -->
+ <skip />
+ <!-- no translation found for bluetooth_hearing_aid_media_only_right_active (3854140683042617230) -->
+ <skip />
+ <!-- no translation found for bluetooth_hearing_aid_media_only_left_and_right_active (1299913413062528417) -->
+ <skip />
<string name="bluetooth_profile_a2dp" msgid="4632426382762851724">"Dźwięk multimediów"</string>
<string name="bluetooth_profile_headset" msgid="5395952236133499331">"Połączenia telefoniczne"</string>
<string name="bluetooth_profile_opp" msgid="6692618568149493430">"Przesyłanie pliku"</string>
@@ -643,8 +665,6 @@
<string name="guest_notification_ephemeral" msgid="7263252466950923871">"Po zamknięciu cała aktywność zostanie usunięta"</string>
<string name="guest_notification_non_ephemeral" msgid="6843799963012259330">"Możesz zapisać lub usunąć swoją aktywność podczas zamykania."</string>
<string name="guest_notification_non_ephemeral_non_first_login" msgid="8009307983766934876">"Zresetuj, aby teraz usunąć aktywność z tej sesji. Możesz też ją zapisać lub usunąć podczas zamykania sesji."</string>
- <string name="user_image_take_photo" msgid="467512954561638530">"Zrób zdjęcie"</string>
- <string name="user_image_choose_photo" msgid="1363820919146782908">"Wybierz obraz"</string>
<string name="user_image_photo_selector" msgid="433658323306627093">"Wybierz zdjęcie"</string>
<string name="failed_attempts_now_wiping_device" msgid="4016329172216428897">"Zbyt wiele nieudanych prób. Dane na urządzeniu zostaną usunięte."</string>
<string name="failed_attempts_now_wiping_user" msgid="469060411789668050">"Zbyt wiele nieudanych prób. Użytkownik zostanie usunięty."</string>
@@ -684,8 +704,6 @@
<string name="accessibility_ethernet_disconnected" msgid="2832501530856497489">"Rozłączono z siecią Ethernet."</string>
<string name="accessibility_ethernet_connected" msgid="6175942685957461563">"Ethernet."</string>
<string name="accessibility_no_calling" msgid="3540827068323895748">"Brak połączenia."</string>
- <string name="avatar_picker_title" msgid="8492884172713170652">"Wybierz zdjęcie profilowe"</string>
- <string name="default_user_icon_description" msgid="6554047177298972638">"Ikona domyślnego użytkownika"</string>
<string name="physical_keyboard_title" msgid="4811935435315835220">"Klawiatura fizyczna"</string>
<string name="keyboard_layout_dialog_title" msgid="3927180147005616290">"Wybierz układ klawiatury"</string>
<string name="keyboard_layout_default_label" msgid="1997292217218546957">"Domyślny"</string>
diff --git a/packages/SettingsLib/res/values-pt-rBR/strings.xml b/packages/SettingsLib/res/values-pt-rBR/strings.xml
index f67c09d..811c04a 100644
--- a/packages/SettingsLib/res/values-pt-rBR/strings.xml
+++ b/packages/SettingsLib/res/values-pt-rBR/strings.xml
@@ -106,6 +106,28 @@
<string name="bluetooth_hearing_aid_left_active" msgid="7084887715570971441">"Ativo, apenas o esquerdo"</string>
<string name="bluetooth_hearing_aid_right_active" msgid="8574683234077567230">"Ativo, apenas o direito"</string>
<string name="bluetooth_hearing_aid_left_and_right_active" msgid="407704460573163973">"Ativo, esquerdo e direito"</string>
+ <!-- no translation found for bluetooth_active_media_only_battery_level (1164678961213251365) -->
+ <skip />
+ <!-- no translation found for bluetooth_active_media_only_battery_level_untethered (1345174295097854560) -->
+ <skip />
+ <!-- no translation found for bluetooth_battery_level_lea_support (8580950145907305436) -->
+ <skip />
+ <!-- no translation found for bluetooth_battery_level_untethered_lea_support (8534816721698743015) -->
+ <skip />
+ <!-- no translation found for bluetooth_battery_level_untethered_left_lea_support (6605320955858788855) -->
+ <skip />
+ <!-- no translation found for bluetooth_battery_level_untethered_right_lea_support (5717356160322149355) -->
+ <skip />
+ <!-- no translation found for bluetooth_active_media_only_no_battery_level (71106861912593126) -->
+ <skip />
+ <!-- no translation found for bluetooth_saved_device_lea_support (7231323139968285768) -->
+ <skip />
+ <!-- no translation found for bluetooth_hearing_aid_media_only_left_active (1632152540901488645) -->
+ <skip />
+ <!-- no translation found for bluetooth_hearing_aid_media_only_right_active (3854140683042617230) -->
+ <skip />
+ <!-- no translation found for bluetooth_hearing_aid_media_only_left_and_right_active (1299913413062528417) -->
+ <skip />
<string name="bluetooth_profile_a2dp" msgid="4632426382762851724">"Áudio da mídia"</string>
<string name="bluetooth_profile_headset" msgid="5395952236133499331">"Chamadas telefônicas"</string>
<string name="bluetooth_profile_opp" msgid="6692618568149493430">"Transferência de arquivo"</string>
@@ -519,7 +541,7 @@
<string name="ims_reg_title" msgid="8197592958123671062">"Estado do registro de IMS"</string>
<string name="ims_reg_status_registered" msgid="884916398194885457">"Registrado"</string>
<string name="ims_reg_status_not_registered" msgid="2989287366045704694">"Não registrado"</string>
- <string name="status_unavailable" msgid="5279036186589861608">"Não disponível"</string>
+ <string name="status_unavailable" msgid="5279036186589861608">"Indisponível"</string>
<string name="wifi_status_mac_randomized" msgid="466382542497832189">"O MAC é randomizado"</string>
<string name="wifi_tether_connected_summary" msgid="5100712926640492336">"{count,plural, =1{1 dispositivo conectado}one{# dispositivo conectado}other{# dispositivos conectados}}"</string>
<string name="accessibility_manual_zen_more_time" msgid="5141801092071134235">"Mais tempo."</string>
@@ -616,7 +638,7 @@
<string name="add_user_failed" msgid="4809887794313944872">"Falha ao criar um novo usuário"</string>
<string name="add_guest_failed" msgid="8074548434469843443">"Falha ao criar um novo convidado"</string>
<string name="user_nickname" msgid="262624187455825083">"Apelido"</string>
- <string name="edit_user_info_message" msgid="6677556031419002895">"O nome e a foto escolhidos ficarão visíveis para qualquer pessoa que usar este dispositivo."</string>
+ <string name="edit_user_info_message" msgid="6677556031419002895">"O nome e a foto que você escolher ficarão visíveis para qualquer pessoa que usar este dispositivo."</string>
<string name="user_add_user" msgid="7876449291500212468">"Adicionar usuário"</string>
<string name="guest_new_guest" msgid="3482026122932643557">"Adicionar visitante"</string>
<string name="guest_exit_guest" msgid="5908239569510734136">"Remover visitante"</string>
@@ -643,8 +665,6 @@
<string name="guest_notification_ephemeral" msgid="7263252466950923871">"Todas as atividades serão excluídas ao sair"</string>
<string name="guest_notification_non_ephemeral" msgid="6843799963012259330">"Você pode salvar ou excluir sua atividade ao sair"</string>
<string name="guest_notification_non_ephemeral_non_first_login" msgid="8009307983766934876">"Redefina para excluir a atividade da sessão agora. Salve ou exclua a atividade ao sair"</string>
- <string name="user_image_take_photo" msgid="467512954561638530">"Tirar uma foto"</string>
- <string name="user_image_choose_photo" msgid="1363820919146782908">"Escolher uma imagem"</string>
<string name="user_image_photo_selector" msgid="433658323306627093">"Selecionar foto"</string>
<string name="failed_attempts_now_wiping_device" msgid="4016329172216428897">"Excesso de tentativas incorretas. Os dados deste dispositivo serão excluídos."</string>
<string name="failed_attempts_now_wiping_user" msgid="469060411789668050">"Excesso de tentativas incorretas. O usuário será excluído."</string>
@@ -684,8 +704,6 @@
<string name="accessibility_ethernet_disconnected" msgid="2832501530856497489">"Ethernet desconectada."</string>
<string name="accessibility_ethernet_connected" msgid="6175942685957461563">"Ethernet."</string>
<string name="accessibility_no_calling" msgid="3540827068323895748">"Sem chamadas."</string>
- <string name="avatar_picker_title" msgid="8492884172713170652">"Escolher a foto do perfil"</string>
- <string name="default_user_icon_description" msgid="6554047177298972638">"Ícone de usuário padrão"</string>
<string name="physical_keyboard_title" msgid="4811935435315835220">"Teclado físico"</string>
<string name="keyboard_layout_dialog_title" msgid="3927180147005616290">"Escolha o layout do teclado"</string>
<string name="keyboard_layout_default_label" msgid="1997292217218546957">"Padrão"</string>
diff --git a/packages/SettingsLib/res/values-pt-rPT/strings.xml b/packages/SettingsLib/res/values-pt-rPT/strings.xml
index 379a4ff..4c88683 100644
--- a/packages/SettingsLib/res/values-pt-rPT/strings.xml
+++ b/packages/SettingsLib/res/values-pt-rPT/strings.xml
@@ -106,6 +106,28 @@
<string name="bluetooth_hearing_aid_left_active" msgid="7084887715570971441">"Ativo, apenas esquerdo"</string>
<string name="bluetooth_hearing_aid_right_active" msgid="8574683234077567230">"Ativo, apenas direito"</string>
<string name="bluetooth_hearing_aid_left_and_right_active" msgid="407704460573163973">"Ativo, esquerdo e direito"</string>
+ <!-- no translation found for bluetooth_active_media_only_battery_level (1164678961213251365) -->
+ <skip />
+ <!-- no translation found for bluetooth_active_media_only_battery_level_untethered (1345174295097854560) -->
+ <skip />
+ <!-- no translation found for bluetooth_battery_level_lea_support (8580950145907305436) -->
+ <skip />
+ <!-- no translation found for bluetooth_battery_level_untethered_lea_support (8534816721698743015) -->
+ <skip />
+ <!-- no translation found for bluetooth_battery_level_untethered_left_lea_support (6605320955858788855) -->
+ <skip />
+ <!-- no translation found for bluetooth_battery_level_untethered_right_lea_support (5717356160322149355) -->
+ <skip />
+ <!-- no translation found for bluetooth_active_media_only_no_battery_level (71106861912593126) -->
+ <skip />
+ <!-- no translation found for bluetooth_saved_device_lea_support (7231323139968285768) -->
+ <skip />
+ <!-- no translation found for bluetooth_hearing_aid_media_only_left_active (1632152540901488645) -->
+ <skip />
+ <!-- no translation found for bluetooth_hearing_aid_media_only_right_active (3854140683042617230) -->
+ <skip />
+ <!-- no translation found for bluetooth_hearing_aid_media_only_left_and_right_active (1299913413062528417) -->
+ <skip />
<string name="bluetooth_profile_a2dp" msgid="4632426382762851724">"Áudio de multimédia"</string>
<string name="bluetooth_profile_headset" msgid="5395952236133499331">"Chamadas telefónicas"</string>
<string name="bluetooth_profile_opp" msgid="6692618568149493430">"Transferência do ficheiro"</string>
@@ -552,7 +574,7 @@
<string name="media_transfer_this_device_name_tablet" msgid="2975593806278422086">"Este tablet"</string>
<!-- no translation found for media_transfer_this_device_name_tv (5285685336836896535) -->
<skip />
- <string name="media_transfer_dock_speaker_device_name" msgid="2856219597113881950">"Altifalante estação carregam."</string>
+ <string name="media_transfer_dock_speaker_device_name" msgid="2856219597113881950">"Altifalante estação carregamento"</string>
<string name="media_transfer_external_device_name" msgid="2588672258721846418">"Dispositivo externo"</string>
<string name="media_transfer_default_device_name" msgid="4315604017399871828">"Dispositivo associado"</string>
<string name="media_transfer_this_phone" msgid="7194341457812151531">"Este telemóvel"</string>
@@ -643,8 +665,6 @@
<string name="guest_notification_ephemeral" msgid="7263252466950923871">"Toda a atividade é eliminada ao sair"</string>
<string name="guest_notification_non_ephemeral" msgid="6843799963012259330">"Pode guardar ou eliminar a sua atividade ao sair"</string>
<string name="guest_notification_non_ephemeral_non_first_login" msgid="8009307983766934876">"Reponha para eliminar agora a atividade da sessão. Pode ainda guardar ou eliminar a atividade ao sair"</string>
- <string name="user_image_take_photo" msgid="467512954561638530">"Tirar uma foto"</string>
- <string name="user_image_choose_photo" msgid="1363820919146782908">"Escolher uma imagem"</string>
<string name="user_image_photo_selector" msgid="433658323306627093">"Selecionar foto"</string>
<string name="failed_attempts_now_wiping_device" msgid="4016329172216428897">"Demasiadas tentativas incorretas. Os dados deste dispositivo vão ser eliminados."</string>
<string name="failed_attempts_now_wiping_user" msgid="469060411789668050">"Demasiadas tentativas incorretas. Este utilizador vai ser eliminado."</string>
@@ -684,8 +704,6 @@
<string name="accessibility_ethernet_disconnected" msgid="2832501530856497489">"Ethernet desligada."</string>
<string name="accessibility_ethernet_connected" msgid="6175942685957461563">"Ethernet."</string>
<string name="accessibility_no_calling" msgid="3540827068323895748">"Sem chamadas."</string>
- <string name="avatar_picker_title" msgid="8492884172713170652">"Escolha uma imagem do perfil"</string>
- <string name="default_user_icon_description" msgid="6554047177298972638">"Ícone do utilizador predefinido"</string>
<string name="physical_keyboard_title" msgid="4811935435315835220">"Teclado físico"</string>
<string name="keyboard_layout_dialog_title" msgid="3927180147005616290">"Escolha um esquema de teclado"</string>
<string name="keyboard_layout_default_label" msgid="1997292217218546957">"Predefinição"</string>
diff --git a/packages/SettingsLib/res/values-pt/strings.xml b/packages/SettingsLib/res/values-pt/strings.xml
index f67c09d..811c04a 100644
--- a/packages/SettingsLib/res/values-pt/strings.xml
+++ b/packages/SettingsLib/res/values-pt/strings.xml
@@ -106,6 +106,28 @@
<string name="bluetooth_hearing_aid_left_active" msgid="7084887715570971441">"Ativo, apenas o esquerdo"</string>
<string name="bluetooth_hearing_aid_right_active" msgid="8574683234077567230">"Ativo, apenas o direito"</string>
<string name="bluetooth_hearing_aid_left_and_right_active" msgid="407704460573163973">"Ativo, esquerdo e direito"</string>
+ <!-- no translation found for bluetooth_active_media_only_battery_level (1164678961213251365) -->
+ <skip />
+ <!-- no translation found for bluetooth_active_media_only_battery_level_untethered (1345174295097854560) -->
+ <skip />
+ <!-- no translation found for bluetooth_battery_level_lea_support (8580950145907305436) -->
+ <skip />
+ <!-- no translation found for bluetooth_battery_level_untethered_lea_support (8534816721698743015) -->
+ <skip />
+ <!-- no translation found for bluetooth_battery_level_untethered_left_lea_support (6605320955858788855) -->
+ <skip />
+ <!-- no translation found for bluetooth_battery_level_untethered_right_lea_support (5717356160322149355) -->
+ <skip />
+ <!-- no translation found for bluetooth_active_media_only_no_battery_level (71106861912593126) -->
+ <skip />
+ <!-- no translation found for bluetooth_saved_device_lea_support (7231323139968285768) -->
+ <skip />
+ <!-- no translation found for bluetooth_hearing_aid_media_only_left_active (1632152540901488645) -->
+ <skip />
+ <!-- no translation found for bluetooth_hearing_aid_media_only_right_active (3854140683042617230) -->
+ <skip />
+ <!-- no translation found for bluetooth_hearing_aid_media_only_left_and_right_active (1299913413062528417) -->
+ <skip />
<string name="bluetooth_profile_a2dp" msgid="4632426382762851724">"Áudio da mídia"</string>
<string name="bluetooth_profile_headset" msgid="5395952236133499331">"Chamadas telefônicas"</string>
<string name="bluetooth_profile_opp" msgid="6692618568149493430">"Transferência de arquivo"</string>
@@ -519,7 +541,7 @@
<string name="ims_reg_title" msgid="8197592958123671062">"Estado do registro de IMS"</string>
<string name="ims_reg_status_registered" msgid="884916398194885457">"Registrado"</string>
<string name="ims_reg_status_not_registered" msgid="2989287366045704694">"Não registrado"</string>
- <string name="status_unavailable" msgid="5279036186589861608">"Não disponível"</string>
+ <string name="status_unavailable" msgid="5279036186589861608">"Indisponível"</string>
<string name="wifi_status_mac_randomized" msgid="466382542497832189">"O MAC é randomizado"</string>
<string name="wifi_tether_connected_summary" msgid="5100712926640492336">"{count,plural, =1{1 dispositivo conectado}one{# dispositivo conectado}other{# dispositivos conectados}}"</string>
<string name="accessibility_manual_zen_more_time" msgid="5141801092071134235">"Mais tempo."</string>
@@ -616,7 +638,7 @@
<string name="add_user_failed" msgid="4809887794313944872">"Falha ao criar um novo usuário"</string>
<string name="add_guest_failed" msgid="8074548434469843443">"Falha ao criar um novo convidado"</string>
<string name="user_nickname" msgid="262624187455825083">"Apelido"</string>
- <string name="edit_user_info_message" msgid="6677556031419002895">"O nome e a foto escolhidos ficarão visíveis para qualquer pessoa que usar este dispositivo."</string>
+ <string name="edit_user_info_message" msgid="6677556031419002895">"O nome e a foto que você escolher ficarão visíveis para qualquer pessoa que usar este dispositivo."</string>
<string name="user_add_user" msgid="7876449291500212468">"Adicionar usuário"</string>
<string name="guest_new_guest" msgid="3482026122932643557">"Adicionar visitante"</string>
<string name="guest_exit_guest" msgid="5908239569510734136">"Remover visitante"</string>
@@ -643,8 +665,6 @@
<string name="guest_notification_ephemeral" msgid="7263252466950923871">"Todas as atividades serão excluídas ao sair"</string>
<string name="guest_notification_non_ephemeral" msgid="6843799963012259330">"Você pode salvar ou excluir sua atividade ao sair"</string>
<string name="guest_notification_non_ephemeral_non_first_login" msgid="8009307983766934876">"Redefina para excluir a atividade da sessão agora. Salve ou exclua a atividade ao sair"</string>
- <string name="user_image_take_photo" msgid="467512954561638530">"Tirar uma foto"</string>
- <string name="user_image_choose_photo" msgid="1363820919146782908">"Escolher uma imagem"</string>
<string name="user_image_photo_selector" msgid="433658323306627093">"Selecionar foto"</string>
<string name="failed_attempts_now_wiping_device" msgid="4016329172216428897">"Excesso de tentativas incorretas. Os dados deste dispositivo serão excluídos."</string>
<string name="failed_attempts_now_wiping_user" msgid="469060411789668050">"Excesso de tentativas incorretas. O usuário será excluído."</string>
@@ -684,8 +704,6 @@
<string name="accessibility_ethernet_disconnected" msgid="2832501530856497489">"Ethernet desconectada."</string>
<string name="accessibility_ethernet_connected" msgid="6175942685957461563">"Ethernet."</string>
<string name="accessibility_no_calling" msgid="3540827068323895748">"Sem chamadas."</string>
- <string name="avatar_picker_title" msgid="8492884172713170652">"Escolher a foto do perfil"</string>
- <string name="default_user_icon_description" msgid="6554047177298972638">"Ícone de usuário padrão"</string>
<string name="physical_keyboard_title" msgid="4811935435315835220">"Teclado físico"</string>
<string name="keyboard_layout_dialog_title" msgid="3927180147005616290">"Escolha o layout do teclado"</string>
<string name="keyboard_layout_default_label" msgid="1997292217218546957">"Padrão"</string>
diff --git a/packages/SettingsLib/res/values-ro/strings.xml b/packages/SettingsLib/res/values-ro/strings.xml
index b8eead0..1233afd 100644
--- a/packages/SettingsLib/res/values-ro/strings.xml
+++ b/packages/SettingsLib/res/values-ro/strings.xml
@@ -106,6 +106,28 @@
<string name="bluetooth_hearing_aid_left_active" msgid="7084887715570971441">"Activ, numai stânga"</string>
<string name="bluetooth_hearing_aid_right_active" msgid="8574683234077567230">"Activ, numai dreapta"</string>
<string name="bluetooth_hearing_aid_left_and_right_active" msgid="407704460573163973">"Activ, stânga și dreapta"</string>
+ <!-- no translation found for bluetooth_active_media_only_battery_level (1164678961213251365) -->
+ <skip />
+ <!-- no translation found for bluetooth_active_media_only_battery_level_untethered (1345174295097854560) -->
+ <skip />
+ <!-- no translation found for bluetooth_battery_level_lea_support (8580950145907305436) -->
+ <skip />
+ <!-- no translation found for bluetooth_battery_level_untethered_lea_support (8534816721698743015) -->
+ <skip />
+ <!-- no translation found for bluetooth_battery_level_untethered_left_lea_support (6605320955858788855) -->
+ <skip />
+ <!-- no translation found for bluetooth_battery_level_untethered_right_lea_support (5717356160322149355) -->
+ <skip />
+ <!-- no translation found for bluetooth_active_media_only_no_battery_level (71106861912593126) -->
+ <skip />
+ <!-- no translation found for bluetooth_saved_device_lea_support (7231323139968285768) -->
+ <skip />
+ <!-- no translation found for bluetooth_hearing_aid_media_only_left_active (1632152540901488645) -->
+ <skip />
+ <!-- no translation found for bluetooth_hearing_aid_media_only_right_active (3854140683042617230) -->
+ <skip />
+ <!-- no translation found for bluetooth_hearing_aid_media_only_left_and_right_active (1299913413062528417) -->
+ <skip />
<string name="bluetooth_profile_a2dp" msgid="4632426382762851724">"Conținut media audio"</string>
<string name="bluetooth_profile_headset" msgid="5395952236133499331">"Apeluri telefonice"</string>
<string name="bluetooth_profile_opp" msgid="6692618568149493430">"Transfer de fișiere"</string>
@@ -643,8 +665,6 @@
<string name="guest_notification_ephemeral" msgid="7263252466950923871">"Toate activitățile vor fi șterse la ieșire"</string>
<string name="guest_notification_non_ephemeral" msgid="6843799963012259330">"Poți să salvezi sau să ștergi activitatea la ieșire"</string>
<string name="guest_notification_non_ephemeral_non_first_login" msgid="8009307983766934876">"Resetează pentru a șterge acum activitatea din sesiune sau salvează ori șterge activitatea la ieșire"</string>
- <string name="user_image_take_photo" msgid="467512954561638530">"Fă o fotografie"</string>
- <string name="user_image_choose_photo" msgid="1363820919146782908">"Alege o imagine"</string>
<string name="user_image_photo_selector" msgid="433658323306627093">"Selectează fotografia"</string>
<string name="failed_attempts_now_wiping_device" msgid="4016329172216428897">"Prea multe încercări incorecte. Datele de pe acest dispozitiv vor fi șterse."</string>
<string name="failed_attempts_now_wiping_user" msgid="469060411789668050">"Prea multe încercări incorecte. Acest utilizator va fi șters."</string>
@@ -684,8 +704,6 @@
<string name="accessibility_ethernet_disconnected" msgid="2832501530856497489">"Ethernet deconectat."</string>
<string name="accessibility_ethernet_connected" msgid="6175942685957461563">"Ethernet."</string>
<string name="accessibility_no_calling" msgid="3540827068323895748">"Apelarea nu este disponibilă."</string>
- <string name="avatar_picker_title" msgid="8492884172713170652">"Alege o fotografie de profil"</string>
- <string name="default_user_icon_description" msgid="6554047177298972638">"Pictograma prestabilită a utilizatorului"</string>
<string name="physical_keyboard_title" msgid="4811935435315835220">"Tastatură fizică"</string>
<string name="keyboard_layout_dialog_title" msgid="3927180147005616290">"Alege aspectul tastaturii"</string>
<string name="keyboard_layout_default_label" msgid="1997292217218546957">"Prestabilit"</string>
diff --git a/packages/SettingsLib/res/values-ru/strings.xml b/packages/SettingsLib/res/values-ru/strings.xml
index 775678c..43645f4 100644
--- a/packages/SettingsLib/res/values-ru/strings.xml
+++ b/packages/SettingsLib/res/values-ru/strings.xml
@@ -106,6 +106,28 @@
<string name="bluetooth_hearing_aid_left_active" msgid="7084887715570971441">"Активен, только левое ухо"</string>
<string name="bluetooth_hearing_aid_right_active" msgid="8574683234077567230">"Активен, только правое ухо"</string>
<string name="bluetooth_hearing_aid_left_and_right_active" msgid="407704460573163973">"Активен, оба уха"</string>
+ <!-- no translation found for bluetooth_active_media_only_battery_level (1164678961213251365) -->
+ <skip />
+ <!-- no translation found for bluetooth_active_media_only_battery_level_untethered (1345174295097854560) -->
+ <skip />
+ <!-- no translation found for bluetooth_battery_level_lea_support (8580950145907305436) -->
+ <skip />
+ <!-- no translation found for bluetooth_battery_level_untethered_lea_support (8534816721698743015) -->
+ <skip />
+ <!-- no translation found for bluetooth_battery_level_untethered_left_lea_support (6605320955858788855) -->
+ <skip />
+ <!-- no translation found for bluetooth_battery_level_untethered_right_lea_support (5717356160322149355) -->
+ <skip />
+ <!-- no translation found for bluetooth_active_media_only_no_battery_level (71106861912593126) -->
+ <skip />
+ <!-- no translation found for bluetooth_saved_device_lea_support (7231323139968285768) -->
+ <skip />
+ <!-- no translation found for bluetooth_hearing_aid_media_only_left_active (1632152540901488645) -->
+ <skip />
+ <!-- no translation found for bluetooth_hearing_aid_media_only_right_active (3854140683042617230) -->
+ <skip />
+ <!-- no translation found for bluetooth_hearing_aid_media_only_left_and_right_active (1299913413062528417) -->
+ <skip />
<string name="bluetooth_profile_a2dp" msgid="4632426382762851724">"Профиль A2DP"</string>
<string name="bluetooth_profile_headset" msgid="5395952236133499331">"Звонки"</string>
<string name="bluetooth_profile_opp" msgid="6692618568149493430">"Профиль OPP"</string>
@@ -643,8 +665,6 @@
<string name="guest_notification_ephemeral" msgid="7263252466950923871">"История будет удалена сразу после выхода"</string>
<string name="guest_notification_non_ephemeral" msgid="6843799963012259330">"При выходе вы можете сохранить или удалить историю"</string>
<string name="guest_notification_non_ephemeral_non_first_login" msgid="8009307983766934876">"Можно сбросить историю сеанса прямо сейчас, либо удалить или сохранить ее при выходе."</string>
- <string name="user_image_take_photo" msgid="467512954561638530">"Сделать снимок"</string>
- <string name="user_image_choose_photo" msgid="1363820919146782908">"Выбрать фото"</string>
<string name="user_image_photo_selector" msgid="433658323306627093">"Выбрать фотографию"</string>
<string name="failed_attempts_now_wiping_device" msgid="4016329172216428897">"Слишком много неудачных попыток. С устройства будут удалены все данные."</string>
<string name="failed_attempts_now_wiping_user" msgid="469060411789668050">"Слишком много неудачных попыток. Этот пользователь будет удален."</string>
@@ -684,8 +704,6 @@
<string name="accessibility_ethernet_disconnected" msgid="2832501530856497489">"Устройство отключено от Ethernet."</string>
<string name="accessibility_ethernet_connected" msgid="6175942685957461563">"Ethernet."</string>
<string name="accessibility_no_calling" msgid="3540827068323895748">"Совершение вызовов невозможно."</string>
- <string name="avatar_picker_title" msgid="8492884172713170652">"Выберите фото профиля"</string>
- <string name="default_user_icon_description" msgid="6554047177298972638">"Значок пользователя по умолчанию"</string>
<string name="physical_keyboard_title" msgid="4811935435315835220">"Физическая клавиатура"</string>
<string name="keyboard_layout_dialog_title" msgid="3927180147005616290">"Выберите раскладку клавиатуры"</string>
<string name="keyboard_layout_default_label" msgid="1997292217218546957">"По умолчанию"</string>
diff --git a/packages/SettingsLib/res/values-si/strings.xml b/packages/SettingsLib/res/values-si/strings.xml
index fe27286..d965b73 100644
--- a/packages/SettingsLib/res/values-si/strings.xml
+++ b/packages/SettingsLib/res/values-si/strings.xml
@@ -106,6 +106,28 @@
<string name="bluetooth_hearing_aid_left_active" msgid="7084887715570971441">"සක්රිය, වම පමණි"</string>
<string name="bluetooth_hearing_aid_right_active" msgid="8574683234077567230">"සක්රිය, දකුණ පමණි"</string>
<string name="bluetooth_hearing_aid_left_and_right_active" msgid="407704460573163973">"සක්රිය, වම සහ දකුණ"</string>
+ <!-- no translation found for bluetooth_active_media_only_battery_level (1164678961213251365) -->
+ <skip />
+ <!-- no translation found for bluetooth_active_media_only_battery_level_untethered (1345174295097854560) -->
+ <skip />
+ <!-- no translation found for bluetooth_battery_level_lea_support (8580950145907305436) -->
+ <skip />
+ <!-- no translation found for bluetooth_battery_level_untethered_lea_support (8534816721698743015) -->
+ <skip />
+ <!-- no translation found for bluetooth_battery_level_untethered_left_lea_support (6605320955858788855) -->
+ <skip />
+ <!-- no translation found for bluetooth_battery_level_untethered_right_lea_support (5717356160322149355) -->
+ <skip />
+ <!-- no translation found for bluetooth_active_media_only_no_battery_level (71106861912593126) -->
+ <skip />
+ <!-- no translation found for bluetooth_saved_device_lea_support (7231323139968285768) -->
+ <skip />
+ <!-- no translation found for bluetooth_hearing_aid_media_only_left_active (1632152540901488645) -->
+ <skip />
+ <!-- no translation found for bluetooth_hearing_aid_media_only_right_active (3854140683042617230) -->
+ <skip />
+ <!-- no translation found for bluetooth_hearing_aid_media_only_left_and_right_active (1299913413062528417) -->
+ <skip />
<string name="bluetooth_profile_a2dp" msgid="4632426382762851724">"මාධ්ය ශ්රව්ය"</string>
<string name="bluetooth_profile_headset" msgid="5395952236133499331">"දුරකථන ඇමතුම්"</string>
<string name="bluetooth_profile_opp" msgid="6692618568149493430">"ගොනු හුවමාරුව"</string>
@@ -643,8 +665,6 @@
<string name="guest_notification_ephemeral" msgid="7263252466950923871">"පිටවීමේදී සියලු ක්රියාකාරකම් මකනු ඇත"</string>
<string name="guest_notification_non_ephemeral" msgid="6843799963012259330">"ඔබට පිටවීමේදී ඔබගේ ක්රියාකාරකම් සුරැකීමට හෝ මැකීමට හැකිය"</string>
<string name="guest_notification_non_ephemeral_non_first_login" msgid="8009307983766934876">"දැන් සැසි ක්රියාකාරකම් මැකීමට යළි සකසන්න, නැතහොත් ඔබට පිටවීමේදී ක්රියාකාරකම් සුරැකීමට හෝ මැකීමට හැකිය"</string>
- <string name="user_image_take_photo" msgid="467512954561638530">"ඡායාරූපයක් ගන්න"</string>
- <string name="user_image_choose_photo" msgid="1363820919146782908">"රූපයක් තෝරන්න"</string>
<string name="user_image_photo_selector" msgid="433658323306627093">"ඡායාරූපය තෝරන්න"</string>
<string name="failed_attempts_now_wiping_device" msgid="4016329172216428897">"වැරදි උත්සාහයන් ඉතා වැඩි ගණනකි. මෙම උපාංගයෙහි දත්ත මකනු ඇත."</string>
<string name="failed_attempts_now_wiping_user" msgid="469060411789668050">"වැරදි උත්සාහයන් ඉතා වැඩි ගණනකි. මෙම පරිශීලකයා මකනු ඇත."</string>
@@ -684,8 +704,6 @@
<string name="accessibility_ethernet_disconnected" msgid="2832501530856497489">"ඊතර්නෙට් විසන්ධි කරන ලදී."</string>
<string name="accessibility_ethernet_connected" msgid="6175942685957461563">"ඊතර්නෙට්."</string>
<string name="accessibility_no_calling" msgid="3540827068323895748">"ඇමතුම් නැත."</string>
- <string name="avatar_picker_title" msgid="8492884172713170652">"පැතිකඩ පින්තූරයක් තේරීම"</string>
- <string name="default_user_icon_description" msgid="6554047177298972638">"පෙරනිමි පරිශීලක නිරූපකය"</string>
<string name="physical_keyboard_title" msgid="4811935435315835220">"භෞතික යතුරු පුවරුව"</string>
<string name="keyboard_layout_dialog_title" msgid="3927180147005616290">"යතුරු පුවරු පිරිසැලසුම තෝරන්න"</string>
<string name="keyboard_layout_default_label" msgid="1997292217218546957">"පෙරනිමි"</string>
diff --git a/packages/SettingsLib/res/values-sk/strings.xml b/packages/SettingsLib/res/values-sk/strings.xml
index dd667ca..77c265e 100644
--- a/packages/SettingsLib/res/values-sk/strings.xml
+++ b/packages/SettingsLib/res/values-sk/strings.xml
@@ -106,6 +106,28 @@
<string name="bluetooth_hearing_aid_left_active" msgid="7084887715570971441">"Aktívne, iba ľavá strana"</string>
<string name="bluetooth_hearing_aid_right_active" msgid="8574683234077567230">"Aktívne, iba pravá strana"</string>
<string name="bluetooth_hearing_aid_left_and_right_active" msgid="407704460573163973">"Aktívne, ľavá aj pravá strana"</string>
+ <!-- no translation found for bluetooth_active_media_only_battery_level (1164678961213251365) -->
+ <skip />
+ <!-- no translation found for bluetooth_active_media_only_battery_level_untethered (1345174295097854560) -->
+ <skip />
+ <!-- no translation found for bluetooth_battery_level_lea_support (8580950145907305436) -->
+ <skip />
+ <!-- no translation found for bluetooth_battery_level_untethered_lea_support (8534816721698743015) -->
+ <skip />
+ <!-- no translation found for bluetooth_battery_level_untethered_left_lea_support (6605320955858788855) -->
+ <skip />
+ <!-- no translation found for bluetooth_battery_level_untethered_right_lea_support (5717356160322149355) -->
+ <skip />
+ <!-- no translation found for bluetooth_active_media_only_no_battery_level (71106861912593126) -->
+ <skip />
+ <!-- no translation found for bluetooth_saved_device_lea_support (7231323139968285768) -->
+ <skip />
+ <!-- no translation found for bluetooth_hearing_aid_media_only_left_active (1632152540901488645) -->
+ <skip />
+ <!-- no translation found for bluetooth_hearing_aid_media_only_right_active (3854140683042617230) -->
+ <skip />
+ <!-- no translation found for bluetooth_hearing_aid_media_only_left_and_right_active (1299913413062528417) -->
+ <skip />
<string name="bluetooth_profile_a2dp" msgid="4632426382762851724">"Zvuk médií"</string>
<string name="bluetooth_profile_headset" msgid="5395952236133499331">"Telefonické hovory"</string>
<string name="bluetooth_profile_opp" msgid="6692618568149493430">"Prenos súborov"</string>
@@ -480,7 +502,7 @@
<string name="battery_info_status_charging" msgid="4279958015430387405">"Nabíja sa"</string>
<string name="battery_info_status_charging_fast" msgid="8027559755902954885">"Rýchle nabíjanie"</string>
<string name="battery_info_status_charging_slow" msgid="3190803837168962319">"Pomalé nabíjanie"</string>
- <string name="battery_info_status_charging_wireless" msgid="8924722966861282197">"Nabíja sa bezdrôtovo"</string>
+ <string name="battery_info_status_charging_wireless" msgid="8924722966861282197">"Bezdrôtové nabíjanie"</string>
<string name="battery_info_status_charging_dock" msgid="8573274094093364791">"Nabíja sa"</string>
<string name="battery_info_status_discharging" msgid="6962689305413556485">"Nenabíja sa"</string>
<string name="battery_info_status_not_charging" msgid="1103084691314264664">"Pripojené, ale nenabíja sa"</string>
@@ -643,8 +665,6 @@
<string name="guest_notification_ephemeral" msgid="7263252466950923871">"Pri ukončení sa všetka aktivita odstráni"</string>
<string name="guest_notification_non_ephemeral" msgid="6843799963012259330">"Aktivitu môžete pri ukončení uložiť alebo odstrániť"</string>
<string name="guest_notification_non_ephemeral_non_first_login" msgid="8009307983766934876">"Resetovaním ihneď odstránite aktivitu relácie alebo ju uložte či odstráňte pri ukončení relácie"</string>
- <string name="user_image_take_photo" msgid="467512954561638530">"Odfotiť"</string>
- <string name="user_image_choose_photo" msgid="1363820919146782908">"Vybrať obrázok"</string>
<string name="user_image_photo_selector" msgid="433658323306627093">"Vybrať fotku"</string>
<string name="failed_attempts_now_wiping_device" msgid="4016329172216428897">"Príliš veľa chybných pokusov. Údaje tohto zariadenia budú odstránené."</string>
<string name="failed_attempts_now_wiping_user" msgid="469060411789668050">"Príliš veľa chybných pokusov. Tento používateľ bude odobraný."</string>
@@ -684,8 +704,6 @@
<string name="accessibility_ethernet_disconnected" msgid="2832501530856497489">"Sieť ethernet je odpojená"</string>
<string name="accessibility_ethernet_connected" msgid="6175942685957461563">"Ethernet."</string>
<string name="accessibility_no_calling" msgid="3540827068323895748">"Žiadne volanie."</string>
- <string name="avatar_picker_title" msgid="8492884172713170652">"Výber profilovej fotky"</string>
- <string name="default_user_icon_description" msgid="6554047177298972638">"Predvolená ikona používateľa"</string>
<string name="physical_keyboard_title" msgid="4811935435315835220">"Fyzická klávesnica"</string>
<string name="keyboard_layout_dialog_title" msgid="3927180147005616290">"Vyberte rozloženie klávesnice"</string>
<string name="keyboard_layout_default_label" msgid="1997292217218546957">"Predvolené"</string>
diff --git a/packages/SettingsLib/res/values-sl/strings.xml b/packages/SettingsLib/res/values-sl/strings.xml
index eab418a9..abca26f 100644
--- a/packages/SettingsLib/res/values-sl/strings.xml
+++ b/packages/SettingsLib/res/values-sl/strings.xml
@@ -106,6 +106,28 @@
<string name="bluetooth_hearing_aid_left_active" msgid="7084887715570971441">"Aktivno, samo levo"</string>
<string name="bluetooth_hearing_aid_right_active" msgid="8574683234077567230">"Aktivno, samo desno"</string>
<string name="bluetooth_hearing_aid_left_and_right_active" msgid="407704460573163973">"Aktivno, levo in desno"</string>
+ <!-- no translation found for bluetooth_active_media_only_battery_level (1164678961213251365) -->
+ <skip />
+ <!-- no translation found for bluetooth_active_media_only_battery_level_untethered (1345174295097854560) -->
+ <skip />
+ <!-- no translation found for bluetooth_battery_level_lea_support (8580950145907305436) -->
+ <skip />
+ <!-- no translation found for bluetooth_battery_level_untethered_lea_support (8534816721698743015) -->
+ <skip />
+ <!-- no translation found for bluetooth_battery_level_untethered_left_lea_support (6605320955858788855) -->
+ <skip />
+ <!-- no translation found for bluetooth_battery_level_untethered_right_lea_support (5717356160322149355) -->
+ <skip />
+ <!-- no translation found for bluetooth_active_media_only_no_battery_level (71106861912593126) -->
+ <skip />
+ <!-- no translation found for bluetooth_saved_device_lea_support (7231323139968285768) -->
+ <skip />
+ <!-- no translation found for bluetooth_hearing_aid_media_only_left_active (1632152540901488645) -->
+ <skip />
+ <!-- no translation found for bluetooth_hearing_aid_media_only_right_active (3854140683042617230) -->
+ <skip />
+ <!-- no translation found for bluetooth_hearing_aid_media_only_left_and_right_active (1299913413062528417) -->
+ <skip />
<string name="bluetooth_profile_a2dp" msgid="4632426382762851724">"Zvok predstavnosti"</string>
<string name="bluetooth_profile_headset" msgid="5395952236133499331">"Telefonski klici"</string>
<string name="bluetooth_profile_opp" msgid="6692618568149493430">"Prenos datoteke"</string>
@@ -643,8 +665,6 @@
<string name="guest_notification_ephemeral" msgid="7263252466950923871">"Ko zaprete način za goste, bo vsa dejavnost izbrisana."</string>
<string name="guest_notification_non_ephemeral" msgid="6843799963012259330">"Ob zaprtju načina lahko shranite ali izbrišete dejavnost."</string>
<string name="guest_notification_non_ephemeral_non_first_login" msgid="8009307983766934876">"Ponastavite za izbris dejavnosti v seji zdaj, lahko pa jo shranite ali izbrišete, ko zaprete način za goste."</string>
- <string name="user_image_take_photo" msgid="467512954561638530">"Fotografiranje"</string>
- <string name="user_image_choose_photo" msgid="1363820919146782908">"Izberi sliko"</string>
<string name="user_image_photo_selector" msgid="433658323306627093">"Izbira fotografije"</string>
<string name="failed_attempts_now_wiping_device" msgid="4016329172216428897">"Preveč napačnih poskusov. Podatki v napravi bodo izbrisani."</string>
<string name="failed_attempts_now_wiping_user" msgid="469060411789668050">"Preveč napačnih poskusov. Uporabnik bo izbrisan."</string>
@@ -684,8 +704,6 @@
<string name="accessibility_ethernet_disconnected" msgid="2832501530856497489">"Ethernetna povezava je prekinjena."</string>
<string name="accessibility_ethernet_connected" msgid="6175942685957461563">"Ethernet"</string>
<string name="accessibility_no_calling" msgid="3540827068323895748">"Klicanje ni mogoče."</string>
- <string name="avatar_picker_title" msgid="8492884172713170652">"Izbira profilne slike"</string>
- <string name="default_user_icon_description" msgid="6554047177298972638">"Privzeta ikona uporabnika"</string>
<string name="physical_keyboard_title" msgid="4811935435315835220">"Fizična tipkovnica"</string>
<string name="keyboard_layout_dialog_title" msgid="3927180147005616290">"Izbira razporeditve tipkovnice"</string>
<string name="keyboard_layout_default_label" msgid="1997292217218546957">"Privzeto"</string>
diff --git a/packages/SettingsLib/res/values-sq/strings.xml b/packages/SettingsLib/res/values-sq/strings.xml
index 7eb4fa8..0f48e42c9 100644
--- a/packages/SettingsLib/res/values-sq/strings.xml
+++ b/packages/SettingsLib/res/values-sq/strings.xml
@@ -106,6 +106,28 @@
<string name="bluetooth_hearing_aid_left_active" msgid="7084887715570971441">"Aktive, vetëm majtas"</string>
<string name="bluetooth_hearing_aid_right_active" msgid="8574683234077567230">"Aktive, vetëm djathtas"</string>
<string name="bluetooth_hearing_aid_left_and_right_active" msgid="407704460573163973">"Aktive, majtas dhe djathtas"</string>
+ <!-- no translation found for bluetooth_active_media_only_battery_level (1164678961213251365) -->
+ <skip />
+ <!-- no translation found for bluetooth_active_media_only_battery_level_untethered (1345174295097854560) -->
+ <skip />
+ <!-- no translation found for bluetooth_battery_level_lea_support (8580950145907305436) -->
+ <skip />
+ <!-- no translation found for bluetooth_battery_level_untethered_lea_support (8534816721698743015) -->
+ <skip />
+ <!-- no translation found for bluetooth_battery_level_untethered_left_lea_support (6605320955858788855) -->
+ <skip />
+ <!-- no translation found for bluetooth_battery_level_untethered_right_lea_support (5717356160322149355) -->
+ <skip />
+ <!-- no translation found for bluetooth_active_media_only_no_battery_level (71106861912593126) -->
+ <skip />
+ <!-- no translation found for bluetooth_saved_device_lea_support (7231323139968285768) -->
+ <skip />
+ <!-- no translation found for bluetooth_hearing_aid_media_only_left_active (1632152540901488645) -->
+ <skip />
+ <!-- no translation found for bluetooth_hearing_aid_media_only_right_active (3854140683042617230) -->
+ <skip />
+ <!-- no translation found for bluetooth_hearing_aid_media_only_left_and_right_active (1299913413062528417) -->
+ <skip />
<string name="bluetooth_profile_a2dp" msgid="4632426382762851724">"Audioja e medias"</string>
<string name="bluetooth_profile_headset" msgid="5395952236133499331">"Telefonatat"</string>
<string name="bluetooth_profile_opp" msgid="6692618568149493430">"Transferimi i skedarëve"</string>
@@ -643,8 +665,6 @@
<string name="guest_notification_ephemeral" msgid="7263252466950923871">"Të gjitha aktivitetet do të fshihen kur të dalësh"</string>
<string name="guest_notification_non_ephemeral" msgid="6843799963012259330">"Mund ta ruash ose ta fshish aktivitetin tënd kur të dalësh"</string>
<string name="guest_notification_non_ephemeral_non_first_login" msgid="8009307983766934876">"Rivendose për të fshirë aktivitetin e sesionit tani ose mund ta ruash ose ta fshish aktivitetin kur të dalësh"</string>
- <string name="user_image_take_photo" msgid="467512954561638530">"Bëj një fotografi"</string>
- <string name="user_image_choose_photo" msgid="1363820919146782908">"Zgjidh një imazh"</string>
<string name="user_image_photo_selector" msgid="433658323306627093">"Zgjidh një fotografi"</string>
<string name="failed_attempts_now_wiping_device" msgid="4016329172216428897">"Shumë tentativa të pasakta. Të dhënat e kësaj pajisjeje do të fshihen."</string>
<string name="failed_attempts_now_wiping_user" msgid="469060411789668050">"Shumë tentativa të pasakta. Ky përdorues do të fshihet."</string>
@@ -684,8 +704,6 @@
<string name="accessibility_ethernet_disconnected" msgid="2832501530856497489">"Lidhja e eternetit u shkëput."</string>
<string name="accessibility_ethernet_connected" msgid="6175942685957461563">"Eternet."</string>
<string name="accessibility_no_calling" msgid="3540827068323895748">"Telefonatat nuk ofrohen"</string>
- <string name="avatar_picker_title" msgid="8492884172713170652">"Zgjidh një fotografi profili"</string>
- <string name="default_user_icon_description" msgid="6554047177298972638">"Ikona e parazgjedhur e përdoruesit"</string>
<string name="physical_keyboard_title" msgid="4811935435315835220">"Tastiera fizike"</string>
<string name="keyboard_layout_dialog_title" msgid="3927180147005616290">"Zgjidh strukturën e tastierës"</string>
<string name="keyboard_layout_default_label" msgid="1997292217218546957">"Parazgjedhja"</string>
diff --git a/packages/SettingsLib/res/values-sr/strings.xml b/packages/SettingsLib/res/values-sr/strings.xml
index f3d5012..d309036c 100644
--- a/packages/SettingsLib/res/values-sr/strings.xml
+++ b/packages/SettingsLib/res/values-sr/strings.xml
@@ -106,6 +106,28 @@
<string name="bluetooth_hearing_aid_left_active" msgid="7084887715570971441">"Активно, само с леве стране"</string>
<string name="bluetooth_hearing_aid_right_active" msgid="8574683234077567230">"Активно, с десне стране"</string>
<string name="bluetooth_hearing_aid_left_and_right_active" msgid="407704460573163973">"Активно, с леве и десне стране"</string>
+ <!-- no translation found for bluetooth_active_media_only_battery_level (1164678961213251365) -->
+ <skip />
+ <!-- no translation found for bluetooth_active_media_only_battery_level_untethered (1345174295097854560) -->
+ <skip />
+ <!-- no translation found for bluetooth_battery_level_lea_support (8580950145907305436) -->
+ <skip />
+ <!-- no translation found for bluetooth_battery_level_untethered_lea_support (8534816721698743015) -->
+ <skip />
+ <!-- no translation found for bluetooth_battery_level_untethered_left_lea_support (6605320955858788855) -->
+ <skip />
+ <!-- no translation found for bluetooth_battery_level_untethered_right_lea_support (5717356160322149355) -->
+ <skip />
+ <!-- no translation found for bluetooth_active_media_only_no_battery_level (71106861912593126) -->
+ <skip />
+ <!-- no translation found for bluetooth_saved_device_lea_support (7231323139968285768) -->
+ <skip />
+ <!-- no translation found for bluetooth_hearing_aid_media_only_left_active (1632152540901488645) -->
+ <skip />
+ <!-- no translation found for bluetooth_hearing_aid_media_only_right_active (3854140683042617230) -->
+ <skip />
+ <!-- no translation found for bluetooth_hearing_aid_media_only_left_and_right_active (1299913413062528417) -->
+ <skip />
<string name="bluetooth_profile_a2dp" msgid="4632426382762851724">"Звук медија"</string>
<string name="bluetooth_profile_headset" msgid="5395952236133499331">"Телефонски позиви"</string>
<string name="bluetooth_profile_opp" msgid="6692618568149493430">"Пренос датотеке"</string>
@@ -643,8 +665,6 @@
<string name="guest_notification_ephemeral" msgid="7263252466950923871">"Све активности ће бити избрисане при излазу"</string>
<string name="guest_notification_non_ephemeral" msgid="6843799963012259330">"Можете да сачувате или избришете активности при излазу"</string>
<string name="guest_notification_non_ephemeral_non_first_login" msgid="8009307983766934876">"Ресетујете за брисање активности сесије, или сачувајте или избришите активности при излазу"</string>
- <string name="user_image_take_photo" msgid="467512954561638530">"Сликај"</string>
- <string name="user_image_choose_photo" msgid="1363820919146782908">"Одабери слику"</string>
<string name="user_image_photo_selector" msgid="433658323306627093">"Изаберите слику"</string>
<string name="failed_attempts_now_wiping_device" msgid="4016329172216428897">"Превише нетачних покушаја. Избрисаћемо податке са овог уређаја."</string>
<string name="failed_attempts_now_wiping_user" msgid="469060411789668050">"Превише нетачних покушаја. Избрисаћемо овог корисника."</string>
@@ -684,8 +704,6 @@
<string name="accessibility_ethernet_disconnected" msgid="2832501530856497489">"Веза са етернетом је прекинута."</string>
<string name="accessibility_ethernet_connected" msgid="6175942685957461563">"Етернет."</string>
<string name="accessibility_no_calling" msgid="3540827068323895748">"Без позивања."</string>
- <string name="avatar_picker_title" msgid="8492884172713170652">"Одаберите слику профила"</string>
- <string name="default_user_icon_description" msgid="6554047177298972638">"Подразумевана икона корисника"</string>
<string name="physical_keyboard_title" msgid="4811935435315835220">"Физичка тастатура"</string>
<string name="keyboard_layout_dialog_title" msgid="3927180147005616290">"Одаберите распоред тастатуре"</string>
<string name="keyboard_layout_default_label" msgid="1997292217218546957">"Подразумевано"</string>
diff --git a/packages/SettingsLib/res/values-sv/strings.xml b/packages/SettingsLib/res/values-sv/strings.xml
index 3da0a8f..363396a 100644
--- a/packages/SettingsLib/res/values-sv/strings.xml
+++ b/packages/SettingsLib/res/values-sv/strings.xml
@@ -106,6 +106,28 @@
<string name="bluetooth_hearing_aid_left_active" msgid="7084887715570971441">"Aktiv, bara vänster"</string>
<string name="bluetooth_hearing_aid_right_active" msgid="8574683234077567230">"Aktiv, bara höger"</string>
<string name="bluetooth_hearing_aid_left_and_right_active" msgid="407704460573163973">"Aktiv, vänster och höger"</string>
+ <!-- no translation found for bluetooth_active_media_only_battery_level (1164678961213251365) -->
+ <skip />
+ <!-- no translation found for bluetooth_active_media_only_battery_level_untethered (1345174295097854560) -->
+ <skip />
+ <!-- no translation found for bluetooth_battery_level_lea_support (8580950145907305436) -->
+ <skip />
+ <!-- no translation found for bluetooth_battery_level_untethered_lea_support (8534816721698743015) -->
+ <skip />
+ <!-- no translation found for bluetooth_battery_level_untethered_left_lea_support (6605320955858788855) -->
+ <skip />
+ <!-- no translation found for bluetooth_battery_level_untethered_right_lea_support (5717356160322149355) -->
+ <skip />
+ <!-- no translation found for bluetooth_active_media_only_no_battery_level (71106861912593126) -->
+ <skip />
+ <!-- no translation found for bluetooth_saved_device_lea_support (7231323139968285768) -->
+ <skip />
+ <!-- no translation found for bluetooth_hearing_aid_media_only_left_active (1632152540901488645) -->
+ <skip />
+ <!-- no translation found for bluetooth_hearing_aid_media_only_right_active (3854140683042617230) -->
+ <skip />
+ <!-- no translation found for bluetooth_hearing_aid_media_only_left_and_right_active (1299913413062528417) -->
+ <skip />
<string name="bluetooth_profile_a2dp" msgid="4632426382762851724">"Medialjud"</string>
<string name="bluetooth_profile_headset" msgid="5395952236133499331">"Telefonsamtal"</string>
<string name="bluetooth_profile_opp" msgid="6692618568149493430">"Filöverföring"</string>
@@ -643,8 +665,6 @@
<string name="guest_notification_ephemeral" msgid="7263252466950923871">"All aktivitet raderas när du avslutar"</string>
<string name="guest_notification_non_ephemeral" msgid="6843799963012259330">"Du kan spara eller radera aktivitet när du avslutar"</string>
<string name="guest_notification_non_ephemeral_non_first_login" msgid="8009307983766934876">"Återställ om du vill radera sessionsaktiviteten nu, eller spara eller radera aktivitet när du avslutar"</string>
- <string name="user_image_take_photo" msgid="467512954561638530">"Ta ett foto"</string>
- <string name="user_image_choose_photo" msgid="1363820919146782908">"Välj en bild"</string>
<string name="user_image_photo_selector" msgid="433658323306627093">"Välj foto"</string>
<string name="failed_attempts_now_wiping_device" msgid="4016329172216428897">"För många felaktiga försök. Enhetens data raderas."</string>
<string name="failed_attempts_now_wiping_user" msgid="469060411789668050">"För många felaktiga försök. Den här användaren raderas."</string>
@@ -684,8 +704,6 @@
<string name="accessibility_ethernet_disconnected" msgid="2832501530856497489">"Ethernet har kopplats från."</string>
<string name="accessibility_ethernet_connected" msgid="6175942685957461563">"Ethernet."</string>
<string name="accessibility_no_calling" msgid="3540827068323895748">"Inga anrop."</string>
- <string name="avatar_picker_title" msgid="8492884172713170652">"Välj en profilbild"</string>
- <string name="default_user_icon_description" msgid="6554047177298972638">"Ikon för standardanvändare"</string>
<string name="physical_keyboard_title" msgid="4811935435315835220">"Fysiskt tangentbord"</string>
<string name="keyboard_layout_dialog_title" msgid="3927180147005616290">"Välj en tangentbordslayout"</string>
<string name="keyboard_layout_default_label" msgid="1997292217218546957">"Standard"</string>
diff --git a/packages/SettingsLib/res/values-sw/strings.xml b/packages/SettingsLib/res/values-sw/strings.xml
index 6ac6f2e..ebff38b 100644
--- a/packages/SettingsLib/res/values-sw/strings.xml
+++ b/packages/SettingsLib/res/values-sw/strings.xml
@@ -106,6 +106,28 @@
<string name="bluetooth_hearing_aid_left_active" msgid="7084887715570971441">"Inatumika, kushoto pekee"</string>
<string name="bluetooth_hearing_aid_right_active" msgid="8574683234077567230">"Inatumika, kulia pekee"</string>
<string name="bluetooth_hearing_aid_left_and_right_active" msgid="407704460573163973">"Inatumika, kushoto na kulia"</string>
+ <!-- no translation found for bluetooth_active_media_only_battery_level (1164678961213251365) -->
+ <skip />
+ <!-- no translation found for bluetooth_active_media_only_battery_level_untethered (1345174295097854560) -->
+ <skip />
+ <!-- no translation found for bluetooth_battery_level_lea_support (8580950145907305436) -->
+ <skip />
+ <!-- no translation found for bluetooth_battery_level_untethered_lea_support (8534816721698743015) -->
+ <skip />
+ <!-- no translation found for bluetooth_battery_level_untethered_left_lea_support (6605320955858788855) -->
+ <skip />
+ <!-- no translation found for bluetooth_battery_level_untethered_right_lea_support (5717356160322149355) -->
+ <skip />
+ <!-- no translation found for bluetooth_active_media_only_no_battery_level (71106861912593126) -->
+ <skip />
+ <!-- no translation found for bluetooth_saved_device_lea_support (7231323139968285768) -->
+ <skip />
+ <!-- no translation found for bluetooth_hearing_aid_media_only_left_active (1632152540901488645) -->
+ <skip />
+ <!-- no translation found for bluetooth_hearing_aid_media_only_right_active (3854140683042617230) -->
+ <skip />
+ <!-- no translation found for bluetooth_hearing_aid_media_only_left_and_right_active (1299913413062528417) -->
+ <skip />
<string name="bluetooth_profile_a2dp" msgid="4632426382762851724">"Sauti ya maudhui"</string>
<string name="bluetooth_profile_headset" msgid="5395952236133499331">"Simu"</string>
<string name="bluetooth_profile_opp" msgid="6692618568149493430">"Uhamishaji wa faili"</string>
@@ -643,8 +665,6 @@
<string name="guest_notification_ephemeral" msgid="7263252466950923871">"Shughuli zote zitafutwa wakati wa kufunga"</string>
<string name="guest_notification_non_ephemeral" msgid="6843799963012259330">"Unaweza kuhifadhi au kufuta shughuli zako wakati wa kufunga"</string>
<string name="guest_notification_non_ephemeral_non_first_login" msgid="8009307983766934876">"Weka upya ili ufute shughuli za kipindi sasa au unaweza kuhifadhi au kufuta shughuli wakati wa kufunga"</string>
- <string name="user_image_take_photo" msgid="467512954561638530">"Piga picha"</string>
- <string name="user_image_choose_photo" msgid="1363820919146782908">"Chagua picha"</string>
<string name="user_image_photo_selector" msgid="433658323306627093">"Chagua picha"</string>
<string name="failed_attempts_now_wiping_device" msgid="4016329172216428897">"Umejaribu kufungua mara nyingi mno kwa njia isiyo sahihi. Data iliyo kwenye kifaa hiki itafutwa."</string>
<string name="failed_attempts_now_wiping_user" msgid="469060411789668050">"Umejaribu kufungua mara nyingi mno kwa njia isiyo sahihi. Maelezo ya mtumiaji huyu yatafutwa."</string>
@@ -684,8 +704,6 @@
<string name="accessibility_ethernet_disconnected" msgid="2832501530856497489">"Ethaneti imeondolewa."</string>
<string name="accessibility_ethernet_connected" msgid="6175942685957461563">"Ethaneti."</string>
<string name="accessibility_no_calling" msgid="3540827068323895748">"Huwezi kupiga wala kupokea simu."</string>
- <string name="avatar_picker_title" msgid="8492884172713170652">"Chagua picha ya wasifu"</string>
- <string name="default_user_icon_description" msgid="6554047177298972638">"Aikoni chaguomsingi ya mtumiaji"</string>
<string name="physical_keyboard_title" msgid="4811935435315835220">"Kibodi halisi"</string>
<string name="keyboard_layout_dialog_title" msgid="3927180147005616290">"Chagua mpangilio wa kibodi"</string>
<string name="keyboard_layout_default_label" msgid="1997292217218546957">"Chaguomsingi"</string>
diff --git a/packages/SettingsLib/res/values-ta/strings.xml b/packages/SettingsLib/res/values-ta/strings.xml
index 0819e46..1648de0 100644
--- a/packages/SettingsLib/res/values-ta/strings.xml
+++ b/packages/SettingsLib/res/values-ta/strings.xml
@@ -106,6 +106,28 @@
<string name="bluetooth_hearing_aid_left_active" msgid="7084887715570971441">"இடது பக்கம் மட்டும் செயலில் உள்ளது"</string>
<string name="bluetooth_hearing_aid_right_active" msgid="8574683234077567230">"வலது பக்கம் மட்டும் செயலில் உள்ளது"</string>
<string name="bluetooth_hearing_aid_left_and_right_active" msgid="407704460573163973">"வலது மற்றும் இடது பக்கம் செயலில் உள்ளது"</string>
+ <!-- no translation found for bluetooth_active_media_only_battery_level (1164678961213251365) -->
+ <skip />
+ <!-- no translation found for bluetooth_active_media_only_battery_level_untethered (1345174295097854560) -->
+ <skip />
+ <!-- no translation found for bluetooth_battery_level_lea_support (8580950145907305436) -->
+ <skip />
+ <!-- no translation found for bluetooth_battery_level_untethered_lea_support (8534816721698743015) -->
+ <skip />
+ <!-- no translation found for bluetooth_battery_level_untethered_left_lea_support (6605320955858788855) -->
+ <skip />
+ <!-- no translation found for bluetooth_battery_level_untethered_right_lea_support (5717356160322149355) -->
+ <skip />
+ <!-- no translation found for bluetooth_active_media_only_no_battery_level (71106861912593126) -->
+ <skip />
+ <!-- no translation found for bluetooth_saved_device_lea_support (7231323139968285768) -->
+ <skip />
+ <!-- no translation found for bluetooth_hearing_aid_media_only_left_active (1632152540901488645) -->
+ <skip />
+ <!-- no translation found for bluetooth_hearing_aid_media_only_right_active (3854140683042617230) -->
+ <skip />
+ <!-- no translation found for bluetooth_hearing_aid_media_only_left_and_right_active (1299913413062528417) -->
+ <skip />
<string name="bluetooth_profile_a2dp" msgid="4632426382762851724">"மீடியா ஆடியோ"</string>
<string name="bluetooth_profile_headset" msgid="5395952236133499331">"ஃபோன் அழைப்புகள்"</string>
<string name="bluetooth_profile_opp" msgid="6692618568149493430">"ஃபைல் இடமாற்றம்"</string>
@@ -643,8 +665,6 @@
<string name="guest_notification_ephemeral" msgid="7263252466950923871">"வெளியேறியவுடன் அனைத்துச் செயல்பாடுகளும் நீக்கப்படும்"</string>
<string name="guest_notification_non_ephemeral" msgid="6843799963012259330">"வெளியேறும்போது செயல்பாடுகளைச் சேமிக்கலாம் அல்லது நீக்கலாம்"</string>
<string name="guest_notification_non_ephemeral_non_first_login" msgid="8009307983766934876">"அமர்வின் செயல்பாடுகளை இப்போதே நீக்க ரீசெட் செய்யவும் அல்லது வெளியேறும்போது செயல்பாடுகளைச் சேமிக்கலாம் அல்லது நீக்கலாம்"</string>
- <string name="user_image_take_photo" msgid="467512954561638530">"படமெடுங்கள்"</string>
- <string name="user_image_choose_photo" msgid="1363820919146782908">"படத்தைத் தேர்வுசெய்யுங்கள்"</string>
<string name="user_image_photo_selector" msgid="433658323306627093">"படத்தைத் தேர்ந்தெடுங்கள்"</string>
<string name="failed_attempts_now_wiping_device" msgid="4016329172216428897">"பலமுறை தவறாக முயன்ற காரணத்தால் இந்தச் சாதனத்தின் தரவு நீக்கப்படும்."</string>
<string name="failed_attempts_now_wiping_user" msgid="469060411789668050">"பலமுறை தவறாக முயன்ற காரணத்தால் இந்தப் பயனர் நீக்கப்படுவார்."</string>
@@ -684,8 +704,6 @@
<string name="accessibility_ethernet_disconnected" msgid="2832501530856497489">"ஈத்தர்நெட் துண்டிக்கப்பட்டது."</string>
<string name="accessibility_ethernet_connected" msgid="6175942685957461563">"ஈதர்நெட்."</string>
<string name="accessibility_no_calling" msgid="3540827068323895748">"அழைப்பை மேற்கொள்ள முடியவில்லை."</string>
- <string name="avatar_picker_title" msgid="8492884172713170652">"சுயவிவரப் படத்தைத் தேர்வுசெய்யுங்கள்"</string>
- <string name="default_user_icon_description" msgid="6554047177298972638">"இயல்புநிலைப் பயனர் ஐகான்"</string>
<string name="physical_keyboard_title" msgid="4811935435315835220">"கீபோர்டு"</string>
<string name="keyboard_layout_dialog_title" msgid="3927180147005616290">"கீபோர்டு தளவமைப்பைத் தேர்வுசெய்தல்"</string>
<string name="keyboard_layout_default_label" msgid="1997292217218546957">"இயல்பு"</string>
diff --git a/packages/SettingsLib/res/values-te/strings.xml b/packages/SettingsLib/res/values-te/strings.xml
index 91ef2b2..7ee57cf 100644
--- a/packages/SettingsLib/res/values-te/strings.xml
+++ b/packages/SettingsLib/res/values-te/strings.xml
@@ -106,6 +106,28 @@
<string name="bluetooth_hearing_aid_left_active" msgid="7084887715570971441">"యాక్టివ్గా ఉంది, ఎడమవైపు మాత్రమే యాక్టివ్గా ఉంది"</string>
<string name="bluetooth_hearing_aid_right_active" msgid="8574683234077567230">"యాక్టివ్గా ఉంది, కుడివైపు యాక్టివ్గా ఉంది"</string>
<string name="bluetooth_hearing_aid_left_and_right_active" msgid="407704460573163973">"యాక్టివ్గా ఉంది, ఎడమవైపు, కుడివైపు యాక్టివ్గా ఉంది"</string>
+ <!-- no translation found for bluetooth_active_media_only_battery_level (1164678961213251365) -->
+ <skip />
+ <!-- no translation found for bluetooth_active_media_only_battery_level_untethered (1345174295097854560) -->
+ <skip />
+ <!-- no translation found for bluetooth_battery_level_lea_support (8580950145907305436) -->
+ <skip />
+ <!-- no translation found for bluetooth_battery_level_untethered_lea_support (8534816721698743015) -->
+ <skip />
+ <!-- no translation found for bluetooth_battery_level_untethered_left_lea_support (6605320955858788855) -->
+ <skip />
+ <!-- no translation found for bluetooth_battery_level_untethered_right_lea_support (5717356160322149355) -->
+ <skip />
+ <!-- no translation found for bluetooth_active_media_only_no_battery_level (71106861912593126) -->
+ <skip />
+ <!-- no translation found for bluetooth_saved_device_lea_support (7231323139968285768) -->
+ <skip />
+ <!-- no translation found for bluetooth_hearing_aid_media_only_left_active (1632152540901488645) -->
+ <skip />
+ <!-- no translation found for bluetooth_hearing_aid_media_only_right_active (3854140683042617230) -->
+ <skip />
+ <!-- no translation found for bluetooth_hearing_aid_media_only_left_and_right_active (1299913413062528417) -->
+ <skip />
<string name="bluetooth_profile_a2dp" msgid="4632426382762851724">"మీడియా ఆడియో"</string>
<string name="bluetooth_profile_headset" msgid="5395952236133499331">"ఫోన్ కాల్స్"</string>
<string name="bluetooth_profile_opp" msgid="6692618568149493430">"ఫైల్ బదిలీ"</string>
@@ -643,8 +665,6 @@
<string name="guest_notification_ephemeral" msgid="7263252466950923871">"వైదొలగినప్పుడు యాక్టివిటీ అంతా తొలగించబడుతుంది"</string>
<string name="guest_notification_non_ephemeral" msgid="6843799963012259330">"మీరు వైదొలగేటప్పుడు, యాక్టివిటీని సేవ్ చేయవచ్చు లేదా తొలగించవచ్చు"</string>
<string name="guest_notification_non_ephemeral_non_first_login" msgid="8009307983766934876">"సెషన్ యాక్టివిటీని తొలగించడానికి ఇప్పుడే రీసెట్ చేయండి లేదా మీరు నిష్క్రమించేటప్పుడు యాక్టివిటీని సేవ్ చేయవచ్చు లేదా తొలగించవచ్చు"</string>
- <string name="user_image_take_photo" msgid="467512954561638530">"ఒక ఫోటో తీయండి"</string>
- <string name="user_image_choose_photo" msgid="1363820919146782908">"ఇమేజ్ను ఎంచుకోండి"</string>
<string name="user_image_photo_selector" msgid="433658323306627093">"ఫోటోను ఎంచుకోండి"</string>
<string name="failed_attempts_now_wiping_device" msgid="4016329172216428897">"చాలా ఎక్కువ తప్పు ప్రయత్నాలు చేశారు. ఈ పరికరం డేటా తొలగించబడుతుంది."</string>
<string name="failed_attempts_now_wiping_user" msgid="469060411789668050">"చాలా ఎక్కువ తప్పు ప్రయత్నాలు చేశారు. ఈ యూజర్ తొలగించబడతారు."</string>
@@ -684,8 +704,6 @@
<string name="accessibility_ethernet_disconnected" msgid="2832501530856497489">"ఈథర్నెట్ డిస్కనెక్ట్ చేయబడింది."</string>
<string name="accessibility_ethernet_connected" msgid="6175942685957461563">"ఈథర్నెట్."</string>
<string name="accessibility_no_calling" msgid="3540827068323895748">"కాలింగ్ మోడ్ ఆఫ్లో ఉంది."</string>
- <string name="avatar_picker_title" msgid="8492884172713170652">"ప్రొఫైల్ ఫోటోను ఎంచుకోండి"</string>
- <string name="default_user_icon_description" msgid="6554047177298972638">"ఆటోమేటిక్ సెట్టింగ్ యూజర్ చిహ్నం"</string>
<string name="physical_keyboard_title" msgid="4811935435315835220">"భౌతిక కీబోర్డ్"</string>
<string name="keyboard_layout_dialog_title" msgid="3927180147005616290">"కీబోర్డ్ లేఅవుట్ను ఎంచుకోండి"</string>
<string name="keyboard_layout_default_label" msgid="1997292217218546957">"ఆటోమేటిక్ సెట్టింగ్"</string>
diff --git a/packages/SettingsLib/res/values-th/strings.xml b/packages/SettingsLib/res/values-th/strings.xml
index c1506d4..55b57db 100644
--- a/packages/SettingsLib/res/values-th/strings.xml
+++ b/packages/SettingsLib/res/values-th/strings.xml
@@ -106,6 +106,28 @@
<string name="bluetooth_hearing_aid_left_active" msgid="7084887715570971441">"ใช้งานอยู่ เฉพาะข้างซ้าย"</string>
<string name="bluetooth_hearing_aid_right_active" msgid="8574683234077567230">"ใช้งานอยู่ เฉพาะข้างขวา"</string>
<string name="bluetooth_hearing_aid_left_and_right_active" msgid="407704460573163973">"ใช้งานอยู่ ข้างซ้ายและขวา"</string>
+ <!-- no translation found for bluetooth_active_media_only_battery_level (1164678961213251365) -->
+ <skip />
+ <!-- no translation found for bluetooth_active_media_only_battery_level_untethered (1345174295097854560) -->
+ <skip />
+ <!-- no translation found for bluetooth_battery_level_lea_support (8580950145907305436) -->
+ <skip />
+ <!-- no translation found for bluetooth_battery_level_untethered_lea_support (8534816721698743015) -->
+ <skip />
+ <!-- no translation found for bluetooth_battery_level_untethered_left_lea_support (6605320955858788855) -->
+ <skip />
+ <!-- no translation found for bluetooth_battery_level_untethered_right_lea_support (5717356160322149355) -->
+ <skip />
+ <!-- no translation found for bluetooth_active_media_only_no_battery_level (71106861912593126) -->
+ <skip />
+ <!-- no translation found for bluetooth_saved_device_lea_support (7231323139968285768) -->
+ <skip />
+ <!-- no translation found for bluetooth_hearing_aid_media_only_left_active (1632152540901488645) -->
+ <skip />
+ <!-- no translation found for bluetooth_hearing_aid_media_only_right_active (3854140683042617230) -->
+ <skip />
+ <!-- no translation found for bluetooth_hearing_aid_media_only_left_and_right_active (1299913413062528417) -->
+ <skip />
<string name="bluetooth_profile_a2dp" msgid="4632426382762851724">"เสียงของสื่อ"</string>
<string name="bluetooth_profile_headset" msgid="5395952236133499331">"โทรศัพท์"</string>
<string name="bluetooth_profile_opp" msgid="6692618568149493430">"การถ่ายโอนไฟล์"</string>
@@ -515,7 +537,7 @@
<string name="use_system_language_to_select_input_method_subtypes" msgid="4865195835541387040">"ใช้ภาษาของระบบ"</string>
<string name="failed_to_open_app_settings_toast" msgid="764897252657692092">"ไม่สามารถเปิดการตั้งค่าสำหรับ <xliff:g id="SPELL_APPLICATION_NAME">%1$s</xliff:g>"</string>
<string name="ime_security_warning" msgid="6547562217880551450">"วิธีการป้อนข้อมูลนี้อาจเก็บข้อความทั้งหมดที่คุณพิมพ์ รวมถึงข้อมูลส่วนบุคคล เช่น รหัสผ่านและหมายเลขบัตรเครดิต โดยมาจากแอปพลิเคชัน <xliff:g id="IME_APPLICATION_NAME">%1$s</xliff:g> ใช้วิธีการป้อนข้อมูลนี้หรือไม่"</string>
- <string name="direct_boot_unaware_dialog_message" msgid="7845398276735021548">"หมายเหตุ: หลังจากเริ่มต้นใหม่ แอปนี้จะไม่สามารถเริ่มการทำงานได้จนกว่าคุณจะปลดล็อกโทรศัพท์"</string>
+ <string name="direct_boot_unaware_dialog_message" msgid="7845398276735021548">"หมายเหตุ: หลังจากรีบูต แอปนี้จะไม่สามารถเริ่มการทำงานได้จนกว่าคุณจะปลดล็อกโทรศัพท์"</string>
<string name="ims_reg_title" msgid="8197592958123671062">"สถานะการลงทะเบียน IMS"</string>
<string name="ims_reg_status_registered" msgid="884916398194885457">"ลงทะเบียนแล้ว"</string>
<string name="ims_reg_status_not_registered" msgid="2989287366045704694">"ไม่ได้ลงทะเบียน"</string>
@@ -552,7 +574,7 @@
<string name="media_transfer_this_device_name_tablet" msgid="2975593806278422086">"แท็บเล็ตเครื่องนี้"</string>
<!-- no translation found for media_transfer_this_device_name_tv (5285685336836896535) -->
<skip />
- <string name="media_transfer_dock_speaker_device_name" msgid="2856219597113881950">"แท่นวางลำโพง"</string>
+ <string name="media_transfer_dock_speaker_device_name" msgid="2856219597113881950">"แท่นชาร์จที่มีลำโพง"</string>
<string name="media_transfer_external_device_name" msgid="2588672258721846418">"อุปกรณ์ภายนอก"</string>
<string name="media_transfer_default_device_name" msgid="4315604017399871828">"อุปกรณ์ที่เชื่อมต่อ"</string>
<string name="media_transfer_this_phone" msgid="7194341457812151531">"โทรศัพท์เครื่องนี้"</string>
@@ -643,8 +665,6 @@
<string name="guest_notification_ephemeral" msgid="7263252466950923871">"ระบบจะลบกิจกรรมทั้งหมดเมื่อออก"</string>
<string name="guest_notification_non_ephemeral" msgid="6843799963012259330">"คุณสามารถบันทึกหรือลบกิจกรรมเมื่อออก"</string>
<string name="guest_notification_non_ephemeral_non_first_login" msgid="8009307983766934876">"รีเซ็ตเพื่อลบกิจกรรมของเซสชันตอนนี้เลย หรือจะบันทึกหรือลบกิจกรรมเมื่อออกก็ได้"</string>
- <string name="user_image_take_photo" msgid="467512954561638530">"ถ่ายรูป"</string>
- <string name="user_image_choose_photo" msgid="1363820919146782908">"เลือกรูปภาพ"</string>
<string name="user_image_photo_selector" msgid="433658323306627093">"เลือกรูปภาพ"</string>
<string name="failed_attempts_now_wiping_device" msgid="4016329172216428897">"ใช้ความพยายามหลายครั้งเกินไป ระบบจะลบข้อมูลในอุปกรณ์เครื่องนี้"</string>
<string name="failed_attempts_now_wiping_user" msgid="469060411789668050">"ใช้ความพยายามหลายครั้งเกินไป ระบบจะลบผู้ใช้รายนี้"</string>
@@ -684,8 +704,6 @@
<string name="accessibility_ethernet_disconnected" msgid="2832501530856497489">"ยกเลิกการเชื่อมต่ออีเทอร์เน็ตแล้ว"</string>
<string name="accessibility_ethernet_connected" msgid="6175942685957461563">"อีเทอร์เน็ต"</string>
<string name="accessibility_no_calling" msgid="3540827068323895748">"ไม่มีการโทร"</string>
- <string name="avatar_picker_title" msgid="8492884172713170652">"เลือกรูปโปรไฟล์"</string>
- <string name="default_user_icon_description" msgid="6554047177298972638">"ไอคอนผู้ใช้เริ่มต้น"</string>
<string name="physical_keyboard_title" msgid="4811935435315835220">"แป้นพิมพ์จริง"</string>
<string name="keyboard_layout_dialog_title" msgid="3927180147005616290">"เลือกรูปแบบแป้นพิมพ์"</string>
<string name="keyboard_layout_default_label" msgid="1997292217218546957">"ค่าเริ่มต้น"</string>
diff --git a/packages/SettingsLib/res/values-tl/strings.xml b/packages/SettingsLib/res/values-tl/strings.xml
index cd4688a..c34588d 100644
--- a/packages/SettingsLib/res/values-tl/strings.xml
+++ b/packages/SettingsLib/res/values-tl/strings.xml
@@ -106,6 +106,28 @@
<string name="bluetooth_hearing_aid_left_active" msgid="7084887715570971441">"Aktibo, kaliwa lang"</string>
<string name="bluetooth_hearing_aid_right_active" msgid="8574683234077567230">"Aktibo, kanan lang"</string>
<string name="bluetooth_hearing_aid_left_and_right_active" msgid="407704460573163973">"Aktibo, kaliwa at kanan"</string>
+ <!-- no translation found for bluetooth_active_media_only_battery_level (1164678961213251365) -->
+ <skip />
+ <!-- no translation found for bluetooth_active_media_only_battery_level_untethered (1345174295097854560) -->
+ <skip />
+ <!-- no translation found for bluetooth_battery_level_lea_support (8580950145907305436) -->
+ <skip />
+ <!-- no translation found for bluetooth_battery_level_untethered_lea_support (8534816721698743015) -->
+ <skip />
+ <!-- no translation found for bluetooth_battery_level_untethered_left_lea_support (6605320955858788855) -->
+ <skip />
+ <!-- no translation found for bluetooth_battery_level_untethered_right_lea_support (5717356160322149355) -->
+ <skip />
+ <!-- no translation found for bluetooth_active_media_only_no_battery_level (71106861912593126) -->
+ <skip />
+ <!-- no translation found for bluetooth_saved_device_lea_support (7231323139968285768) -->
+ <skip />
+ <!-- no translation found for bluetooth_hearing_aid_media_only_left_active (1632152540901488645) -->
+ <skip />
+ <!-- no translation found for bluetooth_hearing_aid_media_only_right_active (3854140683042617230) -->
+ <skip />
+ <!-- no translation found for bluetooth_hearing_aid_media_only_left_and_right_active (1299913413062528417) -->
+ <skip />
<string name="bluetooth_profile_a2dp" msgid="4632426382762851724">"Audio ng media"</string>
<string name="bluetooth_profile_headset" msgid="5395952236133499331">"Mga tawag sa telepono"</string>
<string name="bluetooth_profile_opp" msgid="6692618568149493430">"Paglilipat ng file"</string>
@@ -643,8 +665,6 @@
<string name="guest_notification_ephemeral" msgid="7263252466950923871">"Made-delete ang lahat ng aktibidad kapag umalis"</string>
<string name="guest_notification_non_ephemeral" msgid="6843799963012259330">"Puwede mong i-save o i-delete ang aktibidad pagkaalis"</string>
<string name="guest_notification_non_ephemeral_non_first_login" msgid="8009307983766934876">"Mag-reset para mag-delete ng aktibidad ng session ngayon, o puwede kang mag-save o mag-delete ng aktibidad pagkaalis"</string>
- <string name="user_image_take_photo" msgid="467512954561638530">"Kumuha ng larawan"</string>
- <string name="user_image_choose_photo" msgid="1363820919146782908">"Pumili ng larawan"</string>
<string name="user_image_photo_selector" msgid="433658323306627093">"Pumili ng larawan"</string>
<string name="failed_attempts_now_wiping_device" msgid="4016329172216428897">"Masyadong maraming maling pagsubok. Made-delete ang data ng device na ito."</string>
<string name="failed_attempts_now_wiping_user" msgid="469060411789668050">"Masyadong maraming maling pagsubok. Made-delete ang user na ito."</string>
@@ -684,8 +704,6 @@
<string name="accessibility_ethernet_disconnected" msgid="2832501530856497489">"Nadiskonekta ang Ethernet."</string>
<string name="accessibility_ethernet_connected" msgid="6175942685957461563">"Ethernet."</string>
<string name="accessibility_no_calling" msgid="3540827068323895748">"Hindi makakatawag."</string>
- <string name="avatar_picker_title" msgid="8492884172713170652">"Pumili ng larawan sa profile"</string>
- <string name="default_user_icon_description" msgid="6554047177298972638">"Icon ng default na user"</string>
<string name="physical_keyboard_title" msgid="4811935435315835220">"Pisikal na keyboard"</string>
<string name="keyboard_layout_dialog_title" msgid="3927180147005616290">"Pumili ng layout ng keyboard"</string>
<string name="keyboard_layout_default_label" msgid="1997292217218546957">"Default"</string>
diff --git a/packages/SettingsLib/res/values-tr/strings.xml b/packages/SettingsLib/res/values-tr/strings.xml
index c4a72b3..4315241 100644
--- a/packages/SettingsLib/res/values-tr/strings.xml
+++ b/packages/SettingsLib/res/values-tr/strings.xml
@@ -106,6 +106,28 @@
<string name="bluetooth_hearing_aid_left_active" msgid="7084887715570971441">"Yalnızca sol tarafta etkin"</string>
<string name="bluetooth_hearing_aid_right_active" msgid="8574683234077567230">"Yalnızca sağ tarafta etkin"</string>
<string name="bluetooth_hearing_aid_left_and_right_active" msgid="407704460573163973">"Sol ve sağ tarafta etkin"</string>
+ <!-- no translation found for bluetooth_active_media_only_battery_level (1164678961213251365) -->
+ <skip />
+ <!-- no translation found for bluetooth_active_media_only_battery_level_untethered (1345174295097854560) -->
+ <skip />
+ <!-- no translation found for bluetooth_battery_level_lea_support (8580950145907305436) -->
+ <skip />
+ <!-- no translation found for bluetooth_battery_level_untethered_lea_support (8534816721698743015) -->
+ <skip />
+ <!-- no translation found for bluetooth_battery_level_untethered_left_lea_support (6605320955858788855) -->
+ <skip />
+ <!-- no translation found for bluetooth_battery_level_untethered_right_lea_support (5717356160322149355) -->
+ <skip />
+ <!-- no translation found for bluetooth_active_media_only_no_battery_level (71106861912593126) -->
+ <skip />
+ <!-- no translation found for bluetooth_saved_device_lea_support (7231323139968285768) -->
+ <skip />
+ <!-- no translation found for bluetooth_hearing_aid_media_only_left_active (1632152540901488645) -->
+ <skip />
+ <!-- no translation found for bluetooth_hearing_aid_media_only_right_active (3854140683042617230) -->
+ <skip />
+ <!-- no translation found for bluetooth_hearing_aid_media_only_left_and_right_active (1299913413062528417) -->
+ <skip />
<string name="bluetooth_profile_a2dp" msgid="4632426382762851724">"Medya sesi"</string>
<string name="bluetooth_profile_headset" msgid="5395952236133499331">"Telefon aramaları"</string>
<string name="bluetooth_profile_opp" msgid="6692618568149493430">"Dosya aktarımı"</string>
@@ -481,7 +503,7 @@
<string name="battery_info_status_charging_fast" msgid="8027559755902954885">"Hızlı şarj oluyor"</string>
<string name="battery_info_status_charging_slow" msgid="3190803837168962319">"Yavaş şarj oluyor"</string>
<string name="battery_info_status_charging_wireless" msgid="8924722966861282197">"Kablosuz şarj oluyor"</string>
- <string name="battery_info_status_charging_dock" msgid="8573274094093364791">"Şarj Etme"</string>
+ <string name="battery_info_status_charging_dock" msgid="8573274094093364791">"Şarj oluyor"</string>
<string name="battery_info_status_discharging" msgid="6962689305413556485">"Şarj olmuyor"</string>
<string name="battery_info_status_not_charging" msgid="1103084691314264664">"Bağlı ancak şarj olmuyor"</string>
<string name="battery_info_status_full" msgid="1339002294876531312">"Şarj oldu"</string>
@@ -643,8 +665,6 @@
<string name="guest_notification_ephemeral" msgid="7263252466950923871">"Çıkış yapıldığında tüm etkinlikler silinir"</string>
<string name="guest_notification_non_ephemeral" msgid="6843799963012259330">"Etkinliklerinizi çıkarken kaydedebilir veya silebilirsiniz"</string>
<string name="guest_notification_non_ephemeral_non_first_login" msgid="8009307983766934876">"Oturum etkinliklerini silmek için sıfırlayabilir ya da çıkarken kaydedebilir veya silebilirsiniz"</string>
- <string name="user_image_take_photo" msgid="467512954561638530">"Fotoğraf çek"</string>
- <string name="user_image_choose_photo" msgid="1363820919146782908">"Resim seç"</string>
<string name="user_image_photo_selector" msgid="433658323306627093">"Fotoğraf seç"</string>
<string name="failed_attempts_now_wiping_device" msgid="4016329172216428897">"Çok fazla sayıda hatalı deneme yapıldı. Bu cihazın verileri silinecek."</string>
<string name="failed_attempts_now_wiping_user" msgid="469060411789668050">"Çok fazla sayıda hatalı deneme yapıldı. Bu kullanıcı silinecek."</string>
@@ -684,8 +704,6 @@
<string name="accessibility_ethernet_disconnected" msgid="2832501530856497489">"Ethernet bağlantısı kesildi."</string>
<string name="accessibility_ethernet_connected" msgid="6175942685957461563">"Ethernet."</string>
<string name="accessibility_no_calling" msgid="3540827068323895748">"Çağrı yok."</string>
- <string name="avatar_picker_title" msgid="8492884172713170652">"Profil fotoğrafı seçin"</string>
- <string name="default_user_icon_description" msgid="6554047177298972638">"Varsayılan kullanıcı simgesi"</string>
<string name="physical_keyboard_title" msgid="4811935435315835220">"Fiziksel klavye"</string>
<string name="keyboard_layout_dialog_title" msgid="3927180147005616290">"Klavye düzenini seçin"</string>
<string name="keyboard_layout_default_label" msgid="1997292217218546957">"Varsayılan"</string>
diff --git a/packages/SettingsLib/res/values-uk/strings.xml b/packages/SettingsLib/res/values-uk/strings.xml
index 7e56c5d..ac9edc5 100644
--- a/packages/SettingsLib/res/values-uk/strings.xml
+++ b/packages/SettingsLib/res/values-uk/strings.xml
@@ -106,6 +106,28 @@
<string name="bluetooth_hearing_aid_left_active" msgid="7084887715570971441">"Активовано, лише лівий"</string>
<string name="bluetooth_hearing_aid_right_active" msgid="8574683234077567230">"Активовано, лише правий"</string>
<string name="bluetooth_hearing_aid_left_and_right_active" msgid="407704460573163973">"Активовано, лівий і правий"</string>
+ <!-- no translation found for bluetooth_active_media_only_battery_level (1164678961213251365) -->
+ <skip />
+ <!-- no translation found for bluetooth_active_media_only_battery_level_untethered (1345174295097854560) -->
+ <skip />
+ <!-- no translation found for bluetooth_battery_level_lea_support (8580950145907305436) -->
+ <skip />
+ <!-- no translation found for bluetooth_battery_level_untethered_lea_support (8534816721698743015) -->
+ <skip />
+ <!-- no translation found for bluetooth_battery_level_untethered_left_lea_support (6605320955858788855) -->
+ <skip />
+ <!-- no translation found for bluetooth_battery_level_untethered_right_lea_support (5717356160322149355) -->
+ <skip />
+ <!-- no translation found for bluetooth_active_media_only_no_battery_level (71106861912593126) -->
+ <skip />
+ <!-- no translation found for bluetooth_saved_device_lea_support (7231323139968285768) -->
+ <skip />
+ <!-- no translation found for bluetooth_hearing_aid_media_only_left_active (1632152540901488645) -->
+ <skip />
+ <!-- no translation found for bluetooth_hearing_aid_media_only_right_active (3854140683042617230) -->
+ <skip />
+ <!-- no translation found for bluetooth_hearing_aid_media_only_left_and_right_active (1299913413062528417) -->
+ <skip />
<string name="bluetooth_profile_a2dp" msgid="4632426382762851724">"Звук медіафайлів"</string>
<string name="bluetooth_profile_headset" msgid="5395952236133499331">"Телефонні дзвінки"</string>
<string name="bluetooth_profile_opp" msgid="6692618568149493430">"Передавання файлів"</string>
@@ -643,8 +665,6 @@
<string name="guest_notification_ephemeral" msgid="7263252466950923871">"Під час виходу буде видалено історію всіх дій"</string>
<string name="guest_notification_non_ephemeral" msgid="6843799963012259330">"Під час виходу можна зберегти або видалити ваші дії"</string>
<string name="guest_notification_non_ephemeral_non_first_login" msgid="8009307983766934876">"Можна скинути історію сеансу просто зараз або видалити чи зберегти її під час виходу."</string>
- <string name="user_image_take_photo" msgid="467512954561638530">"Зробити фотографію"</string>
- <string name="user_image_choose_photo" msgid="1363820919146782908">"Вибрати зображення"</string>
<string name="user_image_photo_selector" msgid="433658323306627093">"Вибрати фотографію"</string>
<string name="failed_attempts_now_wiping_device" msgid="4016329172216428897">"Забагато невдалих спроб. Дані на цьому пристрої буде видалено."</string>
<string name="failed_attempts_now_wiping_user" msgid="469060411789668050">"Забагато невдалих спроб. Цього користувача буде видалено."</string>
@@ -684,8 +704,6 @@
<string name="accessibility_ethernet_disconnected" msgid="2832501530856497489">"Ethernet відключено."</string>
<string name="accessibility_ethernet_connected" msgid="6175942685957461563">"Ethernet."</string>
<string name="accessibility_no_calling" msgid="3540827068323895748">"Виклики недоступні."</string>
- <string name="avatar_picker_title" msgid="8492884172713170652">"Виберіть зображення профілю"</string>
- <string name="default_user_icon_description" msgid="6554047177298972638">"Значок користувача за умовчанням"</string>
<string name="physical_keyboard_title" msgid="4811935435315835220">"Фізична клавіатура"</string>
<string name="keyboard_layout_dialog_title" msgid="3927180147005616290">"Вибрати розкладку клавіатури"</string>
<string name="keyboard_layout_default_label" msgid="1997292217218546957">"За умовчанням"</string>
diff --git a/packages/SettingsLib/res/values-ur/strings.xml b/packages/SettingsLib/res/values-ur/strings.xml
index 0b2cbdd..d2fc32a 100644
--- a/packages/SettingsLib/res/values-ur/strings.xml
+++ b/packages/SettingsLib/res/values-ur/strings.xml
@@ -106,6 +106,28 @@
<string name="bluetooth_hearing_aid_left_active" msgid="7084887715570971441">"فعال، صرف بائیں طرف"</string>
<string name="bluetooth_hearing_aid_right_active" msgid="8574683234077567230">"فعال، صرف دائیں طرف"</string>
<string name="bluetooth_hearing_aid_left_and_right_active" msgid="407704460573163973">"فعال، صرف بائیں اور دائیں طرف"</string>
+ <!-- no translation found for bluetooth_active_media_only_battery_level (1164678961213251365) -->
+ <skip />
+ <!-- no translation found for bluetooth_active_media_only_battery_level_untethered (1345174295097854560) -->
+ <skip />
+ <!-- no translation found for bluetooth_battery_level_lea_support (8580950145907305436) -->
+ <skip />
+ <!-- no translation found for bluetooth_battery_level_untethered_lea_support (8534816721698743015) -->
+ <skip />
+ <!-- no translation found for bluetooth_battery_level_untethered_left_lea_support (6605320955858788855) -->
+ <skip />
+ <!-- no translation found for bluetooth_battery_level_untethered_right_lea_support (5717356160322149355) -->
+ <skip />
+ <!-- no translation found for bluetooth_active_media_only_no_battery_level (71106861912593126) -->
+ <skip />
+ <!-- no translation found for bluetooth_saved_device_lea_support (7231323139968285768) -->
+ <skip />
+ <!-- no translation found for bluetooth_hearing_aid_media_only_left_active (1632152540901488645) -->
+ <skip />
+ <!-- no translation found for bluetooth_hearing_aid_media_only_right_active (3854140683042617230) -->
+ <skip />
+ <!-- no translation found for bluetooth_hearing_aid_media_only_left_and_right_active (1299913413062528417) -->
+ <skip />
<string name="bluetooth_profile_a2dp" msgid="4632426382762851724">"میڈيا آڈیو"</string>
<string name="bluetooth_profile_headset" msgid="5395952236133499331">"فون کالز"</string>
<string name="bluetooth_profile_opp" msgid="6692618568149493430">"فائل کی منتقلی"</string>
@@ -643,8 +665,6 @@
<string name="guest_notification_ephemeral" msgid="7263252466950923871">"باہر نکلنے پر تمام سرگرمیاں حذف کر دی جائیں گی"</string>
<string name="guest_notification_non_ephemeral" msgid="6843799963012259330">"باہر نکلنے پر آپ اپنی سرگرمی کو محفوظ یا حذف کر سکتے ہیں"</string>
<string name="guest_notification_non_ephemeral_non_first_login" msgid="8009307983766934876">"سیشن کی سرگرمی کو ابھی حذف کرنے کے لیے ری سیٹ کریں، یا باہر نکلنے پر آپ اپنی سرگرمی کو محفوظ یا حذف کر سکتے ہیں"</string>
- <string name="user_image_take_photo" msgid="467512954561638530">"ایک تصویر لیں"</string>
- <string name="user_image_choose_photo" msgid="1363820919146782908">"ایک تصویر منتخب کریں"</string>
<string name="user_image_photo_selector" msgid="433658323306627093">"تصویر منتخب کریں"</string>
<string name="failed_attempts_now_wiping_device" msgid="4016329172216428897">"بہت زیادہ غلط کوششیں۔ اس آلے کا ڈیٹا حذف کر دیا جائے گا۔"</string>
<string name="failed_attempts_now_wiping_user" msgid="469060411789668050">"بہت زیادہ غلط کوششیں۔ اس صارف کو حذف کر دیا جائے گا۔"</string>
@@ -684,8 +704,6 @@
<string name="accessibility_ethernet_disconnected" msgid="2832501530856497489">"ایتھرنیٹ منقطع ہے۔"</string>
<string name="accessibility_ethernet_connected" msgid="6175942685957461563">"ایتھرنیٹ۔"</string>
<string name="accessibility_no_calling" msgid="3540827068323895748">"کوئی کالنگ نہیں ہے۔"</string>
- <string name="avatar_picker_title" msgid="8492884172713170652">"پروفائل کی تصویر منتخب کریں"</string>
- <string name="default_user_icon_description" msgid="6554047177298972638">"ڈیفالٹ صارف کا آئیکن"</string>
<string name="physical_keyboard_title" msgid="4811935435315835220">"فزیکل کی بورڈ"</string>
<string name="keyboard_layout_dialog_title" msgid="3927180147005616290">"کی بورڈ لے آؤٹ منتخب کریں"</string>
<string name="keyboard_layout_default_label" msgid="1997292217218546957">"ڈیفالٹ"</string>
diff --git a/packages/SettingsLib/res/values-uz/strings.xml b/packages/SettingsLib/res/values-uz/strings.xml
index 9223910..3c8e249 100644
--- a/packages/SettingsLib/res/values-uz/strings.xml
+++ b/packages/SettingsLib/res/values-uz/strings.xml
@@ -106,6 +106,28 @@
<string name="bluetooth_hearing_aid_left_active" msgid="7084887715570971441">"Faol, faqat chap"</string>
<string name="bluetooth_hearing_aid_right_active" msgid="8574683234077567230">"Faol, faqat oʻng"</string>
<string name="bluetooth_hearing_aid_left_and_right_active" msgid="407704460573163973">"Faol, chap va oʻng"</string>
+ <!-- no translation found for bluetooth_active_media_only_battery_level (1164678961213251365) -->
+ <skip />
+ <!-- no translation found for bluetooth_active_media_only_battery_level_untethered (1345174295097854560) -->
+ <skip />
+ <!-- no translation found for bluetooth_battery_level_lea_support (8580950145907305436) -->
+ <skip />
+ <!-- no translation found for bluetooth_battery_level_untethered_lea_support (8534816721698743015) -->
+ <skip />
+ <!-- no translation found for bluetooth_battery_level_untethered_left_lea_support (6605320955858788855) -->
+ <skip />
+ <!-- no translation found for bluetooth_battery_level_untethered_right_lea_support (5717356160322149355) -->
+ <skip />
+ <!-- no translation found for bluetooth_active_media_only_no_battery_level (71106861912593126) -->
+ <skip />
+ <!-- no translation found for bluetooth_saved_device_lea_support (7231323139968285768) -->
+ <skip />
+ <!-- no translation found for bluetooth_hearing_aid_media_only_left_active (1632152540901488645) -->
+ <skip />
+ <!-- no translation found for bluetooth_hearing_aid_media_only_right_active (3854140683042617230) -->
+ <skip />
+ <!-- no translation found for bluetooth_hearing_aid_media_only_left_and_right_active (1299913413062528417) -->
+ <skip />
<string name="bluetooth_profile_a2dp" msgid="4632426382762851724">"A2DP profili"</string>
<string name="bluetooth_profile_headset" msgid="5395952236133499331">"Telefon chaqiruvlari"</string>
<string name="bluetooth_profile_opp" msgid="6692618568149493430">"Fayl uzatish"</string>
@@ -643,8 +665,6 @@
<string name="guest_notification_ephemeral" msgid="7263252466950923871">"Chiqishda faolliklar tarixi tozalab tashlanadi"</string>
<string name="guest_notification_non_ephemeral" msgid="6843799963012259330">"Chiqish vaqtida faoliyatni saqlash yoki tozalash mumkin"</string>
<string name="guest_notification_non_ephemeral_non_first_login" msgid="8009307983766934876">"Faoliyat hozir tozalanib tiklanishi yoki chiqish vaqtida saqlanishi yoki tozalanishi mumkin"</string>
- <string name="user_image_take_photo" msgid="467512954561638530">"Suratga olish"</string>
- <string name="user_image_choose_photo" msgid="1363820919146782908">"Rasm tanlash"</string>
<string name="user_image_photo_selector" msgid="433658323306627093">"Surat tanlash"</string>
<string name="failed_attempts_now_wiping_device" msgid="4016329172216428897">"Juda koʻp marta muvaffaqiyatsiz urinishlar amalga oshirildi. Bu qurilmadagi maʼlumotlar o‘chirib tashlanadi."</string>
<string name="failed_attempts_now_wiping_user" msgid="469060411789668050">"Juda koʻp marta muvaffaqiyatsiz urindingiz. Bu foydalanuvchi oʻchirib tashlanadi."</string>
@@ -684,8 +704,6 @@
<string name="accessibility_ethernet_disconnected" msgid="2832501530856497489">"Qurilma Ethernet tarmog‘idan uzildi."</string>
<string name="accessibility_ethernet_connected" msgid="6175942685957461563">"Ethernet."</string>
<string name="accessibility_no_calling" msgid="3540827068323895748">"Chaqiruv imkonsiz."</string>
- <string name="avatar_picker_title" msgid="8492884172713170652">"Profil rasmini tanlash"</string>
- <string name="default_user_icon_description" msgid="6554047177298972638">"Foydalanuvchining standart belgisi"</string>
<string name="physical_keyboard_title" msgid="4811935435315835220">"Tashqi klaviatura"</string>
<string name="keyboard_layout_dialog_title" msgid="3927180147005616290">"Klaviatura sxemasini tanlang"</string>
<string name="keyboard_layout_default_label" msgid="1997292217218546957">"Asosiy"</string>
diff --git a/packages/SettingsLib/res/values-vi/strings.xml b/packages/SettingsLib/res/values-vi/strings.xml
index ce02c50..b3d70cc 100644
--- a/packages/SettingsLib/res/values-vi/strings.xml
+++ b/packages/SettingsLib/res/values-vi/strings.xml
@@ -106,6 +106,28 @@
<string name="bluetooth_hearing_aid_left_active" msgid="7084887715570971441">"Đang hoạt động, chỉ tai bên trái"</string>
<string name="bluetooth_hearing_aid_right_active" msgid="8574683234077567230">"Đang hoạt động, chỉ tai phải"</string>
<string name="bluetooth_hearing_aid_left_and_right_active" msgid="407704460573163973">"Đang hoạt động, cả tai phải và tai trái"</string>
+ <!-- no translation found for bluetooth_active_media_only_battery_level (1164678961213251365) -->
+ <skip />
+ <!-- no translation found for bluetooth_active_media_only_battery_level_untethered (1345174295097854560) -->
+ <skip />
+ <!-- no translation found for bluetooth_battery_level_lea_support (8580950145907305436) -->
+ <skip />
+ <!-- no translation found for bluetooth_battery_level_untethered_lea_support (8534816721698743015) -->
+ <skip />
+ <!-- no translation found for bluetooth_battery_level_untethered_left_lea_support (6605320955858788855) -->
+ <skip />
+ <!-- no translation found for bluetooth_battery_level_untethered_right_lea_support (5717356160322149355) -->
+ <skip />
+ <!-- no translation found for bluetooth_active_media_only_no_battery_level (71106861912593126) -->
+ <skip />
+ <!-- no translation found for bluetooth_saved_device_lea_support (7231323139968285768) -->
+ <skip />
+ <!-- no translation found for bluetooth_hearing_aid_media_only_left_active (1632152540901488645) -->
+ <skip />
+ <!-- no translation found for bluetooth_hearing_aid_media_only_right_active (3854140683042617230) -->
+ <skip />
+ <!-- no translation found for bluetooth_hearing_aid_media_only_left_and_right_active (1299913413062528417) -->
+ <skip />
<string name="bluetooth_profile_a2dp" msgid="4632426382762851724">"Âm thanh nội dung nghe nhìn"</string>
<string name="bluetooth_profile_headset" msgid="5395952236133499331">"Cuộc gọi điện thoại"</string>
<string name="bluetooth_profile_opp" msgid="6692618568149493430">"Chuyển tệp"</string>
@@ -643,8 +665,6 @@
<string name="guest_notification_ephemeral" msgid="7263252466950923871">"Mọi hoạt động sẽ bị xoá khi thoát"</string>
<string name="guest_notification_non_ephemeral" msgid="6843799963012259330">"Bạn có thể lưu hoặc xoá hoạt động của mình khi thoát"</string>
<string name="guest_notification_non_ephemeral_non_first_login" msgid="8009307983766934876">"Đặt lại để xoá hoạt động trong phiên ngay bây giờ, hoặc bạn có thể lưu hoặc xoá hoạt động khi thoát"</string>
- <string name="user_image_take_photo" msgid="467512954561638530">"Chụp ảnh"</string>
- <string name="user_image_choose_photo" msgid="1363820919146782908">"Chọn một hình ảnh"</string>
<string name="user_image_photo_selector" msgid="433658323306627093">"Chọn ảnh"</string>
<string name="failed_attempts_now_wiping_device" msgid="4016329172216428897">"Quá nhiều lần thử không chính xác. Dữ liệu trên thiết bị này sẽ bị xoá."</string>
<string name="failed_attempts_now_wiping_user" msgid="469060411789668050">"Quá nhiều lần thử không chính xác. Người dùng này sẽ bị xoá."</string>
@@ -684,8 +704,6 @@
<string name="accessibility_ethernet_disconnected" msgid="2832501530856497489">"Đã ngắt kết nối Ethernet."</string>
<string name="accessibility_ethernet_connected" msgid="6175942685957461563">"Ethernet."</string>
<string name="accessibility_no_calling" msgid="3540827068323895748">"Không thể gọi điện."</string>
- <string name="avatar_picker_title" msgid="8492884172713170652">"Chọn một ảnh hồ sơ"</string>
- <string name="default_user_icon_description" msgid="6554047177298972638">"Biểu tượng người dùng mặc định"</string>
<string name="physical_keyboard_title" msgid="4811935435315835220">"Bàn phím thực"</string>
<string name="keyboard_layout_dialog_title" msgid="3927180147005616290">"Chọn bố cục bàn phím"</string>
<string name="keyboard_layout_default_label" msgid="1997292217218546957">"Mặc định"</string>
diff --git a/packages/SettingsLib/res/values-zh-rCN/strings.xml b/packages/SettingsLib/res/values-zh-rCN/strings.xml
index 5aad70c..6a9a18c 100644
--- a/packages/SettingsLib/res/values-zh-rCN/strings.xml
+++ b/packages/SettingsLib/res/values-zh-rCN/strings.xml
@@ -106,6 +106,28 @@
<string name="bluetooth_hearing_aid_left_active" msgid="7084887715570971441">"使用中,仅左耳助听器"</string>
<string name="bluetooth_hearing_aid_right_active" msgid="8574683234077567230">"使用中,仅右耳助听器"</string>
<string name="bluetooth_hearing_aid_left_and_right_active" msgid="407704460573163973">"使用中,左右耳助听器"</string>
+ <!-- no translation found for bluetooth_active_media_only_battery_level (1164678961213251365) -->
+ <skip />
+ <!-- no translation found for bluetooth_active_media_only_battery_level_untethered (1345174295097854560) -->
+ <skip />
+ <!-- no translation found for bluetooth_battery_level_lea_support (8580950145907305436) -->
+ <skip />
+ <!-- no translation found for bluetooth_battery_level_untethered_lea_support (8534816721698743015) -->
+ <skip />
+ <!-- no translation found for bluetooth_battery_level_untethered_left_lea_support (6605320955858788855) -->
+ <skip />
+ <!-- no translation found for bluetooth_battery_level_untethered_right_lea_support (5717356160322149355) -->
+ <skip />
+ <!-- no translation found for bluetooth_active_media_only_no_battery_level (71106861912593126) -->
+ <skip />
+ <!-- no translation found for bluetooth_saved_device_lea_support (7231323139968285768) -->
+ <skip />
+ <!-- no translation found for bluetooth_hearing_aid_media_only_left_active (1632152540901488645) -->
+ <skip />
+ <!-- no translation found for bluetooth_hearing_aid_media_only_right_active (3854140683042617230) -->
+ <skip />
+ <!-- no translation found for bluetooth_hearing_aid_media_only_left_and_right_active (1299913413062528417) -->
+ <skip />
<string name="bluetooth_profile_a2dp" msgid="4632426382762851724">"媒体音频"</string>
<string name="bluetooth_profile_headset" msgid="5395952236133499331">"通话"</string>
<string name="bluetooth_profile_opp" msgid="6692618568149493430">"文件传输"</string>
@@ -643,8 +665,6 @@
<string name="guest_notification_ephemeral" msgid="7263252466950923871">"退出时所有活动记录都将被删除"</string>
<string name="guest_notification_non_ephemeral" msgid="6843799963012259330">"您可以在退出时保存或删除您的活动"</string>
<string name="guest_notification_non_ephemeral_non_first_login" msgid="8009307983766934876">"请立即重置以删除会话活动记录;或者,您也可以在退出时保存或删除活动记录"</string>
- <string name="user_image_take_photo" msgid="467512954561638530">"拍摄照片"</string>
- <string name="user_image_choose_photo" msgid="1363820919146782908">"选择图片"</string>
<string name="user_image_photo_selector" msgid="433658323306627093">"选择照片"</string>
<string name="failed_attempts_now_wiping_device" msgid="4016329172216428897">"错误次数过多。系统将删除此设备上的数据。"</string>
<string name="failed_attempts_now_wiping_user" msgid="469060411789668050">"错误次数过多。系统将删除此用户。"</string>
@@ -684,8 +704,6 @@
<string name="accessibility_ethernet_disconnected" msgid="2832501530856497489">"以太网已断开连接。"</string>
<string name="accessibility_ethernet_connected" msgid="6175942685957461563">"以太网。"</string>
<string name="accessibility_no_calling" msgid="3540827068323895748">"不启用通话。"</string>
- <string name="avatar_picker_title" msgid="8492884172713170652">"选择个人资料照片"</string>
- <string name="default_user_icon_description" msgid="6554047177298972638">"默认用户图标"</string>
<string name="physical_keyboard_title" msgid="4811935435315835220">"实体键盘"</string>
<string name="keyboard_layout_dialog_title" msgid="3927180147005616290">"选择键盘布局"</string>
<string name="keyboard_layout_default_label" msgid="1997292217218546957">"默认"</string>
diff --git a/packages/SettingsLib/res/values-zh-rHK/strings.xml b/packages/SettingsLib/res/values-zh-rHK/strings.xml
index b039f25..ecdfa62 100644
--- a/packages/SettingsLib/res/values-zh-rHK/strings.xml
+++ b/packages/SettingsLib/res/values-zh-rHK/strings.xml
@@ -106,6 +106,28 @@
<string name="bluetooth_hearing_aid_left_active" msgid="7084887715570971441">"使用中,僅左耳"</string>
<string name="bluetooth_hearing_aid_right_active" msgid="8574683234077567230">"使用中,僅右耳"</string>
<string name="bluetooth_hearing_aid_left_and_right_active" msgid="407704460573163973">"使用中,左右耳"</string>
+ <!-- no translation found for bluetooth_active_media_only_battery_level (1164678961213251365) -->
+ <skip />
+ <!-- no translation found for bluetooth_active_media_only_battery_level_untethered (1345174295097854560) -->
+ <skip />
+ <!-- no translation found for bluetooth_battery_level_lea_support (8580950145907305436) -->
+ <skip />
+ <!-- no translation found for bluetooth_battery_level_untethered_lea_support (8534816721698743015) -->
+ <skip />
+ <!-- no translation found for bluetooth_battery_level_untethered_left_lea_support (6605320955858788855) -->
+ <skip />
+ <!-- no translation found for bluetooth_battery_level_untethered_right_lea_support (5717356160322149355) -->
+ <skip />
+ <!-- no translation found for bluetooth_active_media_only_no_battery_level (71106861912593126) -->
+ <skip />
+ <!-- no translation found for bluetooth_saved_device_lea_support (7231323139968285768) -->
+ <skip />
+ <!-- no translation found for bluetooth_hearing_aid_media_only_left_active (1632152540901488645) -->
+ <skip />
+ <!-- no translation found for bluetooth_hearing_aid_media_only_right_active (3854140683042617230) -->
+ <skip />
+ <!-- no translation found for bluetooth_hearing_aid_media_only_left_and_right_active (1299913413062528417) -->
+ <skip />
<string name="bluetooth_profile_a2dp" msgid="4632426382762851724">"媒體音效"</string>
<string name="bluetooth_profile_headset" msgid="5395952236133499331">"通話"</string>
<string name="bluetooth_profile_opp" msgid="6692618568149493430">"檔案傳輸"</string>
@@ -643,8 +665,6 @@
<string name="guest_notification_ephemeral" msgid="7263252466950923871">"結束時將會刪除所有活動"</string>
<string name="guest_notification_non_ephemeral" msgid="6843799963012259330">"你可以在結束時儲存或刪除活動"</string>
<string name="guest_notification_non_ephemeral_non_first_login" msgid="8009307983766934876">"重設可立即刪除工作階段活動,或者你可以在結束時儲存或刪除活動"</string>
- <string name="user_image_take_photo" msgid="467512954561638530">"拍照"</string>
- <string name="user_image_choose_photo" msgid="1363820919146782908">"選擇圖片"</string>
<string name="user_image_photo_selector" msgid="433658323306627093">"揀相"</string>
<string name="failed_attempts_now_wiping_device" msgid="4016329172216428897">"錯誤次數太多,系統將會刪除此裝置上的資料。"</string>
<string name="failed_attempts_now_wiping_user" msgid="469060411789668050">"錯誤次數太多,系統將會刪除此使用者。"</string>
@@ -684,8 +704,6 @@
<string name="accessibility_ethernet_disconnected" msgid="2832501530856497489">"以太網連接中斷。"</string>
<string name="accessibility_ethernet_connected" msgid="6175942685957461563">"以太網絡。"</string>
<string name="accessibility_no_calling" msgid="3540827068323895748">"不啟用通話。"</string>
- <string name="avatar_picker_title" msgid="8492884172713170652">"選擇個人檔案相片"</string>
- <string name="default_user_icon_description" msgid="6554047177298972638">"預設使用者圖示"</string>
<string name="physical_keyboard_title" msgid="4811935435315835220">"實體鍵盤"</string>
<string name="keyboard_layout_dialog_title" msgid="3927180147005616290">"選擇鍵盤配置"</string>
<string name="keyboard_layout_default_label" msgid="1997292217218546957">"預設"</string>
diff --git a/packages/SettingsLib/res/values-zh-rTW/strings.xml b/packages/SettingsLib/res/values-zh-rTW/strings.xml
index b9bbedd..99fe41e 100644
--- a/packages/SettingsLib/res/values-zh-rTW/strings.xml
+++ b/packages/SettingsLib/res/values-zh-rTW/strings.xml
@@ -106,6 +106,28 @@
<string name="bluetooth_hearing_aid_left_active" msgid="7084887715570971441">"使用中,僅左耳"</string>
<string name="bluetooth_hearing_aid_right_active" msgid="8574683234077567230">"使用中,僅右耳"</string>
<string name="bluetooth_hearing_aid_left_and_right_active" msgid="407704460573163973">"使用中,左右耳"</string>
+ <!-- no translation found for bluetooth_active_media_only_battery_level (1164678961213251365) -->
+ <skip />
+ <!-- no translation found for bluetooth_active_media_only_battery_level_untethered (1345174295097854560) -->
+ <skip />
+ <!-- no translation found for bluetooth_battery_level_lea_support (8580950145907305436) -->
+ <skip />
+ <!-- no translation found for bluetooth_battery_level_untethered_lea_support (8534816721698743015) -->
+ <skip />
+ <!-- no translation found for bluetooth_battery_level_untethered_left_lea_support (6605320955858788855) -->
+ <skip />
+ <!-- no translation found for bluetooth_battery_level_untethered_right_lea_support (5717356160322149355) -->
+ <skip />
+ <!-- no translation found for bluetooth_active_media_only_no_battery_level (71106861912593126) -->
+ <skip />
+ <!-- no translation found for bluetooth_saved_device_lea_support (7231323139968285768) -->
+ <skip />
+ <!-- no translation found for bluetooth_hearing_aid_media_only_left_active (1632152540901488645) -->
+ <skip />
+ <!-- no translation found for bluetooth_hearing_aid_media_only_right_active (3854140683042617230) -->
+ <skip />
+ <!-- no translation found for bluetooth_hearing_aid_media_only_left_and_right_active (1299913413062528417) -->
+ <skip />
<string name="bluetooth_profile_a2dp" msgid="4632426382762851724">"媒體音訊"</string>
<string name="bluetooth_profile_headset" msgid="5395952236133499331">"通話"</string>
<string name="bluetooth_profile_opp" msgid="6692618568149493430">"檔案傳輸"</string>
@@ -616,7 +638,7 @@
<string name="add_user_failed" msgid="4809887794313944872">"無法建立新的使用者"</string>
<string name="add_guest_failed" msgid="8074548434469843443">"無法建立新訪客"</string>
<string name="user_nickname" msgid="262624187455825083">"暱稱"</string>
- <string name="edit_user_info_message" msgid="6677556031419002895">"使用這部裝置的所有人都能看到你選擇的名稱和相片。"</string>
+ <string name="edit_user_info_message" msgid="6677556031419002895">"這部裝置的所有使用者都能看到你選擇的名稱和相片。"</string>
<string name="user_add_user" msgid="7876449291500212468">"新增使用者"</string>
<string name="guest_new_guest" msgid="3482026122932643557">"新增訪客"</string>
<string name="guest_exit_guest" msgid="5908239569510734136">"移除訪客"</string>
@@ -643,8 +665,6 @@
<string name="guest_notification_ephemeral" msgid="7263252466950923871">"結束時將刪除所有活動"</string>
<string name="guest_notification_non_ephemeral" msgid="6843799963012259330">"你可以在結束時儲存或刪除活動"</string>
<string name="guest_notification_non_ephemeral_non_first_login" msgid="8009307983766934876">"重設即可立即刪除工作階段活動,你也可以在結束時儲存或刪除活動"</string>
- <string name="user_image_take_photo" msgid="467512954561638530">"拍照"</string>
- <string name="user_image_choose_photo" msgid="1363820919146782908">"選擇圖片"</string>
<string name="user_image_photo_selector" msgid="433658323306627093">"選取相片"</string>
<string name="failed_attempts_now_wiping_device" msgid="4016329172216428897">"錯誤次數過多,系統將刪除這部裝置中的資料。"</string>
<string name="failed_attempts_now_wiping_user" msgid="469060411789668050">"錯誤次數過多,系統將刪除這位使用者。"</string>
@@ -684,8 +704,6 @@
<string name="accessibility_ethernet_disconnected" msgid="2832501530856497489">"未連上乙太網路。"</string>
<string name="accessibility_ethernet_connected" msgid="6175942685957461563">"乙太網路。"</string>
<string name="accessibility_no_calling" msgid="3540827068323895748">"不顯示在螢幕上。"</string>
- <string name="avatar_picker_title" msgid="8492884172713170652">"選擇個人資料相片"</string>
- <string name="default_user_icon_description" msgid="6554047177298972638">"預設使用者圖示"</string>
<string name="physical_keyboard_title" msgid="4811935435315835220">"實體鍵盤"</string>
<string name="keyboard_layout_dialog_title" msgid="3927180147005616290">"選擇鍵盤配置"</string>
<string name="keyboard_layout_default_label" msgid="1997292217218546957">"預設"</string>
diff --git a/packages/SettingsLib/res/values-zu/strings.xml b/packages/SettingsLib/res/values-zu/strings.xml
index bbe3db4..6f06e1f 100644
--- a/packages/SettingsLib/res/values-zu/strings.xml
+++ b/packages/SettingsLib/res/values-zu/strings.xml
@@ -106,6 +106,28 @@
<string name="bluetooth_hearing_aid_left_active" msgid="7084887715570971441">"Iyasebenza, ngakwesokunxele kuphela"</string>
<string name="bluetooth_hearing_aid_right_active" msgid="8574683234077567230">"Iyasebenza, ngakwesokudla kuphela"</string>
<string name="bluetooth_hearing_aid_left_and_right_active" msgid="407704460573163973">"Iyasebenza, ngakwesokunxele nakwesokudla"</string>
+ <!-- no translation found for bluetooth_active_media_only_battery_level (1164678961213251365) -->
+ <skip />
+ <!-- no translation found for bluetooth_active_media_only_battery_level_untethered (1345174295097854560) -->
+ <skip />
+ <!-- no translation found for bluetooth_battery_level_lea_support (8580950145907305436) -->
+ <skip />
+ <!-- no translation found for bluetooth_battery_level_untethered_lea_support (8534816721698743015) -->
+ <skip />
+ <!-- no translation found for bluetooth_battery_level_untethered_left_lea_support (6605320955858788855) -->
+ <skip />
+ <!-- no translation found for bluetooth_battery_level_untethered_right_lea_support (5717356160322149355) -->
+ <skip />
+ <!-- no translation found for bluetooth_active_media_only_no_battery_level (71106861912593126) -->
+ <skip />
+ <!-- no translation found for bluetooth_saved_device_lea_support (7231323139968285768) -->
+ <skip />
+ <!-- no translation found for bluetooth_hearing_aid_media_only_left_active (1632152540901488645) -->
+ <skip />
+ <!-- no translation found for bluetooth_hearing_aid_media_only_right_active (3854140683042617230) -->
+ <skip />
+ <!-- no translation found for bluetooth_hearing_aid_media_only_left_and_right_active (1299913413062528417) -->
+ <skip />
<string name="bluetooth_profile_a2dp" msgid="4632426382762851724">"Umsindo wemidiya"</string>
<string name="bluetooth_profile_headset" msgid="5395952236133499331">"Amakholi efoni"</string>
<string name="bluetooth_profile_opp" msgid="6692618568149493430">"Dlulisa ifayela"</string>
@@ -643,8 +665,6 @@
<string name="guest_notification_ephemeral" msgid="7263252466950923871">"Wonke umsebenzi uzosulwa lapho uphuma"</string>
<string name="guest_notification_non_ephemeral" msgid="6843799963012259330">"Ungalondoloza noma usule umsebenzi wakho lapho uphuma"</string>
<string name="guest_notification_non_ephemeral_non_first_login" msgid="8009307983766934876">"Setha kabusha ukuze usule umsebenzi wesikhathi manje, noma ungalondoloza noma usule umsebenzi lapho uphuma"</string>
- <string name="user_image_take_photo" msgid="467512954561638530">"Thatha isithombe"</string>
- <string name="user_image_choose_photo" msgid="1363820919146782908">"Khetha isithombe"</string>
<string name="user_image_photo_selector" msgid="433658323306627093">"Khetha isithombe"</string>
<string name="failed_attempts_now_wiping_device" msgid="4016329172216428897">"Imizamo eminingi kakhulu engalungile. Le datha yedivayisi izosulwa."</string>
<string name="failed_attempts_now_wiping_user" msgid="469060411789668050">"Imizamo eminingi kakhulu engalungile. Lo msebenzisi uzosulwa."</string>
@@ -684,8 +704,6 @@
<string name="accessibility_ethernet_disconnected" msgid="2832501530856497489">"I-Ethernet inqanyuliwe."</string>
<string name="accessibility_ethernet_connected" msgid="6175942685957461563">"I-Ethernet."</string>
<string name="accessibility_no_calling" msgid="3540827068323895748">"Akukho ukwenza ikholi"</string>
- <string name="avatar_picker_title" msgid="8492884172713170652">"Khetha isithombe sephrofayela"</string>
- <string name="default_user_icon_description" msgid="6554047177298972638">"Isithonjana somsebenzisi sokuzenzakalelayo"</string>
<string name="physical_keyboard_title" msgid="4811935435315835220">"Ikhibhodi ephathekayo"</string>
<string name="keyboard_layout_dialog_title" msgid="3927180147005616290">"Khetha isendlalelo sekhibhodi"</string>
<string name="keyboard_layout_default_label" msgid="1997292217218546957">"Zenzekela"</string>
diff --git a/packages/SettingsProvider/src/android/provider/settings/backup/SecureSettings.java b/packages/SettingsProvider/src/android/provider/settings/backup/SecureSettings.java
index 38a3a2a..a33c160 100644
--- a/packages/SettingsProvider/src/android/provider/settings/backup/SecureSettings.java
+++ b/packages/SettingsProvider/src/android/provider/settings/backup/SecureSettings.java
@@ -258,6 +258,7 @@
Settings.Secure.ACCESSIBILITY_FONT_SCALING_HAS_BEEN_CHANGED,
Settings.Secure.SEARCH_ALL_ENTRYPOINTS_ENABLED,
Settings.Secure.HUB_MODE_TUTORIAL_STATE,
+ Settings.Secure.GLANCEABLE_HUB_ENABLED,
Settings.Secure.STYLUS_BUTTONS_ENABLED,
Settings.Secure.STYLUS_HANDWRITING_ENABLED,
Settings.Secure.DEFAULT_NOTE_TASK_PROFILE,
diff --git a/packages/SettingsProvider/src/android/provider/settings/validators/SecureSettingsValidators.java b/packages/SettingsProvider/src/android/provider/settings/validators/SecureSettingsValidators.java
index 252cb8f..1bff592 100644
--- a/packages/SettingsProvider/src/android/provider/settings/validators/SecureSettingsValidators.java
+++ b/packages/SettingsProvider/src/android/provider/settings/validators/SecureSettingsValidators.java
@@ -416,6 +416,7 @@
BOOLEAN_VALIDATOR);
VALIDATORS.put(Secure.DND_CONFIGS_MIGRATED, BOOLEAN_VALIDATOR);
VALIDATORS.put(Secure.HUB_MODE_TUTORIAL_STATE, NON_NEGATIVE_INTEGER_VALIDATOR);
+ VALIDATORS.put(Secure.GLANCEABLE_HUB_ENABLED, new InclusiveIntegerRangeValidator(0, 1));
VALIDATORS.put(Secure.STYLUS_BUTTONS_ENABLED, BOOLEAN_VALIDATOR);
VALIDATORS.put(Secure.STYLUS_HANDWRITING_ENABLED,
new DiscreteValueValidator(new String[] {"-1", "0", "1"}));
diff --git a/packages/SystemUI/Android.bp b/packages/SystemUI/Android.bp
index c730d49..74d61ca 100644
--- a/packages/SystemUI/Android.bp
+++ b/packages/SystemUI/Android.bp
@@ -197,12 +197,29 @@
}
filegroup {
+ name: "kosmos-src",
+ srcs: ["tests/utils/kosmos/src/**/*.kt"],
+ path: "tests/utils/kosmos",
+}
+
+java_library {
+ name: "kosmos",
+ host_supported: true,
+ srcs: [":kosmos-src"],
+ static_libs: [
+ "kotlin-reflect",
+ "kotlin-stdlib",
+ ],
+}
+
+filegroup {
name: "SystemUI-tests-utils",
srcs: [
"tests/utils/src/**/*.java",
"tests/utils/src/**/*.kt",
+ ":kosmos-src",
],
- path: "tests/utils/src",
+ path: "tests/utils",
}
filegroup {
@@ -334,6 +351,7 @@
"kotlin-test",
"SystemUICustomizationTestUtils",
"androidx.compose.runtime_runtime",
+ "kosmos",
],
libs: [
"android.test.runner",
@@ -416,6 +434,7 @@
"inline-mockito-robolectric-prebuilt",
"platform-parametric-runner-lib",
"SystemUICustomizationTestUtils",
+ "kosmos",
],
libs: [
"android.test.runner",
@@ -449,6 +468,7 @@
"androidx.test.uiautomator_uiautomator",
"androidx.core_core-animation-testing",
"androidx.test.ext.junit",
+ "kosmos",
],
libs: [
"android.test.runner",
diff --git a/packages/SystemUI/accessibility/accessibilitymenu/res/values-sk/strings.xml b/packages/SystemUI/accessibility/accessibilitymenu/res/values-sk/strings.xml
index c29002b..2647498 100644
--- a/packages/SystemUI/accessibility/accessibilitymenu/res/values-sk/strings.xml
+++ b/packages/SystemUI/accessibility/accessibilitymenu/res/values-sk/strings.xml
@@ -1,7 +1,7 @@
<?xml version="1.0" encoding="UTF-8"?>
<resources xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="accessibility_menu_service_name" msgid="730136711554740131">"Ponuka dostupnosti"</string>
+ <string name="accessibility_menu_service_name" msgid="730136711554740131">"Ponuka Dostupnosť"</string>
<string name="accessibility_menu_intro" msgid="3164193281544042394">"Ponukou dostupnosti sa rozumie veľká ponuka na obrazovke, pomocou ktorej môžete ovládať zariadenie. Môžete ho uzamknúť, ovládať hlasitosť a jas, vytvárať snímky obrazovky a mnoho ďalšieho."</string>
<string name="assistant_label" msgid="6796392082252272356">"Asistent"</string>
<string name="assistant_utterance" msgid="65509599221141377">"Asistent"</string>
diff --git a/packages/SystemUI/accessibility/accessibilitymenu/res/values-sv/strings.xml b/packages/SystemUI/accessibility/accessibilitymenu/res/values-sv/strings.xml
index c02bbb2..fa43e4f 100644
--- a/packages/SystemUI/accessibility/accessibilitymenu/res/values-sv/strings.xml
+++ b/packages/SystemUI/accessibility/accessibilitymenu/res/values-sv/strings.xml
@@ -1,7 +1,7 @@
<?xml version="1.0" encoding="UTF-8"?>
<resources xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="accessibility_menu_service_name" msgid="730136711554740131">"Till- gänglighetsmeny"</string>
+ <string name="accessibility_menu_service_name" msgid="730136711554740131">"Tillgänglighetsmeny"</string>
<string name="accessibility_menu_intro" msgid="3164193281544042394">"Tillgänglighetsmenyn är en stor meny på skärmen som du kan styra enheten med. Du kan låsa enheten, ställa in volym och ljusstyrka, ta skärmbilder och annat."</string>
<string name="assistant_label" msgid="6796392082252272356">"Assistent"</string>
<string name="assistant_utterance" msgid="65509599221141377">"Assistent"</string>
diff --git a/packages/SystemUI/multivalentTests/src/com/android/systemui/communal/data/repository/CommunalSettingsRepositoryImplTest.kt b/packages/SystemUI/multivalentTests/src/com/android/systemui/communal/data/repository/CommunalSettingsRepositoryImplTest.kt
index 6b28319..f71121c 100644
--- a/packages/SystemUI/multivalentTests/src/com/android/systemui/communal/data/repository/CommunalSettingsRepositoryImplTest.kt
+++ b/packages/SystemUI/multivalentTests/src/com/android/systemui/communal/data/repository/CommunalSettingsRepositoryImplTest.kt
@@ -25,13 +25,13 @@
import android.content.pm.UserInfo
import android.platform.test.annotations.DisableFlags
import android.platform.test.annotations.EnableFlags
+import android.provider.Settings
import androidx.test.ext.junit.runners.AndroidJUnit4
import androidx.test.filters.SmallTest
import com.android.systemui.Flags.FLAG_COMMUNAL_HUB
import com.android.systemui.SysuiTestCase
import com.android.systemui.broadcast.broadcastDispatcher
import com.android.systemui.communal.data.model.DisabledReason
-import com.android.systemui.communal.data.repository.CommunalSettingsRepositoryImpl.Companion.GLANCEABLE_HUB_ENABLED
import com.android.systemui.coroutines.collectLastValue
import com.android.systemui.flags.Flags.COMMUNAL_SERVICE_ENABLED
import com.android.systemui.flags.fakeFeatureFlagsClassic
@@ -95,15 +95,27 @@
@Test
fun hubIsDisabledByUser() =
testScope.runTest {
- kosmos.fakeSettings.putIntForUser(GLANCEABLE_HUB_ENABLED, 0, PRIMARY_USER.id)
+ kosmos.fakeSettings.putIntForUser(
+ Settings.Secure.GLANCEABLE_HUB_ENABLED,
+ 0,
+ PRIMARY_USER.id
+ )
val enabledState by collectLastValue(underTest.getEnabledState(PRIMARY_USER))
assertThat(enabledState?.enabled).isFalse()
assertThat(enabledState).containsExactly(DisabledReason.DISABLED_REASON_USER_SETTING)
- kosmos.fakeSettings.putIntForUser(GLANCEABLE_HUB_ENABLED, 1, SECONDARY_USER.id)
+ kosmos.fakeSettings.putIntForUser(
+ Settings.Secure.GLANCEABLE_HUB_ENABLED,
+ 1,
+ SECONDARY_USER.id
+ )
assertThat(enabledState?.enabled).isFalse()
- kosmos.fakeSettings.putIntForUser(GLANCEABLE_HUB_ENABLED, 1, PRIMARY_USER.id)
+ kosmos.fakeSettings.putIntForUser(
+ Settings.Secure.GLANCEABLE_HUB_ENABLED,
+ 1,
+ PRIMARY_USER.id
+ )
assertThat(enabledState?.enabled).isTrue()
}
@@ -126,7 +138,11 @@
val enabledState by collectLastValue(underTest.getEnabledState(PRIMARY_USER))
assertThat(enabledState?.enabled).isTrue()
- kosmos.fakeSettings.putIntForUser(GLANCEABLE_HUB_ENABLED, 0, PRIMARY_USER.id)
+ kosmos.fakeSettings.putIntForUser(
+ Settings.Secure.GLANCEABLE_HUB_ENABLED,
+ 0,
+ PRIMARY_USER.id
+ )
setKeyguardFeaturesDisabled(PRIMARY_USER, KEYGUARD_DISABLE_WIDGETS_ALL)
assertThat(enabledState?.enabled).isFalse()
diff --git a/packages/SystemUI/multivalentTests/src/com/android/systemui/communal/widgets/CommunalAppWidgetHostStartableTest.kt b/packages/SystemUI/multivalentTests/src/com/android/systemui/communal/widgets/CommunalAppWidgetHostStartableTest.kt
index 2c9d72c..6cae5d3 100644
--- a/packages/SystemUI/multivalentTests/src/com/android/systemui/communal/widgets/CommunalAppWidgetHostStartableTest.kt
+++ b/packages/SystemUI/multivalentTests/src/com/android/systemui/communal/widgets/CommunalAppWidgetHostStartableTest.kt
@@ -19,11 +19,11 @@
import android.appwidget.AppWidgetProviderInfo
import android.content.pm.UserInfo
import android.os.UserHandle
+import android.provider.Settings
import androidx.test.ext.junit.runners.AndroidJUnit4
import androidx.test.filters.SmallTest
import com.android.systemui.Flags.FLAG_COMMUNAL_HUB
import com.android.systemui.SysuiTestCase
-import com.android.systemui.communal.data.repository.CommunalSettingsRepositoryImpl.Companion.GLANCEABLE_HUB_ENABLED
import com.android.systemui.communal.data.repository.fakeCommunalWidgetRepository
import com.android.systemui.communal.domain.interactor.communalInteractor
import com.android.systemui.communal.shared.model.CommunalWidgetContentModel
@@ -220,7 +220,11 @@
fakeUserRepository.setSelectedUserInfo(MAIN_USER_INFO)
fakeKeyguardRepository.setKeyguardShowing(true)
val settingsValue = if (available) 1 else 0
- fakeSettings.putIntForUser(GLANCEABLE_HUB_ENABLED, settingsValue, MAIN_USER_INFO.id)
+ fakeSettings.putIntForUser(
+ Settings.Secure.GLANCEABLE_HUB_ENABLED,
+ settingsValue,
+ MAIN_USER_INFO.id
+ )
}
private fun createWidgetForUser(appWidgetId: Int, userId: Int): CommunalWidgetContentModel =
diff --git a/packages/SystemUI/multivalentTests/src/com/android/systemui/media/controls/domain/interactor/MediaRecommendationsInteractorTest.kt b/packages/SystemUI/multivalentTests/src/com/android/systemui/media/controls/domain/interactor/MediaRecommendationsInteractorTest.kt
index 28995e1..9656511 100644
--- a/packages/SystemUI/multivalentTests/src/com/android/systemui/media/controls/domain/interactor/MediaRecommendationsInteractorTest.kt
+++ b/packages/SystemUI/multivalentTests/src/com/android/systemui/media/controls/domain/interactor/MediaRecommendationsInteractorTest.kt
@@ -17,10 +17,16 @@
package com.android.systemui.media.controls.domain.interactor
import android.R
+import android.content.ComponentName
+import android.content.Intent
+import android.content.applicationContext
import android.graphics.drawable.Icon
import androidx.test.ext.junit.runners.AndroidJUnit4
import androidx.test.filters.SmallTest
import com.android.systemui.SysuiTestCase
+import com.android.systemui.animation.Expandable
+import com.android.systemui.broadcast.broadcastSender
+import com.android.systemui.broadcast.mockBroadcastSender
import com.android.systemui.coroutines.collectLastValue
import com.android.systemui.flags.Flags
import com.android.systemui.flags.fakeFeatureFlagsClassic
@@ -28,25 +34,36 @@
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.MediaRecommendationsInteractor
+import com.android.systemui.media.controls.domain.pipeline.interactor.MediaRecommendationsInteractor.Companion.EXPORTED_SMARTSPACE_TRAMPOLINE_ACTIVITY_NAME
import com.android.systemui.media.controls.domain.pipeline.interactor.mediaRecommendationsInteractor
import com.android.systemui.media.controls.domain.pipeline.mediaDataFilter
import com.android.systemui.media.controls.shared.model.MediaRecModel
import com.android.systemui.media.controls.shared.model.MediaRecommendationsModel
import com.android.systemui.media.controls.shared.model.SmartspaceMediaData
+import com.android.systemui.plugins.activityStarter
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.mock
+import com.android.systemui.util.mockito.whenever
import com.google.common.truth.Truth.assertThat
import kotlinx.coroutines.test.runTest
import org.junit.Test
import org.junit.runner.RunWith
+import org.mockito.Mockito.doNothing
+import org.mockito.Mockito.spy
+import org.mockito.Mockito.verify
@SmallTest
@RunWith(AndroidJUnit4::class)
class MediaRecommendationsInteractorTest : SysuiTestCase() {
- private val kosmos = testKosmos()
+ private val spyContext = spy(context)
+ private val kosmos = testKosmos().apply { applicationContext = spyContext }
private val testScope = kosmos.testScope
private val mediaDataFilter: MediaDataFilterImpl = kosmos.mediaDataFilter
+ private val activityStarter = kosmos.activityStarter
private val icon: Icon = Icon.createWithResource(context, R.drawable.ic_media_play)
private val smartspaceMediaData: SmartspaceMediaData =
SmartspaceMediaData(
@@ -56,7 +73,11 @@
recommendations = MediaTestHelper.getValidRecommendationList(icon),
)
- private val underTest: MediaRecommendationsInteractor = kosmos.mediaRecommendationsInteractor
+ private val underTest: MediaRecommendationsInteractor =
+ with(kosmos) {
+ broadcastSender = mockBroadcastSender
+ kosmos.mediaRecommendationsInteractor
+ }
@Test
fun addRecommendation_smartspaceMediaDataUpdate() =
@@ -111,6 +132,50 @@
assertThat(recommendations?.mediaRecs?.isEmpty()).isTrue()
}
+ @Test
+ fun removeRecommendation_noTrampolineActivity() {
+ val intent = Intent()
+
+ intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK)
+
+ underTest.removeMediaRecommendations(KEY_MEDIA_SMARTSPACE, intent, 0)
+
+ verify(kosmos.mockBroadcastSender).sendBroadcast(eq(intent))
+ }
+
+ @Test
+ fun removeRecommendation_usingTrampolineActivity() {
+ doNothing().whenever(spyContext).startActivity(any())
+ val intent = Intent()
+
+ intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK)
+ intent.component = ComponentName(PACKAGE_NAME, EXPORTED_SMARTSPACE_TRAMPOLINE_ACTIVITY_NAME)
+
+ underTest.removeMediaRecommendations(KEY_MEDIA_SMARTSPACE, intent, 0)
+
+ verify(spyContext).startActivity(eq(intent))
+ }
+
+ @Test
+ fun startSettings() {
+ underTest.startSettings()
+
+ verify(activityStarter).startActivity(any(), eq(true))
+ }
+
+ @Test
+ fun startClickIntent() {
+ doNothing().whenever(spyContext).startActivity(any())
+ val intent = Intent()
+ val expandable = mock<Expandable>()
+
+ intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK)
+
+ underTest.startClickIntent(expandable, intent)
+
+ verify(spyContext).startActivity(eq(intent))
+ }
+
companion object {
private const val KEY_MEDIA_SMARTSPACE = "MEDIA_SMARTSPACE_ID"
private const val PACKAGE_NAME = "com.example.app"
diff --git a/packages/SystemUI/multivalentTests/src/com/android/systemui/media/controls/ui/viewmodel/MediaRecommendationsViewModelTest.kt b/packages/SystemUI/multivalentTests/src/com/android/systemui/media/controls/ui/viewmodel/MediaRecommendationsViewModelTest.kt
new file mode 100644
index 0000000..51b1911
--- /dev/null
+++ b/packages/SystemUI/multivalentTests/src/com/android/systemui/media/controls/ui/viewmodel/MediaRecommendationsViewModelTest.kt
@@ -0,0 +1,88 @@
+/*
+ * 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.systemui.SysuiTestCase
+import com.android.systemui.coroutines.collectLastValue
+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.mediaDataFilter
+import com.android.systemui.media.controls.shared.model.SmartspaceMediaData
+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.Test
+import org.junit.runner.RunWith
+import org.mockito.ArgumentMatchers
+import org.mockito.Mockito
+
+@SmallTest
+@RunWith(AndroidJUnit4::class)
+class MediaRecommendationsViewModelTest : SysuiTestCase() {
+
+ private val kosmos = testKosmos()
+ private val testScope = kosmos.testScope
+
+ private val mediaDataFilter: MediaDataFilterImpl = kosmos.mediaDataFilter
+ private val packageManager = kosmos.packageManager
+ private val icon: 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: MediaRecommendationsViewModel = kosmos.mediaRecommendationsViewModel
+
+ @Test
+ fun loadRecommendations_recsCardViewModelIsLoaded() =
+ testScope.runTest {
+ 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)
+ val recsCardViewModel by collectLastValue(underTest.mediaRecsCard)
+
+ context.setMockPackageManager(packageManager)
+
+ mediaDataFilter.onSmartspaceMediaDataLoaded(KEY_MEDIA_SMARTSPACE, smartspaceMediaData)
+
+ assertThat(recsCardViewModel).isNotNull()
+ assertThat(recsCardViewModel?.mediaRecs?.size)
+ .isEqualTo(smartspaceMediaData.recommendations.size)
+ }
+
+ companion object {
+ private const val KEY_MEDIA_SMARTSPACE = "MEDIA_SMARTSPACE_ID"
+ private const val PACKAGE_NAME = "com.example.app"
+ }
+}
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 4d22383..fd68519 100644
--- a/packages/SystemUI/multivalentTests/src/com/android/systemui/scene/SceneFrameworkIntegrationTest.kt
+++ b/packages/SystemUI/multivalentTests/src/com/android/systemui/scene/SceneFrameworkIntegrationTest.kt
@@ -48,6 +48,7 @@
import com.android.systemui.communal.domain.interactor.communalInteractor
import com.android.systemui.coroutines.collectLastValue
import com.android.systemui.deviceentry.data.repository.fakeDeviceEntryRepository
+import com.android.systemui.deviceentry.domain.interactor.deviceEntryFaceAuthInteractor
import com.android.systemui.deviceentry.domain.interactor.deviceEntryInteractor
import com.android.systemui.flags.Flags
import com.android.systemui.flags.fakeFeatureFlagsClassic
@@ -289,6 +290,7 @@
centralSurfaces = mock(),
headsUpInteractor = kosmos.headsUpNotificationInteractor,
occlusionInteractor = kosmos.sceneContainerOcclusionInteractor,
+ faceUnlockInteractor = kosmos.deviceEntryFaceAuthInteractor,
)
startable.start()
diff --git a/packages/SystemUI/multivalentTests/src/com/android/systemui/scene/domain/startable/SceneContainerStartableTest.kt b/packages/SystemUI/multivalentTests/src/com/android/systemui/scene/domain/startable/SceneContainerStartableTest.kt
index 36859e7..e330a35 100644
--- a/packages/SystemUI/multivalentTests/src/com/android/systemui/scene/domain/startable/SceneContainerStartableTest.kt
+++ b/packages/SystemUI/multivalentTests/src/com/android/systemui/scene/domain/startable/SceneContainerStartableTest.kt
@@ -37,6 +37,7 @@
import com.android.systemui.classifier.falsingManager
import com.android.systemui.coroutines.collectLastValue
import com.android.systemui.deviceentry.data.repository.fakeDeviceEntryRepository
+import com.android.systemui.deviceentry.domain.interactor.deviceEntryFaceAuthInteractor
import com.android.systemui.deviceentry.domain.interactor.deviceEntryInteractor
import com.android.systemui.keyguard.data.repository.fakeDeviceEntryFaceAuthRepository
import com.android.systemui.keyguard.data.repository.fakeKeyguardRepository
@@ -133,6 +134,7 @@
centralSurfaces = centralSurfaces,
headsUpInteractor = kosmos.headsUpNotificationInteractor,
occlusionInteractor = kosmos.sceneContainerOcclusionInteractor,
+ faceUnlockInteractor = kosmos.deviceEntryFaceAuthInteractor,
)
}
@@ -472,7 +474,7 @@
}
@Test
- fun doesNotSwitchToGoneWhenDeviceStartsToWakeUp_authMethodSecure() =
+ fun doesNotSwitchToGone_whenDeviceStartsToWakeUp_authMethodSecure() =
testScope.runTest {
val currentSceneKey by collectLastValue(sceneInteractor.currentScene)
prepareState(
@@ -487,6 +489,34 @@
}
@Test
+ fun doesNotSwitchToGone_whenDeviceStartsToWakeUp_ifAlreadyTransitioningToLockscreen() =
+ testScope.runTest {
+ val currentSceneKey by collectLastValue(sceneInteractor.currentScene)
+ val transitioningTo by collectLastValue(sceneInteractor.transitioningTo)
+ val transitionStateFlow =
+ prepareState(
+ isDeviceUnlocked = true,
+ initialSceneKey = Scenes.Gone,
+ authenticationMethod = AuthenticationMethodModel.Pin,
+ )
+ transitionStateFlow.value =
+ ObservableTransitionState.Transition(
+ fromScene = Scenes.Gone,
+ toScene = Scenes.Lockscreen,
+ progress = flowOf(0.1f),
+ isInitiatedByUserInput = false,
+ isUserInputOngoing = flowOf(false),
+ )
+ assertThat(currentSceneKey).isEqualTo(Scenes.Gone)
+ assertThat(transitioningTo).isEqualTo(Scenes.Lockscreen)
+ underTest.start()
+ powerInteractor.setAwakeForTest()
+
+ assertThat(currentSceneKey).isEqualTo(Scenes.Gone)
+ assertThat(transitioningTo).isEqualTo(Scenes.Lockscreen)
+ }
+
+ @Test
fun switchToGoneWhenDeviceStartsToWakeUp_authMethodSecure_deviceUnlocked() =
testScope.runTest {
val currentSceneKey by collectLastValue(sceneInteractor.currentScene)
@@ -1051,6 +1081,28 @@
assertThat(currentScene).isEqualTo(Scenes.Lockscreen)
}
+ @Test
+ fun handleBouncerOverscroll() =
+ testScope.runTest {
+ val currentScene by collectLastValue(sceneInteractor.currentScene)
+ val transitionStateFlow = prepareState()
+ underTest.start()
+ emulateSceneTransition(transitionStateFlow, toScene = Scenes.Bouncer)
+ assertThat(currentScene).isEqualTo(Scenes.Bouncer)
+
+ transitionStateFlow.value =
+ ObservableTransitionState.Transition(
+ fromScene = Scenes.Bouncer,
+ toScene = Scenes.Lockscreen,
+ progress = flowOf(-0.4f),
+ isInitiatedByUserInput = true,
+ isUserInputOngoing = flowOf(true),
+ )
+ runCurrent()
+
+ assertThat(kosmos.fakeDeviceEntryFaceAuthRepository.isAuthRunning.value).isTrue()
+ }
+
private fun TestScope.emulateSceneTransition(
transitionStateFlow: MutableStateFlow<ObservableTransitionState>,
toScene: SceneKey,
diff --git a/packages/SystemUI/res-keyguard/values-nl/strings.xml b/packages/SystemUI/res-keyguard/values-nl/strings.xml
index 81e1007..0206403 100644
--- a/packages/SystemUI/res-keyguard/values-nl/strings.xml
+++ b/packages/SystemUI/res-keyguard/values-nl/strings.xml
@@ -21,10 +21,10 @@
<resources xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="keyguard_enter_your_pin" msgid="5429932527814874032">"Geef je pincode op"</string>
- <string name="keyguard_enter_pin" msgid="8114529922480276834">"Geef de pincode op"</string>
+ <string name="keyguard_enter_pin" msgid="8114529922480276834">"Voer pincode in"</string>
<string name="keyguard_enter_your_pattern" msgid="351503370332324745">"Geef je patroon op"</string>
<string name="keyguard_enter_pattern" msgid="7616595160901084119">"Teken het patroon"</string>
- <string name="keyguard_enter_your_password" msgid="7225626204122735501">"Geef je wachtwoord op"</string>
+ <string name="keyguard_enter_your_password" msgid="7225626204122735501">"Voer je wachtwoord in"</string>
<string name="keyguard_enter_password" msgid="6483623792371009758">"Geef het wachtwoord op"</string>
<string name="keyguard_sim_error_message_short" msgid="633630844240494070">"Ongeldige kaart."</string>
<string name="keyguard_charged" msgid="5478247181205188995">"Opgeladen"</string>
diff --git a/packages/SystemUI/res-keyguard/values-zh-rTW/strings.xml b/packages/SystemUI/res-keyguard/values-zh-rTW/strings.xml
index 7e5ae10..bc047be 100644
--- a/packages/SystemUI/res-keyguard/values-zh-rTW/strings.xml
+++ b/packages/SystemUI/res-keyguard/values-zh-rTW/strings.xml
@@ -24,7 +24,7 @@
<string name="keyguard_enter_pin" msgid="8114529922480276834">"輸入 PIN 碼"</string>
<string name="keyguard_enter_your_pattern" msgid="351503370332324745">"畫出解鎖圖案"</string>
<string name="keyguard_enter_pattern" msgid="7616595160901084119">"畫出解鎖圖案"</string>
- <string name="keyguard_enter_your_password" msgid="7225626204122735501">"輸入密碼"</string>
+ <string name="keyguard_enter_your_password" msgid="7225626204122735501">"請輸入密碼"</string>
<string name="keyguard_enter_password" msgid="6483623792371009758">"輸入密碼"</string>
<string name="keyguard_sim_error_message_short" msgid="633630844240494070">"卡片無效。"</string>
<string name="keyguard_charged" msgid="5478247181205188995">"充電完成"</string>
diff --git a/packages/SystemUI/res-product/values-ja/strings.xml b/packages/SystemUI/res-product/values-ja/strings.xml
index 1fc8775..9d054c9 100644
--- a/packages/SystemUI/res-product/values-ja/strings.xml
+++ b/packages/SystemUI/res-product/values-ja/strings.xml
@@ -46,9 +46,9 @@
<string name="thermal_shutdown_message" product="default" msgid="6685194547904051408">"お使いのスマートフォンは現在、正常に動作しています。\nタップして詳細を表示"</string>
<string name="thermal_shutdown_message" product="device" msgid="3039675532521590478">"お使いのデバイスは現在、正常に動作しています。\nタップして詳細を表示"</string>
<string name="thermal_shutdown_message" product="tablet" msgid="5285898074484811386">"お使いのタブレットは現在、正常に動作しています。\nタップして詳細を表示"</string>
- <string name="thermal_shutdown_dialog_message" product="default" msgid="6145923570358574186">"スマートフォンが熱くなりすぎたため電源が OFF になりました。現在は正常に動作しています。\n\nスマートフォンは以下の場合に熱くなる場合があります。\n • リソースを集中的に使用する機能やアプリ(ゲームアプリ、動画アプリ、ナビアプリなど)を使用\n • サイズの大きいファイルをダウンロードまたはアップロード\n • 高温の場所で使用"</string>
- <string name="thermal_shutdown_dialog_message" product="device" msgid="3647879000909527365">"デバイスが熱くなりすぎたため電源が OFF になりました。現在は正常に動作しています。\n\nデバイスは以下の場合に熱くなる場合があります。\n • リソースを集中的に使用する機能やアプリ(ゲームアプリ、動画アプリ、ナビアプリなど)を使用\n • サイズの大きいファイルをダウンロードまたはアップロード\n • 高温の場所で使用"</string>
- <string name="thermal_shutdown_dialog_message" product="tablet" msgid="8274487811928782165">"タブレットが熱くなりすぎたため電源が OFF になりました。現在は正常に動作しています。\n\nタブレットは以下の場合に熱くなる場合があります。\n • リソースを集中的に使用する機能やアプリ(ゲームアプリ、動画アプリ、ナビアプリなど)を使用\n • サイズの大きいファイルをダウンロードまたはアップロード\n • 高温の場所で使用"</string>
+ <string name="thermal_shutdown_dialog_message" product="default" msgid="6145923570358574186">"スマートフォンの温度上昇により電源が OFF になりました。現在は正常に動作しています。\n\nスマートフォンは以下の場合に熱くなる場合があります。\n • リソースを集中的に使用する機能やアプリ(ゲームアプリ、動画アプリ、ナビアプリなど)を使用\n • サイズの大きいファイルをダウンロードまたはアップロード\n • 高温の場所で使用"</string>
+ <string name="thermal_shutdown_dialog_message" product="device" msgid="3647879000909527365">"デバイスの温度上昇により電源が OFF になりました。現在は正常に動作しています。\n\nデバイスは以下の場合に熱くなる場合があります。\n • リソースを集中的に使用する機能やアプリ(ゲームアプリ、動画アプリ、ナビアプリなど)を使用\n • サイズの大きいファイルをダウンロードまたはアップロード\n • 高温の場所で使用"</string>
+ <string name="thermal_shutdown_dialog_message" product="tablet" msgid="8274487811928782165">"タブレットの温度上昇により電源が OFF になりました。現在は正常に動作しています。\n\nタブレットは以下の場合に熱くなる場合があります。\n • リソースを集中的に使用する機能やアプリ(ゲームアプリ、動画アプリ、ナビアプリなど)を使用\n • サイズの大きいファイルをダウンロードまたはアップロード\n • 高温の場所で使用"</string>
<string name="high_temp_title" product="default" msgid="5365000411304924115">"スマートフォンの温度が上昇中"</string>
<string name="high_temp_title" product="device" msgid="6622009907401563664">"デバイスの温度が上昇中"</string>
<string name="high_temp_title" product="tablet" msgid="9039733706606446616">"タブレットの温度が上昇中"</string>
diff --git a/packages/SystemUI/res/drawable/ic_finder_active.xml b/packages/SystemUI/res/drawable/ic_finder_active.xml
index 8ca221a..2423e34 100644
--- a/packages/SystemUI/res/drawable/ic_finder_active.xml
+++ b/packages/SystemUI/res/drawable/ic_finder_active.xml
@@ -1,5 +1,6 @@
<?xml version="1.0" encoding="utf-8"?>
<vector xmlns:android="http://schemas.android.com/apk/res/android"
+ xmlns:tools="http://schemas.android.com/tools"
android:width="24dp"
android:height="24dp"
android:viewportWidth="24"
@@ -10,5 +11,6 @@
<path
android:pathData="M12.797,4.005C11.949,3.936 11.203,4.597 11.203,5.467V6.659C8.855,7.001 6.998,8.856 6.653,11.203H5.467C4.597,11.203 3.936,11.948 4.005,12.796L4.006,12.802L4.006,12.809C4.38,16.605 7.399,19.625 11.195,20C12.051,20.087 12.803,19.404 12.803,18.547V17.355C15.154,17.012 17.013,15.154 17.355,12.803H18.54C19.406,12.803 20.079,12.058 19.992,11.196C19.618,7.4 16.606,4.388 12.812,4.006L12.804,4.006L12.797,4.005ZM11.203,9.344V8.283C9.741,8.591 8.588,9.741 8.278,11.203H9.344C9.585,10.4 10.179,9.754 10.942,9.437C11.027,9.402 11.114,9.371 11.203,9.344ZM11.998,13.171C11.358,13.175 10.828,12.651 10.827,12.004H10.827C10.827,11.959 10.83,11.915 10.835,11.871C10.885,11.427 11.185,11.056 11.59,10.902C11.694,10.863 11.806,10.838 11.921,10.83C11.948,10.833 11.976,10.834 12.003,10.834C12.65,10.834 13.177,11.356 13.179,12.007C13.177,12.622 12.695,13.13 12.091,13.175C12.06,13.172 12.029,13.17 11.998,13.171ZM17.353,11.203H18.383C18.028,8.289 15.72,5.979 12.804,5.616V6.658C15.153,7 17.004,8.852 17.353,11.203ZM14.663,11.203C14.395,10.311 13.692,9.611 12.804,9.344V8.283C14.265,8.59 15.414,9.736 15.727,11.203H14.663ZM5.615,12.803H6.654C7.001,15.15 8.855,17.002 11.203,17.346V18.391C8.287,18.034 5.972,15.719 5.615,12.803ZM11.203,14.666C10.316,14.394 9.613,13.692 9.345,12.803H8.279C8.591,14.264 9.741,15.412 11.203,15.721V14.666ZM14.661,12.811H15.729C15.418,14.272 14.266,15.422 12.804,15.73V14.662C13.689,14.396 14.391,13.699 14.661,12.811Z"
android:fillColor="#ffffff"
- android:fillType="evenOdd"/>
+ android:fillType="evenOdd"
+ tools:ignore="VectorPath" />
</vector>
diff --git a/packages/SystemUI/res/values-af/strings.xml b/packages/SystemUI/res/values-af/strings.xml
index 9702e8b..2027d16 100644
--- a/packages/SystemUI/res/values-af/strings.xml
+++ b/packages/SystemUI/res/values-af/strings.xml
@@ -365,6 +365,12 @@
<string name="quick_settings_contrast_high" msgid="656049259587494499">"Hoog"</string>
<!-- no translation found for quick_settings_hearing_devices_label (7277170419679404129) -->
<skip />
+ <!-- no translation found for quick_settings_hearing_devices_dialog_title (9004774017688484981) -->
+ <skip />
+ <!-- no translation found for quick_settings_pair_hearing_devices (5987105102207447322) -->
+ <skip />
+ <!-- no translation found for accessibility_hearing_device_pair_new_device (8440082580186130090) -->
+ <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>
@@ -551,7 +557,7 @@
<string name="keyguard_indication_after_adaptive_auth_lock" msgid="2323400645470712787">"Toestel is gesluit\nKon nie staaf nie"</string>
<string name="zen_mode_and_condition" msgid="5043165189511223718">"<xliff:g id="ZEN_MODE">%1$s</xliff:g>. <xliff:g id="EXIT_CONDITION">%2$s</xliff:g>"</string>
<string name="accessibility_volume_settings" msgid="1458961116951564784">"Klankinstellings"</string>
- <string name="volume_odi_captions_tip" msgid="8825655463280990941">"Gee outomaties mediaopskrifte"</string>
+ <string name="volume_odi_captions_tip" msgid="8825655463280990941">"Verskaf outomaties onderskrifte vir media"</string>
<string name="accessibility_volume_close_odi_captions_tip" msgid="8924753283621160480">"Maak wenk oor onderskrifte toe"</string>
<string name="volume_odi_captions_content_description" msgid="4172765742046013630">"Onderskrifteoorlegger"</string>
<string name="volume_odi_captions_hint_enable" msgid="2073091194012843195">"aktiveer"</string>
diff --git a/packages/SystemUI/res/values-am/strings.xml b/packages/SystemUI/res/values-am/strings.xml
index 2f7cc5f..a3700f2 100644
--- a/packages/SystemUI/res/values-am/strings.xml
+++ b/packages/SystemUI/res/values-am/strings.xml
@@ -363,7 +363,12 @@
<string name="quick_settings_contrast_standard" msgid="2538227821968061832">"መደበኛ"</string>
<string name="quick_settings_contrast_medium" msgid="5158352575583902566">"መካከለኛ"</string>
<string name="quick_settings_contrast_high" msgid="656049259587494499">"ከፍተኛ"</string>
- <!-- no translation found for quick_settings_hearing_devices_label (7277170419679404129) -->
+ <string name="quick_settings_hearing_devices_label" msgid="7277170419679404129">"የመስሚያ መሣሪያዎች"</string>
+ <!-- no translation found for quick_settings_hearing_devices_dialog_title (9004774017688484981) -->
+ <skip />
+ <!-- no translation found for quick_settings_pair_hearing_devices (5987105102207447322) -->
+ <skip />
+ <!-- no translation found for accessibility_hearing_device_pair_new_device (8440082580186130090) -->
<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>
@@ -442,10 +447,8 @@
<string name="button_to_remove_widget" msgid="3948204829181214098">"አስወግድ"</string>
<string name="hub_mode_add_widget_button_text" msgid="4831464661209971729">"ምግብር አክል"</string>
<string name="hub_mode_editing_exit_button_text" msgid="3704686734192264771">"ተከናውኗል"</string>
- <!-- no translation found for label_for_button_in_empty_state_cta (7314975555382055823) -->
- <skip />
- <!-- no translation found for title_for_empty_state_cta (6161654421223450530) -->
- <skip />
+ <string name="label_for_button_in_empty_state_cta" msgid="7314975555382055823">"ምግብሮችን ያክሉ"</string>
+ <string name="title_for_empty_state_cta" msgid="6161654421223450530">"ጡባዊዎን ሳይከፍቱ የሚወዷቸው የመተግበሪያ ምግብሮች ፈጣን መዳረሻን ያግኙ።"</string>
<string name="dialog_title_to_allow_any_widget" msgid="1004820948962675644">"በማያ ገጽ ቁልፍ ላይ ማንኛውንም ምግብር ይፈቀድ?"</string>
<string name="button_text_to_open_settings" msgid="1987729256950941628">"ቅንብሮችን ክፈት"</string>
<string name="work_mode_off_title" msgid="5794818421357835873">"የሥራ መተግበሪያዎች ከቆሙበት ይቀጥሉ?"</string>
diff --git a/packages/SystemUI/res/values-am/tiles_states_strings.xml b/packages/SystemUI/res/values-am/tiles_states_strings.xml
index bb0ca36..a3c590c 100644
--- a/packages/SystemUI/res/values-am/tiles_states_strings.xml
+++ b/packages/SystemUI/res/values-am/tiles_states_strings.xml
@@ -186,7 +186,9 @@
<item msgid="2478289035899842865">"ጠፍቷል"</item>
<item msgid="5137565285664080143">"በርቷል"</item>
</string-array>
- <!-- no translation found for tile_states_hearing_devices:0 (1235334096484287173) -->
- <!-- no translation found for tile_states_hearing_devices:1 (3079622119444911877) -->
- <!-- no translation found for tile_states_hearing_devices:2 (3028994095749238254) -->
+ <string-array name="tile_states_hearing_devices">
+ <item msgid="1235334096484287173">"አይገኝም"</item>
+ <item msgid="3079622119444911877">"አጥፋ"</item>
+ <item msgid="3028994095749238254">"አብራ"</item>
+ </string-array>
</resources>
diff --git a/packages/SystemUI/res/values-ar/strings.xml b/packages/SystemUI/res/values-ar/strings.xml
index 4fef3a9..767e909 100644
--- a/packages/SystemUI/res/values-ar/strings.xml
+++ b/packages/SystemUI/res/values-ar/strings.xml
@@ -365,6 +365,12 @@
<string name="quick_settings_contrast_high" msgid="656049259587494499">"مرتفع"</string>
<!-- no translation found for quick_settings_hearing_devices_label (7277170419679404129) -->
<skip />
+ <!-- no translation found for quick_settings_hearing_devices_dialog_title (9004774017688484981) -->
+ <skip />
+ <!-- no translation found for quick_settings_pair_hearing_devices (5987105102207447322) -->
+ <skip />
+ <!-- no translation found for accessibility_hearing_device_pair_new_device (8440082580186130090) -->
+ <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>
@@ -442,10 +448,8 @@
<string name="button_to_remove_widget" msgid="3948204829181214098">"إزالة"</string>
<string name="hub_mode_add_widget_button_text" msgid="4831464661209971729">"إضافة تطبيق مصغّر"</string>
<string name="hub_mode_editing_exit_button_text" msgid="3704686734192264771">"تم"</string>
- <!-- no translation found for label_for_button_in_empty_state_cta (7314975555382055823) -->
- <skip />
- <!-- no translation found for title_for_empty_state_cta (6161654421223450530) -->
- <skip />
+ <string name="label_for_button_in_empty_state_cta" msgid="7314975555382055823">"إضافة تطبيقات مصغّرة"</string>
+ <string name="title_for_empty_state_cta" msgid="6161654421223450530">"يمكنك الوصول سريعًا إلى تطبيقاتك المصغّرة المفضّلة بدون فتح قفل جهازك اللوحي."</string>
<string name="dialog_title_to_allow_any_widget" msgid="1004820948962675644">"هل تريد السماح بعرض أي تطبيق مصغّر على شاشة القفل؟"</string>
<string name="button_text_to_open_settings" msgid="1987729256950941628">"فتح الإعدادات"</string>
<string name="work_mode_off_title" msgid="5794818421357835873">"أتريد إعادة تفعيل تطبيقات العمل؟"</string>
@@ -592,9 +596,9 @@
<string name="volume_ringer_status_vibrate" msgid="6970078708957857825">"اهتزاز"</string>
<string name="volume_ringer_status_silent" msgid="3691324657849880883">"كتم الصوت"</string>
<string name="media_device_cast" msgid="4786241789687569892">"البثّ"</string>
- <string name="stream_notification_unavailable" msgid="4313854556205836435">"يتعذّر التغيير بسبب كتم صوت الرنين."</string>
+ <string name="stream_notification_unavailable" msgid="4313854556205836435">"غير متاح بسبب كتم صوت الرنين"</string>
<string name="stream_alarm_unavailable" msgid="4059817189292197839">"مستوى الصوت غير متاح بسبب تفعيل وضع \"عدم الإزعاج\""</string>
- <string name="stream_media_unavailable" msgid="6823020894438959853">"مستوى الصوت غير متاح بسبب تفعيل وضع \"عدم الإزعاج\""</string>
+ <string name="stream_media_unavailable" msgid="6823020894438959853">"مستوى الصوت غير متاح لأنّ وضع \"عدم الإزعاج\" مفعّل"</string>
<string name="volume_stream_content_description_unmute" msgid="7729576371406792977">"%1$s. انقر لإلغاء التجاهل."</string>
<string name="volume_stream_content_description_vibrate" msgid="4858111994183089761">"%1$s. انقر للتعيين على الاهتزاز. قد يتم تجاهل خدمات \"سهولة الاستخدام\"."</string>
<string name="volume_stream_content_description_mute" msgid="4079046784917920984">"%1$s. انقر للتجاهل. قد يتم تجاهل خدمات \"سهولة الاستخدام\"."</string>
@@ -602,8 +606,8 @@
<string name="volume_stream_content_description_mute_a11y" msgid="5743548478357238156">"%1$s. انقر لكتم الصوت."</string>
<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_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_ringer_change" msgid="3574969197796055532">"انقر لتغيير وضع الرنين."</string>
<string name="volume_ringer_hint_mute" msgid="4263821214125126614">"كتم الصوت"</string>
@@ -674,7 +678,7 @@
<string name="notification_channel_summary_automatic_demoted" msgid="1831303964660807700">"<b>الحالة:</b> تم خفض الترتيب"</string>
<string name="notification_channel_summary_priority_baseline" msgid="46674690072551234">"تظهر في أعلى إشعارات المحادثات وكصورة ملف شخصي على شاشة القفل."</string>
<string name="notification_channel_summary_priority_bubble" msgid="1275413109619074576">"تظهر في أعلى إشعارات المحادثات وكصورة ملف شخصي على شاشة القفل وتظهر على شكل فقاعة."</string>
- <string name="notification_channel_summary_priority_dnd" msgid="6665395023264154361">"تظهر في أعلى إشعارات المحادثات وكصورة ملف شخصي على شاشة القفل، وتقاطع ميزة \"عدم الإزعاج\"."</string>
+ <string name="notification_channel_summary_priority_dnd" msgid="6665395023264154361">"تظهر في أعلى إشعارات المحادثات وكصورة ملف شخصي على شاشة القفل، وتُقاطع ميزة \"عدم الإزعاج\""</string>
<string name="notification_channel_summary_priority_all" msgid="7151752959650048285">"تظهر في أعلى إشعارات المحادثات وكصورة ملف شخصي على شاشة القفل وتظهر على شكل فقاعة لمقاطعة ميزة \"عدم الإزعاج\"."</string>
<string name="notification_priority_title" msgid="2079708866333537093">"الأولوية"</string>
<string name="no_shortcut" msgid="8257177117568230126">"لا يدعم تطبيق <xliff:g id="APP_NAME">%1$s</xliff:g> ميزات المحادثات."</string>
@@ -1120,8 +1124,8 @@
<string name="build_number_copy_toast" msgid="877720921605503046">"تم نسخ رقم الإصدار إلى الحافظة."</string>
<string name="basic_status" msgid="2315371112182658176">"محادثة مفتوحة"</string>
<string name="select_conversation_title" msgid="6716364118095089519">"التطبيقات المصغّرة للمحادثات"</string>
- <string name="select_conversation_text" msgid="3376048251434956013">"انقر على محادثة لإضافتها إلى \"الشاشة الرئيسية\"."</string>
- <string name="no_conversations_text" msgid="5354115541282395015">"ستظهر هنا المحادثات الحديثة."</string>
+ <string name="select_conversation_text" msgid="3376048251434956013">"انقر على محادثة لإضافتها إلى \"الشاشة الرئيسية\""</string>
+ <string name="no_conversations_text" msgid="5354115541282395015">"ستظهر هنا المحادثات الحديثة"</string>
<string name="priority_conversations" msgid="3967482288896653039">"المحادثات ذات الأولوية"</string>
<string name="recent_conversations" msgid="8531874684782574622">"المحادثات الحديثة"</string>
<string name="days_timestamp" msgid="5821854736213214331">"قبل <xliff:g id="DURATION">%1$s</xliff:g> يوم"</string>
@@ -1243,7 +1247,7 @@
<string name="home_quick_affordance_unavailable_configure_the_app" msgid="604424593994493281">"• توفُّر جهاز واحد أو لوحة جهاز واحدة على الأقل"</string>
<string name="notes_app_quick_affordance_unavailable_explanation" msgid="4796955161600178530">"اختَر تطبيقًا تلقائيًا لتدوين الملاحظات لاستخدام اختصار تدوين الملاحظات."</string>
<string name="keyguard_affordance_enablement_dialog_notes_app_action" msgid="6821710209675089470">"اختيار تطبيق"</string>
- <string name="keyguard_affordance_press_too_short" msgid="8145437175134998864">"انقر مع الاستمرار على الاختصار."</string>
+ <string name="keyguard_affordance_press_too_short" msgid="8145437175134998864">"انقر مع الاستمرار على الاختصار"</string>
<string name="rear_display_bottom_sheet_cancel" msgid="3461468855493357248">"إلغاء"</string>
<string name="rear_display_bottom_sheet_confirm" msgid="1507591562761552899">"تبديل الشاشتَين الآن"</string>
<string name="rear_display_folded_bottom_sheet_title" msgid="3930008746560711990">"فتح الهاتف"</string>
diff --git a/packages/SystemUI/res/values-as/strings.xml b/packages/SystemUI/res/values-as/strings.xml
index 81b3004..5a083ab 100644
--- a/packages/SystemUI/res/values-as/strings.xml
+++ b/packages/SystemUI/res/values-as/strings.xml
@@ -363,7 +363,12 @@
<string name="quick_settings_contrast_standard" msgid="2538227821968061832">"মানক"</string>
<string name="quick_settings_contrast_medium" msgid="5158352575583902566">"মধ্যমীয়া"</string>
<string name="quick_settings_contrast_high" msgid="656049259587494499">"উচ্চ"</string>
- <!-- no translation found for quick_settings_hearing_devices_label (7277170419679404129) -->
+ <string name="quick_settings_hearing_devices_label" msgid="7277170419679404129">"শুনাৰ ডিভাইচ"</string>
+ <!-- no translation found for quick_settings_hearing_devices_dialog_title (9004774017688484981) -->
+ <skip />
+ <!-- no translation found for quick_settings_pair_hearing_devices (5987105102207447322) -->
+ <skip />
+ <!-- no translation found for accessibility_hearing_device_pair_new_device (8440082580186130090) -->
<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>
@@ -442,10 +447,8 @@
<string name="button_to_remove_widget" msgid="3948204829181214098">"আঁতৰাওক"</string>
<string name="hub_mode_add_widget_button_text" msgid="4831464661209971729">"ৱিজেট যোগ দিয়ক"</string>
<string name="hub_mode_editing_exit_button_text" msgid="3704686734192264771">"কৰা হ’ল"</string>
- <!-- no translation found for label_for_button_in_empty_state_cta (7314975555382055823) -->
- <skip />
- <!-- no translation found for title_for_empty_state_cta (6161654421223450530) -->
- <skip />
+ <string name="label_for_button_in_empty_state_cta" msgid="7314975555382055823">"ৱিজেট যোগ দিয়ক"</string>
+ <string name="title_for_empty_state_cta" msgid="6161654421223450530">"আপোনাৰ টেবলেটটো আনলক নকৰাকৈ আপোনাৰ প্ৰিয় এপৰ ৱিজেটসমূহলৈ ক্ষিপ্ৰভাৱে এক্সেছ পাওক।"</string>
<string name="dialog_title_to_allow_any_widget" msgid="1004820948962675644">"লক স্ক্ৰীনত যিকোনো ৱিজেটৰ অনুমতি দিবনে?"</string>
<string name="button_text_to_open_settings" msgid="1987729256950941628">"ছেটিং খোলক"</string>
<string name="work_mode_off_title" msgid="5794818421357835873">"কাম সম্পৰ্কীয় এপ্ আনপজ কৰিবনে?"</string>
@@ -904,7 +907,7 @@
<string name="mobile_data_text_format" msgid="6806501540022589786">"<xliff:g id="ID_1">%1$s</xliff:g> — <xliff:g id="ID_2">%2$s</xliff:g>"</string>
<string name="mobile_carrier_text_format" msgid="8912204177152950766">"<xliff:g id="CARRIER_NAME">%1$s</xliff:g>, <xliff:g id="MOBILE_DATA_TYPE">%2$s</xliff:g>"</string>
<string name="wifi_is_off" msgid="5389597396308001471">"ৱাই-ফাই অফ অৱস্থাত আছে"</string>
- <string name="bt_is_off" msgid="7436344904889461591">"ব্লুটুথ অফ অৱস্থাত আছে"</string>
+ <string name="bt_is_off" msgid="7436344904889461591">"ব্লুটুথ অফ আছে"</string>
<string name="dnd_is_off" msgid="3185706903793094463">"অসুবিধা নিদিব অফ অৱস্থাত আছে"</string>
<string name="dnd_is_on" msgid="7009368176361546279">"অসুবিধা নিদিব অন অৱস্থাত আছে"</string>
<string name="qs_dnd_prompt_auto_rule" msgid="3535469468310002616">"অসুবিধা নিদিব-ক এটা স্বয়ংক্ৰিয় নিয়ম (<xliff:g id="ID_1">%s</xliff:g>)এ অন কৰিলে।"</string>
diff --git a/packages/SystemUI/res/values-as/tiles_states_strings.xml b/packages/SystemUI/res/values-as/tiles_states_strings.xml
index 7c62af0..e978fe2 100644
--- a/packages/SystemUI/res/values-as/tiles_states_strings.xml
+++ b/packages/SystemUI/res/values-as/tiles_states_strings.xml
@@ -186,7 +186,9 @@
<item msgid="2478289035899842865">"অফ আছে"</item>
<item msgid="5137565285664080143">"অন আছে"</item>
</string-array>
- <!-- no translation found for tile_states_hearing_devices:0 (1235334096484287173) -->
- <!-- no translation found for tile_states_hearing_devices:1 (3079622119444911877) -->
- <!-- no translation found for tile_states_hearing_devices:2 (3028994095749238254) -->
+ <string-array name="tile_states_hearing_devices">
+ <item msgid="1235334096484287173">"উপলব্ধ নহয়"</item>
+ <item msgid="3079622119444911877">"অফ আছে"</item>
+ <item msgid="3028994095749238254">"অন আছে"</item>
+ </string-array>
</resources>
diff --git a/packages/SystemUI/res/values-az/strings.xml b/packages/SystemUI/res/values-az/strings.xml
index 7b09be5..7faec8a 100644
--- a/packages/SystemUI/res/values-az/strings.xml
+++ b/packages/SystemUI/res/values-az/strings.xml
@@ -365,6 +365,12 @@
<string name="quick_settings_contrast_high" msgid="656049259587494499">"Yüksək"</string>
<!-- no translation found for quick_settings_hearing_devices_label (7277170419679404129) -->
<skip />
+ <!-- no translation found for quick_settings_hearing_devices_dialog_title (9004774017688484981) -->
+ <skip />
+ <!-- no translation found for quick_settings_pair_hearing_devices (5987105102207447322) -->
+ <skip />
+ <!-- no translation found for accessibility_hearing_device_pair_new_device (8440082580186130090) -->
+ <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>
@@ -442,10 +448,8 @@
<string name="button_to_remove_widget" msgid="3948204829181214098">"Silin"</string>
<string name="hub_mode_add_widget_button_text" msgid="4831464661209971729">"Vidcet əlavə edin"</string>
<string name="hub_mode_editing_exit_button_text" msgid="3704686734192264771">"Hazırdır"</string>
- <!-- no translation found for label_for_button_in_empty_state_cta (7314975555382055823) -->
- <skip />
- <!-- no translation found for title_for_empty_state_cta (6161654421223450530) -->
- <skip />
+ <string name="label_for_button_in_empty_state_cta" msgid="7314975555382055823">"Vidcetlər əlavə edin"</string>
+ <string name="title_for_empty_state_cta" msgid="6161654421223450530">"Planşeti kiliddən çıxarmadan sevimli tətbiq vidcetlərinizə sürətli giriş əldə edin."</string>
<string name="dialog_title_to_allow_any_widget" msgid="1004820948962675644">"Kilid ekranında istənilən vidcetə icazə verilsin?"</string>
<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>
diff --git a/packages/SystemUI/res/values-b+sr+Latn/strings.xml b/packages/SystemUI/res/values-b+sr+Latn/strings.xml
index 07bb005..cd5dc26 100644
--- a/packages/SystemUI/res/values-b+sr+Latn/strings.xml
+++ b/packages/SystemUI/res/values-b+sr+Latn/strings.xml
@@ -363,7 +363,12 @@
<string name="quick_settings_contrast_standard" msgid="2538227821968061832">"Standardno"</string>
<string name="quick_settings_contrast_medium" msgid="5158352575583902566">"Srednje"</string>
<string name="quick_settings_contrast_high" msgid="656049259587494499">"Visoko"</string>
- <!-- no translation found for quick_settings_hearing_devices_label (7277170419679404129) -->
+ <string name="quick_settings_hearing_devices_label" msgid="7277170419679404129">"Slušni aparati"</string>
+ <!-- no translation found for quick_settings_hearing_devices_dialog_title (9004774017688484981) -->
+ <skip />
+ <!-- no translation found for quick_settings_pair_hearing_devices (5987105102207447322) -->
+ <skip />
+ <!-- no translation found for accessibility_hearing_device_pair_new_device (8440082580186130090) -->
<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>
@@ -442,10 +447,8 @@
<string name="button_to_remove_widget" msgid="3948204829181214098">"Ukloni"</string>
<string name="hub_mode_add_widget_button_text" msgid="4831464661209971729">"Dodaj vidžet"</string>
<string name="hub_mode_editing_exit_button_text" msgid="3704686734192264771">"Gotovo"</string>
- <!-- no translation found for label_for_button_in_empty_state_cta (7314975555382055823) -->
- <skip />
- <!-- no translation found for title_for_empty_state_cta (6161654421223450530) -->
- <skip />
+ <string name="label_for_button_in_empty_state_cta" msgid="7314975555382055823">"Dodaj vidžete"</string>
+ <string name="title_for_empty_state_cta" msgid="6161654421223450530">"Brzo pristupajte omiljenim vidžetima za aplikacije bez otključavanja tableta."</string>
<string name="dialog_title_to_allow_any_widget" msgid="1004820948962675644">"Želite da dozvolite sve vidžete na zaključanom ekranu?"</string>
<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>
diff --git a/packages/SystemUI/res/values-b+sr+Latn/tiles_states_strings.xml b/packages/SystemUI/res/values-b+sr+Latn/tiles_states_strings.xml
index e09cab5..df0b786 100644
--- a/packages/SystemUI/res/values-b+sr+Latn/tiles_states_strings.xml
+++ b/packages/SystemUI/res/values-b+sr+Latn/tiles_states_strings.xml
@@ -186,7 +186,9 @@
<item msgid="2478289035899842865">"Isključeno"</item>
<item msgid="5137565285664080143">"Uključeno"</item>
</string-array>
- <!-- no translation found for tile_states_hearing_devices:0 (1235334096484287173) -->
- <!-- no translation found for tile_states_hearing_devices:1 (3079622119444911877) -->
- <!-- no translation found for tile_states_hearing_devices:2 (3028994095749238254) -->
+ <string-array name="tile_states_hearing_devices">
+ <item msgid="1235334096484287173">"Nedostupno"</item>
+ <item msgid="3079622119444911877">"Isključeno"</item>
+ <item msgid="3028994095749238254">"Uključeno"</item>
+ </string-array>
</resources>
diff --git a/packages/SystemUI/res/values-be/strings.xml b/packages/SystemUI/res/values-be/strings.xml
index 6c4e88d..a76c38b 100644
--- a/packages/SystemUI/res/values-be/strings.xml
+++ b/packages/SystemUI/res/values-be/strings.xml
@@ -365,6 +365,12 @@
<string name="quick_settings_contrast_high" msgid="656049259587494499">"Высокая"</string>
<!-- no translation found for quick_settings_hearing_devices_label (7277170419679404129) -->
<skip />
+ <!-- no translation found for quick_settings_hearing_devices_dialog_title (9004774017688484981) -->
+ <skip />
+ <!-- no translation found for quick_settings_pair_hearing_devices (5987105102207447322) -->
+ <skip />
+ <!-- no translation found for accessibility_hearing_device_pair_new_device (8440082580186130090) -->
+ <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>
@@ -442,10 +448,8 @@
<string name="button_to_remove_widget" msgid="3948204829181214098">"Выдаліць"</string>
<string name="hub_mode_add_widget_button_text" msgid="4831464661209971729">"Дадаць віджэт"</string>
<string name="hub_mode_editing_exit_button_text" msgid="3704686734192264771">"Гатова"</string>
- <!-- no translation found for label_for_button_in_empty_state_cta (7314975555382055823) -->
- <skip />
- <!-- no translation found for title_for_empty_state_cta (6161654421223450530) -->
- <skip />
+ <string name="label_for_button_in_empty_state_cta" msgid="7314975555382055823">"Дадаць віджэты"</string>
+ <string name="title_for_empty_state_cta" msgid="6161654421223450530">"Доступ да віджэтаў любімых праграм без разблакіроўкі планшэта."</string>
<string name="dialog_title_to_allow_any_widget" msgid="1004820948962675644">"Дазволіць размяшчаць на экране блакіроўкі любыя віджэты?"</string>
<string name="button_text_to_open_settings" msgid="1987729256950941628">"Адкрыць налады"</string>
<string name="work_mode_off_title" msgid="5794818421357835873">"Уключыць працоўныя праграмы?"</string>
diff --git a/packages/SystemUI/res/values-bg/strings.xml b/packages/SystemUI/res/values-bg/strings.xml
index 01eed3d..f8793b3 100644
--- a/packages/SystemUI/res/values-bg/strings.xml
+++ b/packages/SystemUI/res/values-bg/strings.xml
@@ -365,6 +365,12 @@
<string name="quick_settings_contrast_high" msgid="656049259587494499">"Висок"</string>
<!-- no translation found for quick_settings_hearing_devices_label (7277170419679404129) -->
<skip />
+ <!-- no translation found for quick_settings_hearing_devices_dialog_title (9004774017688484981) -->
+ <skip />
+ <!-- no translation found for quick_settings_pair_hearing_devices (5987105102207447322) -->
+ <skip />
+ <!-- no translation found for accessibility_hearing_device_pair_new_device (8440082580186130090) -->
+ <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>
@@ -442,10 +448,8 @@
<string name="button_to_remove_widget" msgid="3948204829181214098">"Премахване"</string>
<string name="hub_mode_add_widget_button_text" msgid="4831464661209971729">"Добавяне на приспособление"</string>
<string name="hub_mode_editing_exit_button_text" msgid="3704686734192264771">"Готово"</string>
- <!-- no translation found for label_for_button_in_empty_state_cta (7314975555382055823) -->
- <skip />
- <!-- no translation found for title_for_empty_state_cta (6161654421223450530) -->
- <skip />
+ <string name="label_for_button_in_empty_state_cta" msgid="7314975555382055823">"Добавяне на приспособления"</string>
+ <string name="title_for_empty_state_cta" msgid="6161654421223450530">"Получете бърз достъп до любимите си приспособления за приложения, без да отключвате таблета си."</string>
<string name="dialog_title_to_allow_any_widget" msgid="1004820948962675644">"Да се разреши ли което и да е приспособление на заключения екран?"</string>
<string name="button_text_to_open_settings" msgid="1987729256950941628">"Отваряне на настройките"</string>
<string name="work_mode_off_title" msgid="5794818421357835873">"Отмяна на паузата за служ. прил.?"</string>
@@ -594,7 +598,7 @@
<string name="media_device_cast" msgid="4786241789687569892">"Предаване"</string>
<string name="stream_notification_unavailable" msgid="4313854556205836435">"Не е налице, защото звъненето е спряно"</string>
<string name="stream_alarm_unavailable" msgid="4059817189292197839">"Не е налице, защото режимът „Не безпокойте“ е вкл."</string>
- <string name="stream_media_unavailable" msgid="6823020894438959853">"Не е налице, защото режимът „Не безпокойте“ е вкл."</string>
+ <string name="stream_media_unavailable" msgid="6823020894438959853">"Не е налице, защото „Не безпокойте“ е вкл."</string>
<string name="volume_stream_content_description_unmute" msgid="7729576371406792977">"%1$s. Докоснете, за да включите отново звука."</string>
<string name="volume_stream_content_description_vibrate" msgid="4858111994183089761">"%1$s. Докоснете, за да зададете вибриране. Възможно е звукът на услугите за достъпност да бъде заглушен."</string>
<string name="volume_stream_content_description_mute" msgid="4079046784917920984">"%1$s. Докоснете, за да заглушите звука. Възможно е звукът на услугите за достъпност да бъде заглушен."</string>
diff --git a/packages/SystemUI/res/values-bn/strings.xml b/packages/SystemUI/res/values-bn/strings.xml
index 5b71e63..f6de0e3 100644
--- a/packages/SystemUI/res/values-bn/strings.xml
+++ b/packages/SystemUI/res/values-bn/strings.xml
@@ -365,6 +365,12 @@
<string name="quick_settings_contrast_high" msgid="656049259587494499">"হাই"</string>
<!-- no translation found for quick_settings_hearing_devices_label (7277170419679404129) -->
<skip />
+ <!-- no translation found for quick_settings_hearing_devices_dialog_title (9004774017688484981) -->
+ <skip />
+ <!-- no translation found for quick_settings_pair_hearing_devices (5987105102207447322) -->
+ <skip />
+ <!-- no translation found for accessibility_hearing_device_pair_new_device (8440082580186130090) -->
+ <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>
@@ -442,10 +448,8 @@
<string name="button_to_remove_widget" msgid="3948204829181214098">"সরান"</string>
<string name="hub_mode_add_widget_button_text" msgid="4831464661209971729">"উইজেট যোগ করুন"</string>
<string name="hub_mode_editing_exit_button_text" msgid="3704686734192264771">"হয়ে গেছে"</string>
- <!-- no translation found for label_for_button_in_empty_state_cta (7314975555382055823) -->
- <skip />
- <!-- no translation found for title_for_empty_state_cta (6161654421223450530) -->
- <skip />
+ <string name="label_for_button_in_empty_state_cta" msgid="7314975555382055823">"উইজেট যোগ করুন"</string>
+ <string name="title_for_empty_state_cta" msgid="6161654421223450530">"নিজের ট্যাবলেট আনলক বা করেই আপনার প্রিয় অ্যাপ উইজেটে দ্রুত অ্যাক্সেস পান।"</string>
<string name="dialog_title_to_allow_any_widget" msgid="1004820948962675644">"লক স্ক্রিনে যেকোনও উইজেটকে অনুমতি দেবেন?"</string>
<string name="button_text_to_open_settings" msgid="1987729256950941628">"সেটিংস খুলুন"</string>
<string name="work_mode_off_title" msgid="5794818421357835873">"অফিসের অ্যাপ আনপজ করতে চান?"</string>
diff --git a/packages/SystemUI/res/values-bs/strings.xml b/packages/SystemUI/res/values-bs/strings.xml
index f626579..9347757 100644
--- a/packages/SystemUI/res/values-bs/strings.xml
+++ b/packages/SystemUI/res/values-bs/strings.xml
@@ -365,6 +365,12 @@
<string name="quick_settings_contrast_high" msgid="656049259587494499">"Visoko"</string>
<!-- no translation found for quick_settings_hearing_devices_label (7277170419679404129) -->
<skip />
+ <!-- no translation found for quick_settings_hearing_devices_dialog_title (9004774017688484981) -->
+ <skip />
+ <!-- no translation found for quick_settings_pair_hearing_devices (5987105102207447322) -->
+ <skip />
+ <!-- no translation found for accessibility_hearing_device_pair_new_device (8440082580186130090) -->
+ <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>
@@ -442,10 +448,8 @@
<string name="button_to_remove_widget" msgid="3948204829181214098">"Uklanjanje"</string>
<string name="hub_mode_add_widget_button_text" msgid="4831464661209971729">"Dodajte vidžet"</string>
<string name="hub_mode_editing_exit_button_text" msgid="3704686734192264771">"Gotovo"</string>
- <!-- no translation found for label_for_button_in_empty_state_cta (7314975555382055823) -->
- <skip />
- <!-- no translation found for title_for_empty_state_cta (6161654421223450530) -->
- <skip />
+ <string name="label_for_button_in_empty_state_cta" msgid="7314975555382055823">"Dodaj widgete"</string>
+ <string name="title_for_empty_state_cta" msgid="6161654421223450530">"Brzo pristupajte widgetima omiljenih aplikacija bez otključavanja tableta."</string>
<string name="dialog_title_to_allow_any_widget" msgid="1004820948962675644">"Dozvoliti bilo koji vidžet na zaključanom ekranu?"</string>
<string name="button_text_to_open_settings" msgid="1987729256950941628">"Otvori postavke"</string>
<string name="work_mode_off_title" msgid="5794818421357835873">"Pokrenuti poslovne aplikacije?"</string>
@@ -617,7 +621,7 @@
<string name="volume_panel_hint_mute" msgid="6962563028495243738">"isključivanje parametra %s"</string>
<string name="volume_panel_hint_unmute" msgid="7489063242934477382">"uključivanje parametra %s"</string>
<string name="media_output_label_title" msgid="872824698593182505">"Reproduciranje: <xliff:g id="LABEL">%s</xliff:g>"</string>
- <string name="media_output_title_without_playing" msgid="3825663683169305013">"Zvuk će se reprod. na:"</string>
+ <string name="media_output_title_without_playing" msgid="3825663683169305013">"Reprodukcija zvuka na"</string>
<string name="system_ui_tuner" msgid="1471348823289954729">"Podešavač za korisnički interfejs sistema"</string>
<string name="status_bar" msgid="4357390266055077437">"Statusna traka"</string>
<string name="demo_mode" msgid="263484519766901593">"Demo način rada Sistemskog UI-ja"</string>
diff --git a/packages/SystemUI/res/values-ca/strings.xml b/packages/SystemUI/res/values-ca/strings.xml
index e4a7906..40532ca 100644
--- a/packages/SystemUI/res/values-ca/strings.xml
+++ b/packages/SystemUI/res/values-ca/strings.xml
@@ -365,6 +365,12 @@
<string name="quick_settings_contrast_high" msgid="656049259587494499">"Alt"</string>
<!-- no translation found for quick_settings_hearing_devices_label (7277170419679404129) -->
<skip />
+ <!-- no translation found for quick_settings_hearing_devices_dialog_title (9004774017688484981) -->
+ <skip />
+ <!-- no translation found for quick_settings_pair_hearing_devices (5987105102207447322) -->
+ <skip />
+ <!-- no translation found for accessibility_hearing_device_pair_new_device (8440082580186130090) -->
+ <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>
@@ -442,10 +448,8 @@
<string name="button_to_remove_widget" msgid="3948204829181214098">"Suprimeix"</string>
<string name="hub_mode_add_widget_button_text" msgid="4831464661209971729">"Afegeix un widget"</string>
<string name="hub_mode_editing_exit_button_text" msgid="3704686734192264771">"Fet"</string>
- <!-- no translation found for label_for_button_in_empty_state_cta (7314975555382055823) -->
- <skip />
- <!-- no translation found for title_for_empty_state_cta (6161654421223450530) -->
- <skip />
+ <string name="label_for_button_in_empty_state_cta" msgid="7314975555382055823">"Afegeix widgets"</string>
+ <string name="title_for_empty_state_cta" msgid="6161654421223450530">"Accedeix ràpidament als teus widgets d\'aplicacions preferits sense desbloquejar la tauleta."</string>
<string name="dialog_title_to_allow_any_widget" msgid="1004820948962675644">"Vols permetre qualsevol widget a la pantalla de bloqueig?"</string>
<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>
@@ -581,7 +585,7 @@
<string name="screen_pinning_exit" msgid="4553787518387346893">"S\'ha deixat de fixar l\'aplicació"</string>
<string name="stream_voice_call" msgid="7468348170702375660">"Trucada"</string>
<string name="stream_system" msgid="7663148785370565134">"Sistema"</string>
- <string name="stream_ring" msgid="7550670036738697526">"To de trucada"</string>
+ <string name="stream_ring" msgid="7550670036738697526">"So"</string>
<string name="stream_music" msgid="2188224742361847580">"Multimèdia"</string>
<string name="stream_alarm" msgid="16058075093011694">"Alarma"</string>
<string name="stream_notification" msgid="7930294049046243939">"Notificació"</string>
diff --git a/packages/SystemUI/res/values-cs/strings.xml b/packages/SystemUI/res/values-cs/strings.xml
index 58cbbca..16c2914 100644
--- a/packages/SystemUI/res/values-cs/strings.xml
+++ b/packages/SystemUI/res/values-cs/strings.xml
@@ -365,6 +365,12 @@
<string name="quick_settings_contrast_high" msgid="656049259587494499">"Vysoká"</string>
<!-- no translation found for quick_settings_hearing_devices_label (7277170419679404129) -->
<skip />
+ <!-- no translation found for quick_settings_hearing_devices_dialog_title (9004774017688484981) -->
+ <skip />
+ <!-- no translation found for quick_settings_pair_hearing_devices (5987105102207447322) -->
+ <skip />
+ <!-- no translation found for accessibility_hearing_device_pair_new_device (8440082580186130090) -->
+ <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>
@@ -442,10 +448,8 @@
<string name="button_to_remove_widget" msgid="3948204829181214098">"Odstranit"</string>
<string name="hub_mode_add_widget_button_text" msgid="4831464661209971729">"Přidat widget"</string>
<string name="hub_mode_editing_exit_button_text" msgid="3704686734192264771">"Hotovo"</string>
- <!-- no translation found for label_for_button_in_empty_state_cta (7314975555382055823) -->
- <skip />
- <!-- no translation found for title_for_empty_state_cta (6161654421223450530) -->
- <skip />
+ <string name="label_for_button_in_empty_state_cta" msgid="7314975555382055823">"Přidat widgety"</string>
+ <string name="title_for_empty_state_cta" msgid="6161654421223450530">"Získejte rychlý přístup ke svým oblíbeným widgetům aplikací bez odemykání tabletu."</string>
<string name="dialog_title_to_allow_any_widget" msgid="1004820948962675644">"Povolit jakýkoli widget na obrazovce uzamčení?"</string>
<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>
@@ -594,7 +598,7 @@
<string name="media_device_cast" msgid="4786241789687569892">"Odesílání"</string>
<string name="stream_notification_unavailable" msgid="4313854556205836435">"Nedostupné, protože vyzvánění je ztlumené"</string>
<string name="stream_alarm_unavailable" msgid="4059817189292197839">"Nedostupné, protože je zapnutý režim Nerušit"</string>
- <string name="stream_media_unavailable" msgid="6823020894438959853">"Nedostupné, protože je zapnutý režim Nerušit"</string>
+ <string name="stream_media_unavailable" msgid="6823020894438959853">"Nedostupné – je zapnutý režim Nerušit"</string>
<string name="volume_stream_content_description_unmute" msgid="7729576371406792977">"%1$s. Klepnutím zapnete zvuk."</string>
<string name="volume_stream_content_description_vibrate" msgid="4858111994183089761">"%1$s. Klepnutím aktivujete režim vibrací. Služby přístupnosti mohou být ztlumeny."</string>
<string name="volume_stream_content_description_mute" msgid="4079046784917920984">"%1$s. Klepnutím vypnete zvuk. Služby přístupnosti mohou být ztlumeny."</string>
@@ -603,7 +607,7 @@
<string name="volume_panel_noise_control_title" msgid="7413949943872304474">"Omezení hluku"</string>
<string name="volume_panel_spatial_audio_title" msgid="3367048857932040660">"Prostorový zvuk"</string>
<string name="volume_panel_spatial_audio_off" msgid="4177490084606772989">"Vypnuto"</string>
- <string name="volume_panel_spatial_audio_fixed" msgid="3136080137827746046">"Pevné"</string>
+ <string name="volume_panel_spatial_audio_fixed" msgid="3136080137827746046">"Pevný"</string>
<string name="volume_panel_spatial_audio_tracking" msgid="5711115234001762974">"Sledování hlavy"</string>
<string name="volume_ringer_change" msgid="3574969197796055532">"Klepnutím změníte režim vyzvánění"</string>
<string name="volume_ringer_hint_mute" msgid="4263821214125126614">"vypnout zvuk"</string>
diff --git a/packages/SystemUI/res/values-da/strings.xml b/packages/SystemUI/res/values-da/strings.xml
index c0202bb..4754dbb 100644
--- a/packages/SystemUI/res/values-da/strings.xml
+++ b/packages/SystemUI/res/values-da/strings.xml
@@ -365,6 +365,12 @@
<string name="quick_settings_contrast_high" msgid="656049259587494499">"Høj"</string>
<!-- no translation found for quick_settings_hearing_devices_label (7277170419679404129) -->
<skip />
+ <!-- no translation found for quick_settings_hearing_devices_dialog_title (9004774017688484981) -->
+ <skip />
+ <!-- no translation found for quick_settings_pair_hearing_devices (5987105102207447322) -->
+ <skip />
+ <!-- no translation found for accessibility_hearing_device_pair_new_device (8440082580186130090) -->
+ <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>
@@ -442,10 +448,8 @@
<string name="button_to_remove_widget" msgid="3948204829181214098">"Fjern"</string>
<string name="hub_mode_add_widget_button_text" msgid="4831464661209971729">"Tilføj widget"</string>
<string name="hub_mode_editing_exit_button_text" msgid="3704686734192264771">"Udfør"</string>
- <!-- no translation found for label_for_button_in_empty_state_cta (7314975555382055823) -->
- <skip />
- <!-- no translation found for title_for_empty_state_cta (6161654421223450530) -->
- <skip />
+ <string name="label_for_button_in_empty_state_cta" msgid="7314975555382055823">"Tilføj widgets"</string>
+ <string name="title_for_empty_state_cta" msgid="6161654421223450530">"Få hurtig adgang til dine foretrukne appwidgets uden at låse din tablet op."</string>
<string name="dialog_title_to_allow_any_widget" msgid="1004820948962675644">"Vil du tillade alle widgets på låseskærmen?"</string>
<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>
@@ -581,14 +585,14 @@
<string name="screen_pinning_exit" msgid="4553787518387346893">"Appen er frigjort"</string>
<string name="stream_voice_call" msgid="7468348170702375660">"Ring op"</string>
<string name="stream_system" msgid="7663148785370565134">"System"</string>
- <string name="stream_ring" msgid="7550670036738697526">"Ring"</string>
+ <string name="stream_ring" msgid="7550670036738697526">"Ringetone"</string>
<string name="stream_music" msgid="2188224742361847580">"Medie"</string>
<string name="stream_alarm" msgid="16058075093011694">"Alarm"</string>
<string name="stream_notification" msgid="7930294049046243939">"Notifikation"</string>
<string name="stream_bluetooth_sco" msgid="6234562365528664331">"Bluetooth"</string>
<string name="stream_dtmf" msgid="7322536356554673067">"Tonesignalfrekvens (DTMF)"</string>
<string name="stream_accessibility" msgid="3873610336741987152">"Hjælpefunktioner"</string>
- <string name="volume_ringer_status_normal" msgid="1339039682222461143">"Ring"</string>
+ <string name="volume_ringer_status_normal" msgid="1339039682222461143">"Ringetone"</string>
<string name="volume_ringer_status_vibrate" msgid="6970078708957857825">"Vibration"</string>
<string name="volume_ringer_status_silent" msgid="3691324657849880883">"Slå lyden fra"</string>
<string name="media_device_cast" msgid="4786241789687569892">"Cast"</string>
@@ -604,7 +608,7 @@
<string name="volume_panel_spatial_audio_title" msgid="3367048857932040660">"Rumlig lyd"</string>
<string name="volume_panel_spatial_audio_off" msgid="4177490084606772989">"Fra"</string>
<string name="volume_panel_spatial_audio_fixed" msgid="3136080137827746046">"Fast"</string>
- <string name="volume_panel_spatial_audio_tracking" msgid="5711115234001762974">"Reg. af hovedbevægelser"</string>
+ <string name="volume_panel_spatial_audio_tracking" msgid="5711115234001762974">"Register. af hovedbevægelser"</string>
<string name="volume_ringer_change" msgid="3574969197796055532">"Tryk for at ændre ringetilstand"</string>
<string name="volume_ringer_hint_mute" msgid="4263821214125126614">"slå lyden fra"</string>
<string name="volume_ringer_hint_unmute" msgid="6119086890306456976">"slå lyden til"</string>
diff --git a/packages/SystemUI/res/values-de/strings.xml b/packages/SystemUI/res/values-de/strings.xml
index b8758d7..2fd26bc 100644
--- a/packages/SystemUI/res/values-de/strings.xml
+++ b/packages/SystemUI/res/values-de/strings.xml
@@ -329,7 +329,7 @@
<string name="quick_settings_work_mode_label" msgid="6440531507319809121">"Geschäftliche Apps"</string>
<string name="quick_settings_work_mode_paused_state" msgid="6681788236383735976">"Pausiert"</string>
<string name="quick_settings_night_display_label" msgid="8180030659141778180">"Nachtlicht"</string>
- <string name="quick_settings_night_secondary_label_on_at_sunset" msgid="3358706312129866626">"An bei Sonnenuntergang"</string>
+ <string name="quick_settings_night_secondary_label_on_at_sunset" msgid="3358706312129866626">"An: Sonnenuntergang"</string>
<string name="quick_settings_night_secondary_label_until_sunrise" msgid="4063448287758262485">"Bis Sonnenaufgang"</string>
<string name="quick_settings_night_secondary_label_on_at" msgid="3584738542293528235">"An um <xliff:g id="TIME">%s</xliff:g>"</string>
<string name="quick_settings_secondary_label_until" msgid="1883981263191927372">"Bis <xliff:g id="TIME">%s</xliff:g>"</string>
@@ -365,6 +365,12 @@
<string name="quick_settings_contrast_high" msgid="656049259587494499">"Hoch"</string>
<!-- no translation found for quick_settings_hearing_devices_label (7277170419679404129) -->
<skip />
+ <!-- no translation found for quick_settings_hearing_devices_dialog_title (9004774017688484981) -->
+ <skip />
+ <!-- no translation found for quick_settings_pair_hearing_devices (5987105102207447322) -->
+ <skip />
+ <!-- no translation found for accessibility_hearing_device_pair_new_device (8440082580186130090) -->
+ <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>
@@ -579,7 +585,7 @@
<string name="screen_pinning_negative" msgid="6882816864569211666">"Nein danke"</string>
<string name="screen_pinning_start" msgid="7483998671383371313">"Bildschirm wurde fixiert"</string>
<string name="screen_pinning_exit" msgid="4553787518387346893">"App vom Bildschirm losgelöst"</string>
- <string name="stream_voice_call" msgid="7468348170702375660">"Anruf"</string>
+ <string name="stream_voice_call" msgid="7468348170702375660">"Anrufen"</string>
<string name="stream_system" msgid="7663148785370565134">"System"</string>
<string name="stream_ring" msgid="7550670036738697526">"Klingelton"</string>
<string name="stream_music" msgid="2188224742361847580">"Medien"</string>
@@ -594,17 +600,17 @@
<string name="media_device_cast" msgid="4786241789687569892">"Stream"</string>
<string name="stream_notification_unavailable" msgid="4313854556205836435">"Nicht verfügbar, da Klingelton stumm"</string>
<string name="stream_alarm_unavailable" msgid="4059817189292197839">"Nicht verfügbar, weil „Bitte nicht stören“ an ist"</string>
- <string name="stream_media_unavailable" msgid="6823020894438959853">"Nicht verfügbar, weil „Bitte nicht stören“ an ist"</string>
+ <string name="stream_media_unavailable" msgid="6823020894438959853">"Nicht verfügbar, weil „Bitte nicht stören“ an"</string>
<string name="volume_stream_content_description_unmute" msgid="7729576371406792977">"%1$s. Zum Aufheben der Stummschaltung tippen."</string>
<string name="volume_stream_content_description_vibrate" msgid="4858111994183089761">"%1$s. Tippen, um Vibrieren festzulegen. Bedienungshilfen werden unter Umständen stummgeschaltet."</string>
<string name="volume_stream_content_description_mute" msgid="4079046784917920984">"%1$s. Zum Stummschalten tippen. Bedienungshilfen werden unter Umständen stummgeschaltet."</string>
<string name="volume_stream_content_description_vibrate_a11y" msgid="2742330052979397471">"%1$s. Zum Aktivieren der Vibration tippen."</string>
<string name="volume_stream_content_description_mute_a11y" msgid="5743548478357238156">"%1$s. Zum Stummschalten tippen."</string>
- <string name="volume_panel_noise_control_title" msgid="7413949943872304474">"Geräuschunterdrückung"</string>
+ <string name="volume_panel_noise_control_title" msgid="7413949943872304474">"Geräuschunterdrückung"</string>
<string name="volume_panel_spatial_audio_title" msgid="3367048857932040660">"Spatial Audio"</string>
<string name="volume_panel_spatial_audio_off" msgid="4177490084606772989">"Aus"</string>
<string name="volume_panel_spatial_audio_fixed" msgid="3136080137827746046">"Statisch"</string>
- <string name="volume_panel_spatial_audio_tracking" msgid="5711115234001762974">"Erfassung von Kopfbewegungen"</string>
+ <string name="volume_panel_spatial_audio_tracking" msgid="5711115234001762974">"Erfassung von Kopfbewegungen"</string>
<string name="volume_ringer_change" msgid="3574969197796055532">"Zum Ändern des Klingeltonmodus tippen"</string>
<string name="volume_ringer_hint_mute" msgid="4263821214125126614">"Stummschalten"</string>
<string name="volume_ringer_hint_unmute" msgid="6119086890306456976">"Aufheben der Stummschaltung"</string>
diff --git a/packages/SystemUI/res/values-el/strings.xml b/packages/SystemUI/res/values-el/strings.xml
index 222eb29..0c3f0d5 100644
--- a/packages/SystemUI/res/values-el/strings.xml
+++ b/packages/SystemUI/res/values-el/strings.xml
@@ -365,6 +365,12 @@
<string name="quick_settings_contrast_high" msgid="656049259587494499">"Υψηλή"</string>
<!-- no translation found for quick_settings_hearing_devices_label (7277170419679404129) -->
<skip />
+ <!-- no translation found for quick_settings_hearing_devices_dialog_title (9004774017688484981) -->
+ <skip />
+ <!-- no translation found for quick_settings_pair_hearing_devices (5987105102207447322) -->
+ <skip />
+ <!-- no translation found for accessibility_hearing_device_pair_new_device (8440082580186130090) -->
+ <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>
@@ -442,10 +448,8 @@
<string name="button_to_remove_widget" msgid="3948204829181214098">"Κατάργηση"</string>
<string name="hub_mode_add_widget_button_text" msgid="4831464661209971729">"Προσθήκη γραφικού στοιχείου"</string>
<string name="hub_mode_editing_exit_button_text" msgid="3704686734192264771">"Τέλος"</string>
- <!-- no translation found for label_for_button_in_empty_state_cta (7314975555382055823) -->
- <skip />
- <!-- no translation found for title_for_empty_state_cta (6161654421223450530) -->
- <skip />
+ <string name="label_for_button_in_empty_state_cta" msgid="7314975555382055823">"Προσθήκη γραφικών στοιχείων"</string>
+ <string name="title_for_empty_state_cta" msgid="6161654421223450530">"Αποκτήστε γρήγορα πρόσβαση στα αγαπημένα σας γραφικά στοιχεία εφαρμογών χωρίς να ξεκλειδώσετε το tablet σας."</string>
<string name="dialog_title_to_allow_any_widget" msgid="1004820948962675644">"Να επιτρέπονται όλα τα γραφικά στοιχεία στην οθόνη κλειδώματος;"</string>
<string name="button_text_to_open_settings" msgid="1987729256950941628">"Άνοιγμα ρυθμίσεων"</string>
<string name="work_mode_off_title" msgid="5794818421357835873">"Αναίρ. παύσης εφαρμ. εργασιών;"</string>
@@ -581,7 +585,7 @@
<string name="screen_pinning_exit" msgid="4553787518387346893">"Η εφαρμογή ξεκαρφιτσώθηκε."</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-en-rAU/strings.xml b/packages/SystemUI/res/values-en-rAU/strings.xml
index 2355e8a..a8848a5 100644
--- a/packages/SystemUI/res/values-en-rAU/strings.xml
+++ b/packages/SystemUI/res/values-en-rAU/strings.xml
@@ -365,6 +365,12 @@
<string name="quick_settings_contrast_high" msgid="656049259587494499">"High"</string>
<!-- no translation found for quick_settings_hearing_devices_label (7277170419679404129) -->
<skip />
+ <!-- no translation found for quick_settings_hearing_devices_dialog_title (9004774017688484981) -->
+ <skip />
+ <!-- no translation found for quick_settings_pair_hearing_devices (5987105102207447322) -->
+ <skip />
+ <!-- no translation found for accessibility_hearing_device_pair_new_device (8440082580186130090) -->
+ <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>
diff --git a/packages/SystemUI/res/values-en-rCA/strings.xml b/packages/SystemUI/res/values-en-rCA/strings.xml
index 2c39531..4b69255 100644
--- a/packages/SystemUI/res/values-en-rCA/strings.xml
+++ b/packages/SystemUI/res/values-en-rCA/strings.xml
@@ -363,8 +363,10 @@
<string name="quick_settings_contrast_standard" msgid="2538227821968061832">"Standard"</string>
<string name="quick_settings_contrast_medium" msgid="5158352575583902566">"Medium"</string>
<string name="quick_settings_contrast_high" msgid="656049259587494499">"High"</string>
- <!-- no translation found for quick_settings_hearing_devices_label (7277170419679404129) -->
- <skip />
+ <string name="quick_settings_hearing_devices_label" msgid="7277170419679404129">"Hearing devices"</string>
+ <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>
<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>
diff --git a/packages/SystemUI/res/values-en-rCA/tiles_states_strings.xml b/packages/SystemUI/res/values-en-rCA/tiles_states_strings.xml
index 304abe1..39dd7c8 100644
--- a/packages/SystemUI/res/values-en-rCA/tiles_states_strings.xml
+++ b/packages/SystemUI/res/values-en-rCA/tiles_states_strings.xml
@@ -186,7 +186,9 @@
<item msgid="2478289035899842865">"Off"</item>
<item msgid="5137565285664080143">"On"</item>
</string-array>
- <!-- no translation found for tile_states_hearing_devices:0 (1235334096484287173) -->
- <!-- no translation found for tile_states_hearing_devices:1 (3079622119444911877) -->
- <!-- no translation found for tile_states_hearing_devices:2 (3028994095749238254) -->
+ <string-array name="tile_states_hearing_devices">
+ <item msgid="1235334096484287173">"Unavailable"</item>
+ <item msgid="3079622119444911877">"Off"</item>
+ <item msgid="3028994095749238254">"On"</item>
+ </string-array>
</resources>
diff --git a/packages/SystemUI/res/values-en-rGB/strings.xml b/packages/SystemUI/res/values-en-rGB/strings.xml
index 2355e8a..a8848a5 100644
--- a/packages/SystemUI/res/values-en-rGB/strings.xml
+++ b/packages/SystemUI/res/values-en-rGB/strings.xml
@@ -365,6 +365,12 @@
<string name="quick_settings_contrast_high" msgid="656049259587494499">"High"</string>
<!-- no translation found for quick_settings_hearing_devices_label (7277170419679404129) -->
<skip />
+ <!-- no translation found for quick_settings_hearing_devices_dialog_title (9004774017688484981) -->
+ <skip />
+ <!-- no translation found for quick_settings_pair_hearing_devices (5987105102207447322) -->
+ <skip />
+ <!-- no translation found for accessibility_hearing_device_pair_new_device (8440082580186130090) -->
+ <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>
diff --git a/packages/SystemUI/res/values-en-rIN/strings.xml b/packages/SystemUI/res/values-en-rIN/strings.xml
index 2355e8a..a8848a5 100644
--- a/packages/SystemUI/res/values-en-rIN/strings.xml
+++ b/packages/SystemUI/res/values-en-rIN/strings.xml
@@ -365,6 +365,12 @@
<string name="quick_settings_contrast_high" msgid="656049259587494499">"High"</string>
<!-- no translation found for quick_settings_hearing_devices_label (7277170419679404129) -->
<skip />
+ <!-- no translation found for quick_settings_hearing_devices_dialog_title (9004774017688484981) -->
+ <skip />
+ <!-- no translation found for quick_settings_pair_hearing_devices (5987105102207447322) -->
+ <skip />
+ <!-- no translation found for accessibility_hearing_device_pair_new_device (8440082580186130090) -->
+ <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>
diff --git a/packages/SystemUI/res/values-en-rXC/strings.xml b/packages/SystemUI/res/values-en-rXC/strings.xml
index 2654852..3ed9fc5 100644
--- a/packages/SystemUI/res/values-en-rXC/strings.xml
+++ b/packages/SystemUI/res/values-en-rXC/strings.xml
@@ -363,8 +363,10 @@
<string name="quick_settings_contrast_standard" msgid="2538227821968061832">"Standard"</string>
<string name="quick_settings_contrast_medium" msgid="5158352575583902566">"Medium"</string>
<string name="quick_settings_contrast_high" msgid="656049259587494499">"High"</string>
- <!-- no translation found for quick_settings_hearing_devices_label (7277170419679404129) -->
- <skip />
+ <string name="quick_settings_hearing_devices_label" msgid="7277170419679404129">"Hearing devices"</string>
+ <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>
<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>
diff --git a/packages/SystemUI/res/values-en-rXC/tiles_states_strings.xml b/packages/SystemUI/res/values-en-rXC/tiles_states_strings.xml
index fbd6d11..35ab88b 100644
--- a/packages/SystemUI/res/values-en-rXC/tiles_states_strings.xml
+++ b/packages/SystemUI/res/values-en-rXC/tiles_states_strings.xml
@@ -186,7 +186,9 @@
<item msgid="2478289035899842865">"Off"</item>
<item msgid="5137565285664080143">"On"</item>
</string-array>
- <!-- no translation found for tile_states_hearing_devices:0 (1235334096484287173) -->
- <!-- no translation found for tile_states_hearing_devices:1 (3079622119444911877) -->
- <!-- no translation found for tile_states_hearing_devices:2 (3028994095749238254) -->
+ <string-array name="tile_states_hearing_devices">
+ <item msgid="1235334096484287173">"Unavailable"</item>
+ <item msgid="3079622119444911877">"Off"</item>
+ <item msgid="3028994095749238254">"On"</item>
+ </string-array>
</resources>
diff --git a/packages/SystemUI/res/values-es-rUS/strings.xml b/packages/SystemUI/res/values-es-rUS/strings.xml
index 7092383..3755fb6 100644
--- a/packages/SystemUI/res/values-es-rUS/strings.xml
+++ b/packages/SystemUI/res/values-es-rUS/strings.xml
@@ -365,6 +365,12 @@
<string name="quick_settings_contrast_high" msgid="656049259587494499">"Alto"</string>
<!-- no translation found for quick_settings_hearing_devices_label (7277170419679404129) -->
<skip />
+ <!-- no translation found for quick_settings_hearing_devices_dialog_title (9004774017688484981) -->
+ <skip />
+ <!-- no translation found for quick_settings_pair_hearing_devices (5987105102207447322) -->
+ <skip />
+ <!-- no translation found for accessibility_hearing_device_pair_new_device (8440082580186130090) -->
+ <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>
diff --git a/packages/SystemUI/res/values-es/strings.xml b/packages/SystemUI/res/values-es/strings.xml
index bccf20b..01afa29 100644
--- a/packages/SystemUI/res/values-es/strings.xml
+++ b/packages/SystemUI/res/values-es/strings.xml
@@ -365,6 +365,12 @@
<string name="quick_settings_contrast_high" msgid="656049259587494499">"Alto"</string>
<!-- no translation found for quick_settings_hearing_devices_label (7277170419679404129) -->
<skip />
+ <!-- no translation found for quick_settings_hearing_devices_dialog_title (9004774017688484981) -->
+ <skip />
+ <!-- no translation found for quick_settings_pair_hearing_devices (5987105102207447322) -->
+ <skip />
+ <!-- no translation found for accessibility_hearing_device_pair_new_device (8440082580186130090) -->
+ <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>
@@ -442,10 +448,8 @@
<string name="button_to_remove_widget" msgid="3948204829181214098">"Quitar"</string>
<string name="hub_mode_add_widget_button_text" msgid="4831464661209971729">"Añadir widget"</string>
<string name="hub_mode_editing_exit_button_text" msgid="3704686734192264771">"Hecho"</string>
- <!-- no translation found for label_for_button_in_empty_state_cta (7314975555382055823) -->
- <skip />
- <!-- no translation found for title_for_empty_state_cta (6161654421223450530) -->
- <skip />
+ <string name="label_for_button_in_empty_state_cta" msgid="7314975555382055823">"Añadir widgets"</string>
+ <string name="title_for_empty_state_cta" msgid="6161654421223450530">"Accede rápidamente a los widgets de tus aplicaciones favoritas sin desbloquear la tablet."</string>
<string name="dialog_title_to_allow_any_widget" msgid="1004820948962675644">"¿Permitir cualquier widget en la pantalla de bloqueo?"</string>
<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>
diff --git a/packages/SystemUI/res/values-et/strings.xml b/packages/SystemUI/res/values-et/strings.xml
index b25fa06..52cbb0f 100644
--- a/packages/SystemUI/res/values-et/strings.xml
+++ b/packages/SystemUI/res/values-et/strings.xml
@@ -365,6 +365,12 @@
<string name="quick_settings_contrast_high" msgid="656049259587494499">"Kõrge"</string>
<!-- no translation found for quick_settings_hearing_devices_label (7277170419679404129) -->
<skip />
+ <!-- no translation found for quick_settings_hearing_devices_dialog_title (9004774017688484981) -->
+ <skip />
+ <!-- no translation found for quick_settings_pair_hearing_devices (5987105102207447322) -->
+ <skip />
+ <!-- no translation found for accessibility_hearing_device_pair_new_device (8440082580186130090) -->
+ <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>
@@ -442,10 +448,8 @@
<string name="button_to_remove_widget" msgid="3948204829181214098">"Eemalda"</string>
<string name="hub_mode_add_widget_button_text" msgid="4831464661209971729">"Lisa vidin"</string>
<string name="hub_mode_editing_exit_button_text" msgid="3704686734192264771">"Valmis"</string>
- <!-- no translation found for label_for_button_in_empty_state_cta (7314975555382055823) -->
- <skip />
- <!-- no translation found for title_for_empty_state_cta (6161654421223450530) -->
- <skip />
+ <string name="label_for_button_in_empty_state_cta" msgid="7314975555382055823">"Vidinate lisamine"</string>
+ <string name="title_for_empty_state_cta" msgid="6161654421223450530">"Pääsege kiiresti juurde rakenduse lemmikvidinatele ilma tahvelarvutit avamata."</string>
<string name="dialog_title_to_allow_any_widget" msgid="1004820948962675644">"Kas lubada lukustuskuval kõik vidinad?"</string>
<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>
diff --git a/packages/SystemUI/res/values-eu/strings.xml b/packages/SystemUI/res/values-eu/strings.xml
index 87c68ff..b0056f6 100644
--- a/packages/SystemUI/res/values-eu/strings.xml
+++ b/packages/SystemUI/res/values-eu/strings.xml
@@ -365,6 +365,12 @@
<string name="quick_settings_contrast_high" msgid="656049259587494499">"Altua"</string>
<!-- no translation found for quick_settings_hearing_devices_label (7277170419679404129) -->
<skip />
+ <!-- no translation found for quick_settings_hearing_devices_dialog_title (9004774017688484981) -->
+ <skip />
+ <!-- no translation found for quick_settings_pair_hearing_devices (5987105102207447322) -->
+ <skip />
+ <!-- no translation found for accessibility_hearing_device_pair_new_device (8440082580186130090) -->
+ <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>
@@ -442,10 +448,8 @@
<string name="button_to_remove_widget" msgid="3948204829181214098">"Kendu"</string>
<string name="hub_mode_add_widget_button_text" msgid="4831464661209971729">"Gehitu widget bat"</string>
<string name="hub_mode_editing_exit_button_text" msgid="3704686734192264771">"Eginda"</string>
- <!-- no translation found for label_for_button_in_empty_state_cta (7314975555382055823) -->
- <skip />
- <!-- no translation found for title_for_empty_state_cta (6161654421223450530) -->
- <skip />
+ <string name="label_for_button_in_empty_state_cta" msgid="7314975555382055823">"Gehitu widgetak"</string>
+ <string name="title_for_empty_state_cta" msgid="6161654421223450530">"Atzitu gogoko aplikazioen widgetak bizkor, tableta desblokeatu gabe."</string>
<string name="dialog_title_to_allow_any_widget" msgid="1004820948962675644">"Pantaila blokeatuan edozein widget erakusteko baimena eman nahi duzu?"</string>
<string name="button_text_to_open_settings" msgid="1987729256950941628">"Ireki ezarpenak"</string>
<string name="work_mode_off_title" msgid="5794818421357835873">"Laneko aplikazioak berraktibatu?"</string>
diff --git a/packages/SystemUI/res/values-fa/strings.xml b/packages/SystemUI/res/values-fa/strings.xml
index cc97979..de97db35 100644
--- a/packages/SystemUI/res/values-fa/strings.xml
+++ b/packages/SystemUI/res/values-fa/strings.xml
@@ -365,6 +365,12 @@
<string name="quick_settings_contrast_high" msgid="656049259587494499">"بالا"</string>
<!-- no translation found for quick_settings_hearing_devices_label (7277170419679404129) -->
<skip />
+ <!-- no translation found for quick_settings_hearing_devices_dialog_title (9004774017688484981) -->
+ <skip />
+ <!-- no translation found for quick_settings_pair_hearing_devices (5987105102207447322) -->
+ <skip />
+ <!-- no translation found for accessibility_hearing_device_pair_new_device (8440082580186130090) -->
+ <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>
@@ -442,10 +448,8 @@
<string name="button_to_remove_widget" msgid="3948204829181214098">"برداشتن"</string>
<string name="hub_mode_add_widget_button_text" msgid="4831464661209971729">"افزودن ابزارک"</string>
<string name="hub_mode_editing_exit_button_text" msgid="3704686734192264771">"تمام"</string>
- <!-- no translation found for label_for_button_in_empty_state_cta (7314975555382055823) -->
- <skip />
- <!-- no translation found for title_for_empty_state_cta (6161654421223450530) -->
- <skip />
+ <string name="label_for_button_in_empty_state_cta" msgid="7314975555382055823">"افزودن ابزارکها"</string>
+ <string name="title_for_empty_state_cta" msgid="6161654421223450530">"بدون باز کردن قفل رایانه لوحی، به ابزارک برنامههای دلخواهتان فوراً دسترسی پیدا کنید."</string>
<string name="dialog_title_to_allow_any_widget" msgid="1004820948962675644">"هر نوع ابزارکی در صفحه قفل مجاز شود؟"</string>
<string name="button_text_to_open_settings" msgid="1987729256950941628">"باز کردن تنظیمات"</string>
<string name="work_mode_off_title" msgid="5794818421357835873">"مکث برنامههای کاری لغو شود؟"</string>
@@ -617,7 +621,7 @@
<string name="volume_panel_hint_mute" msgid="6962563028495243738">"بیصدا کردن %s"</string>
<string name="volume_panel_hint_unmute" msgid="7489063242934477382">"باصدا کردن %s"</string>
<string name="media_output_label_title" msgid="872824698593182505">"درحال پخش <xliff:g id="LABEL">%s</xliff:g> در"</string>
- <string name="media_output_title_without_playing" msgid="3825663683169305013">"صدا پخش میشود در"</string>
+ <string name="media_output_title_without_playing" msgid="3825663683169305013">"صدا در این دستگاه پخش میشود:"</string>
<string name="system_ui_tuner" msgid="1471348823289954729">"تنظیمکننده واسط کاربری سیستم"</string>
<string name="status_bar" msgid="4357390266055077437">"نوار وضعیت"</string>
<string name="demo_mode" msgid="263484519766901593">"حالت نمایشی واسط کاربری سیستم"</string>
diff --git a/packages/SystemUI/res/values-fi/strings.xml b/packages/SystemUI/res/values-fi/strings.xml
index 33d0776..55413a0 100644
--- a/packages/SystemUI/res/values-fi/strings.xml
+++ b/packages/SystemUI/res/values-fi/strings.xml
@@ -365,6 +365,12 @@
<string name="quick_settings_contrast_high" msgid="656049259587494499">"Suuri"</string>
<!-- no translation found for quick_settings_hearing_devices_label (7277170419679404129) -->
<skip />
+ <!-- no translation found for quick_settings_hearing_devices_dialog_title (9004774017688484981) -->
+ <skip />
+ <!-- no translation found for quick_settings_pair_hearing_devices (5987105102207447322) -->
+ <skip />
+ <!-- no translation found for accessibility_hearing_device_pair_new_device (8440082580186130090) -->
+ <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>
@@ -442,10 +448,8 @@
<string name="button_to_remove_widget" msgid="3948204829181214098">"Poista"</string>
<string name="hub_mode_add_widget_button_text" msgid="4831464661209971729">"Lisää widget"</string>
<string name="hub_mode_editing_exit_button_text" msgid="3704686734192264771">"Valmis"</string>
- <!-- no translation found for label_for_button_in_empty_state_cta (7314975555382055823) -->
- <skip />
- <!-- no translation found for title_for_empty_state_cta (6161654421223450530) -->
- <skip />
+ <string name="label_for_button_in_empty_state_cta" msgid="7314975555382055823">"Lisää widgetejä"</string>
+ <string name="title_for_empty_state_cta" msgid="6161654421223450530">"Pääset nopeasti tuttuihin sovelluswidgeteihin avaamatta tabletin lukitusta."</string>
<string name="dialog_title_to_allow_any_widget" msgid="1004820948962675644">"Sallitaanko kaikki widgetit lukitusnäytöllä?"</string>
<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>
diff --git a/packages/SystemUI/res/values-fr-rCA/strings.xml b/packages/SystemUI/res/values-fr-rCA/strings.xml
index be65bf5..272e00e 100644
--- a/packages/SystemUI/res/values-fr-rCA/strings.xml
+++ b/packages/SystemUI/res/values-fr-rCA/strings.xml
@@ -365,6 +365,12 @@
<string name="quick_settings_contrast_high" msgid="656049259587494499">"Élevé"</string>
<!-- no translation found for quick_settings_hearing_devices_label (7277170419679404129) -->
<skip />
+ <!-- no translation found for quick_settings_hearing_devices_dialog_title (9004774017688484981) -->
+ <skip />
+ <!-- no translation found for quick_settings_pair_hearing_devices (5987105102207447322) -->
+ <skip />
+ <!-- no translation found for accessibility_hearing_device_pair_new_device (8440082580186130090) -->
+ <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>
diff --git a/packages/SystemUI/res/values-fr/strings.xml b/packages/SystemUI/res/values-fr/strings.xml
index 983a41c..41f9249 100644
--- a/packages/SystemUI/res/values-fr/strings.xml
+++ b/packages/SystemUI/res/values-fr/strings.xml
@@ -365,6 +365,12 @@
<string name="quick_settings_contrast_high" msgid="656049259587494499">"Élevé"</string>
<!-- no translation found for quick_settings_hearing_devices_label (7277170419679404129) -->
<skip />
+ <!-- no translation found for quick_settings_hearing_devices_dialog_title (9004774017688484981) -->
+ <skip />
+ <!-- no translation found for quick_settings_pair_hearing_devices (5987105102207447322) -->
+ <skip />
+ <!-- no translation found for accessibility_hearing_device_pair_new_device (8440082580186130090) -->
+ <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>
@@ -442,10 +448,8 @@
<string name="button_to_remove_widget" msgid="3948204829181214098">"Supprimer"</string>
<string name="hub_mode_add_widget_button_text" msgid="4831464661209971729">"Ajouter un widget"</string>
<string name="hub_mode_editing_exit_button_text" msgid="3704686734192264771">"OK"</string>
- <!-- no translation found for label_for_button_in_empty_state_cta (7314975555382055823) -->
- <skip />
- <!-- no translation found for title_for_empty_state_cta (6161654421223450530) -->
- <skip />
+ <string name="label_for_button_in_empty_state_cta" msgid="7314975555382055823">"Ajouter des widgets"</string>
+ <string name="title_for_empty_state_cta" msgid="6161654421223450530">"Accéder rapidement aux widgets de vos applis préférées sans déverrouiller votre tablette."</string>
<string name="dialog_title_to_allow_any_widget" msgid="1004820948962675644">"Autoriser n\'importe quel widget sur l\'écran de verrouillage ?"</string>
<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>
@@ -604,7 +608,7 @@
<string name="volume_panel_spatial_audio_title" msgid="3367048857932040660">"Son spatial"</string>
<string name="volume_panel_spatial_audio_off" msgid="4177490084606772989">"Désactivé"</string>
<string name="volume_panel_spatial_audio_fixed" msgid="3136080137827746046">"Activé"</string>
- <string name="volume_panel_spatial_audio_tracking" msgid="5711115234001762974">"Suivi des mouvements de la tête"</string>
+ <string name="volume_panel_spatial_audio_tracking" msgid="5711115234001762974">"Suivi de la tête"</string>
<string name="volume_ringer_change" msgid="3574969197796055532">"Appuyez pour changer le mode de la sonnerie"</string>
<string name="volume_ringer_hint_mute" msgid="4263821214125126614">"couper le son"</string>
<string name="volume_ringer_hint_unmute" msgid="6119086890306456976">"réactiver le son"</string>
diff --git a/packages/SystemUI/res/values-gl/strings.xml b/packages/SystemUI/res/values-gl/strings.xml
index d853b128..189f048 100644
--- a/packages/SystemUI/res/values-gl/strings.xml
+++ b/packages/SystemUI/res/values-gl/strings.xml
@@ -365,6 +365,12 @@
<string name="quick_settings_contrast_high" msgid="656049259587494499">"Nivel alto"</string>
<!-- no translation found for quick_settings_hearing_devices_label (7277170419679404129) -->
<skip />
+ <!-- no translation found for quick_settings_hearing_devices_dialog_title (9004774017688484981) -->
+ <skip />
+ <!-- no translation found for quick_settings_pair_hearing_devices (5987105102207447322) -->
+ <skip />
+ <!-- no translation found for accessibility_hearing_device_pair_new_device (8440082580186130090) -->
+ <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>
@@ -442,10 +448,8 @@
<string name="button_to_remove_widget" msgid="3948204829181214098">"Quitar"</string>
<string name="hub_mode_add_widget_button_text" msgid="4831464661209971729">"Engadir widget"</string>
<string name="hub_mode_editing_exit_button_text" msgid="3704686734192264771">"Feito"</string>
- <!-- no translation found for label_for_button_in_empty_state_cta (7314975555382055823) -->
- <skip />
- <!-- no translation found for title_for_empty_state_cta (6161654421223450530) -->
- <skip />
+ <string name="label_for_button_in_empty_state_cta" msgid="7314975555382055823">"Engadir widgets"</string>
+ <string name="title_for_empty_state_cta" msgid="6161654421223450530">"Accede rapidamente aos widgets das túas aplicacións favoritas sen desbloquear a tableta."</string>
<string name="dialog_title_to_allow_any_widget" msgid="1004820948962675644">"Queres permitir calquera widget na pantalla de bloqueo?"</string>
<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>
@@ -581,7 +585,7 @@
<string name="screen_pinning_exit" msgid="4553787518387346893">"Deixouse de fixar a aplicación"</string>
<string name="stream_voice_call" msgid="7468348170702375660">"Chamada"</string>
<string name="stream_system" msgid="7663148785370565134">"Sistema"</string>
- <string name="stream_ring" msgid="7550670036738697526">"Ton"</string>
+ <string name="stream_ring" msgid="7550670036738697526">"Son"</string>
<string name="stream_music" msgid="2188224742361847580">"Multimedia"</string>
<string name="stream_alarm" msgid="16058075093011694">"Alarma"</string>
<string name="stream_notification" msgid="7930294049046243939">"Notificación"</string>
@@ -592,9 +596,9 @@
<string name="volume_ringer_status_vibrate" msgid="6970078708957857825">"Vibrar"</string>
<string name="volume_ringer_status_silent" msgid="3691324657849880883">"Silenciar"</string>
<string name="media_device_cast" msgid="4786241789687569892">"Emitir"</string>
- <string name="stream_notification_unavailable" msgid="4313854556205836435">"Non dispoñible (o son está silenciado)"</string>
- <string name="stream_alarm_unavailable" msgid="4059817189292197839">"Non dispoñible porque está activado Non molestar"</string>
- <string name="stream_media_unavailable" msgid="6823020894438959853">"Non dispoñible porque está activado Non molestar"</string>
+ <string name="stream_notification_unavailable" msgid="4313854556205836435">"Non dispoñible: o son está silenciado"</string>
+ <string name="stream_alarm_unavailable" msgid="4059817189292197839">"Non dispoñible: Non molestar está activado"</string>
+ <string name="stream_media_unavailable" msgid="6823020894438959853">"Non dispoñible: Non molestar está activado"</string>
<string name="volume_stream_content_description_unmute" msgid="7729576371406792977">"%1$s. Toca para activar o son."</string>
<string name="volume_stream_content_description_vibrate" msgid="4858111994183089761">"%1$s. Toca para establecer a vibración. Pódense silenciar os servizos de accesibilidade."</string>
<string name="volume_stream_content_description_mute" msgid="4079046784917920984">"%1$s. Toca para silenciar. Pódense silenciar os servizos de accesibilidade."</string>
@@ -617,7 +621,7 @@
<string name="volume_panel_hint_mute" msgid="6962563028495243738">"silenciar %s"</string>
<string name="volume_panel_hint_unmute" msgid="7489063242934477382">"activar o son de %s"</string>
<string name="media_output_label_title" msgid="872824698593182505">"Reproducindo <xliff:g id="LABEL">%s</xliff:g> en"</string>
- <string name="media_output_title_without_playing" msgid="3825663683169305013">"Audio reproducido en"</string>
+ <string name="media_output_title_without_playing" msgid="3825663683169305013">"Reproducirase en"</string>
<string name="system_ui_tuner" msgid="1471348823289954729">"Configurador da IU do sistema"</string>
<string name="status_bar" msgid="4357390266055077437">"Barra de estado"</string>
<string name="demo_mode" msgid="263484519766901593">"Modo de demostración da IU do sistema"</string>
diff --git a/packages/SystemUI/res/values-gu/strings.xml b/packages/SystemUI/res/values-gu/strings.xml
index 7ef77fd..54312e1 100644
--- a/packages/SystemUI/res/values-gu/strings.xml
+++ b/packages/SystemUI/res/values-gu/strings.xml
@@ -365,6 +365,12 @@
<string name="quick_settings_contrast_high" msgid="656049259587494499">"વધુ"</string>
<!-- no translation found for quick_settings_hearing_devices_label (7277170419679404129) -->
<skip />
+ <!-- no translation found for quick_settings_hearing_devices_dialog_title (9004774017688484981) -->
+ <skip />
+ <!-- no translation found for quick_settings_pair_hearing_devices (5987105102207447322) -->
+ <skip />
+ <!-- no translation found for accessibility_hearing_device_pair_new_device (8440082580186130090) -->
+ <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>
@@ -442,10 +448,8 @@
<string name="button_to_remove_widget" msgid="3948204829181214098">"કાઢી નાખો"</string>
<string name="hub_mode_add_widget_button_text" msgid="4831464661209971729">"વિજેટ ઉમેરો"</string>
<string name="hub_mode_editing_exit_button_text" msgid="3704686734192264771">"થઈ ગયું"</string>
- <!-- no translation found for label_for_button_in_empty_state_cta (7314975555382055823) -->
- <skip />
- <!-- no translation found for title_for_empty_state_cta (6161654421223450530) -->
- <skip />
+ <string name="label_for_button_in_empty_state_cta" msgid="7314975555382055823">"વિજેટ ઉમેરો"</string>
+ <string name="title_for_empty_state_cta" msgid="6161654421223450530">"તમારું ટૅબ્લેટ અનલૉક કર્યા વિના તમારા મનપસંદ ઍપ વિજેટનો ઝડપી ઍક્સેસ મેળવો."</string>
<string name="dialog_title_to_allow_any_widget" msgid="1004820948962675644">"લૉક સ્ક્રીન પર કોઈપણ વિજેટને મંજૂરી આપીએ?"</string>
<string name="button_text_to_open_settings" msgid="1987729256950941628">"સેટિંગ ખોલો"</string>
<string name="work_mode_off_title" msgid="5794818421357835873">"ઑફિસની થોભાવેલી ઍપ ચાલુ કરીએ?"</string>
@@ -602,9 +606,9 @@
<string name="volume_stream_content_description_mute_a11y" msgid="5743548478357238156">"%1$s. મ્યૂટ કરવા માટે ટૅપ કરો."</string>
<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_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_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>
diff --git a/packages/SystemUI/res/values-hi/strings.xml b/packages/SystemUI/res/values-hi/strings.xml
index 6a7328b..ee3e40b 100644
--- a/packages/SystemUI/res/values-hi/strings.xml
+++ b/packages/SystemUI/res/values-hi/strings.xml
@@ -365,6 +365,12 @@
<string name="quick_settings_contrast_high" msgid="656049259587494499">"ज़्यादा"</string>
<!-- no translation found for quick_settings_hearing_devices_label (7277170419679404129) -->
<skip />
+ <!-- no translation found for quick_settings_hearing_devices_dialog_title (9004774017688484981) -->
+ <skip />
+ <!-- no translation found for quick_settings_pair_hearing_devices (5987105102207447322) -->
+ <skip />
+ <!-- no translation found for accessibility_hearing_device_pair_new_device (8440082580186130090) -->
+ <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>
@@ -442,10 +448,8 @@
<string name="button_to_remove_widget" msgid="3948204829181214098">"हटाएं"</string>
<string name="hub_mode_add_widget_button_text" msgid="4831464661209971729">"विजेट जोड़ें"</string>
<string name="hub_mode_editing_exit_button_text" msgid="3704686734192264771">"हो गया"</string>
- <!-- no translation found for label_for_button_in_empty_state_cta (7314975555382055823) -->
- <skip />
- <!-- no translation found for title_for_empty_state_cta (6161654421223450530) -->
- <skip />
+ <string name="label_for_button_in_empty_state_cta" msgid="7314975555382055823">"विजेट जोड़ें"</string>
+ <string name="title_for_empty_state_cta" msgid="6161654421223450530">"अपने टैबलेट को अनलॉक किए बिना, अपने पसंदीदा ऐप्लिकेशन विजेट को तुरंत ऐक्सेस करें."</string>
<string name="dialog_title_to_allow_any_widget" msgid="1004820948962675644">"लॉक स्क्रीन पर किसी भी विजेट को अनुमति देनी है?"</string>
<string name="button_text_to_open_settings" msgid="1987729256950941628">"सेटिंग खोलें"</string>
<string name="work_mode_off_title" msgid="5794818421357835873">"वर्क ऐप्लिकेशन चालू करने हैं?"</string>
@@ -581,7 +585,7 @@
<string name="screen_pinning_exit" msgid="4553787518387346893">"ऐप्लिकेशन अनपिन किया गया"</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>
@@ -592,9 +596,9 @@
<string name="volume_ringer_status_vibrate" msgid="6970078708957857825">"वाइब्रेशन"</string>
<string name="volume_ringer_status_silent" msgid="3691324657849880883">"आवाज़ बंद है"</string>
<string name="media_device_cast" msgid="4786241789687569892">"कास्ट करें"</string>
- <string name="stream_notification_unavailable" msgid="4313854556205836435">"रिंग म्यूट होने से आवाज़ नहीं सुनाई दी"</string>
+ <string name="stream_notification_unavailable" msgid="4313854556205836435">"आवाज़ नहीं आएगी, क्योंकि रिंग म्यूट है"</string>
<string name="stream_alarm_unavailable" msgid="4059817189292197839">"सुविधा बंद है, क्योंकि \'परेशान न करें\' मोड चालू है"</string>
- <string name="stream_media_unavailable" msgid="6823020894438959853">"सुविधा बंद है, क्योंकि \'परेशान न करें\' मोड चालू है"</string>
+ <string name="stream_media_unavailable" msgid="6823020894438959853">"आवाज़ बंद है, क्योंकि \'परेशान न करें\' मोड चालू है"</string>
<string name="volume_stream_content_description_unmute" msgid="7729576371406792977">"%1$s. अनम्यूट करने के लिए टैप करें."</string>
<string name="volume_stream_content_description_vibrate" msgid="4858111994183089761">"%1$s. कंपन पर सेट करने के लिए टैप करें. सुलभता सेवाएं म्यूट हो सकती हैं."</string>
<string name="volume_stream_content_description_mute" msgid="4079046784917920984">"%1$s. म्यूट करने के लिए टैप करें. सुलभता सेवाएं म्यूट हो सकती हैं."</string>
@@ -602,9 +606,9 @@
<string name="volume_stream_content_description_mute_a11y" msgid="5743548478357238156">"%1$s. म्यूट करने के लिए टैप करें."</string>
<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_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_ringer_change" msgid="3574969197796055532">"रिंगर मोड बदलने के लिए टैप करें"</string>
<string name="volume_ringer_hint_mute" msgid="4263821214125126614">"म्यूट करें"</string>
<string name="volume_ringer_hint_unmute" msgid="6119086890306456976">"अनम्यूट करें"</string>
diff --git a/packages/SystemUI/res/values-hr/strings.xml b/packages/SystemUI/res/values-hr/strings.xml
index fb9d53a..a1d885a 100644
--- a/packages/SystemUI/res/values-hr/strings.xml
+++ b/packages/SystemUI/res/values-hr/strings.xml
@@ -365,6 +365,12 @@
<string name="quick_settings_contrast_high" msgid="656049259587494499">"Visoki"</string>
<!-- no translation found for quick_settings_hearing_devices_label (7277170419679404129) -->
<skip />
+ <!-- no translation found for quick_settings_hearing_devices_dialog_title (9004774017688484981) -->
+ <skip />
+ <!-- no translation found for quick_settings_pair_hearing_devices (5987105102207447322) -->
+ <skip />
+ <!-- no translation found for accessibility_hearing_device_pair_new_device (8440082580186130090) -->
+ <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>
@@ -442,10 +448,8 @@
<string name="button_to_remove_widget" msgid="3948204829181214098">"Ukloni"</string>
<string name="hub_mode_add_widget_button_text" msgid="4831464661209971729">"Dodaj widget"</string>
<string name="hub_mode_editing_exit_button_text" msgid="3704686734192264771">"Gotovo"</string>
- <!-- no translation found for label_for_button_in_empty_state_cta (7314975555382055823) -->
- <skip />
- <!-- no translation found for title_for_empty_state_cta (6161654421223450530) -->
- <skip />
+ <string name="label_for_button_in_empty_state_cta" msgid="7314975555382055823">"Dodaj widgete"</string>
+ <string name="title_for_empty_state_cta" msgid="6161654421223450530">"Brzo pristupajte widgetima omiljenih aplikacija bez otključavanja tableta."</string>
<string name="dialog_title_to_allow_any_widget" msgid="1004820948962675644">"Želite li dopustiti bilo koji widget na zaključanom zaslonu?"</string>
<string name="button_text_to_open_settings" msgid="1987729256950941628">"Otvori postavke"</string>
<string name="work_mode_off_title" msgid="5794818421357835873">"Pokrenuti poslovne aplikacije?"</string>
@@ -603,7 +607,7 @@
<string name="volume_panel_noise_control_title" msgid="7413949943872304474">"Kontrola buke"</string>
<string name="volume_panel_spatial_audio_title" msgid="3367048857932040660">"Prostorni zvuk"</string>
<string name="volume_panel_spatial_audio_off" msgid="4177490084606772989">"Isključeno"</string>
- <string name="volume_panel_spatial_audio_fixed" msgid="3136080137827746046">"Otklonjeno"</string>
+ <string name="volume_panel_spatial_audio_fixed" msgid="3136080137827746046">"Fiksno"</string>
<string name="volume_panel_spatial_audio_tracking" msgid="5711115234001762974">"Praćenje glave"</string>
<string name="volume_ringer_change" msgid="3574969197796055532">"Dodirnite da biste promijenili način softvera zvona"</string>
<string name="volume_ringer_hint_mute" msgid="4263821214125126614">"isključivanje zvuka"</string>
@@ -665,7 +669,7 @@
<string name="notification_automatic_title" msgid="3745465364578762652">"Automatski"</string>
<string name="notification_channel_summary_low" msgid="4860617986908931158">"Bez zvuka ili vibracije"</string>
<string name="notification_conversation_summary_low" msgid="1734433426085468009">"Bez zvuka ili vibracije i prikazuje se pri dnu odjeljka razgovora"</string>
- <string name="notification_channel_summary_default" msgid="777294388712200605">"Možda će zvoniti ili vibrirati, ovisno o postavkama uređaja"</string>
+ <string name="notification_channel_summary_default" msgid="777294388712200605">"Može zvoniti ili vibrirati ovisno o postavkama uređaja"</string>
<string name="notification_channel_summary_default_with_bubbles" msgid="3482483084451555344">"Možda će zvoniti ili vibrirati, ovisno o postavkama uređaja. Razgovori iz aplikacije <xliff:g id="APP_NAME">%1$s</xliff:g> prikazuju se u oblačiću prema zadanim postavkama."</string>
<string name="notification_channel_summary_automatic" msgid="5813109268050235275">"Neka sustav odredi treba li obavijest najaviti zvukom ili vibracijom"</string>
<string name="notification_channel_summary_automatic_alerted" msgid="954166812246932240">"<b>Status:</b> promaknuta u zadanu"</string>
diff --git a/packages/SystemUI/res/values-hu/strings.xml b/packages/SystemUI/res/values-hu/strings.xml
index 224ed28..baea240 100644
--- a/packages/SystemUI/res/values-hu/strings.xml
+++ b/packages/SystemUI/res/values-hu/strings.xml
@@ -365,6 +365,12 @@
<string name="quick_settings_contrast_high" msgid="656049259587494499">"Nagy"</string>
<!-- no translation found for quick_settings_hearing_devices_label (7277170419679404129) -->
<skip />
+ <!-- no translation found for quick_settings_hearing_devices_dialog_title (9004774017688484981) -->
+ <skip />
+ <!-- no translation found for quick_settings_pair_hearing_devices (5987105102207447322) -->
+ <skip />
+ <!-- no translation found for accessibility_hearing_device_pair_new_device (8440082580186130090) -->
+ <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>
diff --git a/packages/SystemUI/res/values-hy/strings.xml b/packages/SystemUI/res/values-hy/strings.xml
index 5750db1..3f88746 100644
--- a/packages/SystemUI/res/values-hy/strings.xml
+++ b/packages/SystemUI/res/values-hy/strings.xml
@@ -365,6 +365,12 @@
<string name="quick_settings_contrast_high" msgid="656049259587494499">"Բարձր"</string>
<!-- no translation found for quick_settings_hearing_devices_label (7277170419679404129) -->
<skip />
+ <!-- no translation found for quick_settings_hearing_devices_dialog_title (9004774017688484981) -->
+ <skip />
+ <!-- no translation found for quick_settings_pair_hearing_devices (5987105102207447322) -->
+ <skip />
+ <!-- no translation found for accessibility_hearing_device_pair_new_device (8440082580186130090) -->
+ <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>
@@ -442,10 +448,8 @@
<string name="button_to_remove_widget" msgid="3948204829181214098">"Հեռացնել"</string>
<string name="hub_mode_add_widget_button_text" msgid="4831464661209971729">"Ավելացնել վիջեթ"</string>
<string name="hub_mode_editing_exit_button_text" msgid="3704686734192264771">"Պատրաստ է"</string>
- <!-- no translation found for label_for_button_in_empty_state_cta (7314975555382055823) -->
- <skip />
- <!-- no translation found for title_for_empty_state_cta (6161654421223450530) -->
- <skip />
+ <string name="label_for_button_in_empty_state_cta" msgid="7314975555382055823">"Ավելացնել վիջեթներ"</string>
+ <string name="title_for_empty_state_cta" msgid="6161654421223450530">"Արագ բացեք հավելվածների ձեր սիրելի վիջեթները առանց ապակողպելու պլանշետը։"</string>
<string name="dialog_title_to_allow_any_widget" msgid="1004820948962675644">"Թույլատրե՞լ վիջեթների ցուցադրումը կողպէկրանին"</string>
<string name="button_text_to_open_settings" msgid="1987729256950941628">"Բացել կարգավորումները"</string>
<string name="work_mode_off_title" msgid="5794818421357835873">"Վերսկսե՞լ աշխ. հավելվածները"</string>
diff --git a/packages/SystemUI/res/values-in/strings.xml b/packages/SystemUI/res/values-in/strings.xml
index 1f6e5b0..0b07a32 100644
--- a/packages/SystemUI/res/values-in/strings.xml
+++ b/packages/SystemUI/res/values-in/strings.xml
@@ -365,6 +365,12 @@
<string name="quick_settings_contrast_high" msgid="656049259587494499">"Tinggi"</string>
<!-- no translation found for quick_settings_hearing_devices_label (7277170419679404129) -->
<skip />
+ <!-- no translation found for quick_settings_hearing_devices_dialog_title (9004774017688484981) -->
+ <skip />
+ <!-- no translation found for quick_settings_pair_hearing_devices (5987105102207447322) -->
+ <skip />
+ <!-- no translation found for accessibility_hearing_device_pair_new_device (8440082580186130090) -->
+ <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>
@@ -442,10 +448,8 @@
<string name="button_to_remove_widget" msgid="3948204829181214098">"Hapus"</string>
<string name="hub_mode_add_widget_button_text" msgid="4831464661209971729">"Tambahkan widget"</string>
<string name="hub_mode_editing_exit_button_text" msgid="3704686734192264771">"Selesai"</string>
- <!-- no translation found for label_for_button_in_empty_state_cta (7314975555382055823) -->
- <skip />
- <!-- no translation found for title_for_empty_state_cta (6161654421223450530) -->
- <skip />
+ <string name="label_for_button_in_empty_state_cta" msgid="7314975555382055823">"Tambahkan widget"</string>
+ <string name="title_for_empty_state_cta" msgid="6161654421223450530">"Dapatkan akses cepat ke widget aplikasi favorit Anda tanpa perlu membuka kunci tablet."</string>
<string name="dialog_title_to_allow_any_widget" msgid="1004820948962675644">"Izinkan widget di layar kunci?"</string>
<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>
@@ -592,9 +596,9 @@
<string name="volume_ringer_status_vibrate" msgid="6970078708957857825">"Getar"</string>
<string name="volume_ringer_status_silent" msgid="3691324657849880883">"Nonaktifkan"</string>
<string name="media_device_cast" msgid="4786241789687569892">"Transmisi"</string>
- <string name="stream_notification_unavailable" msgid="4313854556205836435">"Tidak tersedia karena volume dering dibisukan"</string>
- <string name="stream_alarm_unavailable" msgid="4059817189292197839">"Tidak tersedia karena fitur Jangan Ganggu aktif"</string>
- <string name="stream_media_unavailable" msgid="6823020894438959853">"Tidak tersedia karena fitur Jangan Ganggu aktif"</string>
+ <string name="stream_notification_unavailable" msgid="4313854556205836435">"Tidak tersedia - Volume dering dibisukan"</string>
+ <string name="stream_alarm_unavailable" msgid="4059817189292197839">"Tidak tersedia - Fitur Jangan Ganggu aktif"</string>
+ <string name="stream_media_unavailable" msgid="6823020894438959853">"Tidak tersedia - Fitur Jangan Ganggu aktif"</string>
<string name="volume_stream_content_description_unmute" msgid="7729576371406792977">"%1$s. Ketuk untuk menyuarakan."</string>
<string name="volume_stream_content_description_vibrate" msgid="4858111994183089761">"%1$s. Ketuk untuk menyetel agar bergetar. Layanan aksesibilitas mungkin dibisukan."</string>
<string name="volume_stream_content_description_mute" msgid="4079046784917920984">"%1$s. Ketuk untuk membisukan. Layanan aksesibilitas mungkin dibisukan."</string>
@@ -672,10 +676,10 @@
<string name="notification_channel_summary_automatic_silenced" msgid="7403004439649872047">"<b>Status:</b> Didemosikan menjadi Senyap"</string>
<string name="notification_channel_summary_automatic_promoted" msgid="1301710305149590426">"<b>Status:</b> Diberi Peringkat Lebih Tinggi"</string>
<string name="notification_channel_summary_automatic_demoted" msgid="1831303964660807700">"<b>Status:</b> Diberi Peringkat Lebih Rendah"</string>
- <string name="notification_channel_summary_priority_baseline" msgid="46674690072551234">"Muncul di atas notifikasi percakapan dan sebagai foto profil di layar kunci"</string>
- <string name="notification_channel_summary_priority_bubble" msgid="1275413109619074576">"Muncul di atas notifikasi percakapan dan sebagai foto profil di layar kunci, ditampilkan sebagai balon"</string>
- <string name="notification_channel_summary_priority_dnd" msgid="6665395023264154361">"Muncul di atas notifikasi percakapan dan sebagai foto profil di layar kunci, mengganggu mode Jangan Ganggu"</string>
- <string name="notification_channel_summary_priority_all" msgid="7151752959650048285">"Muncul di atas notifikasi percakapan dan sebagai foto profil di layar kunci, ditampilkan sebagai balon, mengganggu mode Jangan Ganggu"</string>
+ <string name="notification_channel_summary_priority_baseline" msgid="46674690072551234">"Muncul teratas di notifikasi percakapan dan sebagai foto profil di layar kunci"</string>
+ <string name="notification_channel_summary_priority_bubble" msgid="1275413109619074576">"Muncul teratas di notifikasi percakapan dan sebagai foto profil di layar kunci, ditampilkan sebagai balon"</string>
+ <string name="notification_channel_summary_priority_dnd" msgid="6665395023264154361">"Muncul teratas di notifikasi percakapan dan sebagai foto profil di layar kunci, menimpa mode Jangan Ganggu"</string>
+ <string name="notification_channel_summary_priority_all" msgid="7151752959650048285">"Muncul teratas di notifikasi percakapan dan sebagai foto profil di layar kunci, ditampilkan sebagai balon, menimpa mode Jangan Ganggu"</string>
<string name="notification_priority_title" msgid="2079708866333537093">"Prioritas"</string>
<string name="no_shortcut" msgid="8257177117568230126">"<xliff:g id="APP_NAME">%1$s</xliff:g> tidak mendukung fitur percakapan"</string>
<string name="notification_unblockable_desc" msgid="2073030886006190804">"Notifikasi ini tidak dapat diubah."</string>
@@ -1121,7 +1125,7 @@
<string name="basic_status" msgid="2315371112182658176">"Membuka percakapan"</string>
<string name="select_conversation_title" msgid="6716364118095089519">"Widget Percakapan"</string>
<string name="select_conversation_text" msgid="3376048251434956013">"Ketuk percakapan untuk menambahkannya ke Layar utama"</string>
- <string name="no_conversations_text" msgid="5354115541282395015">"Percakapan terbaru Anda akan ditampilkan di sini"</string>
+ <string name="no_conversations_text" msgid="5354115541282395015">"Percakapan terbaru akan muncul di sini"</string>
<string name="priority_conversations" msgid="3967482288896653039">"Percakapan prioritas"</string>
<string name="recent_conversations" msgid="8531874684782574622">"Percakapan terbaru"</string>
<string name="days_timestamp" msgid="5821854736213214331">"<xliff:g id="DURATION">%1$s</xliff:g> hari lalu"</string>
diff --git a/packages/SystemUI/res/values-is/strings.xml b/packages/SystemUI/res/values-is/strings.xml
index aafd70c..56ea0d5 100644
--- a/packages/SystemUI/res/values-is/strings.xml
+++ b/packages/SystemUI/res/values-is/strings.xml
@@ -365,6 +365,12 @@
<string name="quick_settings_contrast_high" msgid="656049259587494499">"Mikið"</string>
<!-- no translation found for quick_settings_hearing_devices_label (7277170419679404129) -->
<skip />
+ <!-- no translation found for quick_settings_hearing_devices_dialog_title (9004774017688484981) -->
+ <skip />
+ <!-- no translation found for quick_settings_pair_hearing_devices (5987105102207447322) -->
+ <skip />
+ <!-- no translation found for accessibility_hearing_device_pair_new_device (8440082580186130090) -->
+ <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>
@@ -442,10 +448,8 @@
<string name="button_to_remove_widget" msgid="3948204829181214098">"Fjarlægja"</string>
<string name="hub_mode_add_widget_button_text" msgid="4831464661209971729">"Bæta græju við"</string>
<string name="hub_mode_editing_exit_button_text" msgid="3704686734192264771">"Lokið"</string>
- <!-- no translation found for label_for_button_in_empty_state_cta (7314975555382055823) -->
- <skip />
- <!-- no translation found for title_for_empty_state_cta (6161654421223450530) -->
- <skip />
+ <string name="label_for_button_in_empty_state_cta" msgid="7314975555382055823">"Bæta við græjum"</string>
+ <string name="title_for_empty_state_cta" msgid="6161654421223450530">"Fáðu skjótan aðgang að eftirlætis forritagræjunum án þess að taka spjaldtölvuna úr lás."</string>
<string name="dialog_title_to_allow_any_widget" msgid="1004820948962675644">"Leyfa allar græjur á lásskjá?"</string>
<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>
@@ -593,8 +597,8 @@
<string name="volume_ringer_status_silent" msgid="3691324657849880883">"Hljóð af"</string>
<string name="media_device_cast" msgid="4786241789687569892">"Senda út"</string>
<string name="stream_notification_unavailable" msgid="4313854556205836435">"Ekki í boði þar sem hringing er þögguð"</string>
- <string name="stream_alarm_unavailable" msgid="4059817189292197839">"Ekki í boði vegna þess að kveikt er á „Ónáðið ekki“"</string>
- <string name="stream_media_unavailable" msgid="6823020894438959853">"Ekki í boði vegna þess að kveikt er á „Ónáðið ekki“"</string>
+ <string name="stream_alarm_unavailable" msgid="4059817189292197839">"Ekki í boði því að kveikt er á „Ónáðið ekki“"</string>
+ <string name="stream_media_unavailable" msgid="6823020894438959853">"Ekki í boði því að kveikt er á „Ónáðið ekki“"</string>
<string name="volume_stream_content_description_unmute" msgid="7729576371406792977">"%1$s. Ýttu til að hætta að þagga."</string>
<string name="volume_stream_content_description_vibrate" msgid="4858111994183089761">"%1$s. Ýttu til að stilla á titring. Hugsanlega verður slökkt á hljóði aðgengisþjónustu."</string>
<string name="volume_stream_content_description_mute" msgid="4079046784917920984">"%1$s. Ýttu til að þagga. Hugsanlega verður slökkt á hljóði aðgengisþjónustu."</string>
diff --git a/packages/SystemUI/res/values-it/strings.xml b/packages/SystemUI/res/values-it/strings.xml
index 5234641..08f07ef 100644
--- a/packages/SystemUI/res/values-it/strings.xml
+++ b/packages/SystemUI/res/values-it/strings.xml
@@ -363,7 +363,12 @@
<string name="quick_settings_contrast_standard" msgid="2538227821968061832">"Standard"</string>
<string name="quick_settings_contrast_medium" msgid="5158352575583902566">"Medio"</string>
<string name="quick_settings_contrast_high" msgid="656049259587494499">"Alto"</string>
- <!-- no translation found for quick_settings_hearing_devices_label (7277170419679404129) -->
+ <string name="quick_settings_hearing_devices_label" msgid="7277170419679404129">"Apparecchi acustici"</string>
+ <!-- no translation found for quick_settings_hearing_devices_dialog_title (9004774017688484981) -->
+ <skip />
+ <!-- no translation found for quick_settings_pair_hearing_devices (5987105102207447322) -->
+ <skip />
+ <!-- no translation found for accessibility_hearing_device_pair_new_device (8440082580186130090) -->
<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>
@@ -442,10 +447,8 @@
<string name="button_to_remove_widget" msgid="3948204829181214098">"Rimuovi"</string>
<string name="hub_mode_add_widget_button_text" msgid="4831464661209971729">"Aggiungi widget"</string>
<string name="hub_mode_editing_exit_button_text" msgid="3704686734192264771">"Fine"</string>
- <!-- no translation found for label_for_button_in_empty_state_cta (7314975555382055823) -->
- <skip />
- <!-- no translation found for title_for_empty_state_cta (6161654421223450530) -->
- <skip />
+ <string name="label_for_button_in_empty_state_cta" msgid="7314975555382055823">"Aggiungi widget"</string>
+ <string name="title_for_empty_state_cta" msgid="6161654421223450530">"Accedi rapidamente ai widget delle tue app preferite senza sbloccare il tablet."</string>
<string name="dialog_title_to_allow_any_widget" msgid="1004820948962675644">"Consentire tutti i widget nella schermata di blocco?"</string>
<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>
@@ -582,7 +585,7 @@
<string name="stream_voice_call" msgid="7468348170702375660">"Chiamata"</string>
<string name="stream_system" msgid="7663148785370565134">"Sistema"</string>
<string name="stream_ring" msgid="7550670036738697526">"Suoneria"</string>
- <string name="stream_music" msgid="2188224742361847580">"Supporti multimediali"</string>
+ <string name="stream_music" msgid="2188224742361847580">"Contenuti multimediali"</string>
<string name="stream_alarm" msgid="16058075093011694">"Sveglia"</string>
<string name="stream_notification" msgid="7930294049046243939">"Notifica"</string>
<string name="stream_bluetooth_sco" msgid="6234562365528664331">"Bluetooth"</string>
@@ -594,7 +597,7 @@
<string name="media_device_cast" msgid="4786241789687569892">"Trasmissione"</string>
<string name="stream_notification_unavailable" msgid="4313854556205836435">"Non disponibile con l\'audio disattivato"</string>
<string name="stream_alarm_unavailable" msgid="4059817189292197839">"Non disponibile: modalità Non disturbare attiva"</string>
- <string name="stream_media_unavailable" msgid="6823020894438959853">"Non disponibile: modalità Non disturbare attiva"</string>
+ <string name="stream_media_unavailable" msgid="6823020894438959853">"Non disponibili con \"Non disturbare\" attiva"</string>
<string name="volume_stream_content_description_unmute" msgid="7729576371406792977">"%1$s. Tocca per riattivare l\'audio."</string>
<string name="volume_stream_content_description_vibrate" msgid="4858111994183089761">"%1$s. Tocca per attivare la vibrazione. L\'audio dei servizi di accessibilità può essere disattivato."</string>
<string name="volume_stream_content_description_mute" msgid="4079046784917920984">"%1$s. Tocca per disattivare l\'audio. L\'audio dei servizi di accessibilità può essere disattivato."</string>
diff --git a/packages/SystemUI/res/values-it/tiles_states_strings.xml b/packages/SystemUI/res/values-it/tiles_states_strings.xml
index 7ffd71c..aa76983 100644
--- a/packages/SystemUI/res/values-it/tiles_states_strings.xml
+++ b/packages/SystemUI/res/values-it/tiles_states_strings.xml
@@ -186,7 +186,9 @@
<item msgid="2478289035899842865">"Off"</item>
<item msgid="5137565285664080143">"On"</item>
</string-array>
- <!-- no translation found for tile_states_hearing_devices:0 (1235334096484287173) -->
- <!-- no translation found for tile_states_hearing_devices:1 (3079622119444911877) -->
- <!-- no translation found for tile_states_hearing_devices:2 (3028994095749238254) -->
+ <string-array name="tile_states_hearing_devices">
+ <item msgid="1235334096484287173">"Non disponibile"</item>
+ <item msgid="3079622119444911877">"Off"</item>
+ <item msgid="3028994095749238254">"On"</item>
+ </string-array>
</resources>
diff --git a/packages/SystemUI/res/values-iw/strings.xml b/packages/SystemUI/res/values-iw/strings.xml
index 619eaf3..24ec785 100644
--- a/packages/SystemUI/res/values-iw/strings.xml
+++ b/packages/SystemUI/res/values-iw/strings.xml
@@ -365,6 +365,12 @@
<string name="quick_settings_contrast_high" msgid="656049259587494499">"גבוהה"</string>
<!-- no translation found for quick_settings_hearing_devices_label (7277170419679404129) -->
<skip />
+ <!-- no translation found for quick_settings_hearing_devices_dialog_title (9004774017688484981) -->
+ <skip />
+ <!-- no translation found for quick_settings_pair_hearing_devices (5987105102207447322) -->
+ <skip />
+ <!-- no translation found for accessibility_hearing_device_pair_new_device (8440082580186130090) -->
+ <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>
@@ -442,10 +448,8 @@
<string name="button_to_remove_widget" msgid="3948204829181214098">"הסרה"</string>
<string name="hub_mode_add_widget_button_text" msgid="4831464661209971729">"הוספת ווידג\'ט"</string>
<string name="hub_mode_editing_exit_button_text" msgid="3704686734192264771">"סיום"</string>
- <!-- no translation found for label_for_button_in_empty_state_cta (7314975555382055823) -->
- <skip />
- <!-- no translation found for title_for_empty_state_cta (6161654421223450530) -->
- <skip />
+ <string name="label_for_button_in_empty_state_cta" msgid="7314975555382055823">"הוספת ווידג\'טים"</string>
+ <string name="title_for_empty_state_cta" msgid="6161654421223450530">"קבלת גישה מהירה לווידג\'טים של האפליקציות המועדפות עליך בלי לבטל את נעילת הטאבלט."</string>
<string name="dialog_title_to_allow_any_widget" msgid="1004820948962675644">"לאפשר להציג כל ווידג\'ט במסך הנעילה?"</string>
<string name="button_text_to_open_settings" msgid="1987729256950941628">"לפתיחת ההגדרות"</string>
<string name="work_mode_off_title" msgid="5794818421357835873">"להפעיל את האפליקציות לעבודה?"</string>
@@ -600,7 +604,7 @@
<string name="volume_stream_content_description_mute" msgid="4079046784917920984">"%1$s. יש להקיש כדי להשתיק. ייתכן ששירותי הנגישות יושתקו."</string>
<string name="volume_stream_content_description_vibrate_a11y" msgid="2742330052979397471">"%1$s. יש להקיש כדי להעביר למצב רטט."</string>
<string name="volume_stream_content_description_mute_a11y" msgid="5743548478357238156">"%1$s. יש להקיש כדי להשתיק."</string>
- <string name="volume_panel_noise_control_title" msgid="7413949943872304474">"בקרת הרעש"</string>
+ <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>
diff --git a/packages/SystemUI/res/values-ja/strings.xml b/packages/SystemUI/res/values-ja/strings.xml
index 438fce6..6e2ca40 100644
--- a/packages/SystemUI/res/values-ja/strings.xml
+++ b/packages/SystemUI/res/values-ja/strings.xml
@@ -363,7 +363,12 @@
<string name="quick_settings_contrast_standard" msgid="2538227821968061832">"標準"</string>
<string name="quick_settings_contrast_medium" msgid="5158352575583902566">"中"</string>
<string name="quick_settings_contrast_high" msgid="656049259587494499">"高"</string>
- <!-- no translation found for quick_settings_hearing_devices_label (7277170419679404129) -->
+ <string name="quick_settings_hearing_devices_label" msgid="7277170419679404129">"補聴器"</string>
+ <!-- no translation found for quick_settings_hearing_devices_dialog_title (9004774017688484981) -->
+ <skip />
+ <!-- no translation found for quick_settings_pair_hearing_devices (5987105102207447322) -->
+ <skip />
+ <!-- no translation found for accessibility_hearing_device_pair_new_device (8440082580186130090) -->
<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>
@@ -442,10 +447,8 @@
<string name="button_to_remove_widget" msgid="3948204829181214098">"削除"</string>
<string name="hub_mode_add_widget_button_text" msgid="4831464661209971729">"ウィジェットを追加"</string>
<string name="hub_mode_editing_exit_button_text" msgid="3704686734192264771">"完了"</string>
- <!-- no translation found for label_for_button_in_empty_state_cta (7314975555382055823) -->
- <skip />
- <!-- no translation found for title_for_empty_state_cta (6161654421223450530) -->
- <skip />
+ <string name="label_for_button_in_empty_state_cta" msgid="7314975555382055823">"ウィジェットを追加"</string>
+ <string name="title_for_empty_state_cta" msgid="6161654421223450530">"タブレットのロックを解除せずにお気に入りのアプリ ウィジェットにすばやくアクセスできます。"</string>
<string name="dialog_title_to_allow_any_widget" msgid="1004820948962675644">"ロック画面でのウィジェットを許可しますか?"</string>
<string name="button_text_to_open_settings" msgid="1987729256950941628">"設定を開く"</string>
<string name="work_mode_off_title" msgid="5794818421357835873">"仕事用アプリの停止解除"</string>
@@ -663,7 +666,7 @@
<string name="notification_silence_title" msgid="8608090968400832335">"サイレント"</string>
<string name="notification_alert_title" msgid="3656229781017543655">"デフォルト"</string>
<string name="notification_automatic_title" msgid="3745465364578762652">"自動"</string>
- <string name="notification_channel_summary_low" msgid="4860617986908931158">"着信音もバイブレーションも無効になります"</string>
+ <string name="notification_channel_summary_low" msgid="4860617986908931158">"着信音もバイブレーションも OFF になります"</string>
<string name="notification_conversation_summary_low" msgid="1734433426085468009">"着信音もバイブレーションも無効になり会話セクションの下に表示されます"</string>
<string name="notification_channel_summary_default" msgid="777294388712200605">"デバイスの設定を基に着信音またはバイブレーションが有効になります"</string>
<string name="notification_channel_summary_default_with_bubbles" msgid="3482483084451555344">"デバイスの設定を基に着信音またはバイブレーションが有効になります。デフォルトでは <xliff:g id="APP_NAME">%1$s</xliff:g> からの会話がふきだしで表示されます。"</string>
diff --git a/packages/SystemUI/res/values-ja/tiles_states_strings.xml b/packages/SystemUI/res/values-ja/tiles_states_strings.xml
index 52aef897..790445c 100644
--- a/packages/SystemUI/res/values-ja/tiles_states_strings.xml
+++ b/packages/SystemUI/res/values-ja/tiles_states_strings.xml
@@ -186,7 +186,9 @@
<item msgid="2478289035899842865">"OFF"</item>
<item msgid="5137565285664080143">"ON"</item>
</string-array>
- <!-- no translation found for tile_states_hearing_devices:0 (1235334096484287173) -->
- <!-- no translation found for tile_states_hearing_devices:1 (3079622119444911877) -->
- <!-- no translation found for tile_states_hearing_devices:2 (3028994095749238254) -->
+ <string-array name="tile_states_hearing_devices">
+ <item msgid="1235334096484287173">"使用不可"</item>
+ <item msgid="3079622119444911877">"OFF"</item>
+ <item msgid="3028994095749238254">"ON"</item>
+ </string-array>
</resources>
diff --git a/packages/SystemUI/res/values-ka/strings.xml b/packages/SystemUI/res/values-ka/strings.xml
index 799fb9c..b2295f3 100644
--- a/packages/SystemUI/res/values-ka/strings.xml
+++ b/packages/SystemUI/res/values-ka/strings.xml
@@ -363,7 +363,12 @@
<string name="quick_settings_contrast_standard" msgid="2538227821968061832">"სტანდარტული"</string>
<string name="quick_settings_contrast_medium" msgid="5158352575583902566">"საშუალო"</string>
<string name="quick_settings_contrast_high" msgid="656049259587494499">"მაღალი"</string>
- <!-- no translation found for quick_settings_hearing_devices_label (7277170419679404129) -->
+ <string name="quick_settings_hearing_devices_label" msgid="7277170419679404129">"სმენის აპარატები"</string>
+ <!-- no translation found for quick_settings_hearing_devices_dialog_title (9004774017688484981) -->
+ <skip />
+ <!-- no translation found for quick_settings_pair_hearing_devices (5987105102207447322) -->
+ <skip />
+ <!-- no translation found for accessibility_hearing_device_pair_new_device (8440082580186130090) -->
<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>
@@ -602,7 +607,7 @@
<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_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>
diff --git a/packages/SystemUI/res/values-ka/tiles_states_strings.xml b/packages/SystemUI/res/values-ka/tiles_states_strings.xml
index aae98ba..21f8102 100644
--- a/packages/SystemUI/res/values-ka/tiles_states_strings.xml
+++ b/packages/SystemUI/res/values-ka/tiles_states_strings.xml
@@ -186,7 +186,9 @@
<item msgid="2478289035899842865">"გამორთული"</item>
<item msgid="5137565285664080143">"ჩართული"</item>
</string-array>
- <!-- no translation found for tile_states_hearing_devices:0 (1235334096484287173) -->
- <!-- no translation found for tile_states_hearing_devices:1 (3079622119444911877) -->
- <!-- no translation found for tile_states_hearing_devices:2 (3028994095749238254) -->
+ <string-array name="tile_states_hearing_devices">
+ <item msgid="1235334096484287173">"მიუწვდომელია"</item>
+ <item msgid="3079622119444911877">"გამორთულია"</item>
+ <item msgid="3028994095749238254">"ჩართულია"</item>
+ </string-array>
</resources>
diff --git a/packages/SystemUI/res/values-kk/strings.xml b/packages/SystemUI/res/values-kk/strings.xml
index 6d538bd..127e81e 100644
--- a/packages/SystemUI/res/values-kk/strings.xml
+++ b/packages/SystemUI/res/values-kk/strings.xml
@@ -363,7 +363,12 @@
<string name="quick_settings_contrast_standard" msgid="2538227821968061832">"Стандартты режим"</string>
<string name="quick_settings_contrast_medium" msgid="5158352575583902566">"Орташа"</string>
<string name="quick_settings_contrast_high" msgid="656049259587494499">"Жоғары"</string>
- <!-- no translation found for quick_settings_hearing_devices_label (7277170419679404129) -->
+ <string name="quick_settings_hearing_devices_label" msgid="7277170419679404129">"Есту құрылғылары"</string>
+ <!-- no translation found for quick_settings_hearing_devices_dialog_title (9004774017688484981) -->
+ <skip />
+ <!-- no translation found for quick_settings_pair_hearing_devices (5987105102207447322) -->
+ <skip />
+ <!-- no translation found for accessibility_hearing_device_pair_new_device (8440082580186130090) -->
<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>
@@ -442,10 +447,8 @@
<string name="button_to_remove_widget" msgid="3948204829181214098">"Өшіру"</string>
<string name="hub_mode_add_widget_button_text" msgid="4831464661209971729">"Виджет қосу"</string>
<string name="hub_mode_editing_exit_button_text" msgid="3704686734192264771">"Дайын"</string>
- <!-- no translation found for label_for_button_in_empty_state_cta (7314975555382055823) -->
- <skip />
- <!-- no translation found for title_for_empty_state_cta (6161654421223450530) -->
- <skip />
+ <string name="label_for_button_in_empty_state_cta" msgid="7314975555382055823">"Виджеттер қосу"</string>
+ <string name="title_for_empty_state_cta" msgid="6161654421223450530">"Таңдаулы қолданба виджеттерін планшет құлпын ашпай-ақ жылдам пайдаланыңыз."</string>
<string name="dialog_title_to_allow_any_widget" msgid="1004820948962675644">"Құлыптаулы экранда кез келген виджетке рұқсат беру керек пе?"</string>
<string name="button_text_to_open_settings" msgid="1987729256950941628">"Параметрлерді ашу"</string>
<string name="work_mode_off_title" msgid="5794818421357835873">"Жұмыс қолданбаларын қайта қосасыз ба?"</string>
diff --git a/packages/SystemUI/res/values-kk/tiles_states_strings.xml b/packages/SystemUI/res/values-kk/tiles_states_strings.xml
index 98f6a3e..cf3aa69 100644
--- a/packages/SystemUI/res/values-kk/tiles_states_strings.xml
+++ b/packages/SystemUI/res/values-kk/tiles_states_strings.xml
@@ -186,7 +186,9 @@
<item msgid="2478289035899842865">"Өшірулі"</item>
<item msgid="5137565285664080143">"Қосулы"</item>
</string-array>
- <!-- no translation found for tile_states_hearing_devices:0 (1235334096484287173) -->
- <!-- no translation found for tile_states_hearing_devices:1 (3079622119444911877) -->
- <!-- no translation found for tile_states_hearing_devices:2 (3028994095749238254) -->
+ <string-array name="tile_states_hearing_devices">
+ <item msgid="1235334096484287173">"Қолжетімді емес"</item>
+ <item msgid="3079622119444911877">"Өшірулі"</item>
+ <item msgid="3028994095749238254">"Қосулы"</item>
+ </string-array>
</resources>
diff --git a/packages/SystemUI/res/values-km/strings.xml b/packages/SystemUI/res/values-km/strings.xml
index 35c8bab..f2596db 100644
--- a/packages/SystemUI/res/values-km/strings.xml
+++ b/packages/SystemUI/res/values-km/strings.xml
@@ -363,7 +363,12 @@
<string name="quick_settings_contrast_standard" msgid="2538227821968061832">"ស្តង់ដារ"</string>
<string name="quick_settings_contrast_medium" msgid="5158352575583902566">"មធ្យម"</string>
<string name="quick_settings_contrast_high" msgid="656049259587494499">"ខ្ពស់"</string>
- <!-- no translation found for quick_settings_hearing_devices_label (7277170419679404129) -->
+ <string name="quick_settings_hearing_devices_label" msgid="7277170419679404129">"ឧបករណ៍ជំនួយការស្ដាប់"</string>
+ <!-- no translation found for quick_settings_hearing_devices_dialog_title (9004774017688484981) -->
+ <skip />
+ <!-- no translation found for quick_settings_pair_hearing_devices (5987105102207447322) -->
+ <skip />
+ <!-- no translation found for accessibility_hearing_device_pair_new_device (8440082580186130090) -->
<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>
@@ -442,10 +447,8 @@
<string name="button_to_remove_widget" msgid="3948204829181214098">"ដកចេញ"</string>
<string name="hub_mode_add_widget_button_text" msgid="4831464661209971729">"បញ្ចូលធាតុក្រាហ្វិក"</string>
<string name="hub_mode_editing_exit_button_text" msgid="3704686734192264771">"រួចរាល់"</string>
- <!-- no translation found for label_for_button_in_empty_state_cta (7314975555382055823) -->
- <skip />
- <!-- no translation found for title_for_empty_state_cta (6161654421223450530) -->
- <skip />
+ <string name="label_for_button_in_empty_state_cta" msgid="7314975555382055823">"បញ្ចូលធាតុក្រាហ្វិក"</string>
+ <string name="title_for_empty_state_cta" msgid="6161654421223450530">"ទទួលបានសិទ្ធិចូលប្រើប្រាស់រហ័សទៅកាន់ធាតុក្រាហ្វិកកម្មវិធីដែលអ្នកចូលចិត្តដោយមិនចាំបាច់ដោះសោថេប្លេតរបស់អ្នក។"</string>
<string name="dialog_title_to_allow_any_widget" msgid="1004820948962675644">"អនុញ្ញាតធាតុក្រាហ្វិកនៅលើអេក្រង់ចាក់សោឬ?"</string>
<string name="button_text_to_open_settings" msgid="1987729256950941628">"បើកការកំណត់"</string>
<string name="work_mode_off_title" msgid="5794818421357835873">"ឈប់ផ្អាកកម្មវិធីការងារឬ?"</string>
diff --git a/packages/SystemUI/res/values-km/tiles_states_strings.xml b/packages/SystemUI/res/values-km/tiles_states_strings.xml
index 7e17620..54790f6 100644
--- a/packages/SystemUI/res/values-km/tiles_states_strings.xml
+++ b/packages/SystemUI/res/values-km/tiles_states_strings.xml
@@ -186,7 +186,9 @@
<item msgid="2478289035899842865">"បិទ"</item>
<item msgid="5137565285664080143">"បើក"</item>
</string-array>
- <!-- no translation found for tile_states_hearing_devices:0 (1235334096484287173) -->
- <!-- no translation found for tile_states_hearing_devices:1 (3079622119444911877) -->
- <!-- no translation found for tile_states_hearing_devices:2 (3028994095749238254) -->
+ <string-array name="tile_states_hearing_devices">
+ <item msgid="1235334096484287173">"មិនមានទេ"</item>
+ <item msgid="3079622119444911877">"បិទ"</item>
+ <item msgid="3028994095749238254">"បើក"</item>
+ </string-array>
</resources>
diff --git a/packages/SystemUI/res/values-kn/strings.xml b/packages/SystemUI/res/values-kn/strings.xml
index f0ad463..7323450 100644
--- a/packages/SystemUI/res/values-kn/strings.xml
+++ b/packages/SystemUI/res/values-kn/strings.xml
@@ -365,6 +365,12 @@
<string name="quick_settings_contrast_high" msgid="656049259587494499">"ಹೆಚ್ಚು"</string>
<!-- no translation found for quick_settings_hearing_devices_label (7277170419679404129) -->
<skip />
+ <!-- no translation found for quick_settings_hearing_devices_dialog_title (9004774017688484981) -->
+ <skip />
+ <!-- no translation found for quick_settings_pair_hearing_devices (5987105102207447322) -->
+ <skip />
+ <!-- no translation found for accessibility_hearing_device_pair_new_device (8440082580186130090) -->
+ <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>
@@ -442,10 +448,8 @@
<string name="button_to_remove_widget" msgid="3948204829181214098">"ತೆಗೆದುಹಾಕಿ"</string>
<string name="hub_mode_add_widget_button_text" msgid="4831464661209971729">"ವಿಜೆಟ್ ಅನ್ನು ಸೇರಿಸಿ"</string>
<string name="hub_mode_editing_exit_button_text" msgid="3704686734192264771">"ಮುಗಿದಿದೆ"</string>
- <!-- no translation found for label_for_button_in_empty_state_cta (7314975555382055823) -->
- <skip />
- <!-- no translation found for title_for_empty_state_cta (6161654421223450530) -->
- <skip />
+ <string name="label_for_button_in_empty_state_cta" msgid="7314975555382055823">"ವಿಜೆಟ್ಗಳನ್ನು ಸೇರಿಸಿ"</string>
+ <string name="title_for_empty_state_cta" msgid="6161654421223450530">"ನಿಮ್ಮ ಟ್ಯಾಬ್ಲೆಟ್ ಅನ್ನು ಅನ್ಲಾಕ್ ಮಾಡದೆಯೇ ನಿಮ್ಮ ಮೆಚ್ಚಿನ ಆ್ಯಪ್ ವಿಜೆಟ್ಗಳಿಗೆ ತ್ವರಿತ ಆ್ಯಕ್ಸೆಸ್ ಅನ್ನು ಪಡೆಯಿರಿ."</string>
<string name="dialog_title_to_allow_any_widget" msgid="1004820948962675644">"ಲಾಕ್ ಸ್ಕ್ರೀನ್ನಲ್ಲಿ ಯಾವುದೇ ವಿಜೆಟ್ ಅನ್ನು ಅನುಮತಿಸಬೇಕೇ?"</string>
<string name="button_text_to_open_settings" msgid="1987729256950941628">"ಸೆಟ್ಟಿಂಗ್ಗಳನ್ನು ತೆರೆಯಿರಿ"</string>
<string name="work_mode_off_title" msgid="5794818421357835873">"ಕೆಲಸದ ಆ್ಯಪ್ ವಿರಾಮ ರದ್ದುಮಾಡಬೇಕೇ"</string>
@@ -617,7 +621,7 @@
<string name="volume_panel_hint_mute" msgid="6962563028495243738">"%s ಮ್ಯೂಟ್ ಮಾಡಿ"</string>
<string name="volume_panel_hint_unmute" msgid="7489063242934477382">"%s ಅನ್ಮ್ಯೂಟ್ ಮಾಡಿ"</string>
<string name="media_output_label_title" msgid="872824698593182505">"<xliff:g id="LABEL">%s</xliff:g> ನಲ್ಲಿ ಪ್ಲೇ ಆಗು..."</string>
- <string name="media_output_title_without_playing" msgid="3825663683169305013">"ಇಲ್ಲಿ ಆಡಿಯೋ ಪ್ಲೇ..."</string>
+ <string name="media_output_title_without_playing" msgid="3825663683169305013">"ಇದರಲ್ಲಿ ಪ್ಲೇ ಆಗುತ್ತದೆ"</string>
<string name="system_ui_tuner" msgid="1471348823289954729">"ಸಿಸ್ಟಂ UI ಟ್ಯೂನರ್"</string>
<string name="status_bar" msgid="4357390266055077437">"ಸ್ಥಿತಿ ಪಟ್ಟಿ"</string>
<string name="demo_mode" msgid="263484519766901593">"ಸಿಸ್ಟಂ UI ಡೆಮೋ ಮೋಡ್"</string>
diff --git a/packages/SystemUI/res/values-ko/strings.xml b/packages/SystemUI/res/values-ko/strings.xml
index 26cfb6a..9a4c60b 100644
--- a/packages/SystemUI/res/values-ko/strings.xml
+++ b/packages/SystemUI/res/values-ko/strings.xml
@@ -365,6 +365,12 @@
<string name="quick_settings_contrast_high" msgid="656049259587494499">"높음"</string>
<!-- no translation found for quick_settings_hearing_devices_label (7277170419679404129) -->
<skip />
+ <!-- no translation found for quick_settings_hearing_devices_dialog_title (9004774017688484981) -->
+ <skip />
+ <!-- no translation found for quick_settings_pair_hearing_devices (5987105102207447322) -->
+ <skip />
+ <!-- no translation found for accessibility_hearing_device_pair_new_device (8440082580186130090) -->
+ <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>
@@ -442,10 +448,8 @@
<string name="button_to_remove_widget" msgid="3948204829181214098">"삭제"</string>
<string name="hub_mode_add_widget_button_text" msgid="4831464661209971729">"위젯 추가"</string>
<string name="hub_mode_editing_exit_button_text" msgid="3704686734192264771">"완료"</string>
- <!-- no translation found for label_for_button_in_empty_state_cta (7314975555382055823) -->
- <skip />
- <!-- no translation found for title_for_empty_state_cta (6161654421223450530) -->
- <skip />
+ <string name="label_for_button_in_empty_state_cta" msgid="7314975555382055823">"위젯 추가"</string>
+ <string name="title_for_empty_state_cta" msgid="6161654421223450530">"태블릿을 잠금 해제하지 않고도 즐겨 사용하는 앱 위젯에 빠르게 액세스하세요"</string>
<string name="dialog_title_to_allow_any_widget" msgid="1004820948962675644">"잠금 화면에서 위젯 사용을 허용하시겠습니까?"</string>
<string name="button_text_to_open_settings" msgid="1987729256950941628">"설정 열기"</string>
<string name="work_mode_off_title" msgid="5794818421357835873">"직장 앱 일시중지를 해제하시겠습니까?"</string>
@@ -593,8 +597,8 @@
<string name="volume_ringer_status_silent" msgid="3691324657849880883">"음소거"</string>
<string name="media_device_cast" msgid="4786241789687569892">"전송"</string>
<string name="stream_notification_unavailable" msgid="4313854556205836435">"벨소리가 음소거되어 있으므로 사용할 수 없음"</string>
- <string name="stream_alarm_unavailable" msgid="4059817189292197839">"방해 금지 모드가 사용 설정되어 있어 사용할 수 없음"</string>
- <string name="stream_media_unavailable" msgid="6823020894438959853">"방해 금지 모드가 사용 설정되어 있어 사용할 수 없음"</string>
+ <string name="stream_alarm_unavailable" msgid="4059817189292197839">"방해 금지 모드로 설정되어 있어 사용할 수 없음"</string>
+ <string name="stream_media_unavailable" msgid="6823020894438959853">"방해 금지 모드로 설정되어 있어 사용할 수 없음"</string>
<string name="volume_stream_content_description_unmute" msgid="7729576371406792977">"%1$s. 탭하여 음소거를 해제하세요."</string>
<string name="volume_stream_content_description_vibrate" msgid="4858111994183089761">"%1$s. 탭하여 진동으로 설정하세요. 접근성 서비스가 음소거될 수 있습니다."</string>
<string name="volume_stream_content_description_mute" msgid="4079046784917920984">"%1$s. 탭하여 음소거로 설정하세요. 접근성 서비스가 음소거될 수 있습니다."</string>
@@ -610,7 +614,7 @@
<string name="volume_ringer_hint_unmute" msgid="6119086890306456976">"음소거 해제"</string>
<string name="volume_ringer_hint_vibrate" msgid="6211609047099337509">"진동"</string>
<string name="volume_dialog_title" msgid="6502703403483577940">"%s 볼륨 컨트롤"</string>
- <string name="volume_dialog_ringer_guidance_ring" msgid="9143194270463146858">"전화 및 알림이 오면 벨소리가 울립니다(<xliff:g id="VOLUME_LEVEL">%1$s</xliff:g>)"</string>
+ <string name="volume_dialog_ringer_guidance_ring" msgid="9143194270463146858">"전화 및 알림이 오면 벨소리가 울립니다(<xliff:g id="VOLUME_LEVEL">%1$s</xliff:g>)."</string>
<string name="volume_panel_enter_media_output_settings" msgid="8824244246272552669">"출력 설정 열기"</string>
<string name="volume_panel_expanded_sliders" msgid="1885750987768506271">"볼륨 슬라이더 펼침"</string>
<string name="volume_panel_collapsed_sliders" msgid="1413383759434791450">"볼륨 슬라이더 접힘"</string>
diff --git a/packages/SystemUI/res/values-ky/strings.xml b/packages/SystemUI/res/values-ky/strings.xml
index 079b1b8..d893887 100644
--- a/packages/SystemUI/res/values-ky/strings.xml
+++ b/packages/SystemUI/res/values-ky/strings.xml
@@ -365,6 +365,12 @@
<string name="quick_settings_contrast_high" msgid="656049259587494499">"Жогору"</string>
<!-- no translation found for quick_settings_hearing_devices_label (7277170419679404129) -->
<skip />
+ <!-- no translation found for quick_settings_hearing_devices_dialog_title (9004774017688484981) -->
+ <skip />
+ <!-- no translation found for quick_settings_pair_hearing_devices (5987105102207447322) -->
+ <skip />
+ <!-- no translation found for accessibility_hearing_device_pair_new_device (8440082580186130090) -->
+ <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>
diff --git a/packages/SystemUI/res/values-lo/strings.xml b/packages/SystemUI/res/values-lo/strings.xml
index 7e83202..873d75e 100644
--- a/packages/SystemUI/res/values-lo/strings.xml
+++ b/packages/SystemUI/res/values-lo/strings.xml
@@ -363,7 +363,12 @@
<string name="quick_settings_contrast_standard" msgid="2538227821968061832">"ມາດຕະຖານ"</string>
<string name="quick_settings_contrast_medium" msgid="5158352575583902566">"ປານກາງ"</string>
<string name="quick_settings_contrast_high" msgid="656049259587494499">"ສູງ"</string>
- <!-- no translation found for quick_settings_hearing_devices_label (7277170419679404129) -->
+ <string name="quick_settings_hearing_devices_label" msgid="7277170419679404129">"ອຸປະກອນຊ່ວຍຟັງ"</string>
+ <!-- no translation found for quick_settings_hearing_devices_dialog_title (9004774017688484981) -->
+ <skip />
+ <!-- no translation found for quick_settings_pair_hearing_devices (5987105102207447322) -->
+ <skip />
+ <!-- no translation found for accessibility_hearing_device_pair_new_device (8440082580186130090) -->
<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>
@@ -442,10 +447,8 @@
<string name="button_to_remove_widget" msgid="3948204829181214098">"ລຶບອອກ"</string>
<string name="hub_mode_add_widget_button_text" msgid="4831464661209971729">"ເພີ່ມວິດເຈັດ"</string>
<string name="hub_mode_editing_exit_button_text" msgid="3704686734192264771">"ແລ້ວໆ"</string>
- <!-- no translation found for label_for_button_in_empty_state_cta (7314975555382055823) -->
- <skip />
- <!-- no translation found for title_for_empty_state_cta (6161654421223450530) -->
- <skip />
+ <string name="label_for_button_in_empty_state_cta" msgid="7314975555382055823">"ເພີ່ມວິດເຈັດ"</string>
+ <string name="title_for_empty_state_cta" msgid="6161654421223450530">"ຮັບການເຂົ້າເຖິງດ່ວນຫາແອັບວິດເຈັດທີ່ທ່ານມັກໂດຍບໍ່ຕ້ອງປົດລັອກແທັບເລັດຂອງທ່ານ."</string>
<string name="dialog_title_to_allow_any_widget" msgid="1004820948962675644">"ອະນຸຍາດວິດເຈັດໃດກໍຕາມຢູ່ໜ້າຈໍລັອກບໍ?"</string>
<string name="button_text_to_open_settings" msgid="1987729256950941628">"ເປີດການຕັ້ງຄ່າ"</string>
<string name="work_mode_off_title" msgid="5794818421357835873">"ຍົກເລີກການຢຸດຊົ່ວຄາວແອັບບ່ອນເຮັດວຽກບໍ?"</string>
diff --git a/packages/SystemUI/res/values-lo/tiles_states_strings.xml b/packages/SystemUI/res/values-lo/tiles_states_strings.xml
index 290c018..9386e00 100644
--- a/packages/SystemUI/res/values-lo/tiles_states_strings.xml
+++ b/packages/SystemUI/res/values-lo/tiles_states_strings.xml
@@ -186,7 +186,9 @@
<item msgid="2478289035899842865">"ປິດ"</item>
<item msgid="5137565285664080143">"ເປີດ"</item>
</string-array>
- <!-- no translation found for tile_states_hearing_devices:0 (1235334096484287173) -->
- <!-- no translation found for tile_states_hearing_devices:1 (3079622119444911877) -->
- <!-- no translation found for tile_states_hearing_devices:2 (3028994095749238254) -->
+ <string-array name="tile_states_hearing_devices">
+ <item msgid="1235334096484287173">"ບໍ່ພ້ອມໃຫ້ນຳໃຊ້"</item>
+ <item msgid="3079622119444911877">"ປິດ"</item>
+ <item msgid="3028994095749238254">"ເປີດ"</item>
+ </string-array>
</resources>
diff --git a/packages/SystemUI/res/values-lt/strings.xml b/packages/SystemUI/res/values-lt/strings.xml
index 37d9592..d5d7929 100644
--- a/packages/SystemUI/res/values-lt/strings.xml
+++ b/packages/SystemUI/res/values-lt/strings.xml
@@ -365,6 +365,12 @@
<string name="quick_settings_contrast_high" msgid="656049259587494499">"Aukštas"</string>
<!-- no translation found for quick_settings_hearing_devices_label (7277170419679404129) -->
<skip />
+ <!-- no translation found for quick_settings_hearing_devices_dialog_title (9004774017688484981) -->
+ <skip />
+ <!-- no translation found for quick_settings_pair_hearing_devices (5987105102207447322) -->
+ <skip />
+ <!-- no translation found for accessibility_hearing_device_pair_new_device (8440082580186130090) -->
+ <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>
@@ -442,10 +448,8 @@
<string name="button_to_remove_widget" msgid="3948204829181214098">"Pašalinti"</string>
<string name="hub_mode_add_widget_button_text" msgid="4831464661209971729">"Pridėti valdiklį"</string>
<string name="hub_mode_editing_exit_button_text" msgid="3704686734192264771">"Atlikta"</string>
- <!-- no translation found for label_for_button_in_empty_state_cta (7314975555382055823) -->
- <skip />
- <!-- no translation found for title_for_empty_state_cta (6161654421223450530) -->
- <skip />
+ <string name="label_for_button_in_empty_state_cta" msgid="7314975555382055823">"Pridėti valdiklių"</string>
+ <string name="title_for_empty_state_cta" msgid="6161654421223450530">"Sparčiai pasiekite mėgstamiausius programų valdiklius neatrakinę planšetinio kompiuterio."</string>
<string name="dialog_title_to_allow_any_widget" msgid="1004820948962675644">"Leisti visus valdiklius užrakinimo ekrane?"</string>
<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>
diff --git a/packages/SystemUI/res/values-lv/strings.xml b/packages/SystemUI/res/values-lv/strings.xml
index ede8e7d..4413780 100644
--- a/packages/SystemUI/res/values-lv/strings.xml
+++ b/packages/SystemUI/res/values-lv/strings.xml
@@ -365,6 +365,12 @@
<string name="quick_settings_contrast_high" msgid="656049259587494499">"Augsts"</string>
<!-- no translation found for quick_settings_hearing_devices_label (7277170419679404129) -->
<skip />
+ <!-- no translation found for quick_settings_hearing_devices_dialog_title (9004774017688484981) -->
+ <skip />
+ <!-- no translation found for quick_settings_pair_hearing_devices (5987105102207447322) -->
+ <skip />
+ <!-- no translation found for accessibility_hearing_device_pair_new_device (8440082580186130090) -->
+ <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>
@@ -442,10 +448,8 @@
<string name="button_to_remove_widget" msgid="3948204829181214098">"Noņemt"</string>
<string name="hub_mode_add_widget_button_text" msgid="4831464661209971729">"Pievienot logrīku"</string>
<string name="hub_mode_editing_exit_button_text" msgid="3704686734192264771">"Gatavs"</string>
- <!-- no translation found for label_for_button_in_empty_state_cta (7314975555382055823) -->
- <skip />
- <!-- no translation found for title_for_empty_state_cta (6161654421223450530) -->
- <skip />
+ <string name="label_for_button_in_empty_state_cta" msgid="7314975555382055823">"Pievienot logrīkus"</string>
+ <string name="title_for_empty_state_cta" msgid="6161654421223450530">"Ātri piekļūstiet saviem iecienītākajiem lietotņu logrīkiem, neatbloķējot planšetdatoru."</string>
<string name="dialog_title_to_allow_any_widget" msgid="1004820948962675644">"Vai atļaut jebkāda veida logrīkus bloķēšanas ekrānā?"</string>
<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>
@@ -581,7 +585,7 @@
<string name="screen_pinning_exit" msgid="4553787518387346893">"Lietotne tika atsprausta"</string>
<string name="stream_voice_call" msgid="7468348170702375660">"Zvans"</string>
<string name="stream_system" msgid="7663148785370565134">"Sistēma"</string>
- <string name="stream_ring" msgid="7550670036738697526">"Zvans"</string>
+ <string name="stream_ring" msgid="7550670036738697526">"Skaņas signāls"</string>
<string name="stream_music" msgid="2188224742361847580">"Multivide"</string>
<string name="stream_alarm" msgid="16058075093011694">"Signāls"</string>
<string name="stream_notification" msgid="7930294049046243939">"Paziņojums"</string>
@@ -604,7 +608,7 @@
<string name="volume_panel_spatial_audio_title" msgid="3367048857932040660">"Telpiskais audio"</string>
<string name="volume_panel_spatial_audio_off" msgid="4177490084606772989">"Izslēgts"</string>
<string name="volume_panel_spatial_audio_fixed" msgid="3136080137827746046">"Fiksēts"</string>
- <string name="volume_panel_spatial_audio_tracking" msgid="5711115234001762974">"Galvas kustību reģistrēšana"</string>
+ <string name="volume_panel_spatial_audio_tracking" msgid="5711115234001762974">"Seko galvai"</string>
<string name="volume_ringer_change" msgid="3574969197796055532">"Pieskarieties, lai mainītu zvanītāja režīmu."</string>
<string name="volume_ringer_hint_mute" msgid="4263821214125126614">"izslēgt skaņu"</string>
<string name="volume_ringer_hint_unmute" msgid="6119086890306456976">"ieslēgt skaņu"</string>
diff --git a/packages/SystemUI/res/values-mk/strings.xml b/packages/SystemUI/res/values-mk/strings.xml
index e5f71d4..4f5bf6c 100644
--- a/packages/SystemUI/res/values-mk/strings.xml
+++ b/packages/SystemUI/res/values-mk/strings.xml
@@ -365,6 +365,12 @@
<string name="quick_settings_contrast_high" msgid="656049259587494499">"Висок"</string>
<!-- no translation found for quick_settings_hearing_devices_label (7277170419679404129) -->
<skip />
+ <!-- no translation found for quick_settings_hearing_devices_dialog_title (9004774017688484981) -->
+ <skip />
+ <!-- no translation found for quick_settings_pair_hearing_devices (5987105102207447322) -->
+ <skip />
+ <!-- no translation found for accessibility_hearing_device_pair_new_device (8440082580186130090) -->
+ <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>
@@ -442,10 +448,8 @@
<string name="button_to_remove_widget" msgid="3948204829181214098">"Отстранува"</string>
<string name="hub_mode_add_widget_button_text" msgid="4831464661209971729">"Додајте виџет"</string>
<string name="hub_mode_editing_exit_button_text" msgid="3704686734192264771">"Готово"</string>
- <!-- no translation found for label_for_button_in_empty_state_cta (7314975555382055823) -->
- <skip />
- <!-- no translation found for title_for_empty_state_cta (6161654421223450530) -->
- <skip />
+ <string name="label_for_button_in_empty_state_cta" msgid="7314975555382055823">"Додајте виџети"</string>
+ <string name="title_for_empty_state_cta" msgid="6161654421223450530">"Добијте брз пристап до вашите омилени виџети за апликации без да го отклучите таблетот."</string>
<string name="dialog_title_to_allow_any_widget" msgid="1004820948962675644">"Да се дозволи каков било виџет на заклучен екран?"</string>
<string name="button_text_to_open_settings" msgid="1987729256950941628">"Отвори ги поставките"</string>
<string name="work_mode_off_title" msgid="5794818421357835873">"Да се актив. работните аплик.?"</string>
@@ -582,7 +586,7 @@
<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>
+ <string name="stream_music" msgid="2188224742361847580">"Аудиовизуелни содржини"</string>
<string name="stream_alarm" msgid="16058075093011694">"Аларм"</string>
<string name="stream_notification" msgid="7930294049046243939">"Известување"</string>
<string name="stream_bluetooth_sco" msgid="6234562365528664331">"Bluetooth"</string>
diff --git a/packages/SystemUI/res/values-ml/strings.xml b/packages/SystemUI/res/values-ml/strings.xml
index b2ccee4..8ce3796 100644
--- a/packages/SystemUI/res/values-ml/strings.xml
+++ b/packages/SystemUI/res/values-ml/strings.xml
@@ -363,7 +363,12 @@
<string name="quick_settings_contrast_standard" msgid="2538227821968061832">"സ്റ്റാൻഡേർഡ്"</string>
<string name="quick_settings_contrast_medium" msgid="5158352575583902566">"ഇടത്തരം"</string>
<string name="quick_settings_contrast_high" msgid="656049259587494499">"കൂടുതൽ"</string>
- <!-- no translation found for quick_settings_hearing_devices_label (7277170419679404129) -->
+ <string name="quick_settings_hearing_devices_label" msgid="7277170419679404129">"കേൾവിക്കുള്ള ഉപകരണങ്ങൾ"</string>
+ <!-- no translation found for quick_settings_hearing_devices_dialog_title (9004774017688484981) -->
+ <skip />
+ <!-- no translation found for quick_settings_pair_hearing_devices (5987105102207447322) -->
+ <skip />
+ <!-- no translation found for accessibility_hearing_device_pair_new_device (8440082580186130090) -->
<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>
@@ -442,10 +447,8 @@
<string name="button_to_remove_widget" msgid="3948204829181214098">"നീക്കം ചെയ്യുക"</string>
<string name="hub_mode_add_widget_button_text" msgid="4831464661209971729">"വിജറ്റ് ചേർക്കുക"</string>
<string name="hub_mode_editing_exit_button_text" msgid="3704686734192264771">"പൂർത്തിയായി"</string>
- <!-- no translation found for label_for_button_in_empty_state_cta (7314975555382055823) -->
- <skip />
- <!-- no translation found for title_for_empty_state_cta (6161654421223450530) -->
- <skip />
+ <string name="label_for_button_in_empty_state_cta" msgid="7314975555382055823">"വിജറ്റുകൾ ചേർക്കുക"</string>
+ <string name="title_for_empty_state_cta" msgid="6161654421223450530">"ടാബ്ലെറ്റ് അൺലോക്ക് ചെയ്യാതെ തന്നെ നിങ്ങളുടെ പ്രിയപ്പെട്ട ആപ്പ് വിജറ്റുകളിലേക്ക് പെട്ടെന്ന് ആക്സസ് നേടുക."</string>
<string name="dialog_title_to_allow_any_widget" msgid="1004820948962675644">"ലോക്ക് സ്ക്രീനിൽ ഏതെങ്കിലും വിജറ്റ് അനുവദിക്കണോ?"</string>
<string name="button_text_to_open_settings" msgid="1987729256950941628">"ക്രമീകരണം തുറക്കുക"</string>
<string name="work_mode_off_title" msgid="5794818421357835873">"വർക്ക് ആപ്പുകൾ പുനരാരംഭിക്കണോ?"</string>
diff --git a/packages/SystemUI/res/values-ml/tiles_states_strings.xml b/packages/SystemUI/res/values-ml/tiles_states_strings.xml
index a314f0e..609fdde 100644
--- a/packages/SystemUI/res/values-ml/tiles_states_strings.xml
+++ b/packages/SystemUI/res/values-ml/tiles_states_strings.xml
@@ -186,7 +186,9 @@
<item msgid="2478289035899842865">"ഓഫാണ്"</item>
<item msgid="5137565285664080143">"ഓണാണ്"</item>
</string-array>
- <!-- no translation found for tile_states_hearing_devices:0 (1235334096484287173) -->
- <!-- no translation found for tile_states_hearing_devices:1 (3079622119444911877) -->
- <!-- no translation found for tile_states_hearing_devices:2 (3028994095749238254) -->
+ <string-array name="tile_states_hearing_devices">
+ <item msgid="1235334096484287173">"ലഭ്യമല്ല"</item>
+ <item msgid="3079622119444911877">"ഓഫാണ്"</item>
+ <item msgid="3028994095749238254">"ഓണാണ്"</item>
+ </string-array>
</resources>
diff --git a/packages/SystemUI/res/values-mn/strings.xml b/packages/SystemUI/res/values-mn/strings.xml
index 93bc6a6..1a2e4b1f 100644
--- a/packages/SystemUI/res/values-mn/strings.xml
+++ b/packages/SystemUI/res/values-mn/strings.xml
@@ -365,6 +365,12 @@
<string name="quick_settings_contrast_high" msgid="656049259587494499">"Өндөр"</string>
<!-- no translation found for quick_settings_hearing_devices_label (7277170419679404129) -->
<skip />
+ <!-- no translation found for quick_settings_hearing_devices_dialog_title (9004774017688484981) -->
+ <skip />
+ <!-- no translation found for quick_settings_pair_hearing_devices (5987105102207447322) -->
+ <skip />
+ <!-- no translation found for accessibility_hearing_device_pair_new_device (8440082580186130090) -->
+ <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>
@@ -442,10 +448,8 @@
<string name="button_to_remove_widget" msgid="3948204829181214098">"Хасах"</string>
<string name="hub_mode_add_widget_button_text" msgid="4831464661209971729">"Виджет нэмэх"</string>
<string name="hub_mode_editing_exit_button_text" msgid="3704686734192264771">"Болсон"</string>
- <!-- no translation found for label_for_button_in_empty_state_cta (7314975555382055823) -->
- <skip />
- <!-- no translation found for title_for_empty_state_cta (6161654421223450530) -->
- <skip />
+ <string name="label_for_button_in_empty_state_cta" msgid="7314975555382055823">"Виджетүүд нэмэх"</string>
+ <string name="title_for_empty_state_cta" msgid="6161654421223450530">"Таблетынхаа түгжээг тайлалгүйгээр дуртай аппынхаа виджетүүдэд шуурхай хандах эрх аваарай."</string>
<string name="dialog_title_to_allow_any_widget" msgid="1004820948962675644">"Түгжээтэй дэлгэц дээр дурын виджетийг зөвшөөрөх үү?"</string>
<string name="button_text_to_open_settings" msgid="1987729256950941628">"Тохиргоог нээх"</string>
<string name="work_mode_off_title" msgid="5794818421357835873">"Ажлын аппыг үргэлжлүүлэх үү?"</string>
@@ -674,7 +678,7 @@
<string name="notification_channel_summary_automatic_demoted" msgid="1831303964660807700">"<b>Төлөв:</b> Доогуур зэрэглэл хийсэн"</string>
<string name="notification_channel_summary_priority_baseline" msgid="46674690072551234">"Харилцан ярианы дээд талд болон түгжигдсэн дэлгэц дээр профайл зураг байдлаар харуулна"</string>
<string name="notification_channel_summary_priority_bubble" msgid="1275413109619074576">"Харилцан ярианы мэдэгдлийн дээд талд болон түгжигдсэн дэлгэц дээр профайл зураг байдлаар харуулах бөгөөд бөмбөлөг хэлбэрээр харагдана"</string>
- <string name="notification_channel_summary_priority_dnd" msgid="6665395023264154361">"Харилцан ярианы мэдэгдлийн дээд талд болон түгжигдсэн дэлгэц дээр профайл зураг байдлаар харуулах бөгөөд Бүү саад бол горимыг тасалдуулна"</string>
+ <string name="notification_channel_summary_priority_dnd" msgid="6665395023264154361">"Харилцан ярианы мэдэгдлийн дээд талд болон түгжээтэй дэлгэц дээр профайл зураг байдлаар харуулах бөгөөд Бүү саад бол горимыг тасалдуулна"</string>
<string name="notification_channel_summary_priority_all" msgid="7151752959650048285">"Харилцан ярианы мэдэгдлийн дээд талд болон түгжигдсэн дэлгэц дээр профайл зураг байдлаар харуулах бөгөөд бөмбөлөг хэлбэрээр харагдана. Бүү саад бол горимыг тасалдуулна"</string>
<string name="notification_priority_title" msgid="2079708866333537093">"Чухал"</string>
<string name="no_shortcut" msgid="8257177117568230126">"<xliff:g id="APP_NAME">%1$s</xliff:g> нь харилцан ярианы онцлогуудыг дэмждэггүй"</string>
diff --git a/packages/SystemUI/res/values-mr/strings.xml b/packages/SystemUI/res/values-mr/strings.xml
index 7cc7962..2e21fd0 100644
--- a/packages/SystemUI/res/values-mr/strings.xml
+++ b/packages/SystemUI/res/values-mr/strings.xml
@@ -365,6 +365,12 @@
<string name="quick_settings_contrast_high" msgid="656049259587494499">"उच्च"</string>
<!-- no translation found for quick_settings_hearing_devices_label (7277170419679404129) -->
<skip />
+ <!-- no translation found for quick_settings_hearing_devices_dialog_title (9004774017688484981) -->
+ <skip />
+ <!-- no translation found for quick_settings_pair_hearing_devices (5987105102207447322) -->
+ <skip />
+ <!-- no translation found for accessibility_hearing_device_pair_new_device (8440082580186130090) -->
+ <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>
@@ -442,10 +448,8 @@
<string name="button_to_remove_widget" msgid="3948204829181214098">"काढून टाका"</string>
<string name="hub_mode_add_widget_button_text" msgid="4831464661209971729">"विजेट जोडा"</string>
<string name="hub_mode_editing_exit_button_text" msgid="3704686734192264771">"पूर्ण झाले"</string>
- <!-- no translation found for label_for_button_in_empty_state_cta (7314975555382055823) -->
- <skip />
- <!-- no translation found for title_for_empty_state_cta (6161654421223450530) -->
- <skip />
+ <string name="label_for_button_in_empty_state_cta" msgid="7314975555382055823">"विजेट जोडा"</string>
+ <string name="title_for_empty_state_cta" msgid="6161654421223450530">"तुमचा टॅबलेट अनलॉक न करता तुमच्या आवडत्या ॲपची विजेट झटपट अॅक्सेस करा."</string>
<string name="dialog_title_to_allow_any_widget" msgid="1004820948962675644">"लॉक स्क्रीनवर कोणत्याही विजेटला अनुमती द्यायची आहे का?"</string>
<string name="button_text_to_open_settings" msgid="1987729256950941628">"सेटिंग्ज उघडा"</string>
<string name="work_mode_off_title" msgid="5794818421357835873">"वर्क ॲप्स पुन्हा सुरू करायची?"</string>
@@ -674,7 +678,7 @@
<string name="notification_channel_summary_automatic_demoted" msgid="1831303964660807700">"<b>स्थिती</b> ला थोडी कमी म्हणून रँक केले गेले"</string>
<string name="notification_channel_summary_priority_baseline" msgid="46674690072551234">"संभाषण सूचनांच्या वरती आणि लॉक स्क्रीनवरील प्रोफाइल फोटो म्हणून दिसते"</string>
<string name="notification_channel_summary_priority_bubble" msgid="1275413109619074576">"संभाषण सूचनांच्या वरती आणि लॉक स्क्रीनवरील प्रोफाइल फोटो म्हणून दिसते, बबल म्हणून दिसते"</string>
- <string name="notification_channel_summary_priority_dnd" msgid="6665395023264154361">"संभाषण सूचनांच्या वरती आणि लॉक स्क्रीनवरील प्रोफाइल फोटो म्हणून दिसते, व्यत्यय आणू नका यामध्ये अडथळा आणते"</string>
+ <string name="notification_channel_summary_priority_dnd" msgid="6665395023264154361">"संभाषण नोटिफिकेशनच्या वरती आणि लॉक स्क्रीनवरील प्रोफाइल फोटो म्हणून दिसते, व्यत्यय आणू नका यामध्ये अडथळा आणते"</string>
<string name="notification_channel_summary_priority_all" msgid="7151752959650048285">"संभाषण सूचनांच्या वरती आणि लॉक स्क्रीनवरील प्रोफाइल फोटो म्हणून दिसते, बबल म्हणून दिसते, व्यत्यय आणू नका यामध्ये अडथळा आणते"</string>
<string name="notification_priority_title" msgid="2079708866333537093">"प्राधान्य"</string>
<string name="no_shortcut" msgid="8257177117568230126">"<xliff:g id="APP_NAME">%1$s</xliff:g> हे संभाषण वैशिष्ट्यांना सपोर्ट करत नाही"</string>
diff --git a/packages/SystemUI/res/values-ms/strings.xml b/packages/SystemUI/res/values-ms/strings.xml
index dd4ef7b..9ae774f 100644
--- a/packages/SystemUI/res/values-ms/strings.xml
+++ b/packages/SystemUI/res/values-ms/strings.xml
@@ -363,7 +363,12 @@
<string name="quick_settings_contrast_standard" msgid="2538227821968061832">"Standard"</string>
<string name="quick_settings_contrast_medium" msgid="5158352575583902566">"Sederhana"</string>
<string name="quick_settings_contrast_high" msgid="656049259587494499">"Tinggi"</string>
- <!-- no translation found for quick_settings_hearing_devices_label (7277170419679404129) -->
+ <string name="quick_settings_hearing_devices_label" msgid="7277170419679404129">"Peranti pendengaran"</string>
+ <!-- no translation found for quick_settings_hearing_devices_dialog_title (9004774017688484981) -->
+ <skip />
+ <!-- no translation found for quick_settings_pair_hearing_devices (5987105102207447322) -->
+ <skip />
+ <!-- no translation found for accessibility_hearing_device_pair_new_device (8440082580186130090) -->
<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>
@@ -442,10 +447,8 @@
<string name="button_to_remove_widget" msgid="3948204829181214098">"Alih keluar"</string>
<string name="hub_mode_add_widget_button_text" msgid="4831464661209971729">"Tambahkan widget"</string>
<string name="hub_mode_editing_exit_button_text" msgid="3704686734192264771">"Selesai"</string>
- <!-- no translation found for label_for_button_in_empty_state_cta (7314975555382055823) -->
- <skip />
- <!-- no translation found for title_for_empty_state_cta (6161654421223450530) -->
- <skip />
+ <string name="label_for_button_in_empty_state_cta" msgid="7314975555382055823">"Tambahkan widget"</string>
+ <string name="title_for_empty_state_cta" msgid="6161654421223450530">"Dapatkan akses pantas kepada widget apl kegemaran anda tanpa membuka kunci tablet anda."</string>
<string name="dialog_title_to_allow_any_widget" msgid="1004820948962675644">"Benarkan sebarang widget pada skrin kunci?"</string>
<string name="button_text_to_open_settings" msgid="1987729256950941628">"Buka tetapan"</string>
<string name="work_mode_off_title" msgid="5794818421357835873">"Nyahjeda apl kerja?"</string>
diff --git a/packages/SystemUI/res/values-ms/tiles_states_strings.xml b/packages/SystemUI/res/values-ms/tiles_states_strings.xml
index 6d72f3c..174e416e 100644
--- a/packages/SystemUI/res/values-ms/tiles_states_strings.xml
+++ b/packages/SystemUI/res/values-ms/tiles_states_strings.xml
@@ -186,7 +186,9 @@
<item msgid="2478289035899842865">"Mati"</item>
<item msgid="5137565285664080143">"Hidup"</item>
</string-array>
- <!-- no translation found for tile_states_hearing_devices:0 (1235334096484287173) -->
- <!-- no translation found for tile_states_hearing_devices:1 (3079622119444911877) -->
- <!-- no translation found for tile_states_hearing_devices:2 (3028994095749238254) -->
+ <string-array name="tile_states_hearing_devices">
+ <item msgid="1235334096484287173">"Tidak tersedia"</item>
+ <item msgid="3079622119444911877">"Mati"</item>
+ <item msgid="3028994095749238254">"Hidup"</item>
+ </string-array>
</resources>
diff --git a/packages/SystemUI/res/values-my/strings.xml b/packages/SystemUI/res/values-my/strings.xml
index ba45f6d..1249885 100644
--- a/packages/SystemUI/res/values-my/strings.xml
+++ b/packages/SystemUI/res/values-my/strings.xml
@@ -363,7 +363,12 @@
<string name="quick_settings_contrast_standard" msgid="2538227821968061832">"ပုံမှန်"</string>
<string name="quick_settings_contrast_medium" msgid="5158352575583902566">"အသင့်အတင့်"</string>
<string name="quick_settings_contrast_high" msgid="656049259587494499">"များ"</string>
- <!-- no translation found for quick_settings_hearing_devices_label (7277170419679404129) -->
+ <string name="quick_settings_hearing_devices_label" msgid="7277170419679404129">"နားကြားကိရိယာ"</string>
+ <!-- no translation found for quick_settings_hearing_devices_dialog_title (9004774017688484981) -->
+ <skip />
+ <!-- no translation found for quick_settings_pair_hearing_devices (5987105102207447322) -->
+ <skip />
+ <!-- no translation found for accessibility_hearing_device_pair_new_device (8440082580186130090) -->
<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>
@@ -442,10 +447,8 @@
<string name="button_to_remove_widget" msgid="3948204829181214098">"ဖယ်ရှားရန်"</string>
<string name="hub_mode_add_widget_button_text" msgid="4831464661209971729">"ဝိဂျက်ထည့်ရန်"</string>
<string name="hub_mode_editing_exit_button_text" msgid="3704686734192264771">"ပြီးပြီ"</string>
- <!-- no translation found for label_for_button_in_empty_state_cta (7314975555382055823) -->
- <skip />
- <!-- no translation found for title_for_empty_state_cta (6161654421223450530) -->
- <skip />
+ <string name="label_for_button_in_empty_state_cta" msgid="7314975555382055823">"ဝိဂျက်များ ထည့်ရန်"</string>
+ <string name="title_for_empty_state_cta" msgid="6161654421223450530">"တက်ဘလက်မဖွင့်ဘဲ သင့်အကြိုက်ဆုံး အက်ပ်ဝိဂျက်များကို အမြန်သုံးခွင့် ရယူပါ။"</string>
<string name="dialog_title_to_allow_any_widget" msgid="1004820948962675644">"လော့ခ်မျက်နှာပြင်ရှိ ဝိဂျက်အားလုံးကို ခွင့်ပြုမလား။"</string>
<string name="button_text_to_open_settings" msgid="1987729256950941628">"ဆက်တင်များ ဖွင့်ရန်"</string>
<string name="work_mode_off_title" msgid="5794818421357835873">"အလုပ်သုံးအက်ပ် ပြန်ဖွင့်မလား။"</string>
@@ -581,7 +584,7 @@
<string name="screen_pinning_exit" msgid="4553787518387346893">"အက်ပ်ကို ပင်ဖြုတ်လိုက်သည်"</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>
@@ -603,8 +606,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>
@@ -617,7 +620,7 @@
<string name="volume_panel_hint_mute" msgid="6962563028495243738">"%s အသံပိတ်ရန်"</string>
<string name="volume_panel_hint_unmute" msgid="7489063242934477382">"%s အသံပြန်ဖွင့်ရန်"</string>
<string name="media_output_label_title" msgid="872824698593182505">"<xliff:g id="LABEL">%s</xliff:g> ကို ဖွင့်နေသည်"</string>
- <string name="media_output_title_without_playing" msgid="3825663683169305013">"အောက်တွင်အသံဖွင့်မည်"</string>
+ <string name="media_output_title_without_playing" msgid="3825663683169305013">"အသံဖွင့်မည့်နေရာ"</string>
<string name="system_ui_tuner" msgid="1471348823289954729">"စနစ် UI ဖမ်းစက်"</string>
<string name="status_bar" msgid="4357390266055077437">"အခြေအနေပြနေရာ"</string>
<string name="demo_mode" msgid="263484519766901593">"စနစ် UI စရုပ်ပြမုဒ်"</string>
@@ -674,7 +677,7 @@
<string name="notification_channel_summary_automatic_demoted" msgid="1831303964660807700">"<b>အခြေအနေ-</b> အဆင့်လျှော့ထားသည်"</string>
<string name="notification_channel_summary_priority_baseline" msgid="46674690072551234">"စကားဝိုင်း အကြောင်းကြားချက်များ၏ ထိပ်ပိုင်းတွင် ပြ၍ လော့ခ်မျက်နှာပြင်တွင် ပရိုဖိုင်ပုံအဖြစ် ပြသည်"</string>
<string name="notification_channel_summary_priority_bubble" msgid="1275413109619074576">"စကားဝိုင်း အကြောင်းကြားချက်များ၏ ထိပ်ပိုင်းတွင် ပြ၍ လော့ခ်မျက်နှာပြင်တွင် ပရိုဖိုင်ပုံအဖြစ် ပြကာ ပူဖောင်းကွက်အဖြစ် မြင်ရသည်"</string>
- <string name="notification_channel_summary_priority_dnd" msgid="6665395023264154361">"စကားဝိုင်း အကြောင်းကြားချက်များ၏ ထိပ်ပိုင်းနှင့် ပရိုဖိုင်ပုံအဖြစ် လော့ခ်မျက်နှာပြင်တွင် ပြသည်။ ပူဖောင်းကွက်အဖြစ် မြင်ရပြီး ‘မနှောင့်ယှက်ရ’ ကို ကြားဖြတ်သည်"</string>
+ <string name="notification_channel_summary_priority_dnd" msgid="6665395023264154361">"စကားဝိုင်း အကြောင်းကြားချက်များ၏ ထိပ်ပိုင်းတွင်နှင့် လော့ခ်မျက်နှာပြင်တွင် ပရိုဖိုင်ပုံအဖြစ် ပြသည်။ ‘မနှောင့်ယှက်ရ’ ကို ကြားဖြတ်သည်"</string>
<string name="notification_channel_summary_priority_all" msgid="7151752959650048285">"စကားဝိုင်း အကြောင်းကြားချက်များ၏ ထိပ်ပိုင်းနှင့် ပရိုဖိုင်ပုံအဖြစ် လော့ခ်မျက်နှာပြင်တွင် ပြသည်။ ပူဖောင်းကွက်အဖြစ် မြင်ရပြီး ‘မနှောင့်ယှက်ရ’ ကို ကြားဖြတ်သည်"</string>
<string name="notification_priority_title" msgid="2079708866333537093">"ဦးစားပေး"</string>
<string name="no_shortcut" msgid="8257177117568230126">"<xliff:g id="APP_NAME">%1$s</xliff:g> က စကားဝိုင်းဝန်ဆောင်မှုများကို မပံ့ပိုးပါ"</string>
diff --git a/packages/SystemUI/res/values-my/tiles_states_strings.xml b/packages/SystemUI/res/values-my/tiles_states_strings.xml
index 6bfd65a..f665a00a 100644
--- a/packages/SystemUI/res/values-my/tiles_states_strings.xml
+++ b/packages/SystemUI/res/values-my/tiles_states_strings.xml
@@ -186,7 +186,9 @@
<item msgid="2478289035899842865">"ပိတ်"</item>
<item msgid="5137565285664080143">"ဖွင့်"</item>
</string-array>
- <!-- no translation found for tile_states_hearing_devices:0 (1235334096484287173) -->
- <!-- no translation found for tile_states_hearing_devices:1 (3079622119444911877) -->
- <!-- no translation found for tile_states_hearing_devices:2 (3028994095749238254) -->
+ <string-array name="tile_states_hearing_devices">
+ <item msgid="1235334096484287173">"မရနိုင်ပါ"</item>
+ <item msgid="3079622119444911877">"ပိတ်"</item>
+ <item msgid="3028994095749238254">"ဖွင့်"</item>
+ </string-array>
</resources>
diff --git a/packages/SystemUI/res/values-nb/strings.xml b/packages/SystemUI/res/values-nb/strings.xml
index 24a940b..0f9bb46 100644
--- a/packages/SystemUI/res/values-nb/strings.xml
+++ b/packages/SystemUI/res/values-nb/strings.xml
@@ -365,6 +365,12 @@
<string name="quick_settings_contrast_high" msgid="656049259587494499">"Høy"</string>
<!-- no translation found for quick_settings_hearing_devices_label (7277170419679404129) -->
<skip />
+ <!-- no translation found for quick_settings_hearing_devices_dialog_title (9004774017688484981) -->
+ <skip />
+ <!-- no translation found for quick_settings_pair_hearing_devices (5987105102207447322) -->
+ <skip />
+ <!-- no translation found for accessibility_hearing_device_pair_new_device (8440082580186130090) -->
+ <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>
@@ -442,10 +448,8 @@
<string name="button_to_remove_widget" msgid="3948204829181214098">"Fjern"</string>
<string name="hub_mode_add_widget_button_text" msgid="4831464661209971729">"Legg til modul"</string>
<string name="hub_mode_editing_exit_button_text" msgid="3704686734192264771">"Ferdig"</string>
- <!-- no translation found for label_for_button_in_empty_state_cta (7314975555382055823) -->
- <skip />
- <!-- no translation found for title_for_empty_state_cta (6161654421223450530) -->
- <skip />
+ <string name="label_for_button_in_empty_state_cta" msgid="7314975555382055823">"Legg til moduler"</string>
+ <string name="title_for_empty_state_cta" msgid="6161654421223450530">"Få rask tilgang til appmoduler uten å låse opp nettbrettet."</string>
<string name="dialog_title_to_allow_any_widget" msgid="1004820948962675644">"Vil du tillate alle moduler på låseskjermen?"</string>
<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>
diff --git a/packages/SystemUI/res/values-ne/strings.xml b/packages/SystemUI/res/values-ne/strings.xml
index 70cb072..5f51a91 100644
--- a/packages/SystemUI/res/values-ne/strings.xml
+++ b/packages/SystemUI/res/values-ne/strings.xml
@@ -365,6 +365,12 @@
<string name="quick_settings_contrast_high" msgid="656049259587494499">"उच्च"</string>
<!-- no translation found for quick_settings_hearing_devices_label (7277170419679404129) -->
<skip />
+ <!-- no translation found for quick_settings_hearing_devices_dialog_title (9004774017688484981) -->
+ <skip />
+ <!-- no translation found for quick_settings_pair_hearing_devices (5987105102207447322) -->
+ <skip />
+ <!-- no translation found for accessibility_hearing_device_pair_new_device (8440082580186130090) -->
+ <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>
@@ -442,10 +448,8 @@
<string name="button_to_remove_widget" msgid="3948204829181214098">"हटाउनुहोस्"</string>
<string name="hub_mode_add_widget_button_text" msgid="4831464661209971729">"विजेट हाल्नुहोस्"</string>
<string name="hub_mode_editing_exit_button_text" msgid="3704686734192264771">"पूरा भयो"</string>
- <!-- no translation found for label_for_button_in_empty_state_cta (7314975555382055823) -->
- <skip />
- <!-- no translation found for title_for_empty_state_cta (6161654421223450530) -->
- <skip />
+ <string name="label_for_button_in_empty_state_cta" msgid="7314975555382055823">"विजेट हाल्नुहोस्"</string>
+ <string name="title_for_empty_state_cta" msgid="6161654421223450530">"ट्याब्लेट अनलक नगरिकनै आफूलाई मन पर्ने एपका विजेटहरू तुरुन्तै एक्सेस गर्नुहोस्।"</string>
<string name="dialog_title_to_allow_any_widget" msgid="1004820948962675644">"लक स्क्रिनमा कुनै विजेट देखाउने हो?"</string>
<string name="button_text_to_open_settings" msgid="1987729256950941628">"सेटिङ खोल्नुहोस्"</string>
<string name="work_mode_off_title" msgid="5794818421357835873">"कामसम्बन्धी एपहरू अनपज गर्ने हो?"</string>
@@ -600,7 +604,7 @@
<string name="volume_stream_content_description_mute" msgid="4079046784917920984">"%1$s। म्यूट गर्नाका लागि ट्याप गर्नुहोस्। पहुँच सम्बन्धी सेवाहरू म्यूट हुन सक्छन्।"</string>
<string name="volume_stream_content_description_vibrate_a11y" msgid="2742330052979397471">"%1$s। कम्पन मोडमा सेट गर्न ट्याप गर्नुहोस्।"</string>
<string name="volume_stream_content_description_mute_a11y" msgid="5743548478357238156">"%1$s। म्यूट गर्न ट्याप गर्नुहोस्।"</string>
- <string name="volume_panel_noise_control_title" msgid="7413949943872304474">"नोइज कन्ट्रोल"</string>
+ <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>
@@ -617,7 +621,7 @@
<string name="volume_panel_hint_mute" msgid="6962563028495243738">"%s म्युट गर्नुहोस्"</string>
<string name="volume_panel_hint_unmute" msgid="7489063242934477382">"%s अनम्युट गर्नुहोस्"</string>
<string name="media_output_label_title" msgid="872824698593182505">"<xliff:g id="LABEL">%s</xliff:g> प्ले गरिँदै छ"</string>
- <string name="media_output_title_without_playing" msgid="3825663683169305013">"अडियो प्ले भइरहने छ"</string>
+ <string name="media_output_title_without_playing" msgid="3825663683169305013">"अडियो यसमा प्ले हुने छ"</string>
<string name="system_ui_tuner" msgid="1471348823289954729">"सिस्टम UI ट्युनर"</string>
<string name="status_bar" msgid="4357390266055077437">"स्थिति पट्टी"</string>
<string name="demo_mode" msgid="263484519766901593">"सिस्टम UI को डेमो मोड"</string>
diff --git a/packages/SystemUI/res/values-nl/strings.xml b/packages/SystemUI/res/values-nl/strings.xml
index 6677f67..1f780b3 100644
--- a/packages/SystemUI/res/values-nl/strings.xml
+++ b/packages/SystemUI/res/values-nl/strings.xml
@@ -365,6 +365,12 @@
<string name="quick_settings_contrast_high" msgid="656049259587494499">"Hoog"</string>
<!-- no translation found for quick_settings_hearing_devices_label (7277170419679404129) -->
<skip />
+ <!-- no translation found for quick_settings_hearing_devices_dialog_title (9004774017688484981) -->
+ <skip />
+ <!-- no translation found for quick_settings_pair_hearing_devices (5987105102207447322) -->
+ <skip />
+ <!-- no translation found for accessibility_hearing_device_pair_new_device (8440082580186130090) -->
+ <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>
@@ -442,10 +448,8 @@
<string name="button_to_remove_widget" msgid="3948204829181214098">"Verwijderen"</string>
<string name="hub_mode_add_widget_button_text" msgid="4831464661209971729">"Widget toevoegen"</string>
<string name="hub_mode_editing_exit_button_text" msgid="3704686734192264771">"Klaar"</string>
- <!-- no translation found for label_for_button_in_empty_state_cta (7314975555382055823) -->
- <skip />
- <!-- no translation found for title_for_empty_state_cta (6161654421223450530) -->
- <skip />
+ <string name="label_for_button_in_empty_state_cta" msgid="7314975555382055823">"Widgets toevoegen"</string>
+ <string name="title_for_empty_state_cta" msgid="6161654421223450530">"Krijg snel toegang tot je favoriete app-widgets zonder je tablet te ontgrendelen."</string>
<string name="dialog_title_to_allow_any_widget" msgid="1004820948962675644">"Elke widget toestaan op het vergrendelscherm?"</string>
<string name="button_text_to_open_settings" msgid="1987729256950941628">"Instellingen openen"</string>
<string name="work_mode_off_title" msgid="5794818421357835873">"Werk-apps hervatten?"</string>
@@ -1041,7 +1045,7 @@
<string name="controls_pin_use_alphanumeric" msgid="8478371861023048414">"Pincode bevat letters of symbolen"</string>
<string name="controls_pin_verify" msgid="3452778292918877662">"<xliff:g id="DEVICE">%s</xliff:g> verifiëren"</string>
<string name="controls_pin_wrong" msgid="6162694056042164211">"Onjuiste pincode"</string>
- <string name="controls_pin_instructions" msgid="6363309783822475238">"Geef de pincode op"</string>
+ <string name="controls_pin_instructions" msgid="6363309783822475238">"Voer pincode in"</string>
<string name="controls_pin_instructions_retry" msgid="1566667581012131046">"Andere pincode proberen"</string>
<string name="controls_confirmation_message" msgid="7744104992609594859">"Bevestig de wijziging voor <xliff:g id="DEVICE">%s</xliff:g>"</string>
<string name="controls_structure_tooltip" msgid="4355922222944447867">"Swipe om meer te zien"</string>
@@ -1121,7 +1125,7 @@
<string name="basic_status" msgid="2315371112182658176">"Gesprek openen"</string>
<string name="select_conversation_title" msgid="6716364118095089519">"Gesprekswidgets"</string>
<string name="select_conversation_text" msgid="3376048251434956013">"Tik op een gesprek om het toe te voegen aan je startscherm"</string>
- <string name="no_conversations_text" msgid="5354115541282395015">"Je ziet je recente gesprekken hier"</string>
+ <string name="no_conversations_text" msgid="5354115541282395015">"Hier staan je recente gesprekken"</string>
<string name="priority_conversations" msgid="3967482288896653039">"Prioriteitsgesprekken"</string>
<string name="recent_conversations" msgid="8531874684782574622">"Recente gesprekken"</string>
<string name="days_timestamp" msgid="5821854736213214331">"<xliff:g id="DURATION">%1$s</xliff:g> dagen geleden"</string>
diff --git a/packages/SystemUI/res/values-or/strings.xml b/packages/SystemUI/res/values-or/strings.xml
index 66f8808..9a602b8 100644
--- a/packages/SystemUI/res/values-or/strings.xml
+++ b/packages/SystemUI/res/values-or/strings.xml
@@ -365,6 +365,12 @@
<string name="quick_settings_contrast_high" msgid="656049259587494499">"ଅଧିକ"</string>
<!-- no translation found for quick_settings_hearing_devices_label (7277170419679404129) -->
<skip />
+ <!-- no translation found for quick_settings_hearing_devices_dialog_title (9004774017688484981) -->
+ <skip />
+ <!-- no translation found for quick_settings_pair_hearing_devices (5987105102207447322) -->
+ <skip />
+ <!-- no translation found for accessibility_hearing_device_pair_new_device (8440082580186130090) -->
+ <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>
@@ -442,10 +448,8 @@
<string name="button_to_remove_widget" msgid="3948204829181214098">"କାଢ଼ି ଦିଅନ୍ତୁ"</string>
<string name="hub_mode_add_widget_button_text" msgid="4831464661209971729">"ୱିଜେଟ ଯୋଗ କରନ୍ତୁ"</string>
<string name="hub_mode_editing_exit_button_text" msgid="3704686734192264771">"ହୋଇଗଲା"</string>
- <!-- no translation found for label_for_button_in_empty_state_cta (7314975555382055823) -->
- <skip />
- <!-- no translation found for title_for_empty_state_cta (6161654421223450530) -->
- <skip />
+ <string name="label_for_button_in_empty_state_cta" msgid="7314975555382055823">"ୱିଜେଟଗୁଡ଼ିକୁ ଯୋଗ କରନ୍ତୁ"</string>
+ <string name="title_for_empty_state_cta" msgid="6161654421223450530">"ଆପଣଙ୍କ ଟାବଲେଟକୁ ଅନଲକ ନକରି ଆପଣଙ୍କ ପସନ୍ଦର ଆପ ୱିଜେଟଗୁଡ଼ିକୁ କୁଇକ ଆକ୍ସେସ ପାଆନ୍ତୁ।"</string>
<string name="dialog_title_to_allow_any_widget" msgid="1004820948962675644">"ଲକସ୍କ୍ରିନରେ ଯେ କୌଣସି ୱିଜେଟକୁ ଅନୁମତି ଦେବେ?"</string>
<string name="button_text_to_open_settings" msgid="1987729256950941628">"ସେଟିଂସ ଖୋଲନ୍ତୁ"</string>
<string name="work_mode_off_title" msgid="5794818421357835873">"ୱାର୍କ ଆପ୍ସକୁ ପୁଣି ଚାଲୁ କରିବେ?"</string>
@@ -579,11 +583,11 @@
<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>
- <string name="stream_alarm" msgid="16058075093011694">"ଆଲାରାମ୍"</string>
+ <string name="stream_alarm" msgid="16058075093011694">"ଆଲାରାମ"</string>
<string name="stream_notification" msgid="7930294049046243939">"ବିଜ୍ଞପ୍ତି"</string>
<string name="stream_bluetooth_sco" msgid="6234562365528664331">"ବ୍ଲୁଟୁଥ୍"</string>
<string name="stream_dtmf" msgid="7322536356554673067">"ଡୁଆଲ୍ ମଲ୍ଟି ଟୋନ୍ ଫ୍ରିକ୍ୱେନ୍ସୀ"</string>
@@ -617,7 +621,7 @@
<string name="volume_panel_hint_mute" msgid="6962563028495243738">"%sକୁ ମ୍ୟୁଟ କରନ୍ତୁ"</string>
<string name="volume_panel_hint_unmute" msgid="7489063242934477382">"%sକୁ ଅନମ୍ୟୁଟ କରନ୍ତୁ"</string>
<string name="media_output_label_title" msgid="872824698593182505">"<xliff:g id="LABEL">%s</xliff:g>ରେ ପ୍ଲେ କରାଯାଉଛି"</string>
- <string name="media_output_title_without_playing" msgid="3825663683169305013">"ଅଡିଓ ପ୍ଲେ ହେବ"</string>
+ <string name="media_output_title_without_playing" msgid="3825663683169305013">"ଅଡିଓ ଏଥିରେ ପ୍ଲେ ହେବ"</string>
<string name="system_ui_tuner" msgid="1471348823289954729">"ସିଷ୍ଟମ୍ UI ଟ୍ୟୁନର୍"</string>
<string name="status_bar" msgid="4357390266055077437">"ଷ୍ଟାଟସ୍ ବାର୍"</string>
<string name="demo_mode" msgid="263484519766901593">"ସିଷ୍ଟମ୍ UI ଡେମୋ ମୋଡ୍"</string>
diff --git a/packages/SystemUI/res/values-pa/strings.xml b/packages/SystemUI/res/values-pa/strings.xml
index adb3289..40efd0b 100644
--- a/packages/SystemUI/res/values-pa/strings.xml
+++ b/packages/SystemUI/res/values-pa/strings.xml
@@ -365,6 +365,12 @@
<string name="quick_settings_contrast_high" msgid="656049259587494499">"ਜ਼ਿਆਦਾ"</string>
<!-- no translation found for quick_settings_hearing_devices_label (7277170419679404129) -->
<skip />
+ <!-- no translation found for quick_settings_hearing_devices_dialog_title (9004774017688484981) -->
+ <skip />
+ <!-- no translation found for quick_settings_pair_hearing_devices (5987105102207447322) -->
+ <skip />
+ <!-- no translation found for accessibility_hearing_device_pair_new_device (8440082580186130090) -->
+ <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>
@@ -442,10 +448,8 @@
<string name="button_to_remove_widget" msgid="3948204829181214098">"ਹਟਾਓ"</string>
<string name="hub_mode_add_widget_button_text" msgid="4831464661209971729">"ਵਿਜੇਟ ਸ਼ਾਮਲ ਕਰੋ"</string>
<string name="hub_mode_editing_exit_button_text" msgid="3704686734192264771">"ਹੋ ਗਿਆ"</string>
- <!-- no translation found for label_for_button_in_empty_state_cta (7314975555382055823) -->
- <skip />
- <!-- no translation found for title_for_empty_state_cta (6161654421223450530) -->
- <skip />
+ <string name="label_for_button_in_empty_state_cta" msgid="7314975555382055823">"ਵਿਜੇਟ ਸ਼ਾਮਲ ਕਰੋ"</string>
+ <string name="title_for_empty_state_cta" msgid="6161654421223450530">"ਆਪਣੇ ਟੈਬਲੈੱਟ ਨੂੰ ਅਣਲਾਕ ਕੀਤੇ ਬਿਨਾਂ ਆਪਣੇ ਮਨਪਸੰਦ ਐਪ ਵਿਜੇਟ ਤੱਕ ਤਤਕਾਲ ਪਹੁੰਚ ਪ੍ਰਾਪਤ ਕਰੋ।"</string>
<string name="dialog_title_to_allow_any_widget" msgid="1004820948962675644">"ਕੀ ਲਾਕ-ਸਕ੍ਰੀਨ \'ਤੇ ਕਿਸੇ ਵੀ ਵਿਜੇਟ ਨੂੰ ਆਗਿਆ ਦੇਣੀ ਹੈ?"</string>
<string name="button_text_to_open_settings" msgid="1987729256950941628">"ਸੈਟਿੰਗਾਂ ਖੋਲ੍ਹੋ"</string>
<string name="work_mode_off_title" msgid="5794818421357835873">"ਕੰਮ ਸੰਬੰਧੀ ਐਪਾਂ ਤੋਂ ਰੋਕ ਹਟਾਈਏ?"</string>
@@ -600,7 +604,7 @@
<string name="volume_stream_content_description_mute" msgid="4079046784917920984">"%1$s। ਮਿਊਟ ਕਰਨ ਲਈ ਟੈਪ ਕਰੋ। ਪਹੁੰਚਯੋਗਤਾ ਸੇਵਾਵਾਂ ਮਿਊਟ ਹੋ ਸਕਦੀਆਂ ਹਨ।"</string>
<string name="volume_stream_content_description_vibrate_a11y" msgid="2742330052979397471">"%1$s। ਥਰਥਰਾਹਟ \'ਤੇ ਸੈੱਟ ਕਰਨ ਲਈ ਟੈਪ ਕਰੋ।"</string>
<string name="volume_stream_content_description_mute_a11y" msgid="5743548478357238156">"%1$s। ਮਿਊਟ ਕਰਨ ਲਈ ਟੈਪ ਕਰੋ।"</string>
- <string name="volume_panel_noise_control_title" msgid="7413949943872304474">"ਸ਼ੋਰ ਨੂੰ ਕੰਟਰੋਲ ਕਰੋ"</string>
+ <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>
diff --git a/packages/SystemUI/res/values-pl/strings.xml b/packages/SystemUI/res/values-pl/strings.xml
index 2274d13..48262a0 100644
--- a/packages/SystemUI/res/values-pl/strings.xml
+++ b/packages/SystemUI/res/values-pl/strings.xml
@@ -365,6 +365,12 @@
<string name="quick_settings_contrast_high" msgid="656049259587494499">"Wysoki"</string>
<!-- no translation found for quick_settings_hearing_devices_label (7277170419679404129) -->
<skip />
+ <!-- no translation found for quick_settings_hearing_devices_dialog_title (9004774017688484981) -->
+ <skip />
+ <!-- no translation found for quick_settings_pair_hearing_devices (5987105102207447322) -->
+ <skip />
+ <!-- no translation found for accessibility_hearing_device_pair_new_device (8440082580186130090) -->
+ <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>
@@ -442,10 +448,8 @@
<string name="button_to_remove_widget" msgid="3948204829181214098">"Usuń"</string>
<string name="hub_mode_add_widget_button_text" msgid="4831464661209971729">"Dodaj widżet"</string>
<string name="hub_mode_editing_exit_button_text" msgid="3704686734192264771">"Gotowe"</string>
- <!-- no translation found for label_for_button_in_empty_state_cta (7314975555382055823) -->
- <skip />
- <!-- no translation found for title_for_empty_state_cta (6161654421223450530) -->
- <skip />
+ <string name="label_for_button_in_empty_state_cta" msgid="7314975555382055823">"Dodaj widżety"</string>
+ <string name="title_for_empty_state_cta" msgid="6161654421223450530">"Uzyskaj szybki dostęp do ulubionych widżetów aplikacji bez odblokowywania tabletu."</string>
<string name="dialog_title_to_allow_any_widget" msgid="1004820948962675644">"Zezwolić na dowolny widżet na ekranie blokady?"</string>
<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>
diff --git a/packages/SystemUI/res/values-pt-rBR/strings.xml b/packages/SystemUI/res/values-pt-rBR/strings.xml
index 206b0b2..04bdf14 100644
--- a/packages/SystemUI/res/values-pt-rBR/strings.xml
+++ b/packages/SystemUI/res/values-pt-rBR/strings.xml
@@ -365,6 +365,12 @@
<string name="quick_settings_contrast_high" msgid="656049259587494499">"Alto"</string>
<!-- no translation found for quick_settings_hearing_devices_label (7277170419679404129) -->
<skip />
+ <!-- no translation found for quick_settings_hearing_devices_dialog_title (9004774017688484981) -->
+ <skip />
+ <!-- no translation found for quick_settings_pair_hearing_devices (5987105102207447322) -->
+ <skip />
+ <!-- no translation found for accessibility_hearing_device_pair_new_device (8440082580186130090) -->
+ <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>
@@ -442,10 +448,8 @@
<string name="button_to_remove_widget" msgid="3948204829181214098">"Remover"</string>
<string name="hub_mode_add_widget_button_text" msgid="4831464661209971729">"Adicionar widget"</string>
<string name="hub_mode_editing_exit_button_text" msgid="3704686734192264771">"Concluído"</string>
- <!-- no translation found for label_for_button_in_empty_state_cta (7314975555382055823) -->
- <skip />
- <!-- no translation found for title_for_empty_state_cta (6161654421223450530) -->
- <skip />
+ <string name="label_for_button_in_empty_state_cta" msgid="7314975555382055823">"Adicionar widgets"</string>
+ <string name="title_for_empty_state_cta" msgid="6161654421223450530">"Tenha acesso rápido aos widgets de seus apps favoritos sem desbloquear o tablet."</string>
<string name="dialog_title_to_allow_any_widget" msgid="1004820948962675644">"Permitir qualquer widget na tela de bloqueio?"</string>
<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>
@@ -592,7 +596,7 @@
<string name="volume_ringer_status_vibrate" msgid="6970078708957857825">"Vibrar"</string>
<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 foi silenciado"</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="volume_stream_content_description_unmute" msgid="7729576371406792977">"%1$s. Toque para ativar o som."</string>
diff --git a/packages/SystemUI/res/values-pt-rPT/strings.xml b/packages/SystemUI/res/values-pt-rPT/strings.xml
index 93b4cbe..b627090 100644
--- a/packages/SystemUI/res/values-pt-rPT/strings.xml
+++ b/packages/SystemUI/res/values-pt-rPT/strings.xml
@@ -363,7 +363,12 @@
<string name="quick_settings_contrast_standard" msgid="2538227821968061832">"Padrão"</string>
<string name="quick_settings_contrast_medium" msgid="5158352575583902566">"Médio"</string>
<string name="quick_settings_contrast_high" msgid="656049259587494499">"Alto"</string>
- <!-- no translation found for quick_settings_hearing_devices_label (7277170419679404129) -->
+ <string name="quick_settings_hearing_devices_label" msgid="7277170419679404129">"Dispositivos auditivos"</string>
+ <!-- no translation found for quick_settings_hearing_devices_dialog_title (9004774017688484981) -->
+ <skip />
+ <!-- no translation found for quick_settings_pair_hearing_devices (5987105102207447322) -->
+ <skip />
+ <!-- no translation found for accessibility_hearing_device_pair_new_device (8440082580186130090) -->
<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>
@@ -590,9 +595,9 @@
<string name="volume_ringer_status_vibrate" msgid="6970078708957857825">"Vibrar"</string>
<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 porque o toque está desat."</string>
+ <string name="stream_notification_unavailable" msgid="4313854556205836435">"Indisponível com toque desativado"</string>
<string name="stream_alarm_unavailable" msgid="4059817189292197839">"Indisponível porque Não incomodar está ativado"</string>
- <string name="stream_media_unavailable" msgid="6823020894438959853">"Indisponível porque Não incomodar está ativado"</string>
+ <string name="stream_media_unavailable" msgid="6823020894438959853">"Indisponível com Não incomodar ativado"</string>
<string name="volume_stream_content_description_unmute" msgid="7729576371406792977">"%1$s. Toque para reativar o som."</string>
<string name="volume_stream_content_description_vibrate" msgid="4858111994183089761">"%1$s. Toque para ativar a vibração. Os serviços de acessibilidade podem ser silenciados."</string>
<string name="volume_stream_content_description_mute" msgid="4079046784917920984">"%1$s. Toque para desativar o som. Os serviços de acessibilidade podem ser silenciados."</string>
@@ -615,7 +620,7 @@
<string name="volume_panel_hint_mute" msgid="6962563028495243738">"desativar o som de %s"</string>
<string name="volume_panel_hint_unmute" msgid="7489063242934477382">"reativar o som de %s"</string>
<string name="media_output_label_title" msgid="872824698593182505">"A ouvir <xliff:g id="LABEL">%s</xliff:g> em"</string>
- <string name="media_output_title_without_playing" msgid="3825663683169305013">"O áudio será ouv. em"</string>
+ <string name="media_output_title_without_playing" msgid="3825663683169305013">"Áudio ouvido em:"</string>
<string name="system_ui_tuner" msgid="1471348823289954729">"Sintonizador da interface do sistema"</string>
<string name="status_bar" msgid="4357390266055077437">"Barra de estado"</string>
<string name="demo_mode" msgid="263484519766901593">"Modo de demonstração da IU do sistema"</string>
diff --git a/packages/SystemUI/res/values-pt-rPT/tiles_states_strings.xml b/packages/SystemUI/res/values-pt-rPT/tiles_states_strings.xml
index e01b122..34a5ed7 100644
--- a/packages/SystemUI/res/values-pt-rPT/tiles_states_strings.xml
+++ b/packages/SystemUI/res/values-pt-rPT/tiles_states_strings.xml
@@ -186,7 +186,9 @@
<item msgid="2478289035899842865">"Desativado"</item>
<item msgid="5137565285664080143">"Ativado"</item>
</string-array>
- <!-- no translation found for tile_states_hearing_devices:0 (1235334096484287173) -->
- <!-- no translation found for tile_states_hearing_devices:1 (3079622119444911877) -->
- <!-- no translation found for tile_states_hearing_devices:2 (3028994095749238254) -->
+ <string-array name="tile_states_hearing_devices">
+ <item msgid="1235334096484287173">"Indisponíveis"</item>
+ <item msgid="3079622119444911877">"Desativados"</item>
+ <item msgid="3028994095749238254">"Ativados"</item>
+ </string-array>
</resources>
diff --git a/packages/SystemUI/res/values-pt/strings.xml b/packages/SystemUI/res/values-pt/strings.xml
index 206b0b2..04bdf14 100644
--- a/packages/SystemUI/res/values-pt/strings.xml
+++ b/packages/SystemUI/res/values-pt/strings.xml
@@ -365,6 +365,12 @@
<string name="quick_settings_contrast_high" msgid="656049259587494499">"Alto"</string>
<!-- no translation found for quick_settings_hearing_devices_label (7277170419679404129) -->
<skip />
+ <!-- no translation found for quick_settings_hearing_devices_dialog_title (9004774017688484981) -->
+ <skip />
+ <!-- no translation found for quick_settings_pair_hearing_devices (5987105102207447322) -->
+ <skip />
+ <!-- no translation found for accessibility_hearing_device_pair_new_device (8440082580186130090) -->
+ <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>
@@ -442,10 +448,8 @@
<string name="button_to_remove_widget" msgid="3948204829181214098">"Remover"</string>
<string name="hub_mode_add_widget_button_text" msgid="4831464661209971729">"Adicionar widget"</string>
<string name="hub_mode_editing_exit_button_text" msgid="3704686734192264771">"Concluído"</string>
- <!-- no translation found for label_for_button_in_empty_state_cta (7314975555382055823) -->
- <skip />
- <!-- no translation found for title_for_empty_state_cta (6161654421223450530) -->
- <skip />
+ <string name="label_for_button_in_empty_state_cta" msgid="7314975555382055823">"Adicionar widgets"</string>
+ <string name="title_for_empty_state_cta" msgid="6161654421223450530">"Tenha acesso rápido aos widgets de seus apps favoritos sem desbloquear o tablet."</string>
<string name="dialog_title_to_allow_any_widget" msgid="1004820948962675644">"Permitir qualquer widget na tela de bloqueio?"</string>
<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>
@@ -592,7 +596,7 @@
<string name="volume_ringer_status_vibrate" msgid="6970078708957857825">"Vibrar"</string>
<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 foi silenciado"</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="volume_stream_content_description_unmute" msgid="7729576371406792977">"%1$s. Toque para ativar o som."</string>
diff --git a/packages/SystemUI/res/values-ro/strings.xml b/packages/SystemUI/res/values-ro/strings.xml
index daa27ab..7d65f96 100644
--- a/packages/SystemUI/res/values-ro/strings.xml
+++ b/packages/SystemUI/res/values-ro/strings.xml
@@ -365,6 +365,12 @@
<string name="quick_settings_contrast_high" msgid="656049259587494499">"Ridicat"</string>
<!-- no translation found for quick_settings_hearing_devices_label (7277170419679404129) -->
<skip />
+ <!-- no translation found for quick_settings_hearing_devices_dialog_title (9004774017688484981) -->
+ <skip />
+ <!-- no translation found for quick_settings_pair_hearing_devices (5987105102207447322) -->
+ <skip />
+ <!-- no translation found for accessibility_hearing_device_pair_new_device (8440082580186130090) -->
+ <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>
@@ -442,10 +448,8 @@
<string name="button_to_remove_widget" msgid="3948204829181214098">"Elimină"</string>
<string name="hub_mode_add_widget_button_text" msgid="4831464661209971729">"Adaugă un widget"</string>
<string name="hub_mode_editing_exit_button_text" msgid="3704686734192264771">"Gata"</string>
- <!-- no translation found for label_for_button_in_empty_state_cta (7314975555382055823) -->
- <skip />
- <!-- no translation found for title_for_empty_state_cta (6161654421223450530) -->
- <skip />
+ <string name="label_for_button_in_empty_state_cta" msgid="7314975555382055823">"Adaugă widgeturi"</string>
+ <string name="title_for_empty_state_cta" msgid="6161654421223450530">"Accesează rapid widgeturile aplicațiilor preferate fără să deblochezi tableta."</string>
<string name="dialog_title_to_allow_any_widget" msgid="1004820948962675644">"Permiți vreun widget pe ecranul de blocare?"</string>
<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>
diff --git a/packages/SystemUI/res/values-ru/strings.xml b/packages/SystemUI/res/values-ru/strings.xml
index 184dc1f..5e47464 100644
--- a/packages/SystemUI/res/values-ru/strings.xml
+++ b/packages/SystemUI/res/values-ru/strings.xml
@@ -365,6 +365,12 @@
<string name="quick_settings_contrast_high" msgid="656049259587494499">"Высокая"</string>
<!-- no translation found for quick_settings_hearing_devices_label (7277170419679404129) -->
<skip />
+ <!-- no translation found for quick_settings_hearing_devices_dialog_title (9004774017688484981) -->
+ <skip />
+ <!-- no translation found for quick_settings_pair_hearing_devices (5987105102207447322) -->
+ <skip />
+ <!-- no translation found for accessibility_hearing_device_pair_new_device (8440082580186130090) -->
+ <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>
@@ -442,10 +448,8 @@
<string name="button_to_remove_widget" msgid="3948204829181214098">"Удалить"</string>
<string name="hub_mode_add_widget_button_text" msgid="4831464661209971729">"Добавить виджет"</string>
<string name="hub_mode_editing_exit_button_text" msgid="3704686734192264771">"Готово"</string>
- <!-- no translation found for label_for_button_in_empty_state_cta (7314975555382055823) -->
- <skip />
- <!-- no translation found for title_for_empty_state_cta (6161654421223450530) -->
- <skip />
+ <string name="label_for_button_in_empty_state_cta" msgid="7314975555382055823">"Добавить виджеты"</string>
+ <string name="title_for_empty_state_cta" msgid="6161654421223450530">"Быстрый доступ к виджетам любимых приложений, даже когда планшет заблокирован"</string>
<string name="dialog_title_to_allow_any_widget" msgid="1004820948962675644">"Разрешить добавлять любые виджеты на заблокированный экран?"</string>
<string name="button_text_to_open_settings" msgid="1987729256950941628">"Открыть настройки"</string>
<string name="work_mode_off_title" msgid="5794818421357835873">"Включить рабочие приложения?"</string>
@@ -592,7 +596,7 @@
<string name="volume_ringer_status_vibrate" msgid="6970078708957857825">"Вибрация"</string>
<string name="volume_ringer_status_silent" msgid="3691324657849880883">"Без звука"</string>
<string name="media_device_cast" msgid="4786241789687569892">"Трансляция"</string>
- <string name="stream_notification_unavailable" msgid="4313854556205836435">"Недоступно, когда отключен звук вызовов"</string>
+ <string name="stream_notification_unavailable" msgid="4313854556205836435">"Недоступно в беззвучном режиме"</string>
<string name="stream_alarm_unavailable" msgid="4059817189292197839">"Недоступно при включенном режиме \"Не беспокоить\"."</string>
<string name="stream_media_unavailable" msgid="6823020894438959853">"Недоступно при включенном режиме \"Не беспокоить\"."</string>
<string name="volume_stream_content_description_unmute" msgid="7729576371406792977">"%1$s. Нажмите, чтобы включить звук."</string>
diff --git a/packages/SystemUI/res/values-si/strings.xml b/packages/SystemUI/res/values-si/strings.xml
index e5b566e..5eea02c 100644
--- a/packages/SystemUI/res/values-si/strings.xml
+++ b/packages/SystemUI/res/values-si/strings.xml
@@ -365,6 +365,12 @@
<string name="quick_settings_contrast_high" msgid="656049259587494499">"ඉහළ"</string>
<!-- no translation found for quick_settings_hearing_devices_label (7277170419679404129) -->
<skip />
+ <!-- no translation found for quick_settings_hearing_devices_dialog_title (9004774017688484981) -->
+ <skip />
+ <!-- no translation found for quick_settings_pair_hearing_devices (5987105102207447322) -->
+ <skip />
+ <!-- no translation found for accessibility_hearing_device_pair_new_device (8440082580186130090) -->
+ <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>
@@ -442,10 +448,8 @@
<string name="button_to_remove_widget" msgid="3948204829181214098">"ඉවත් කරන්න"</string>
<string name="hub_mode_add_widget_button_text" msgid="4831464661209971729">"විජට්ටුව එක් කරන්න"</string>
<string name="hub_mode_editing_exit_button_text" msgid="3704686734192264771">"නිමයි"</string>
- <!-- no translation found for label_for_button_in_empty_state_cta (7314975555382055823) -->
- <skip />
- <!-- no translation found for title_for_empty_state_cta (6161654421223450530) -->
- <skip />
+ <string name="label_for_button_in_empty_state_cta" msgid="7314975555382055823">"විජට් එක් කරන්න"</string>
+ <string name="title_for_empty_state_cta" msgid="6161654421223450530">"ඔබේ ටැබ්ලටය අගුළු හැරීමෙන් තොරව ඔබේ ප්රියතම යෙදුම් විජට් වෙත ඉක්මන් ප්රවේශය ලබා ගන්න."</string>
<string name="dialog_title_to_allow_any_widget" msgid="1004820948962675644">"අගුළු තිරය මත ඕනෑම විජට් එකකට ඉඩ දෙන්න"</string>
<string name="button_text_to_open_settings" msgid="1987729256950941628">"සැකසීම් විවෘත කරන්න"</string>
<string name="work_mode_off_title" msgid="5794818421357835873">"කාර්ය යෙදුම් විරාම නොකරන්න ද?"</string>
diff --git a/packages/SystemUI/res/values-sk/strings.xml b/packages/SystemUI/res/values-sk/strings.xml
index ab020ee..ea1a8f8 100644
--- a/packages/SystemUI/res/values-sk/strings.xml
+++ b/packages/SystemUI/res/values-sk/strings.xml
@@ -363,7 +363,12 @@
<string name="quick_settings_contrast_standard" msgid="2538227821968061832">"Štandardný"</string>
<string name="quick_settings_contrast_medium" msgid="5158352575583902566">"Stredný"</string>
<string name="quick_settings_contrast_high" msgid="656049259587494499">"Vysoký"</string>
- <!-- no translation found for quick_settings_hearing_devices_label (7277170419679404129) -->
+ <string name="quick_settings_hearing_devices_label" msgid="7277170419679404129">"Načúvacie zariadenia"</string>
+ <!-- no translation found for quick_settings_hearing_devices_dialog_title (9004774017688484981) -->
+ <skip />
+ <!-- no translation found for quick_settings_pair_hearing_devices (5987105102207447322) -->
+ <skip />
+ <!-- no translation found for accessibility_hearing_device_pair_new_device (8440082580186130090) -->
<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>
@@ -592,7 +597,7 @@
<string name="media_device_cast" msgid="4786241789687569892">"Prenos"</string>
<string name="stream_notification_unavailable" msgid="4313854556205836435">"Nedostupné, pretože je vypnuté zvonenie"</string>
<string name="stream_alarm_unavailable" msgid="4059817189292197839">"Nedostupné, pretože je zapnutý režim bez vyrušení"</string>
- <string name="stream_media_unavailable" msgid="6823020894438959853">"Nedostupné, pretože je zapnutý režim bez vyrušení"</string>
+ <string name="stream_media_unavailable" msgid="6823020894438959853">"Nedostupné, zapnutý režim bez vyrušení"</string>
<string name="volume_stream_content_description_unmute" msgid="7729576371406792977">"%1$s. Klepnutím zapnite zvuk."</string>
<string name="volume_stream_content_description_vibrate" msgid="4858111994183089761">"%1$s. Klepnutím aktivujte režim vibrovania. Služby dostupnosti je možné stlmiť."</string>
<string name="volume_stream_content_description_mute" msgid="4079046784917920984">"%1$s. Klepnutím vypnite zvuk. Služby dostupnosti je možné stlmiť."</string>
diff --git a/packages/SystemUI/res/values-sk/tiles_states_strings.xml b/packages/SystemUI/res/values-sk/tiles_states_strings.xml
index 5ba7a07..6b5af80 100644
--- a/packages/SystemUI/res/values-sk/tiles_states_strings.xml
+++ b/packages/SystemUI/res/values-sk/tiles_states_strings.xml
@@ -186,7 +186,9 @@
<item msgid="2478289035899842865">"Vypnuté"</item>
<item msgid="5137565285664080143">"Zapnuté"</item>
</string-array>
- <!-- no translation found for tile_states_hearing_devices:0 (1235334096484287173) -->
- <!-- no translation found for tile_states_hearing_devices:1 (3079622119444911877) -->
- <!-- no translation found for tile_states_hearing_devices:2 (3028994095749238254) -->
+ <string-array name="tile_states_hearing_devices">
+ <item msgid="1235334096484287173">"Nedostupné"</item>
+ <item msgid="3079622119444911877">"Vypnuté"</item>
+ <item msgid="3028994095749238254">"Zapnuté"</item>
+ </string-array>
</resources>
diff --git a/packages/SystemUI/res/values-sl/strings.xml b/packages/SystemUI/res/values-sl/strings.xml
index 90dd463..514d2f9 100644
--- a/packages/SystemUI/res/values-sl/strings.xml
+++ b/packages/SystemUI/res/values-sl/strings.xml
@@ -365,6 +365,12 @@
<string name="quick_settings_contrast_high" msgid="656049259587494499">"Visok"</string>
<!-- no translation found for quick_settings_hearing_devices_label (7277170419679404129) -->
<skip />
+ <!-- no translation found for quick_settings_hearing_devices_dialog_title (9004774017688484981) -->
+ <skip />
+ <!-- no translation found for quick_settings_pair_hearing_devices (5987105102207447322) -->
+ <skip />
+ <!-- no translation found for accessibility_hearing_device_pair_new_device (8440082580186130090) -->
+ <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>
diff --git a/packages/SystemUI/res/values-sq/strings.xml b/packages/SystemUI/res/values-sq/strings.xml
index 419df19..c13d76b 100644
--- a/packages/SystemUI/res/values-sq/strings.xml
+++ b/packages/SystemUI/res/values-sq/strings.xml
@@ -151,8 +151,7 @@
<string name="accessibility_scanning_face" msgid="3093828357921541387">"Po skanon fytyrën"</string>
<string name="accessibility_send_smart_reply" msgid="8885032190442015141">"Dërgo"</string>
<string name="cancel" msgid="1089011503403416730">"Anulo"</string>
- <!-- no translation found for biometric_dialog_logo (7681107853070774595) -->
- <skip />
+ <string name="biometric_dialog_logo" msgid="7681107853070774595">"Logoja e aplikacionit"</string>
<string name="biometric_dialog_confirm" msgid="2005978443007344895">"Konfirmo"</string>
<string name="biometric_dialog_try_again" msgid="8575345628117768844">"Provo përsëri"</string>
<string name="biometric_dialog_empty_space_description" msgid="3330555462071453396">"Trokit për të anuluar vërtetimin"</string>
@@ -167,8 +166,7 @@
<string name="biometric_dialog_tap_confirm_with_face_alt_3" msgid="2192670471930606539">"Fytyra u njoh. Shtyp ikonën e shkyçjes për të vazhduar."</string>
<string name="biometric_dialog_authenticated" msgid="7337147327545272484">"U vërtetua"</string>
<string name="biometric_dialog_cancel_authentication" msgid="981316588773442637">"Anulo vërtetimin"</string>
- <!-- no translation found for biometric_dialog_content_view_more_options_button (2663810393874865475) -->
- <skip />
+ <string name="biometric_dialog_content_view_more_options_button" msgid="2663810393874865475">"Opsione të tjera…"</string>
<string name="biometric_dialog_use_pin" msgid="8385294115283000709">"Përdor kodin PIN"</string>
<string name="biometric_dialog_use_pattern" msgid="2315593393167211194">"Përdor motivin"</string>
<string name="biometric_dialog_use_password" msgid="3445033859393474779">"Përdor fjalëkalimin"</string>
@@ -367,6 +365,12 @@
<string name="quick_settings_contrast_high" msgid="656049259587494499">"I lartë"</string>
<!-- no translation found for quick_settings_hearing_devices_label (7277170419679404129) -->
<skip />
+ <!-- no translation found for quick_settings_hearing_devices_dialog_title (9004774017688484981) -->
+ <skip />
+ <!-- no translation found for quick_settings_pair_hearing_devices (5987105102207447322) -->
+ <skip />
+ <!-- no translation found for accessibility_hearing_device_pair_new_device (8440082580186130090) -->
+ <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>
@@ -444,10 +448,8 @@
<string name="button_to_remove_widget" msgid="3948204829181214098">"Hiq"</string>
<string name="hub_mode_add_widget_button_text" msgid="4831464661209971729">"Shto miniaplikacionin"</string>
<string name="hub_mode_editing_exit_button_text" msgid="3704686734192264771">"U krye"</string>
- <!-- no translation found for label_for_button_in_empty_state_cta (7314975555382055823) -->
- <skip />
- <!-- no translation found for title_for_empty_state_cta (6161654421223450530) -->
- <skip />
+ <string name="label_for_button_in_empty_state_cta" msgid="7314975555382055823">"Shto miniaplikacionet"</string>
+ <string name="title_for_empty_state_cta" msgid="6161654421223450530">"Merr qasjen e shpejtë në miniaplikacionet e tua të preferuara pa e shkyçur tabletin."</string>
<string name="dialog_title_to_allow_any_widget" msgid="1004820948962675644">"Të lejohet ndonjë miniaplikacion te ekrani i kyçjes?"</string>
<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>
diff --git a/packages/SystemUI/res/values-sr/strings.xml b/packages/SystemUI/res/values-sr/strings.xml
index ca9eb65..bc6642a 100644
--- a/packages/SystemUI/res/values-sr/strings.xml
+++ b/packages/SystemUI/res/values-sr/strings.xml
@@ -363,7 +363,12 @@
<string name="quick_settings_contrast_standard" msgid="2538227821968061832">"Стандардно"</string>
<string name="quick_settings_contrast_medium" msgid="5158352575583902566">"Средње"</string>
<string name="quick_settings_contrast_high" msgid="656049259587494499">"Високо"</string>
- <!-- no translation found for quick_settings_hearing_devices_label (7277170419679404129) -->
+ <string name="quick_settings_hearing_devices_label" msgid="7277170419679404129">"Слушни апарати"</string>
+ <!-- no translation found for quick_settings_hearing_devices_dialog_title (9004774017688484981) -->
+ <skip />
+ <!-- no translation found for quick_settings_pair_hearing_devices (5987105102207447322) -->
+ <skip />
+ <!-- no translation found for accessibility_hearing_device_pair_new_device (8440082580186130090) -->
<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>
@@ -442,10 +447,8 @@
<string name="button_to_remove_widget" msgid="3948204829181214098">"Уклони"</string>
<string name="hub_mode_add_widget_button_text" msgid="4831464661209971729">"Додај виџет"</string>
<string name="hub_mode_editing_exit_button_text" msgid="3704686734192264771">"Готово"</string>
- <!-- no translation found for label_for_button_in_empty_state_cta (7314975555382055823) -->
- <skip />
- <!-- no translation found for title_for_empty_state_cta (6161654421223450530) -->
- <skip />
+ <string name="label_for_button_in_empty_state_cta" msgid="7314975555382055823">"Додај виџете"</string>
+ <string name="title_for_empty_state_cta" msgid="6161654421223450530">"Брзо приступајте омиљеним виџетима за апликације без откључавања таблета."</string>
<string name="dialog_title_to_allow_any_widget" msgid="1004820948962675644">"Желите да дозволите све виџете на закључаном екрану?"</string>
<string name="button_text_to_open_settings" msgid="1987729256950941628">"Отвори подешавања"</string>
<string name="work_mode_off_title" msgid="5794818421357835873">"Укључити пословне апликације?"</string>
diff --git a/packages/SystemUI/res/values-sr/tiles_states_strings.xml b/packages/SystemUI/res/values-sr/tiles_states_strings.xml
index 2235171..2acf1d2 100644
--- a/packages/SystemUI/res/values-sr/tiles_states_strings.xml
+++ b/packages/SystemUI/res/values-sr/tiles_states_strings.xml
@@ -186,7 +186,9 @@
<item msgid="2478289035899842865">"Искључено"</item>
<item msgid="5137565285664080143">"Укључено"</item>
</string-array>
- <!-- no translation found for tile_states_hearing_devices:0 (1235334096484287173) -->
- <!-- no translation found for tile_states_hearing_devices:1 (3079622119444911877) -->
- <!-- no translation found for tile_states_hearing_devices:2 (3028994095749238254) -->
+ <string-array name="tile_states_hearing_devices">
+ <item msgid="1235334096484287173">"Недоступно"</item>
+ <item msgid="3079622119444911877">"Искључено"</item>
+ <item msgid="3028994095749238254">"Укључено"</item>
+ </string-array>
</resources>
diff --git a/packages/SystemUI/res/values-sv/strings.xml b/packages/SystemUI/res/values-sv/strings.xml
index 14b39fb..15c370c 100644
--- a/packages/SystemUI/res/values-sv/strings.xml
+++ b/packages/SystemUI/res/values-sv/strings.xml
@@ -365,6 +365,12 @@
<string name="quick_settings_contrast_high" msgid="656049259587494499">"Hög"</string>
<!-- no translation found for quick_settings_hearing_devices_label (7277170419679404129) -->
<skip />
+ <!-- no translation found for quick_settings_hearing_devices_dialog_title (9004774017688484981) -->
+ <skip />
+ <!-- no translation found for quick_settings_pair_hearing_devices (5987105102207447322) -->
+ <skip />
+ <!-- no translation found for accessibility_hearing_device_pair_new_device (8440082580186130090) -->
+ <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>
@@ -442,10 +448,8 @@
<string name="button_to_remove_widget" msgid="3948204829181214098">"Ta bort"</string>
<string name="hub_mode_add_widget_button_text" msgid="4831464661209971729">"Lägg till widget"</string>
<string name="hub_mode_editing_exit_button_text" msgid="3704686734192264771">"Klar"</string>
- <!-- no translation found for label_for_button_in_empty_state_cta (7314975555382055823) -->
- <skip />
- <!-- no translation found for title_for_empty_state_cta (6161654421223450530) -->
- <skip />
+ <string name="label_for_button_in_empty_state_cta" msgid="7314975555382055823">"Lägg till widgetar"</string>
+ <string name="title_for_empty_state_cta" msgid="6161654421223450530">"Få snabbåtkomst till appwidgetar utan att låsa upp surfplattan."</string>
<string name="dialog_title_to_allow_any_widget" msgid="1004820948962675644">"Vill du tillåta alla widgetar på låsskärmen?"</string>
<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>
diff --git a/packages/SystemUI/res/values-sw/strings.xml b/packages/SystemUI/res/values-sw/strings.xml
index 2e8017a3..41bac7b 100644
--- a/packages/SystemUI/res/values-sw/strings.xml
+++ b/packages/SystemUI/res/values-sw/strings.xml
@@ -363,7 +363,12 @@
<string name="quick_settings_contrast_standard" msgid="2538227821968061832">"Kawaida"</string>
<string name="quick_settings_contrast_medium" msgid="5158352575583902566">"Wastani"</string>
<string name="quick_settings_contrast_high" msgid="656049259587494499">"Juu"</string>
- <!-- no translation found for quick_settings_hearing_devices_label (7277170419679404129) -->
+ <string name="quick_settings_hearing_devices_label" msgid="7277170419679404129">"Vifaa vya kusikilizia"</string>
+ <!-- no translation found for quick_settings_hearing_devices_dialog_title (9004774017688484981) -->
+ <skip />
+ <!-- no translation found for quick_settings_pair_hearing_devices (5987105102207447322) -->
+ <skip />
+ <!-- no translation found for accessibility_hearing_device_pair_new_device (8440082580186130090) -->
<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>
@@ -442,10 +447,8 @@
<string name="button_to_remove_widget" msgid="3948204829181214098">"Ondoa"</string>
<string name="hub_mode_add_widget_button_text" msgid="4831464661209971729">"Ongeza wijeti"</string>
<string name="hub_mode_editing_exit_button_text" msgid="3704686734192264771">"Nimemaliza"</string>
- <!-- no translation found for label_for_button_in_empty_state_cta (7314975555382055823) -->
- <skip />
- <!-- no translation found for title_for_empty_state_cta (6161654421223450530) -->
- <skip />
+ <string name="label_for_button_in_empty_state_cta" msgid="7314975555382055823">"Weka wijeti"</string>
+ <string name="title_for_empty_state_cta" msgid="6161654421223450530">"Fikia haraka wijeti za programu unazopenda bila kufungua kishikwambi chako."</string>
<string name="dialog_title_to_allow_any_widget" msgid="1004820948962675644">"Ungependa kuruhusu wijeti yoyote kwenye skrini iliyofungwa?"</string>
<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>
diff --git a/packages/SystemUI/res/values-sw/tiles_states_strings.xml b/packages/SystemUI/res/values-sw/tiles_states_strings.xml
index cbc8584..15de7f8 100644
--- a/packages/SystemUI/res/values-sw/tiles_states_strings.xml
+++ b/packages/SystemUI/res/values-sw/tiles_states_strings.xml
@@ -186,7 +186,9 @@
<item msgid="2478289035899842865">"Umezima"</item>
<item msgid="5137565285664080143">"Umewasha"</item>
</string-array>
- <!-- no translation found for tile_states_hearing_devices:0 (1235334096484287173) -->
- <!-- no translation found for tile_states_hearing_devices:1 (3079622119444911877) -->
- <!-- no translation found for tile_states_hearing_devices:2 (3028994095749238254) -->
+ <string-array name="tile_states_hearing_devices">
+ <item msgid="1235334096484287173">"Havipatikani"</item>
+ <item msgid="3079622119444911877">"Vimezimwa"</item>
+ <item msgid="3028994095749238254">"Vimewashwa"</item>
+ </string-array>
</resources>
diff --git a/packages/SystemUI/res/values-ta/strings.xml b/packages/SystemUI/res/values-ta/strings.xml
index d623ba0..019dddc 100644
--- a/packages/SystemUI/res/values-ta/strings.xml
+++ b/packages/SystemUI/res/values-ta/strings.xml
@@ -365,6 +365,12 @@
<string name="quick_settings_contrast_high" msgid="656049259587494499">"அதிகம்"</string>
<!-- no translation found for quick_settings_hearing_devices_label (7277170419679404129) -->
<skip />
+ <!-- no translation found for quick_settings_hearing_devices_dialog_title (9004774017688484981) -->
+ <skip />
+ <!-- no translation found for quick_settings_pair_hearing_devices (5987105102207447322) -->
+ <skip />
+ <!-- no translation found for accessibility_hearing_device_pair_new_device (8440082580186130090) -->
+ <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>
@@ -442,10 +448,8 @@
<string name="button_to_remove_widget" msgid="3948204829181214098">"அகற்றும்"</string>
<string name="hub_mode_add_widget_button_text" msgid="4831464661209971729">"விட்ஜெட்டைச் சேர்"</string>
<string name="hub_mode_editing_exit_button_text" msgid="3704686734192264771">"முடிந்தது"</string>
- <!-- no translation found for label_for_button_in_empty_state_cta (7314975555382055823) -->
- <skip />
- <!-- no translation found for title_for_empty_state_cta (6161654421223450530) -->
- <skip />
+ <string name="label_for_button_in_empty_state_cta" msgid="7314975555382055823">"விட்ஜெட்களைச் சேர்"</string>
+ <string name="title_for_empty_state_cta" msgid="6161654421223450530">"டேப்லெட்டை அன்லாக் செய்யாமலே உங்களுக்கு விருப்பமான ஆப்ஸ் விட்ஜெட்களுக்கு விரைவு அணுகலைப் பெறுங்கள்."</string>
<string name="dialog_title_to_allow_any_widget" msgid="1004820948962675644">"பூட்டுத் திரையில் எந்தவொரு விட்ஜெட்டையும் அனுமதிக்கவா?"</string>
<string name="button_text_to_open_settings" msgid="1987729256950941628">"அமைப்புகளைத் திற"</string>
<string name="work_mode_off_title" msgid="5794818421357835873">"பணி ஆப்ஸை மீண்டும் இயக்கவா?"</string>
@@ -581,7 +585,7 @@
<string name="screen_pinning_exit" msgid="4553787518387346893">"ஆப்ஸ் பின்னிலிருந்து அகற்றப்பட்டது"</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>
@@ -617,7 +621,7 @@
<string name="volume_panel_hint_mute" msgid="6962563028495243738">"%s ஐ ஒலியடக்கும்"</string>
<string name="volume_panel_hint_unmute" msgid="7489063242934477382">"%s ஐ ஒலி இயக்கும்"</string>
<string name="media_output_label_title" msgid="872824698593182505">"இதில் <xliff:g id="LABEL">%s</xliff:g> பிளே ஆகிறது"</string>
- <string name="media_output_title_without_playing" msgid="3825663683169305013">"இல் ஆடியோ பிளே ஆகும்"</string>
+ <string name="media_output_title_without_playing" msgid="3825663683169305013">"ஆடியோ இதில் பிளே ஆகும்"</string>
<string name="system_ui_tuner" msgid="1471348823289954729">"System UI Tuner"</string>
<string name="status_bar" msgid="4357390266055077437">"நிலைப் பட்டி"</string>
<string name="demo_mode" msgid="263484519766901593">"சிஸ்டம் பயனர் இடைமுக டெமோ பயன்முறை"</string>
diff --git a/packages/SystemUI/res/values-te/strings.xml b/packages/SystemUI/res/values-te/strings.xml
index 732131a..1b3c5e2 100644
--- a/packages/SystemUI/res/values-te/strings.xml
+++ b/packages/SystemUI/res/values-te/strings.xml
@@ -365,6 +365,12 @@
<string name="quick_settings_contrast_high" msgid="656049259587494499">"అధికం"</string>
<!-- no translation found for quick_settings_hearing_devices_label (7277170419679404129) -->
<skip />
+ <!-- no translation found for quick_settings_hearing_devices_dialog_title (9004774017688484981) -->
+ <skip />
+ <!-- no translation found for quick_settings_pair_hearing_devices (5987105102207447322) -->
+ <skip />
+ <!-- no translation found for accessibility_hearing_device_pair_new_device (8440082580186130090) -->
+ <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>
@@ -442,10 +448,8 @@
<string name="button_to_remove_widget" msgid="3948204829181214098">"తీసివేయండి"</string>
<string name="hub_mode_add_widget_button_text" msgid="4831464661209971729">"విడ్జెట్ను జోడించండి"</string>
<string name="hub_mode_editing_exit_button_text" msgid="3704686734192264771">"పూర్తయింది"</string>
- <!-- no translation found for label_for_button_in_empty_state_cta (7314975555382055823) -->
- <skip />
- <!-- no translation found for title_for_empty_state_cta (6161654421223450530) -->
- <skip />
+ <string name="label_for_button_in_empty_state_cta" msgid="7314975555382055823">"విడ్జెట్లను జోడించండి"</string>
+ <string name="title_for_empty_state_cta" msgid="6161654421223450530">"మీ టాబ్లెట్ను అన్లాక్ చేయకుండానే మీకు ఇష్టమైన యాప్ విడ్జెట్లకు క్విక్ యాక్సెస్ను పొందండి."</string>
<string name="dialog_title_to_allow_any_widget" msgid="1004820948962675644">"లాక్ స్క్రీన్లో ఏదైనా విడ్జెట్ను అనుమతించాలా?"</string>
<string name="button_text_to_open_settings" msgid="1987729256950941628">"సెట్టింగ్లను తెరవండి"</string>
<string name="work_mode_off_title" msgid="5794818421357835873">"వర్క్ యాప్స్ అన్పాజ్ చేయాలా?"</string>
@@ -603,7 +607,7 @@
<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_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>
diff --git a/packages/SystemUI/res/values-th/strings.xml b/packages/SystemUI/res/values-th/strings.xml
index ab125e9..e8d376d 100644
--- a/packages/SystemUI/res/values-th/strings.xml
+++ b/packages/SystemUI/res/values-th/strings.xml
@@ -365,6 +365,12 @@
<string name="quick_settings_contrast_high" msgid="656049259587494499">"สูง"</string>
<!-- no translation found for quick_settings_hearing_devices_label (7277170419679404129) -->
<skip />
+ <!-- no translation found for quick_settings_hearing_devices_dialog_title (9004774017688484981) -->
+ <skip />
+ <!-- no translation found for quick_settings_pair_hearing_devices (5987105102207447322) -->
+ <skip />
+ <!-- no translation found for accessibility_hearing_device_pair_new_device (8440082580186130090) -->
+ <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>
@@ -442,10 +448,8 @@
<string name="button_to_remove_widget" msgid="3948204829181214098">"นำออก"</string>
<string name="hub_mode_add_widget_button_text" msgid="4831464661209971729">"เพิ่มวิดเจ็ต"</string>
<string name="hub_mode_editing_exit_button_text" msgid="3704686734192264771">"เสร็จสิ้น"</string>
- <!-- no translation found for label_for_button_in_empty_state_cta (7314975555382055823) -->
- <skip />
- <!-- no translation found for title_for_empty_state_cta (6161654421223450530) -->
- <skip />
+ <string name="label_for_button_in_empty_state_cta" msgid="7314975555382055823">"เพิ่มวิดเจ็ต"</string>
+ <string name="title_for_empty_state_cta" msgid="6161654421223450530">"เข้าถึงวิดเจ็ตแอปโปรดได้อย่างรวดเร็วโดยไม่ต้องปลดล็อกแท็บเล็ต"</string>
<string name="dialog_title_to_allow_any_widget" msgid="1004820948962675644">"อนุญาตวิดเจ็ตบนหน้าจอล็อกไหม"</string>
<string name="button_text_to_open_settings" msgid="1987729256950941628">"เปิดการตั้งค่า"</string>
<string name="work_mode_off_title" msgid="5794818421357835873">"ยกเลิกการหยุดแอปงานชั่วคราวไหม"</string>
diff --git a/packages/SystemUI/res/values-tl/strings.xml b/packages/SystemUI/res/values-tl/strings.xml
index c086b8d..54bb74b 100644
--- a/packages/SystemUI/res/values-tl/strings.xml
+++ b/packages/SystemUI/res/values-tl/strings.xml
@@ -363,7 +363,12 @@
<string name="quick_settings_contrast_standard" msgid="2538227821968061832">"Standard"</string>
<string name="quick_settings_contrast_medium" msgid="5158352575583902566">"Katamtaman"</string>
<string name="quick_settings_contrast_high" msgid="656049259587494499">"Mataas"</string>
- <!-- no translation found for quick_settings_hearing_devices_label (7277170419679404129) -->
+ <string name="quick_settings_hearing_devices_label" msgid="7277170419679404129">"Mga hearing device"</string>
+ <!-- no translation found for quick_settings_hearing_devices_dialog_title (9004774017688484981) -->
+ <skip />
+ <!-- no translation found for quick_settings_pair_hearing_devices (5987105102207447322) -->
+ <skip />
+ <!-- no translation found for accessibility_hearing_device_pair_new_device (8440082580186130090) -->
<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>
@@ -442,10 +447,8 @@
<string name="button_to_remove_widget" msgid="3948204829181214098">"Alisin"</string>
<string name="hub_mode_add_widget_button_text" msgid="4831464661209971729">"Magdagdag ng widget"</string>
<string name="hub_mode_editing_exit_button_text" msgid="3704686734192264771">"Tapos na"</string>
- <!-- no translation found for label_for_button_in_empty_state_cta (7314975555382055823) -->
- <skip />
- <!-- no translation found for title_for_empty_state_cta (6161654421223450530) -->
- <skip />
+ <string name="label_for_button_in_empty_state_cta" msgid="7314975555382055823">"Magdagdag ng mga widget"</string>
+ <string name="title_for_empty_state_cta" msgid="6161654421223450530">"Makakuha ng mabilis na access sa paborito mong mga widget ng app nang hindi ina-unlock ang iyong tablet."</string>
<string name="dialog_title_to_allow_any_widget" msgid="1004820948962675644">"Payagan ang anumang widget sa lock screen?"</string>
<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>
diff --git a/packages/SystemUI/res/values-tl/tiles_states_strings.xml b/packages/SystemUI/res/values-tl/tiles_states_strings.xml
index d4a836e..fe2827f 100644
--- a/packages/SystemUI/res/values-tl/tiles_states_strings.xml
+++ b/packages/SystemUI/res/values-tl/tiles_states_strings.xml
@@ -186,7 +186,9 @@
<item msgid="2478289035899842865">"Naka-off"</item>
<item msgid="5137565285664080143">"Naka-on"</item>
</string-array>
- <!-- no translation found for tile_states_hearing_devices:0 (1235334096484287173) -->
- <!-- no translation found for tile_states_hearing_devices:1 (3079622119444911877) -->
- <!-- no translation found for tile_states_hearing_devices:2 (3028994095749238254) -->
+ <string-array name="tile_states_hearing_devices">
+ <item msgid="1235334096484287173">"Hindi available"</item>
+ <item msgid="3079622119444911877">"Naka-off"</item>
+ <item msgid="3028994095749238254">"Naka-on"</item>
+ </string-array>
</resources>
diff --git a/packages/SystemUI/res/values-tr/strings.xml b/packages/SystemUI/res/values-tr/strings.xml
index 76e0e35..5364c83 100644
--- a/packages/SystemUI/res/values-tr/strings.xml
+++ b/packages/SystemUI/res/values-tr/strings.xml
@@ -363,7 +363,12 @@
<string name="quick_settings_contrast_standard" msgid="2538227821968061832">"Standart"</string>
<string name="quick_settings_contrast_medium" msgid="5158352575583902566">"Orta"</string>
<string name="quick_settings_contrast_high" msgid="656049259587494499">"Yüksek"</string>
- <!-- no translation found for quick_settings_hearing_devices_label (7277170419679404129) -->
+ <string name="quick_settings_hearing_devices_label" msgid="7277170419679404129">"İşitme cihazları"</string>
+ <!-- no translation found for quick_settings_hearing_devices_dialog_title (9004774017688484981) -->
+ <skip />
+ <!-- no translation found for quick_settings_pair_hearing_devices (5987105102207447322) -->
+ <skip />
+ <!-- no translation found for accessibility_hearing_device_pair_new_device (8440082580186130090) -->
<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>
@@ -442,10 +447,8 @@
<string name="button_to_remove_widget" msgid="3948204829181214098">"Kaldır"</string>
<string name="hub_mode_add_widget_button_text" msgid="4831464661209971729">"Widget ekle"</string>
<string name="hub_mode_editing_exit_button_text" msgid="3704686734192264771">"Bitti"</string>
- <!-- no translation found for label_for_button_in_empty_state_cta (7314975555382055823) -->
- <skip />
- <!-- no translation found for title_for_empty_state_cta (6161654421223450530) -->
- <skip />
+ <string name="label_for_button_in_empty_state_cta" msgid="7314975555382055823">"Widget ekleme"</string>
+ <string name="title_for_empty_state_cta" msgid="6161654421223450530">"Tabletinizin kilidini açmadan favori uygulama widget\'larınıza hızlıca erişin."</string>
<string name="dialog_title_to_allow_any_widget" msgid="1004820948962675644">"Kilit ekranında tüm widget\'lara izin verilsin mi?"</string>
<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>
diff --git a/packages/SystemUI/res/values-tr/tiles_states_strings.xml b/packages/SystemUI/res/values-tr/tiles_states_strings.xml
index ecd1585..1ed106f 100644
--- a/packages/SystemUI/res/values-tr/tiles_states_strings.xml
+++ b/packages/SystemUI/res/values-tr/tiles_states_strings.xml
@@ -186,7 +186,9 @@
<item msgid="2478289035899842865">"Kapalı"</item>
<item msgid="5137565285664080143">"Açık"</item>
</string-array>
- <!-- no translation found for tile_states_hearing_devices:0 (1235334096484287173) -->
- <!-- no translation found for tile_states_hearing_devices:1 (3079622119444911877) -->
- <!-- no translation found for tile_states_hearing_devices:2 (3028994095749238254) -->
+ <string-array name="tile_states_hearing_devices">
+ <item msgid="1235334096484287173">"Yok"</item>
+ <item msgid="3079622119444911877">"Kapalı"</item>
+ <item msgid="3028994095749238254">"Açık"</item>
+ </string-array>
</resources>
diff --git a/packages/SystemUI/res/values-uk/strings.xml b/packages/SystemUI/res/values-uk/strings.xml
index 260b8c9..da1dfa4 100644
--- a/packages/SystemUI/res/values-uk/strings.xml
+++ b/packages/SystemUI/res/values-uk/strings.xml
@@ -365,6 +365,12 @@
<string name="quick_settings_contrast_high" msgid="656049259587494499">"Високий"</string>
<!-- no translation found for quick_settings_hearing_devices_label (7277170419679404129) -->
<skip />
+ <!-- no translation found for quick_settings_hearing_devices_dialog_title (9004774017688484981) -->
+ <skip />
+ <!-- no translation found for quick_settings_pair_hearing_devices (5987105102207447322) -->
+ <skip />
+ <!-- no translation found for accessibility_hearing_device_pair_new_device (8440082580186130090) -->
+ <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>
@@ -442,10 +448,8 @@
<string name="button_to_remove_widget" msgid="3948204829181214098">"Видалити"</string>
<string name="hub_mode_add_widget_button_text" msgid="4831464661209971729">"Додати віджет"</string>
<string name="hub_mode_editing_exit_button_text" msgid="3704686734192264771">"Готово"</string>
- <!-- no translation found for label_for_button_in_empty_state_cta (7314975555382055823) -->
- <skip />
- <!-- no translation found for title_for_empty_state_cta (6161654421223450530) -->
- <skip />
+ <string name="label_for_button_in_empty_state_cta" msgid="7314975555382055823">"Додати віджети"</string>
+ <string name="title_for_empty_state_cta" msgid="6161654421223450530">"Отримуйте швидкий доступ до віджетів улюблених додатків, не розблоковуючи планшет."</string>
<string name="dialog_title_to_allow_any_widget" msgid="1004820948962675644">"Дозволити використовувати будь-який віджет на заблокованому екрані?"</string>
<string name="button_text_to_open_settings" msgid="1987729256950941628">"Відкрити налаштування"</string>
<string name="work_mode_off_title" msgid="5794818421357835873">"Увімкнути робочі додатки?"</string>
@@ -672,10 +676,10 @@
<string name="notification_channel_summary_automatic_silenced" msgid="7403004439649872047">"<b>Статус</b>: знижено до \"Без звуку\""</string>
<string name="notification_channel_summary_automatic_promoted" msgid="1301710305149590426">"<b>Статус</b>: пріоритет підвищено"</string>
<string name="notification_channel_summary_automatic_demoted" msgid="1831303964660807700">"<b>Статус</b>: пріоритет знижено"</string>
- <string name="notification_channel_summary_priority_baseline" msgid="46674690072551234">"З’являється вгорі сповіщень про розмови та як зображення профілю на заблокованому екрані"</string>
- <string name="notification_channel_summary_priority_bubble" msgid="1275413109619074576">"З’являється вгорі сповіщень про розмови та як зображення профілю на заблокованому екрані, показується у вигляді спливаючої підказки"</string>
- <string name="notification_channel_summary_priority_dnd" msgid="6665395023264154361">"З’являється вгорі сповіщень про розмови та як зображення профілю на заблокованому екрані, показується навіть у режимі \"Не турбувати\""</string>
- <string name="notification_channel_summary_priority_all" msgid="7151752959650048285">"З’являється вгорі сповіщень про розмови та як зображення профілю на заблокованому екрані, відображається як спливаючий чат, перериває режим \"Не турбувати\""</string>
+ <string name="notification_channel_summary_priority_baseline" msgid="46674690072551234">"З’являється вгорі сповіщень про розмови і як зображення профілю на заблокованому екрані"</string>
+ <string name="notification_channel_summary_priority_bubble" msgid="1275413109619074576">"З’являється вгорі сповіщень про розмови і як зображення профілю на заблокованому екрані, показується у вигляді спливаючої підказки"</string>
+ <string name="notification_channel_summary_priority_dnd" msgid="6665395023264154361">"З’являється вгорі сповіщень про розмови і як зображення профілю на заблокованому екрані, показується навіть у режимі \"Не турбувати\""</string>
+ <string name="notification_channel_summary_priority_all" msgid="7151752959650048285">"З’являється вгорі сповіщень про розмови і як зображення профілю на заблокованому екрані, відображається як спливаючий чат, перериває режим \"Не турбувати\""</string>
<string name="notification_priority_title" msgid="2079708866333537093">"Пріоритет"</string>
<string name="no_shortcut" msgid="8257177117568230126">"<xliff:g id="APP_NAME">%1$s</xliff:g> не підтримує функції розмов"</string>
<string name="notification_unblockable_desc" msgid="2073030886006190804">"Ці сповіщення не можна змінити."</string>
diff --git a/packages/SystemUI/res/values-ur/strings.xml b/packages/SystemUI/res/values-ur/strings.xml
index 44ea082..fa4bd02 100644
--- a/packages/SystemUI/res/values-ur/strings.xml
+++ b/packages/SystemUI/res/values-ur/strings.xml
@@ -363,7 +363,12 @@
<string name="quick_settings_contrast_standard" msgid="2538227821968061832">"معیاری"</string>
<string name="quick_settings_contrast_medium" msgid="5158352575583902566">"متوسط"</string>
<string name="quick_settings_contrast_high" msgid="656049259587494499">"زیادہ"</string>
- <!-- no translation found for quick_settings_hearing_devices_label (7277170419679404129) -->
+ <string name="quick_settings_hearing_devices_label" msgid="7277170419679404129">"سماعت کے آلات"</string>
+ <!-- no translation found for quick_settings_hearing_devices_dialog_title (9004774017688484981) -->
+ <skip />
+ <!-- no translation found for quick_settings_pair_hearing_devices (5987105102207447322) -->
+ <skip />
+ <!-- no translation found for accessibility_hearing_device_pair_new_device (8440082580186130090) -->
<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>
@@ -442,10 +447,8 @@
<string name="button_to_remove_widget" msgid="3948204829181214098">"ہٹائیں"</string>
<string name="hub_mode_add_widget_button_text" msgid="4831464661209971729">"ویجیٹ شامل کریں"</string>
<string name="hub_mode_editing_exit_button_text" msgid="3704686734192264771">"ہو گیا"</string>
- <!-- no translation found for label_for_button_in_empty_state_cta (7314975555382055823) -->
- <skip />
- <!-- no translation found for title_for_empty_state_cta (6161654421223450530) -->
- <skip />
+ <string name="label_for_button_in_empty_state_cta" msgid="7314975555382055823">"ویجٹس شامل کریں"</string>
+ <string name="title_for_empty_state_cta" msgid="6161654421223450530">"اپنے ٹیبلیٹ کو غیر مقفل کیے بغیر اپنے پسندیدہ ایپ ویجیٹس تک فوری رسائی حاصل کریں۔"</string>
<string name="dialog_title_to_allow_any_widget" msgid="1004820948962675644">"مقفل اسکرین پر کسی ویجیٹ کی اجازت دیں؟"</string>
<string name="button_text_to_open_settings" msgid="1987729256950941628">"ترتیبات کھولیں"</string>
<string name="work_mode_off_title" msgid="5794818421357835873">"ورک ایپس کو غیر موقوف کریں؟"</string>
@@ -617,7 +620,7 @@
<string name="volume_panel_hint_mute" msgid="6962563028495243738">"%s خاموش کریں"</string>
<string name="volume_panel_hint_unmute" msgid="7489063242934477382">"%s غیر خاموش کریں"</string>
<string name="media_output_label_title" msgid="872824698593182505">"<xliff:g id="LABEL">%s</xliff:g> پر چل رہی ہے"</string>
- <string name="media_output_title_without_playing" msgid="3825663683169305013">"آڈیو چلتی رہے گی"</string>
+ <string name="media_output_title_without_playing" msgid="3825663683169305013">"آڈیو اس پر چلے گی"</string>
<string name="system_ui_tuner" msgid="1471348823289954729">"سسٹم UI ٹیونر"</string>
<string name="status_bar" msgid="4357390266055077437">"اسٹیٹس بار"</string>
<string name="demo_mode" msgid="263484519766901593">"سسٹم UI ڈیمو موڈ"</string>
diff --git a/packages/SystemUI/res/values-ur/tiles_states_strings.xml b/packages/SystemUI/res/values-ur/tiles_states_strings.xml
index 36a9dfc..ebbc30e 100644
--- a/packages/SystemUI/res/values-ur/tiles_states_strings.xml
+++ b/packages/SystemUI/res/values-ur/tiles_states_strings.xml
@@ -186,7 +186,9 @@
<item msgid="2478289035899842865">"آف ہے"</item>
<item msgid="5137565285664080143">"آن ہے"</item>
</string-array>
- <!-- no translation found for tile_states_hearing_devices:0 (1235334096484287173) -->
- <!-- no translation found for tile_states_hearing_devices:1 (3079622119444911877) -->
- <!-- no translation found for tile_states_hearing_devices:2 (3028994095749238254) -->
+ <string-array name="tile_states_hearing_devices">
+ <item msgid="1235334096484287173">"دستیاب نہیں ہے"</item>
+ <item msgid="3079622119444911877">"آف ہے"</item>
+ <item msgid="3028994095749238254">"آن ہے"</item>
+ </string-array>
</resources>
diff --git a/packages/SystemUI/res/values-uz/strings.xml b/packages/SystemUI/res/values-uz/strings.xml
index 80a6a245..195b044 100644
--- a/packages/SystemUI/res/values-uz/strings.xml
+++ b/packages/SystemUI/res/values-uz/strings.xml
@@ -363,7 +363,12 @@
<string name="quick_settings_contrast_standard" msgid="2538227821968061832">"Standart"</string>
<string name="quick_settings_contrast_medium" msgid="5158352575583902566">"Oʻrtacha"</string>
<string name="quick_settings_contrast_high" msgid="656049259587494499">"Yuqori"</string>
- <!-- no translation found for quick_settings_hearing_devices_label (7277170419679404129) -->
+ <string name="quick_settings_hearing_devices_label" msgid="7277170419679404129">"Eshitish qurilmalari"</string>
+ <!-- no translation found for quick_settings_hearing_devices_dialog_title (9004774017688484981) -->
+ <skip />
+ <!-- no translation found for quick_settings_pair_hearing_devices (5987105102207447322) -->
+ <skip />
+ <!-- no translation found for accessibility_hearing_device_pair_new_device (8440082580186130090) -->
<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>
@@ -442,10 +447,8 @@
<string name="button_to_remove_widget" msgid="3948204829181214098">"Olib tashlash"</string>
<string name="hub_mode_add_widget_button_text" msgid="4831464661209971729">"Vidjet kiritish"</string>
<string name="hub_mode_editing_exit_button_text" msgid="3704686734192264771">"Tayyor"</string>
- <!-- no translation found for label_for_button_in_empty_state_cta (7314975555382055823) -->
- <skip />
- <!-- no translation found for title_for_empty_state_cta (6161654421223450530) -->
- <skip />
+ <string name="label_for_button_in_empty_state_cta" msgid="7314975555382055823">"Vidjetlar qoʻshish"</string>
+ <string name="title_for_empty_state_cta" msgid="6161654421223450530">"Planshetingiz qulflangan boʻlsa ham sevimli ilova vidjetlariga tezkor kira olasiz"</string>
<string name="dialog_title_to_allow_any_widget" msgid="1004820948962675644">"Ekran qulfida istalgan vidjet chiqsinmi?"</string>
<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>
diff --git a/packages/SystemUI/res/values-uz/tiles_states_strings.xml b/packages/SystemUI/res/values-uz/tiles_states_strings.xml
index 82d0733..2ae81123 100644
--- a/packages/SystemUI/res/values-uz/tiles_states_strings.xml
+++ b/packages/SystemUI/res/values-uz/tiles_states_strings.xml
@@ -186,7 +186,9 @@
<item msgid="2478289035899842865">"Oʻchiq"</item>
<item msgid="5137565285664080143">"Yoniq"</item>
</string-array>
- <!-- no translation found for tile_states_hearing_devices:0 (1235334096484287173) -->
- <!-- no translation found for tile_states_hearing_devices:1 (3079622119444911877) -->
- <!-- no translation found for tile_states_hearing_devices:2 (3028994095749238254) -->
+ <string-array name="tile_states_hearing_devices">
+ <item msgid="1235334096484287173">"Ishlamayapti"</item>
+ <item msgid="3079622119444911877">"Oʻchiq"</item>
+ <item msgid="3028994095749238254">"Yoniq"</item>
+ </string-array>
</resources>
diff --git a/packages/SystemUI/res/values-vi/strings.xml b/packages/SystemUI/res/values-vi/strings.xml
index 355c135..469430b 100644
--- a/packages/SystemUI/res/values-vi/strings.xml
+++ b/packages/SystemUI/res/values-vi/strings.xml
@@ -363,7 +363,12 @@
<string name="quick_settings_contrast_standard" msgid="2538227821968061832">"Chuẩn"</string>
<string name="quick_settings_contrast_medium" msgid="5158352575583902566">"Vừa"</string>
<string name="quick_settings_contrast_high" msgid="656049259587494499">"Cao"</string>
- <!-- no translation found for quick_settings_hearing_devices_label (7277170419679404129) -->
+ <string name="quick_settings_hearing_devices_label" msgid="7277170419679404129">"Thiết bị trợ thính"</string>
+ <!-- no translation found for quick_settings_hearing_devices_dialog_title (9004774017688484981) -->
+ <skip />
+ <!-- no translation found for quick_settings_pair_hearing_devices (5987105102207447322) -->
+ <skip />
+ <!-- no translation found for accessibility_hearing_device_pair_new_device (8440082580186130090) -->
<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>
@@ -442,10 +447,8 @@
<string name="button_to_remove_widget" msgid="3948204829181214098">"Xoá"</string>
<string name="hub_mode_add_widget_button_text" msgid="4831464661209971729">"Thêm tiện ích"</string>
<string name="hub_mode_editing_exit_button_text" msgid="3704686734192264771">"Xong"</string>
- <!-- no translation found for label_for_button_in_empty_state_cta (7314975555382055823) -->
- <skip />
- <!-- no translation found for title_for_empty_state_cta (6161654421223450530) -->
- <skip />
+ <string name="label_for_button_in_empty_state_cta" msgid="7314975555382055823">"Thêm tiện ích"</string>
+ <string name="title_for_empty_state_cta" msgid="6161654421223450530">"Truy cập nhanh vào các tiện ích ứng dụng bạn yêu thích mà không cần mở khoá máy tính bảng."</string>
<string name="dialog_title_to_allow_any_widget" msgid="1004820948962675644">"Cho phép mọi tiện ích trên màn hình khoá?"</string>
<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>
diff --git a/packages/SystemUI/res/values-vi/tiles_states_strings.xml b/packages/SystemUI/res/values-vi/tiles_states_strings.xml
index 83c6a18..d9d8af1 100644
--- a/packages/SystemUI/res/values-vi/tiles_states_strings.xml
+++ b/packages/SystemUI/res/values-vi/tiles_states_strings.xml
@@ -186,7 +186,9 @@
<item msgid="2478289035899842865">"Đang tắt"</item>
<item msgid="5137565285664080143">"Đang bật"</item>
</string-array>
- <!-- no translation found for tile_states_hearing_devices:0 (1235334096484287173) -->
- <!-- no translation found for tile_states_hearing_devices:1 (3079622119444911877) -->
- <!-- no translation found for tile_states_hearing_devices:2 (3028994095749238254) -->
+ <string-array name="tile_states_hearing_devices">
+ <item msgid="1235334096484287173">"Không có"</item>
+ <item msgid="3079622119444911877">"Đang tắt"</item>
+ <item msgid="3028994095749238254">"Đang bật"</item>
+ </string-array>
</resources>
diff --git a/packages/SystemUI/res/values-zh-rCN/strings.xml b/packages/SystemUI/res/values-zh-rCN/strings.xml
index 812df78..6765d1e 100644
--- a/packages/SystemUI/res/values-zh-rCN/strings.xml
+++ b/packages/SystemUI/res/values-zh-rCN/strings.xml
@@ -365,6 +365,12 @@
<string name="quick_settings_contrast_high" msgid="656049259587494499">"高"</string>
<!-- no translation found for quick_settings_hearing_devices_label (7277170419679404129) -->
<skip />
+ <!-- no translation found for quick_settings_hearing_devices_dialog_title (9004774017688484981) -->
+ <skip />
+ <!-- no translation found for quick_settings_pair_hearing_devices (5987105102207447322) -->
+ <skip />
+ <!-- no translation found for accessibility_hearing_device_pair_new_device (8440082580186130090) -->
+ <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>
@@ -442,10 +448,8 @@
<string name="button_to_remove_widget" msgid="3948204829181214098">"移除"</string>
<string name="hub_mode_add_widget_button_text" msgid="4831464661209971729">"添加微件"</string>
<string name="hub_mode_editing_exit_button_text" msgid="3704686734192264771">"完成"</string>
- <!-- no translation found for label_for_button_in_empty_state_cta (7314975555382055823) -->
- <skip />
- <!-- no translation found for title_for_empty_state_cta (6161654421223450530) -->
- <skip />
+ <string name="label_for_button_in_empty_state_cta" msgid="7314975555382055823">"添加微件"</string>
+ <string name="title_for_empty_state_cta" msgid="6161654421223450530">"无需解锁平板电脑,即可快速使用您喜爱的应用微件。"</string>
<string name="dialog_title_to_allow_any_widget" msgid="1004820948962675644">"允许在锁屏状态下显示任何微件?"</string>
<string name="button_text_to_open_settings" msgid="1987729256950941628">"打开设置"</string>
<string name="work_mode_off_title" msgid="5794818421357835873">"是否为工作应用解除暂停状态?"</string>
diff --git a/packages/SystemUI/res/values-zh-rHK/strings.xml b/packages/SystemUI/res/values-zh-rHK/strings.xml
index 5a4b63a..d4891d5 100644
--- a/packages/SystemUI/res/values-zh-rHK/strings.xml
+++ b/packages/SystemUI/res/values-zh-rHK/strings.xml
@@ -365,6 +365,12 @@
<string name="quick_settings_contrast_high" msgid="656049259587494499">"高"</string>
<!-- no translation found for quick_settings_hearing_devices_label (7277170419679404129) -->
<skip />
+ <!-- no translation found for quick_settings_hearing_devices_dialog_title (9004774017688484981) -->
+ <skip />
+ <!-- no translation found for quick_settings_pair_hearing_devices (5987105102207447322) -->
+ <skip />
+ <!-- no translation found for accessibility_hearing_device_pair_new_device (8440082580186130090) -->
+ <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>
@@ -442,10 +448,8 @@
<string name="button_to_remove_widget" msgid="3948204829181214098">"移除"</string>
<string name="hub_mode_add_widget_button_text" msgid="4831464661209971729">"新增小工具"</string>
<string name="hub_mode_editing_exit_button_text" msgid="3704686734192264771">"完成"</string>
- <!-- no translation found for label_for_button_in_empty_state_cta (7314975555382055823) -->
- <skip />
- <!-- no translation found for title_for_empty_state_cta (6161654421223450530) -->
- <skip />
+ <string name="label_for_button_in_empty_state_cta" msgid="7314975555382055823">"新增小工具"</string>
+ <string name="title_for_empty_state_cta" msgid="6161654421223450530">"無需解鎖平板電腦,就能快速使用最愛的應用程式小工具。"</string>
<string name="dialog_title_to_allow_any_widget" msgid="1004820948962675644">"要允許在上鎖畫面上顯示任何小工具嗎?"</string>
<string name="button_text_to_open_settings" msgid="1987729256950941628">"開啟設定"</string>
<string name="work_mode_off_title" msgid="5794818421357835873">"要取消暫停工作應用程式嗎?"</string>
diff --git a/packages/SystemUI/res/values-zh-rTW/strings.xml b/packages/SystemUI/res/values-zh-rTW/strings.xml
index 78dd82c..bc59988 100644
--- a/packages/SystemUI/res/values-zh-rTW/strings.xml
+++ b/packages/SystemUI/res/values-zh-rTW/strings.xml
@@ -365,6 +365,12 @@
<string name="quick_settings_contrast_high" msgid="656049259587494499">"高"</string>
<!-- no translation found for quick_settings_hearing_devices_label (7277170419679404129) -->
<skip />
+ <!-- no translation found for quick_settings_hearing_devices_dialog_title (9004774017688484981) -->
+ <skip />
+ <!-- no translation found for quick_settings_pair_hearing_devices (5987105102207447322) -->
+ <skip />
+ <!-- no translation found for accessibility_hearing_device_pair_new_device (8440082580186130090) -->
+ <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>
@@ -442,10 +448,8 @@
<string name="button_to_remove_widget" msgid="3948204829181214098">"移除"</string>
<string name="hub_mode_add_widget_button_text" msgid="4831464661209971729">"新增小工具"</string>
<string name="hub_mode_editing_exit_button_text" msgid="3704686734192264771">"完成"</string>
- <!-- no translation found for label_for_button_in_empty_state_cta (7314975555382055823) -->
- <skip />
- <!-- no translation found for title_for_empty_state_cta (6161654421223450530) -->
- <skip />
+ <string name="label_for_button_in_empty_state_cta" msgid="7314975555382055823">"新增小工具"</string>
+ <string name="title_for_empty_state_cta" msgid="6161654421223450530">"快速使用喜愛的應用程式小工具,不必解鎖平板電腦。"</string>
<string name="dialog_title_to_allow_any_widget" msgid="1004820948962675644">"要允許在螢幕鎖定畫面上顯示任何小工具嗎?"</string>
<string name="button_text_to_open_settings" msgid="1987729256950941628">"開啟設定"</string>
<string name="work_mode_off_title" msgid="5794818421357835873">"要解除工作應用程式的暫停狀態嗎?"</string>
diff --git a/packages/SystemUI/res/values-zu/strings.xml b/packages/SystemUI/res/values-zu/strings.xml
index 06f469f..780fe94 100644
--- a/packages/SystemUI/res/values-zu/strings.xml
+++ b/packages/SystemUI/res/values-zu/strings.xml
@@ -363,7 +363,12 @@
<string name="quick_settings_contrast_standard" msgid="2538227821968061832">"Okujwayelekile"</string>
<string name="quick_settings_contrast_medium" msgid="5158352575583902566">"Okuphakathi"</string>
<string name="quick_settings_contrast_high" msgid="656049259587494499">"Phezulu"</string>
- <!-- no translation found for quick_settings_hearing_devices_label (7277170419679404129) -->
+ <string name="quick_settings_hearing_devices_label" msgid="7277170419679404129">"Izinsizakuzwa"</string>
+ <!-- no translation found for quick_settings_hearing_devices_dialog_title (9004774017688484981) -->
+ <skip />
+ <!-- no translation found for quick_settings_pair_hearing_devices (5987105102207447322) -->
+ <skip />
+ <!-- no translation found for accessibility_hearing_device_pair_new_device (8440082580186130090) -->
<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>
@@ -442,10 +447,8 @@
<string name="button_to_remove_widget" msgid="3948204829181214098">"Susa"</string>
<string name="hub_mode_add_widget_button_text" msgid="4831464661209971729">"Engeza iwijethi"</string>
<string name="hub_mode_editing_exit_button_text" msgid="3704686734192264771">"Kwenziwe"</string>
- <!-- no translation found for label_for_button_in_empty_state_cta (7314975555382055823) -->
- <skip />
- <!-- no translation found for title_for_empty_state_cta (6161654421223450530) -->
- <skip />
+ <string name="label_for_button_in_empty_state_cta" msgid="7314975555382055823">"Faka iwijethi"</string>
+ <string name="title_for_empty_state_cta" msgid="6161654421223450530">"Thola ukufinyelela okusheshayo kumawijethi e-app akho owathandayo ngaphandle kokuvula ithebhulethi yakho."</string>
<string name="dialog_title_to_allow_any_widget" msgid="1004820948962675644">"Vumela noma iyiphi iwijethi ekukhiyeni isikrini?"</string>
<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>
diff --git a/packages/SystemUI/res/values-zu/tiles_states_strings.xml b/packages/SystemUI/res/values-zu/tiles_states_strings.xml
index 8877268..a795ee8 100644
--- a/packages/SystemUI/res/values-zu/tiles_states_strings.xml
+++ b/packages/SystemUI/res/values-zu/tiles_states_strings.xml
@@ -186,7 +186,9 @@
<item msgid="2478289035899842865">"Valiwe"</item>
<item msgid="5137565285664080143">"Vuliwe"</item>
</string-array>
- <!-- no translation found for tile_states_hearing_devices:0 (1235334096484287173) -->
- <!-- no translation found for tile_states_hearing_devices:1 (3079622119444911877) -->
- <!-- no translation found for tile_states_hearing_devices:2 (3028994095749238254) -->
+ <string-array name="tile_states_hearing_devices">
+ <item msgid="1235334096484287173">"Ayitholakali"</item>
+ <item msgid="3079622119444911877">"Kuvaliwe"</item>
+ <item msgid="3028994095749238254">"Kuvuliwe"</item>
+ </string-array>
</resources>
diff --git a/packages/SystemUI/src/com/android/systemui/communal/data/repository/CommunalSettingsRepository.kt b/packages/SystemUI/src/com/android/systemui/communal/data/repository/CommunalSettingsRepository.kt
index 7c65d21..c724244 100644
--- a/packages/SystemUI/src/com/android/systemui/communal/data/repository/CommunalSettingsRepository.kt
+++ b/packages/SystemUI/src/com/android/systemui/communal/data/repository/CommunalSettingsRepository.kt
@@ -21,6 +21,7 @@
import android.appwidget.AppWidgetProviderInfo
import android.content.IntentFilter
import android.content.pm.UserInfo
+import android.provider.Settings
import com.android.systemui.Flags.communalHub
import com.android.systemui.broadcast.BroadcastDispatcher
import com.android.systemui.communal.data.model.CommunalEnabledState
@@ -116,12 +117,12 @@
private fun getEnabledByUser(user: UserInfo): Flow<Boolean> =
secureSettings
- .observerFlow(userId = user.id, names = arrayOf(GLANCEABLE_HUB_ENABLED))
+ .observerFlow(userId = user.id, names = arrayOf(Settings.Secure.GLANCEABLE_HUB_ENABLED))
// Force an update
.onStart { emit(Unit) }
.map {
secureSettings.getIntForUser(
- GLANCEABLE_HUB_ENABLED,
+ Settings.Secure.GLANCEABLE_HUB_ENABLED,
ENABLED_SETTING_DEFAULT,
user.id,
) == 1
@@ -138,7 +139,6 @@
.map { devicePolicyManager.areKeyguardWidgetsAllowed(user.id) }
companion object {
- const val GLANCEABLE_HUB_ENABLED = "glanceable_hub_enabled"
const val GLANCEABLE_HUB_CONTENT_SETTING = "glanceable_hub_content_setting"
private const val ENABLED_SETTING_DEFAULT = 1
}
diff --git a/packages/SystemUI/src/com/android/systemui/keyguard/domain/interactor/FromAodTransitionInteractor.kt b/packages/SystemUI/src/com/android/systemui/keyguard/domain/interactor/FromAodTransitionInteractor.kt
index 8682dd3..4bf5200 100644
--- a/packages/SystemUI/src/com/android/systemui/keyguard/domain/interactor/FromAodTransitionInteractor.kt
+++ b/packages/SystemUI/src/com/android/systemui/keyguard/domain/interactor/FromAodTransitionInteractor.kt
@@ -24,13 +24,10 @@
import com.android.systemui.keyguard.KeyguardWmStateRefactor
import com.android.systemui.keyguard.data.repository.KeyguardTransitionRepository
import com.android.systemui.keyguard.shared.model.BiometricUnlockModel.Companion.isWakeAndUnlock
-import com.android.systemui.keyguard.shared.model.DozeStateModel
import com.android.systemui.keyguard.shared.model.KeyguardState
import com.android.systemui.keyguard.shared.model.TransitionModeOnCanceled
-import com.android.systemui.keyguard.shared.model.TransitionStep
import com.android.systemui.power.domain.interactor.PowerInteractor
import com.android.systemui.util.kotlin.Utils.Companion.sample
-import java.util.UUID
import javax.inject.Inject
import kotlin.time.Duration.Companion.milliseconds
import kotlinx.coroutines.CoroutineDispatcher
@@ -72,79 +69,73 @@
* Listen for the signal that we're waking up and figure what state we need to transition to.
*/
private fun listenForAodToAwake() {
- val transitionToLockscreen: suspend (TransitionStep) -> UUID? =
- { startedStep: TransitionStep ->
- val modeOnCanceled =
- if (startedStep.from == KeyguardState.LOCKSCREEN) {
- TransitionModeOnCanceled.REVERSE
- } else if (startedStep.from == KeyguardState.GONE) {
- TransitionModeOnCanceled.RESET
- } else {
- TransitionModeOnCanceled.LAST_VALUE
- }
- startTransitionTo(
- toState = KeyguardState.LOCKSCREEN,
- modeOnCanceled = modeOnCanceled,
+ // Use PowerInteractor's wakefulness, which is the earliest wake signal available. We
+ // have all of the information we need at this time to make a decision about where to
+ // transition.
+ scope.launch {
+ powerInteractor.detailedWakefulness
+ .filterRelevantKeyguardStateAnd { wakefulness -> wakefulness.isAwake() }
+ .sample(
+ startedKeyguardTransitionStep,
+ keyguardInteractor.biometricUnlockState,
+ keyguardInteractor.primaryBouncerShowing,
+ keyguardInteractor.isKeyguardShowing,
+ keyguardInteractor.isKeyguardOccluded,
+ keyguardInteractor.isKeyguardDismissible,
)
- }
+ .collect {
+ (
+ _,
+ startedStep,
+ biometricUnlockState,
+ primaryBouncerShowing,
+ _,
+ isKeyguardOccludedLegacy,
+ _) ->
+ if (!maybeHandleInsecurePowerGesture()) {
+ val shouldTransitionToLockscreen =
+ if (KeyguardWmStateRefactor.isEnabled) {
+ // Check with the superclass to see if an occlusion transition is
+ // needed. Also, don't react to wake and unlock events, as we'll be
+ // receiving a call to #dismissAod() shortly when the authentication
+ // completes.
+ !maybeStartTransitionToOccludedOrInsecureCamera() &&
+ !isWakeAndUnlock(biometricUnlockState) &&
+ !primaryBouncerShowing
+ } else {
+ !isKeyguardOccludedLegacy &&
+ !isWakeAndUnlock(biometricUnlockState) &&
+ !primaryBouncerShowing
+ }
- if (KeyguardWmStateRefactor.isEnabled) {
- // The refactor uses PowerInteractor's wakefulness, which is the earliest wake signal
- // available. We have all of the information we need at this time to make a decision
- // about where to transition.
- scope.launch {
- powerInteractor.detailedWakefulness
- // React only to wake events.
- .filterRelevantKeyguardStateAnd { it.isAwake() }
- .sample(
- startedKeyguardTransitionStep,
- keyguardInteractor.biometricUnlockState,
- keyguardInteractor.primaryBouncerShowing,
- )
- // Make sure we've at least STARTED a transition to AOD.
- .collect { (_, startedStep, biometricUnlockState, primaryBouncerShowing) ->
- // Check with the superclass to see if an occlusion transition is needed.
- // Also, don't react to wake and unlock events, as we'll be receiving a call
- // to #dismissAod() shortly when the authentication completes.
- if (
- !maybeStartTransitionToOccludedOrInsecureCamera() &&
- !isWakeAndUnlock(biometricUnlockState) &&
- !primaryBouncerShowing
- ) {
- transitionToLockscreen(startedStep)
+ // With the refactor enabled, maybeStartTransitionToOccludedOrInsecureCamera
+ // handles transitioning to OCCLUDED.
+ val shouldTransitionToOccluded =
+ !KeyguardWmStateRefactor.isEnabled && isKeyguardOccludedLegacy
+
+ if (shouldTransitionToLockscreen) {
+ val modeOnCanceled =
+ if (startedStep.from == KeyguardState.LOCKSCREEN) {
+ TransitionModeOnCanceled.REVERSE
+ } else if (startedStep.from == KeyguardState.GONE) {
+ TransitionModeOnCanceled.RESET
+ } else {
+ TransitionModeOnCanceled.LAST_VALUE
+ }
+
+ startTransitionTo(
+ toState = KeyguardState.LOCKSCREEN,
+ modeOnCanceled = modeOnCanceled,
+ ownerReason = "listen for aod to awake"
+ )
+ } else if (shouldTransitionToOccluded) {
+ startTransitionTo(
+ toState = KeyguardState.OCCLUDED,
+ ownerReason = "waking up and isOccluded=true",
+ )
}
}
- }
- } else {
- scope.launch {
- keyguardInteractor
- .dozeTransitionTo(DozeStateModel.FINISH)
- .filterRelevantKeyguardState()
- .sample(
- keyguardInteractor.isKeyguardShowing,
- startedKeyguardTransitionStep,
- keyguardInteractor.isKeyguardOccluded,
- keyguardInteractor.biometricUnlockState,
- keyguardInteractor.primaryBouncerShowing,
- )
- .collect {
- (
- _,
- isKeyguardShowing,
- lastStartedStep,
- occluded,
- biometricUnlockState,
- primaryBouncerShowing) ->
- if (
- !occluded &&
- !isWakeAndUnlock(biometricUnlockState) &&
- isKeyguardShowing &&
- !primaryBouncerShowing
- ) {
- transitionToLockscreen(lastStartedStep)
- }
- }
- }
+ }
}
}
@@ -165,7 +156,8 @@
.collect {
startTransitionTo(
toState = KeyguardState.OCCLUDED,
- modeOnCanceled = TransitionModeOnCanceled.RESET
+ modeOnCanceled = TransitionModeOnCanceled.RESET,
+ ownerReason = "isOccluded = true",
)
}
}
diff --git a/packages/SystemUI/src/com/android/systemui/keyguard/domain/interactor/ToAodFoldTransitionInteractor.kt b/packages/SystemUI/src/com/android/systemui/keyguard/domain/interactor/ToAodFoldTransitionInteractor.kt
index 3b25128..6729246 100644
--- a/packages/SystemUI/src/com/android/systemui/keyguard/domain/interactor/ToAodFoldTransitionInteractor.kt
+++ b/packages/SystemUI/src/com/android/systemui/keyguard/domain/interactor/ToAodFoldTransitionInteractor.kt
@@ -75,7 +75,7 @@
fun initialize(parentAnimator: ShadeFoldAnimator) {
this.parentAnimator =
- parentAnimator as NotificationPanelViewController.ShadeFoldAnimatorImpl?
+ parentAnimator as? NotificationPanelViewController.ShadeFoldAnimatorImpl?
}
/** Forces the keyguard into AOD or Doze */
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 599285e..e456a55 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
@@ -120,25 +120,15 @@
* Returns true if a transition was started, false otherwise.
*/
suspend fun maybeStartTransitionToOccludedOrInsecureCamera(): Boolean {
+ // The refactor is required for the occlusion interactor to work.
+ KeyguardWmStateRefactor.isUnexpectedlyInLegacyMode()
+
+ // Check if we should start a transition from the power gesture.
if (keyguardOcclusionInteractor.shouldTransitionFromPowerButtonGesture()) {
- if (transitionInteractor.getCurrentState() == KeyguardState.GONE) {
- // If the current state is GONE when the launch gesture is triggered, it means we
- // were in transition from GONE -> DOZING/AOD due to the first power button tap. The
- // second tap indicates that the user's intent was actually to launch the unlocked
- // (insecure) camera, so we should transition back to GONE.
- startTransitionTo(
- KeyguardState.GONE,
- ownerReason = "Power button gesture while GONE"
- )
- } else if (keyguardOcclusionInteractor.occludingActivityWillDismissKeyguard.value) {
- // The double tap gesture occurred while not GONE (AOD/LOCKSCREEN/etc.), but the
- // keyguard is dismissable. The activity launch will dismiss the keyguard, so we
- // should transition to GONE.
- startTransitionTo(
- KeyguardState.GONE,
- ownerReason = "Power button gesture on dismissable keyguard"
- )
- } else {
+ // See if we handled the insecure power gesture. If not, then we'll be launching the
+ // secure camera. Once KeyguardWmStateRefactor is fully enabled, we can clean up this
+ // code path by pulling maybeHandleInsecurePowerGesture() into this conditional.
+ if (!maybeHandleInsecurePowerGesture()) {
// Otherwise, the double tap gesture occurred while not GONE and not dismissable,
// which means we will launch the secure camera, which OCCLUDES the keyguard.
startTransitionTo(
@@ -165,6 +155,43 @@
}
/**
+ * Transition to [KeyguardState.GONE] for the insecure power button launch gesture, if the
+ * conditions to do so are met.
+ *
+ * Called from [FromAodTransitionInteractor] if [KeyguardWmStateRefactor] is not enabled, or
+ * [maybeStartTransitionToOccludedOrInsecureCamera] if it's enabled.
+ */
+ @Deprecated("Will be merged into maybeStartTransitionToOccludedOrInsecureCamera")
+ suspend fun maybeHandleInsecurePowerGesture(): Boolean {
+ if (keyguardOcclusionInteractor.shouldTransitionFromPowerButtonGesture()) {
+ if (transitionInteractor.getCurrentState() == KeyguardState.GONE) {
+ // If the current state is GONE when the launch gesture is triggered, it means we
+ // were in transition from GONE -> DOZING/AOD due to the first power button tap. The
+ // second tap indicates that the user's intent was actually to launch the unlocked
+ // (insecure) camera, so we should transition back to GONE.
+ startTransitionTo(
+ KeyguardState.GONE,
+ ownerReason = "Power button gesture while GONE"
+ )
+
+ return true
+ } else if (keyguardOcclusionInteractor.occludingActivityWillDismissKeyguard.value) {
+ // The double tap gesture occurred while not GONE (AOD/LOCKSCREEN/etc.), but the
+ // keyguard is dismissable. The activity launch will dismiss the keyguard, so we
+ // should transition to GONE.
+ startTransitionTo(
+ KeyguardState.GONE,
+ ownerReason = "Power button gesture on dismissable keyguard"
+ )
+
+ return true
+ }
+ }
+
+ return false
+ }
+
+ /**
* Transition to the appropriate state when the device goes to sleep while in [from].
*
* We could also just use [fromState], but it's more readable in the From*TransitionInteractor
diff --git a/packages/SystemUI/src/com/android/systemui/media/controls/domain/pipeline/interactor/MediaRecommendationsInteractor.kt b/packages/SystemUI/src/com/android/systemui/media/controls/domain/pipeline/interactor/MediaRecommendationsInteractor.kt
index 40a132a..d57b049 100644
--- a/packages/SystemUI/src/com/android/systemui/media/controls/domain/pipeline/interactor/MediaRecommendationsInteractor.kt
+++ b/packages/SystemUI/src/com/android/systemui/media/controls/domain/pipeline/interactor/MediaRecommendationsInteractor.kt
@@ -17,6 +17,13 @@
package com.android.systemui.media.controls.domain.pipeline.interactor
import android.content.Context
+import android.content.Intent
+import android.provider.Settings
+import android.util.Log
+import androidx.annotation.VisibleForTesting
+import com.android.internal.jank.InteractionJankMonitor
+import com.android.systemui.animation.Expandable
+import com.android.systemui.broadcast.BroadcastSender
import com.android.systemui.dagger.SysUISingleton
import com.android.systemui.dagger.qualifiers.Application
import com.android.systemui.media.controls.data.repository.MediaFilterRepository
@@ -24,6 +31,8 @@
import com.android.systemui.media.controls.shared.model.MediaRecModel
import com.android.systemui.media.controls.shared.model.MediaRecommendationsModel
import com.android.systemui.media.controls.shared.model.SmartspaceMediaData
+import com.android.systemui.plugins.ActivityStarter
+import java.net.URISyntaxException
import javax.inject.Inject
import kotlinx.coroutines.CoroutineScope
import kotlinx.coroutines.flow.Flow
@@ -42,6 +51,8 @@
@Application private val applicationContext: Context,
repository: MediaFilterRepository,
private val mediaDataProcessor: MediaDataProcessor,
+ private val broadcastSender: BroadcastSender,
+ private val activityStarter: ActivityStarter,
) {
val recommendations: Flow<MediaRecommendationsModel> =
@@ -54,8 +65,53 @@
.distinctUntilChanged()
.stateIn(applicationScope, SharingStarted.WhileSubscribed(), false)
- fun removeMediaRecommendations(key: String, delayMs: Long) {
+ fun removeMediaRecommendations(key: String, dismissIntent: Intent?, delayMs: Long) {
mediaDataProcessor.dismissSmartspaceRecommendation(key, delayMs)
+ if (dismissIntent == null) {
+ Log.w(TAG, "Cannot create dismiss action click action: extras missing dismiss_intent.")
+ return
+ }
+
+ val className = dismissIntent.component?.className
+ if (className == EXPORTED_SMARTSPACE_TRAMPOLINE_ACTIVITY_NAME) {
+ // Dismiss the card Smartspace data through Smartspace trampoline activity.
+ applicationContext.startActivity(dismissIntent)
+ } else {
+ broadcastSender.sendBroadcast(dismissIntent)
+ }
+ }
+
+ fun startSettings() {
+ activityStarter.startActivity(SETTINGS_INTENT, /* dismissShade= */ true)
+ }
+
+ fun startClickIntent(expandable: Expandable, intent: Intent) {
+ if (shouldActivityOpenInForeground(intent)) {
+ // Request to unlock the device if the activity needs to be opened in foreground.
+ activityStarter.postStartActivityDismissingKeyguard(
+ intent,
+ 0 /* delay */,
+ expandable.activityTransitionController(
+ InteractionJankMonitor.CUJ_SHADE_APP_LAUNCH_FROM_MEDIA_PLAYER
+ )
+ )
+ } else {
+ // Otherwise, open the activity in background directly.
+ applicationContext.startActivity(intent)
+ }
+ }
+
+ /** Returns if the action will open the activity in foreground. */
+ private fun shouldActivityOpenInForeground(intent: Intent): Boolean {
+ val intentString = intent.extras?.getString(EXTRAS_SMARTSPACE_INTENT) ?: return false
+ try {
+ val wrapperIntent = Intent.parseUri(intentString, Intent.URI_INTENT_SCHEME)
+ return wrapperIntent.getBooleanExtra(KEY_SMARTSPACE_OPEN_IN_FOREGROUND, false)
+ } catch (e: URISyntaxException) {
+ Log.wtf(TAG, "Failed to create intent from URI: $intentString")
+ e.printStackTrace()
+ }
+ return false
}
private fun toRecommendationsModel(data: SmartspaceMediaData): MediaRecommendationsModel {
@@ -76,4 +132,21 @@
)
}
}
+
+ companion object {
+
+ private const val TAG = "MediaRecommendationsInteractor"
+
+ // TODO (b/237284176) : move AGSA reference out.
+ private const val EXTRAS_SMARTSPACE_INTENT =
+ "com.google.android.apps.gsa.smartspace.extra.SMARTSPACE_INTENT"
+ @VisibleForTesting
+ const val EXPORTED_SMARTSPACE_TRAMPOLINE_ACTIVITY_NAME =
+ "com.google.android.apps.gsa.staticplugins.opa.smartspace." +
+ "ExportedSmartspaceTrampolineActivity"
+
+ private const val KEY_SMARTSPACE_OPEN_IN_FOREGROUND = "KEY_OPEN_IN_FOREGROUND"
+
+ private val SETTINGS_INTENT = Intent(Settings.ACTION_MEDIA_CONTROLS_SETTINGS)
+ }
}
diff --git a/packages/SystemUI/src/com/android/systemui/media/controls/ui/util/MediaArtworkHelper.kt b/packages/SystemUI/src/com/android/systemui/media/controls/ui/util/MediaArtworkHelper.kt
new file mode 100644
index 0000000..eec43a6
--- /dev/null
+++ b/packages/SystemUI/src/com/android/systemui/media/controls/ui/util/MediaArtworkHelper.kt
@@ -0,0 +1,97 @@
+/*
+ * 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 android.app.WallpaperColors
+import android.content.Context
+import android.graphics.Rect
+import android.graphics.drawable.Drawable
+import android.graphics.drawable.GradientDrawable
+import android.graphics.drawable.Icon
+import android.graphics.drawable.LayerDrawable
+import android.util.Log
+import com.android.systemui.media.controls.ui.animation.backgroundEndFromScheme
+import com.android.systemui.media.controls.ui.animation.backgroundStartFromScheme
+import com.android.systemui.monet.ColorScheme
+import com.android.systemui.util.getColorWithAlpha
+import kotlinx.coroutines.CoroutineDispatcher
+import kotlinx.coroutines.withContext
+
+object MediaArtworkHelper {
+
+ /**
+ * This method should be called from a background thread. WallpaperColors.fromBitmap takes a
+ * good amount of time. We do that work on the background executor to avoid stalling animations
+ * on the UI Thread.
+ */
+ suspend fun getWallpaperColor(
+ applicationContext: Context,
+ backgroundDispatcher: CoroutineDispatcher,
+ artworkIcon: Icon?,
+ tag: String,
+ ): WallpaperColors? =
+ withContext(backgroundDispatcher) {
+ return@withContext artworkIcon?.let {
+ if (it.type == Icon.TYPE_BITMAP || it.type == Icon.TYPE_ADAPTIVE_BITMAP) {
+ // Avoids extra processing if this is already a valid bitmap
+ it.bitmap.let { artworkBitmap ->
+ if (artworkBitmap.isRecycled) {
+ Log.d(tag, "Cannot load wallpaper color from a recycled bitmap")
+ null
+ } else {
+ WallpaperColors.fromBitmap(artworkBitmap)
+ }
+ }
+ } else {
+ it.loadDrawable(applicationContext)?.let { artworkDrawable ->
+ WallpaperColors.fromDrawable(artworkDrawable)
+ }
+ }
+ }
+ }
+
+ /**
+ * Returns a scaled [Drawable] of a given [Icon] centered in [width]x[height] background size.
+ */
+ fun getScaledBackground(context: Context, icon: Icon, width: Int, height: Int): Drawable? {
+ val drawable = icon.loadDrawable(context)
+ val bounds = Rect(0, 0, width, height)
+ if (bounds.width() > width || bounds.height() > height) {
+ val offsetX = (bounds.width() - width) / 2.0f
+ val offsetY = (bounds.height() - height) / 2.0f
+ bounds.offset(-offsetX.toInt(), -offsetY.toInt())
+ }
+ drawable?.bounds = bounds
+ return drawable
+ }
+
+ /** Adds [gradient] on a given [albumArt] drawable using [colorScheme]. */
+ fun setUpGradientColorOnDrawable(
+ albumArt: Drawable?,
+ gradient: GradientDrawable,
+ colorScheme: ColorScheme,
+ startAlpha: Float,
+ endAlpha: Float
+ ): LayerDrawable {
+ gradient.colors =
+ intArrayOf(
+ getColorWithAlpha(backgroundStartFromScheme(colorScheme), startAlpha),
+ getColorWithAlpha(backgroundEndFromScheme(colorScheme), endAlpha)
+ )
+ return LayerDrawable(arrayOf(albumArt, gradient))
+ }
+}
diff --git a/packages/SystemUI/src/com/android/systemui/media/controls/ui/viewmodel/GutsViewModel.kt b/packages/SystemUI/src/com/android/systemui/media/controls/ui/viewmodel/GutsViewModel.kt
new file mode 100644
index 0000000..e508e1b
--- /dev/null
+++ b/packages/SystemUI/src/com/android/systemui/media/controls/ui/viewmodel/GutsViewModel.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.systemui.media.controls.ui.viewmodel
+
+import android.annotation.ColorInt
+import android.graphics.drawable.Drawable
+
+/** Models UI state for media guts menu */
+data class GutsViewModel(
+ val gutsText: CharSequence,
+ @ColorInt val textColor: Int,
+ @ColorInt val buttonBackgroundColor: Int,
+ @ColorInt val buttonTextColor: Int,
+ val isDismissEnabled: Boolean = true,
+ val onDismissClicked: () -> Unit,
+ val cancelTextBackground: Drawable?,
+ val onSettingsClicked: () -> Unit,
+)
diff --git a/packages/SystemUI/src/com/android/systemui/media/controls/ui/viewmodel/MediaRecViewModel.kt b/packages/SystemUI/src/com/android/systemui/media/controls/ui/viewmodel/MediaRecViewModel.kt
new file mode 100644
index 0000000..2f9fc9b
--- /dev/null
+++ b/packages/SystemUI/src/com/android/systemui/media/controls/ui/viewmodel/MediaRecViewModel.kt
@@ -0,0 +1,36 @@
+/*
+ * 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.annotation.ColorInt
+import android.graphics.drawable.Drawable
+import com.android.systemui.animation.Expandable
+
+/** Models UI state for media recommendation item */
+data class MediaRecViewModel(
+ val contentDescription: CharSequence,
+ val title: CharSequence = "",
+ @ColorInt val titleColor: Int,
+ val subtitle: CharSequence = "",
+ @ColorInt val subtitleColor: Int,
+ /** track progress [0 - 100] for the recommendation album. */
+ val progress: Int = 0,
+ @ColorInt val progressColor: Int,
+ val albumIcon: Drawable? = null,
+ val appIcon: Drawable? = null,
+ val onClicked: ((Expandable, Int) -> Unit),
+)
diff --git a/packages/SystemUI/src/com/android/systemui/media/controls/ui/viewmodel/MediaRecommendationsViewModel.kt b/packages/SystemUI/src/com/android/systemui/media/controls/ui/viewmodel/MediaRecommendationsViewModel.kt
new file mode 100644
index 0000000..19ea00d
--- /dev/null
+++ b/packages/SystemUI/src/com/android/systemui/media/controls/ui/viewmodel/MediaRecommendationsViewModel.kt
@@ -0,0 +1,353 @@
+/*
+ * 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.app.WallpaperColors
+import android.content.Context
+import android.content.Intent
+import android.content.pm.PackageManager
+import android.graphics.Bitmap
+import android.graphics.Color
+import android.graphics.drawable.BitmapDrawable
+import android.graphics.drawable.ColorDrawable
+import android.graphics.drawable.Drawable
+import android.graphics.drawable.GradientDrawable
+import android.graphics.drawable.Icon
+import android.graphics.drawable.LayerDrawable
+import android.os.Process
+import android.util.Log
+import androidx.appcompat.content.res.AppCompatResources
+import com.android.internal.logging.InstanceId
+import com.android.systemui.animation.Expandable
+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.MediaRecommendationsInteractor
+import com.android.systemui.media.controls.shared.model.MediaRecModel
+import com.android.systemui.media.controls.shared.model.MediaRecommendationsModel
+import com.android.systemui.media.controls.ui.animation.accentPrimaryFromScheme
+import com.android.systemui.media.controls.ui.animation.surfaceFromScheme
+import com.android.systemui.media.controls.ui.animation.textPrimaryFromScheme
+import com.android.systemui.media.controls.ui.animation.textSecondaryFromScheme
+import com.android.systemui.media.controls.ui.controller.MediaViewController.Companion.GUTS_ANIMATION_DURATION
+import com.android.systemui.media.controls.ui.util.MediaArtworkHelper
+import com.android.systemui.media.controls.util.MediaDataUtils
+import com.android.systemui.media.controls.util.MediaUiEventLogger
+import com.android.systemui.monet.ColorScheme
+import com.android.systemui.monet.Style
+import com.android.systemui.res.R
+import javax.inject.Inject
+import kotlinx.coroutines.CoroutineDispatcher
+import kotlinx.coroutines.flow.Flow
+import kotlinx.coroutines.flow.distinctUntilChanged
+import kotlinx.coroutines.flow.flowOn
+import kotlinx.coroutines.flow.map
+import kotlinx.coroutines.withContext
+
+/** Models UI state and handles user input for media recommendations */
+@SysUISingleton
+class MediaRecommendationsViewModel
+@Inject
+constructor(
+ @Application private val applicationContext: Context,
+ @Background private val backgroundDispatcher: CoroutineDispatcher,
+ private val interactor: MediaRecommendationsInteractor,
+ private val logger: MediaUiEventLogger,
+) {
+
+ val mediaRecsCard: Flow<MediaRecsCardViewModel?> =
+ interactor.recommendations
+ .map { recsCard -> toRecsViewModel(recsCard) }
+ .distinctUntilChanged()
+ .flowOn(backgroundDispatcher)
+
+ /**
+ * Called whenever the recommendation has been expired or removed by the user. This method
+ * removes the recommendation card entirely from the carousel.
+ */
+ private fun onMediaRecommendationsDismissed(
+ key: String,
+ uid: Int,
+ packageName: String,
+ dismissIntent: Intent?,
+ instanceId: InstanceId?
+ ) {
+ // TODO (b/330897926) log smartspace card reported (SMARTSPACE_CARD_DISMISS_EVENT).
+ logger.logLongPressDismiss(uid, packageName, instanceId)
+ interactor.removeMediaRecommendations(key, dismissIntent, GUTS_DISMISS_DELAY_MS_DURATION)
+ }
+
+ private fun onClicked(
+ expandable: Expandable,
+ intent: Intent?,
+ packageName: String,
+ instanceId: InstanceId?,
+ index: Int
+ ) {
+ if (intent == null || intent.extras == null) {
+ Log.e(TAG, "No tap action can be set up")
+ return
+ }
+
+ if (index == -1) {
+ logger.logRecommendationCardTap(packageName, instanceId)
+ } else {
+ logger.logRecommendationItemTap(packageName, instanceId, index)
+ }
+ // TODO (b/330897926) log smartspace card reported (SMARTSPACE_CARD_CLICK_EVENT).
+ interactor.startClickIntent(expandable, intent)
+ }
+
+ private suspend fun toRecsViewModel(model: MediaRecommendationsModel): MediaRecsCardViewModel? {
+ if (!model.areRecommendationsValid) {
+ Log.e(TAG, "Received an invalid recommendation list")
+ return null
+ }
+ if (model.appName == null || model.uid == Process.INVALID_UID) {
+ Log.w(TAG, "Fail to get media recommendation's app info")
+ return null
+ }
+
+ val scheme = getColorScheme(model.packageName) ?: return null
+
+ // Capture width & height from views in foreground for artwork scaling in background
+ val width =
+ applicationContext.resources.getDimensionPixelSize(R.dimen.qs_media_rec_album_width)
+ val height =
+ applicationContext.resources.getDimensionPixelSize(
+ R.dimen.qs_media_rec_album_height_expanded
+ )
+
+ val appIcon = applicationContext.packageManager.getApplicationIcon(model.packageName)
+ val textPrimaryColor = textPrimaryFromScheme(scheme)
+ val textSecondaryColor = textSecondaryFromScheme(scheme)
+ val backgroundColor = surfaceFromScheme(scheme)
+
+ var areTitlesVisible = false
+ var areSubtitlesVisible = false
+ val mediaRecs =
+ model.mediaRecs.map { mediaRecModel ->
+ areTitlesVisible = areTitlesVisible || !mediaRecModel.title.isNullOrEmpty()
+ areSubtitlesVisible = areSubtitlesVisible || !mediaRecModel.subtitle.isNullOrEmpty()
+ val progress = MediaDataUtils.getDescriptionProgress(mediaRecModel.extras) ?: 0.0
+ MediaRecViewModel(
+ contentDescription =
+ setUpMediaRecContentDescription(mediaRecModel, model.appName),
+ title = mediaRecModel.title ?: "",
+ titleColor = textPrimaryColor,
+ subtitle = mediaRecModel.subtitle ?: "",
+ subtitleColor = textSecondaryColor,
+ progress = (progress * 100).toInt(),
+ progressColor = textPrimaryColor,
+ albumIcon =
+ getRecCoverBackground(
+ mediaRecModel.icon,
+ width,
+ height,
+ ),
+ appIcon = appIcon,
+ onClicked = { expandable, index ->
+ onClicked(
+ expandable,
+ mediaRecModel.intent,
+ model.packageName,
+ model.instanceId,
+ index,
+ )
+ }
+ )
+ }
+ // Subtitles should only be visible if titles are visible.
+ areSubtitlesVisible = areTitlesVisible && areSubtitlesVisible
+
+ return MediaRecsCardViewModel(
+ contentDescription = { gutsVisible ->
+ if (gutsVisible) {
+ applicationContext.getString(
+ R.string.controls_media_close_session,
+ model.appName
+ )
+ } else {
+ applicationContext.getString(R.string.controls_media_smartspace_rec_header)
+ }
+ },
+ cardColor = backgroundColor,
+ cardTitleColor = textPrimaryColor,
+ onClicked = { expandable ->
+ onClicked(
+ expandable,
+ model.dismissIntent,
+ model.packageName,
+ model.instanceId,
+ index = -1
+ )
+ },
+ onLongClicked = {
+ logger.logLongPressOpen(model.uid, model.packageName, model.instanceId)
+ },
+ mediaRecs = mediaRecs,
+ areTitlesVisible = areTitlesVisible,
+ areSubtitlesVisible = areSubtitlesVisible,
+ gutsMenu = toGutsViewModel(model, scheme),
+ )
+ }
+
+ private fun toGutsViewModel(
+ model: MediaRecommendationsModel,
+ scheme: ColorScheme
+ ): GutsViewModel {
+ return GutsViewModel(
+ gutsText =
+ applicationContext.getString(R.string.controls_media_close_session, model.appName),
+ textColor = textPrimaryFromScheme(scheme),
+ buttonBackgroundColor = accentPrimaryFromScheme(scheme),
+ buttonTextColor = surfaceFromScheme(scheme),
+ onDismissClicked = {
+ onMediaRecommendationsDismissed(
+ model.key,
+ model.uid,
+ model.packageName,
+ model.dismissIntent,
+ model.instanceId
+ )
+ },
+ cancelTextBackground =
+ applicationContext.getDrawable(R.drawable.qs_media_outline_button),
+ onSettingsClicked = {
+ logger.logLongPressSettings(model.uid, model.packageName, model.instanceId)
+ interactor.startSettings()
+ },
+ )
+ }
+
+ /** Returns the recommendation album cover of [width]x[height] size. */
+ private suspend fun getRecCoverBackground(icon: Icon?, width: Int, height: Int): Drawable =
+ withContext(backgroundDispatcher) {
+ return@withContext MediaArtworkHelper.getWallpaperColor(
+ applicationContext,
+ backgroundDispatcher,
+ icon,
+ TAG,
+ )
+ ?.let { wallpaperColors ->
+ addGradientToRecommendationAlbum(
+ icon!!,
+ ColorScheme(wallpaperColors, true, Style.CONTENT),
+ width,
+ height
+ )
+ }
+ ?: ColorDrawable(Color.TRANSPARENT)
+ }
+
+ private fun addGradientToRecommendationAlbum(
+ artworkIcon: Icon,
+ mutableColorScheme: ColorScheme,
+ width: Int,
+ height: Int
+ ): LayerDrawable {
+ // First try scaling rec card using bitmap drawable.
+ // If returns null, set drawable bounds.
+ val albumArt =
+ getScaledRecommendationCover(artworkIcon, width, height)
+ ?: MediaArtworkHelper.getScaledBackground(
+ applicationContext,
+ artworkIcon,
+ width,
+ height
+ )
+ val gradient =
+ AppCompatResources.getDrawable(applicationContext, R.drawable.qs_media_rec_scrim)
+ ?.mutate() as GradientDrawable
+ return MediaArtworkHelper.setUpGradientColorOnDrawable(
+ albumArt,
+ gradient,
+ mutableColorScheme,
+ MEDIA_REC_SCRIM_START_ALPHA,
+ MEDIA_REC_SCRIM_END_ALPHA
+ )
+ }
+
+ private fun setUpMediaRecContentDescription(
+ mediaRec: MediaRecModel,
+ appName: CharSequence?
+ ): CharSequence {
+ // Set up the accessibility label for the media item.
+ val artistName = mediaRec.extras?.getString(KEY_SMARTSPACE_ARTIST_NAME, "")
+ return if (artistName.isNullOrEmpty()) {
+ applicationContext.getString(
+ R.string.controls_media_smartspace_rec_item_no_artist_description,
+ mediaRec.title,
+ appName
+ )
+ } else {
+ applicationContext.getString(
+ R.string.controls_media_smartspace_rec_item_description,
+ mediaRec.title,
+ artistName,
+ appName
+ )
+ }
+ }
+
+ private fun getColorScheme(packageName: String): ColorScheme? {
+ // Set up recommendation card's header.
+ return try {
+ val packageManager = applicationContext.packageManager
+ val applicationInfo = packageManager.getApplicationInfo(packageName, 0 /* flags */)
+ // Set up media source app's logo.
+ val icon = packageManager.getApplicationIcon(applicationInfo)
+ ColorScheme(WallpaperColors.fromDrawable(icon), darkTheme = true)
+ } catch (e: PackageManager.NameNotFoundException) {
+ Log.w(TAG, "Fail to get media recommendation's app info", e)
+ null
+ }
+ }
+
+ /** Returns a [Drawable] of a given [artworkIcon] scaled to [width]x[height] size, . */
+ private fun getScaledRecommendationCover(
+ artworkIcon: Icon,
+ width: Int,
+ height: Int
+ ): Drawable? {
+ check(width > 0) { "Width must be a positive number but was $width" }
+ check(height > 0) { "Height must be a positive number but was $height" }
+
+ return if (
+ artworkIcon.type == Icon.TYPE_BITMAP || artworkIcon.type == Icon.TYPE_ADAPTIVE_BITMAP
+ ) {
+ artworkIcon.bitmap?.let {
+ val bitmap = Bitmap.createScaledBitmap(it, width, height, false)
+ BitmapDrawable(applicationContext.resources, bitmap)
+ }
+ } else {
+ null
+ }
+ }
+
+ companion object {
+ private const val TAG = "MediaRecommendationsViewModel"
+ private const val KEY_SMARTSPACE_ARTIST_NAME = "artist_name"
+ private const val MEDIA_REC_SCRIM_START_ALPHA = 0.15f
+ private const val MEDIA_REC_SCRIM_END_ALPHA = 1.0f
+ /**
+ * Delay duration is based on [GUTS_ANIMATION_DURATION], it should have 100 ms increase in
+ * order to let the animation end.
+ */
+ private const val GUTS_DISMISS_DELAY_MS_DURATION = 334L
+ }
+}
diff --git a/packages/SystemUI/src/com/android/systemui/media/controls/ui/viewmodel/MediaRecsCardViewModel.kt b/packages/SystemUI/src/com/android/systemui/media/controls/ui/viewmodel/MediaRecsCardViewModel.kt
new file mode 100644
index 0000000..d1713b5
--- /dev/null
+++ b/packages/SystemUI/src/com/android/systemui/media/controls/ui/viewmodel/MediaRecsCardViewModel.kt
@@ -0,0 +1,33 @@
+/*
+ * 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.annotation.ColorInt
+import com.android.systemui.animation.Expandable
+
+/** Models UI state for media recommendations card. */
+data class MediaRecsCardViewModel(
+ val contentDescription: (Boolean) -> CharSequence,
+ @ColorInt val cardColor: Int,
+ @ColorInt val cardTitleColor: Int,
+ val onClicked: (Expandable) -> Unit,
+ val onLongClicked: () -> Unit,
+ val mediaRecs: List<MediaRecViewModel>,
+ val areTitlesVisible: Boolean,
+ val areSubtitlesVisible: Boolean,
+ val gutsMenu: GutsViewModel,
+)
diff --git a/packages/SystemUI/src/com/android/systemui/media/controls/util/MediaUiEventLogger.kt b/packages/SystemUI/src/com/android/systemui/media/controls/util/MediaUiEventLogger.kt
index 2c25fe2..09f973c 100644
--- a/packages/SystemUI/src/com/android/systemui/media/controls/util/MediaUiEventLogger.kt
+++ b/packages/SystemUI/src/com/android/systemui/media/controls/util/MediaUiEventLogger.kt
@@ -99,15 +99,15 @@
logger.log(MediaUiEvent.DISMISS_SWIPE)
}
- fun logLongPressOpen(uid: Int, packageName: String, instanceId: InstanceId) {
+ fun logLongPressOpen(uid: Int, packageName: String, instanceId: InstanceId?) {
logger.logWithInstanceId(MediaUiEvent.OPEN_LONG_PRESS, uid, packageName, instanceId)
}
- fun logLongPressDismiss(uid: Int, packageName: String, instanceId: InstanceId) {
+ fun logLongPressDismiss(uid: Int, packageName: String, instanceId: InstanceId?) {
logger.logWithInstanceId(MediaUiEvent.DISMISS_LONG_PRESS, uid, packageName, instanceId)
}
- fun logLongPressSettings(uid: Int, packageName: String, instanceId: InstanceId) {
+ fun logLongPressSettings(uid: Int, packageName: String, instanceId: InstanceId?) {
logger.logWithInstanceId(
MediaUiEvent.OPEN_SETTINGS_LONG_PRESS,
uid,
@@ -188,7 +188,7 @@
)
}
- fun logRecommendationItemTap(packageName: String, instanceId: InstanceId, position: Int) {
+ fun logRecommendationItemTap(packageName: String, instanceId: InstanceId?, position: Int) {
logger.logWithInstanceIdAndPosition(
MediaUiEvent.MEDIA_RECOMMENDATION_ITEM_TAP,
0,
@@ -198,7 +198,7 @@
)
}
- fun logRecommendationCardTap(packageName: String, instanceId: InstanceId) {
+ fun logRecommendationCardTap(packageName: String, instanceId: InstanceId?) {
logger.logWithInstanceId(
MediaUiEvent.MEDIA_RECOMMENDATION_CARD_TAP,
0,
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 e911ce1..f429220 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
@@ -32,6 +32,7 @@
import com.android.systemui.dagger.SysUISingleton
import com.android.systemui.dagger.qualifiers.Application
import com.android.systemui.dagger.qualifiers.DisplayId
+import com.android.systemui.deviceentry.domain.interactor.DeviceEntryFaceAuthInteractor
import com.android.systemui.deviceentry.domain.interactor.DeviceEntryInteractor
import com.android.systemui.keyguard.domain.interactor.KeyguardInteractor
import com.android.systemui.model.SceneContainerPlugin
@@ -63,6 +64,8 @@
import kotlinx.coroutines.flow.distinctUntilChanged
import kotlinx.coroutines.flow.distinctUntilChangedBy
import kotlinx.coroutines.flow.emptyFlow
+import kotlinx.coroutines.flow.filter
+import kotlinx.coroutines.flow.filterIsInstance
import kotlinx.coroutines.flow.flatMapLatest
import kotlinx.coroutines.flow.flowOf
import kotlinx.coroutines.flow.map
@@ -96,6 +99,7 @@
private val centralSurfaces: CentralSurfaces,
private val headsUpInteractor: HeadsUpNotificationInteractor,
private val occlusionInteractor: SceneContainerOcclusionInteractor,
+ private val faceUnlockInteractor: DeviceEntryFaceAuthInteractor,
) : CoreStartable {
override fun start() {
@@ -108,6 +112,7 @@
respondToFalsingDetections()
hydrateWindowFocus()
hydrateInteractionState()
+ handleBouncerOverscroll()
} else {
sceneLogger.logFrameworkEnabled(
isEnabled = false,
@@ -227,7 +232,7 @@
is ObservableTransitionState.Idle -> setOf(transitionState.scene)
is ObservableTransitionState.Transition ->
setOf(
- transitionState.progress,
+ transitionState.fromScene,
transitionState.toScene,
)
}
@@ -294,12 +299,17 @@
val canSwipeToEnter = deviceEntryInteractor.canSwipeToEnter.value
val isUnlocked = deviceEntryInteractor.isUnlocked.value
if (isUnlocked && canSwipeToEnter == false) {
- switchToScene(
- targetSceneKey = Scenes.Gone,
- loggingReason =
- "device is waking up while unlocked without the ability" +
- " to swipe up on lockscreen to enter.",
- )
+ val isTransitioningToLockscreen =
+ sceneInteractor.transitioningTo.value == Scenes.Lockscreen
+ if (!isTransitioningToLockscreen) {
+ switchToScene(
+ targetSceneKey = Scenes.Gone,
+ loggingReason =
+ "device is waking up while unlocked without the ability to" +
+ " swipe up on lockscreen to enter and not on or" +
+ " transitioning to, the lockscreen scene.",
+ )
+ }
} else if (
authenticationInteractor.get().getAuthenticationMethod() ==
AuthenticationMethodModel.Sim
@@ -456,6 +466,33 @@
}
}
+ private fun handleBouncerOverscroll() {
+ applicationScope.launch {
+ sceneInteractor.transitionState
+ // Only consider transitions.
+ .filterIsInstance<ObservableTransitionState.Transition>()
+ // Only consider user-initiated (e.g. drags) that go from bouncer to lockscreen.
+ .filter { transition ->
+ transition.fromScene == Scenes.Bouncer &&
+ transition.toScene == Scenes.Lockscreen &&
+ transition.isInitiatedByUserInput
+ }
+ .flatMapLatest { it.progress }
+ // Figure out the direction of scrolling.
+ .map { progress ->
+ when {
+ progress > 0 -> 1
+ progress < 0 -> -1
+ else -> 0
+ }
+ }
+ .distinctUntilChanged()
+ // Only consider negative scrolling, AKA overscroll.
+ .filter { it == -1 }
+ .collect { faceUnlockInteractor.onSwipeUpOnBouncer() }
+ }
+ }
+
private fun switchToScene(targetSceneKey: SceneKey, loggingReason: String) {
sceneInteractor.changeScene(
toScene = targetSceneKey,
diff --git a/packages/SystemUI/src/com/android/systemui/shade/GlanceableHubContainerController.kt b/packages/SystemUI/src/com/android/systemui/shade/GlanceableHubContainerController.kt
index 33cf9ba..f6b1bcc 100644
--- a/packages/SystemUI/src/com/android/systemui/shade/GlanceableHubContainerController.kt
+++ b/packages/SystemUI/src/com/android/systemui/shade/GlanceableHubContainerController.kt
@@ -30,6 +30,7 @@
import com.android.systemui.communal.domain.interactor.CommunalInteractor
import com.android.systemui.communal.ui.compose.CommunalContainer
import com.android.systemui.communal.ui.viewmodel.CommunalViewModel
+import com.android.systemui.keyguard.domain.interactor.KeyguardInteractor
import com.android.systemui.keyguard.domain.interactor.KeyguardTransitionInteractor
import com.android.systemui.keyguard.shared.model.KeyguardState
import com.android.systemui.res.R
@@ -52,6 +53,7 @@
private val communalViewModel: CommunalViewModel,
private val dialogFactory: SystemUIDialogFactory,
private val keyguardTransitionInteractor: KeyguardTransitionInteractor,
+ private val keyguardInteractor: KeyguardInteractor,
private val shadeInteractor: ShadeInteractor,
private val powerManager: PowerManager,
@Communal private val dataSourceDelegator: SceneDataSourceDelegator,
@@ -89,6 +91,9 @@
/** True if we are currently tracking a touch on the hub while it's open. */
private var isTrackingHubTouch = false
+ /** True if we are tracking a top or bottom swipe gesture while the hub is open. */
+ private var isTrackingHubGesture = false
+
/**
* True if the hub UI is fully open, meaning it should receive touch input.
*
@@ -111,6 +116,16 @@
*/
private var shadeShowing = false
+ /**
+ * True if the device is dreaming, in which case we shouldn't do anything for top/bottom swipes
+ * and just let the dream overlay's touch handling deal with them.
+ *
+ * Tracks [KeyguardInteractor.isDreaming].
+ *
+ * TODO(b/328838259): figure out a proper solution for touch handling above the lock screen too
+ */
+ private var isDreaming = false
+
/** Returns a flow that tracks whether communal hub is available. */
fun communalAvailable(): Flow<Boolean> = communalInteractor.isCommunalAvailable
@@ -166,6 +181,7 @@
)
collectFlow(containerView, communalInteractor.isCommunalShowing, { hubShowing = it })
collectFlow(containerView, shadeInteractor.isAnyFullyExpanded, { shadeShowing = it })
+ collectFlow(containerView, keyguardInteractor.isDreaming, { isDreaming = it })
communalContainerView = containerView
@@ -194,61 +210,86 @@
}
private fun handleTouchEventOnCommunalView(view: View, ev: MotionEvent): Boolean {
+ // If the hub is fully visible, send all touch events to it, other than top and bottom edge
+ // swipes.
+ return if (hubShowing) {
+ handleHubOpenTouch(view, ev)
+ } else {
+ handleHubClosedTouch(view, ev)
+ }
+ }
+
+ private fun handleHubOpenTouch(view: View, ev: MotionEvent): Boolean {
val isDown = ev.actionMasked == MotionEvent.ACTION_DOWN
val isUp = ev.actionMasked == MotionEvent.ACTION_UP
val isCancel = ev.actionMasked == MotionEvent.ACTION_CANCEL
- // TODO(b/315207481): also account for opening animations of shade/bouncer and not just
- // fully showing state
val hubOccluded = anyBouncerShowing || shadeShowing
- // If the hub is fully visible, send all touch events to it, other than top and bottom edge
- // swipes.
- if (hubShowing && isDown) {
+ if (isDown && !hubOccluded) {
+ // Only intercept down events if the hub isn't occluded by the bouncer or
+ // notification shade.
val y = ev.rawY
val topSwipe: Boolean = y <= topEdgeSwipeRegionWidth
val bottomSwipe = y >= view.height - bottomEdgeSwipeRegionWidth
if (topSwipe || bottomSwipe) {
- // Don't intercept touches at the top/bottom edge so that swipes can open the
- // notification shade and bouncer.
- return false
- }
-
- if (!hubOccluded) {
+ isTrackingHubGesture = true
+ } else {
isTrackingHubTouch = true
- dispatchTouchEvent(view, ev)
- // Return true regardless of dispatch result as some touches at the start of a
- // gesture may return false from dispatchTouchEvent.
- return true
}
- } else if (isTrackingHubTouch) {
+ }
+
+ if (isTrackingHubTouch) {
+ // Tracking a touch on the hub UI itself.
if (isUp || isCancel) {
isTrackingHubTouch = false
}
dispatchTouchEvent(view, ev)
- // Return true regardless of dispatch result as some touches at the start of a gesture
+ // Return true regardless of dispatch result as some touches at the start of a
+ // gesture
// may return false from dispatchTouchEvent.
return true
+ } else if (isTrackingHubGesture) {
+ // Tracking a top or bottom swipe on the hub UI.
+ if (isUp || isCancel) {
+ isTrackingHubGesture = false
+ }
+
+ // If we're dreaming, intercept touches so the hub UI doesn't receive them, but
+ // don't do anything so that the dream's touch handling takes care of opening
+ // the bouncer or shade.
+ //
+ // If we're not dreaming, we don't intercept touches at the top/bottom edge so that
+ // swipes can open the notification shade and bouncer.
+ return isDreaming
}
+ return false
+ }
+
+ private fun handleHubClosedTouch(view: View, ev: MotionEvent): Boolean {
+ val isDown = ev.actionMasked == MotionEvent.ACTION_DOWN
+ val isUp = ev.actionMasked == MotionEvent.ACTION_UP
+ val isCancel = ev.actionMasked == MotionEvent.ACTION_CANCEL
+
+ val hubOccluded = anyBouncerShowing || shadeShowing
+
if (rightEdgeSwipeRegionWidth == 0) {
// If the edge region width has not been read yet for whatever reason, don't bother
// intercepting touches to open the hub.
return false
}
- if (!isTrackingOpenGesture && isDown) {
+ if (isDown && !hubOccluded) {
val x = ev.rawX
val inOpeningSwipeRegion: Boolean = x >= view.width - rightEdgeSwipeRegionWidth
- if (inOpeningSwipeRegion && !hubOccluded) {
+ if (inOpeningSwipeRegion) {
isTrackingOpenGesture = true
- dispatchTouchEvent(view, ev)
- // Return true regardless of dispatch result as some touches at the start of a
- // gesture may return false from dispatchTouchEvent.
- return true
}
- } else if (isTrackingOpenGesture) {
+ }
+
+ if (isTrackingOpenGesture) {
if (isUp || isCancel) {
isTrackingOpenGesture = false
}
diff --git a/packages/SystemUI/src/com/android/systemui/shade/NotificationPanelViewController.java b/packages/SystemUI/src/com/android/systemui/shade/NotificationPanelViewController.java
index 015054b..343f377 100644
--- a/packages/SystemUI/src/com/android/systemui/shade/NotificationPanelViewController.java
+++ b/packages/SystemUI/src/com/android/systemui/shade/NotificationPanelViewController.java
@@ -96,12 +96,12 @@
import com.android.internal.statusbar.IStatusBarService;
import com.android.internal.util.LatencyTracker;
import com.android.keyguard.ActiveUnlockConfig;
-import com.android.keyguard.LockIconViewController;
import com.android.keyguard.KeyguardClockSwitch.ClockSize;
import com.android.keyguard.KeyguardStatusView;
import com.android.keyguard.KeyguardStatusViewController;
import com.android.keyguard.KeyguardUnfoldTransition;
import com.android.keyguard.KeyguardUpdateMonitor;
+import com.android.keyguard.LockIconViewController;
import com.android.keyguard.dagger.KeyguardQsUserSwitchComponent;
import com.android.keyguard.dagger.KeyguardStatusBarViewComponent;
import com.android.keyguard.dagger.KeyguardStatusViewComponent;
@@ -772,6 +772,7 @@
PowerInteractor powerInteractor,
KeyguardClockPositionAlgorithm keyguardClockPositionAlgorithm,
NaturalScrollingSettingObserver naturalScrollingSettingObserver) {
+ SceneContainerFlag.assertInLegacyMode();
keyguardStateController.addCallback(new KeyguardStateController.Callback() {
@Override
public void onKeyguardFadingAwayChanged() {
@@ -982,7 +983,6 @@
});
mAlternateBouncerInteractor = alternateBouncerInteractor;
dumpManager.registerDumpable(this);
- SceneContainerFlag.assertInLegacyMode();
}
private void unlockAnimationFinished() {
diff --git a/packages/SystemUI/src/com/android/systemui/shade/QuickSettingsControllerImpl.java b/packages/SystemUI/src/com/android/systemui/shade/QuickSettingsControllerImpl.java
index 243ea68..35b4059 100644
--- a/packages/SystemUI/src/com/android/systemui/shade/QuickSettingsControllerImpl.java
+++ b/packages/SystemUI/src/com/android/systemui/shade/QuickSettingsControllerImpl.java
@@ -336,6 +336,7 @@
SplitShadeStateController splitShadeStateController,
Lazy<LargeScreenHeaderHelper> largeScreenHeaderHelperLazy
) {
+ SceneContainerFlag.assertInLegacyMode();
mPanelViewControllerLazy = panelViewControllerLazy;
mPanelView = panelView;
mLargeScreenHeaderHelperLazy = largeScreenHeaderHelperLazy;
diff --git a/packages/SystemUI/src/com/android/systemui/shade/ShadeViewController.kt b/packages/SystemUI/src/com/android/systemui/shade/ShadeViewController.kt
index 04ac687..4ec0b23 100644
--- a/packages/SystemUI/src/com/android/systemui/shade/ShadeViewController.kt
+++ b/packages/SystemUI/src/com/android/systemui/shade/ShadeViewController.kt
@@ -54,6 +54,7 @@
fun setQsScrimEnabled(qsScrimEnabled: Boolean)
/** Sets the top spacing for the ambient indicator. */
+ @Deprecated("Does nothing when scene container is enabled.")
fun setAmbientIndicationTop(ambientIndicationTop: Int, ambientTextVisible: Boolean)
/** Updates notification panel-specific flags on [SysUiState]. */
@@ -71,6 +72,7 @@
*/
fun handleExternalTouch(event: MotionEvent): Boolean
+ /** Sends an external (e.g. Status Bar) intercept touch event to the Shade touch handler. */
fun handleExternalInterceptTouch(event: MotionEvent): Boolean
/**
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/pipeline/mobile/data/repository/MobileConnectionRepository.kt b/packages/SystemUI/src/com/android/systemui/statusbar/pipeline/mobile/data/repository/MobileConnectionRepository.kt
index 317c063..8f00b43 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/pipeline/mobile/data/repository/MobileConnectionRepository.kt
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/pipeline/mobile/data/repository/MobileConnectionRepository.kt
@@ -44,9 +44,6 @@
/** The carrierId for this connection. See [TelephonyManager.getSimCarrierId] */
val carrierId: StateFlow<Int>
- /** Reflects the value from the carrier config INFLATE_SIGNAL_STRENGTH for this connection */
- val inflateSignalStrength: StateFlow<Boolean>
-
/**
* The table log buffer created for this connection. Will have the name "MobileConnectionLog
* [subId]"
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/pipeline/mobile/data/repository/demo/DemoMobileConnectionRepository.kt b/packages/SystemUI/src/com/android/systemui/statusbar/pipeline/mobile/data/repository/demo/DemoMobileConnectionRepository.kt
index 90cdfeb..af34a57 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/pipeline/mobile/data/repository/demo/DemoMobileConnectionRepository.kt
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/pipeline/mobile/data/repository/demo/DemoMobileConnectionRepository.kt
@@ -43,7 +43,6 @@
import kotlinx.coroutines.CoroutineScope
import kotlinx.coroutines.flow.MutableStateFlow
import kotlinx.coroutines.flow.SharingStarted
-import kotlinx.coroutines.flow.map
import kotlinx.coroutines.flow.stateIn
/**
@@ -68,17 +67,6 @@
)
.stateIn(scope, SharingStarted.WhileSubscribed(), _carrierId.value)
- private val _inflateSignalStrength: MutableStateFlow<Boolean> = MutableStateFlow(false)
- override val inflateSignalStrength =
- _inflateSignalStrength
- .logDiffsForTable(
- tableLogBuffer,
- columnPrefix = "",
- columnName = "inflate",
- _inflateSignalStrength.value
- )
- .stateIn(scope, SharingStarted.WhileSubscribed(), _inflateSignalStrength.value)
-
private val _isEmergencyOnly = MutableStateFlow(false)
override val isEmergencyOnly =
_isEmergencyOnly
@@ -203,16 +191,7 @@
.logDiffsForTable(tableLogBuffer, columnPrefix = "", _resolvedNetworkType.value)
.stateIn(scope, SharingStarted.WhileSubscribed(), _resolvedNetworkType.value)
- override val numberOfLevels =
- _inflateSignalStrength
- .map { shouldInflate ->
- if (shouldInflate) {
- DEFAULT_NUM_LEVELS + 1
- } else {
- DEFAULT_NUM_LEVELS
- }
- }
- .stateIn(scope, SharingStarted.WhileSubscribed(), DEFAULT_NUM_LEVELS)
+ override val numberOfLevels = MutableStateFlow(MobileConnectionRepository.DEFAULT_NUM_LEVELS)
override val dataEnabled = MutableStateFlow(true)
@@ -247,7 +226,8 @@
_carrierId.value = event.carrierId ?: INVALID_SUBSCRIPTION_ID
- _inflateSignalStrength.value = event.inflateStrength
+ numberOfLevels.value =
+ if (event.inflateStrength) DEFAULT_NUM_LEVELS + 1 else DEFAULT_NUM_LEVELS
cdmaRoaming.value = event.roaming
_isRoaming.value = event.roaming
@@ -278,6 +258,7 @@
carrierName.value = NetworkNameModel.SubscriptionDerived(CARRIER_MERGED_NAME)
// TODO(b/276943904): is carrierId a thing with carrier merged networks?
_carrierId.value = INVALID_SUBSCRIPTION_ID
+ numberOfLevels.value = event.numberOfLevels
cdmaRoaming.value = false
_primaryLevel.value = event.level
_cdmaLevel.value = event.level
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/pipeline/mobile/data/repository/prod/CarrierMergedConnectionRepository.kt b/packages/SystemUI/src/com/android/systemui/statusbar/pipeline/mobile/data/repository/prod/CarrierMergedConnectionRepository.kt
index cb99d11..2bc3bcb 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/pipeline/mobile/data/repository/prod/CarrierMergedConnectionRepository.kt
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/pipeline/mobile/data/repository/prod/CarrierMergedConnectionRepository.kt
@@ -165,7 +165,6 @@
override val isRoaming = MutableStateFlow(false).asStateFlow()
override val carrierId = MutableStateFlow(INVALID_SUBSCRIPTION_ID).asStateFlow()
- override val inflateSignalStrength = MutableStateFlow(false).asStateFlow()
override val isEmergencyOnly = MutableStateFlow(false).asStateFlow()
override val operatorAlphaShort = MutableStateFlow(null).asStateFlow()
override val isInService = MutableStateFlow(true).asStateFlow()
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/pipeline/mobile/data/repository/prod/FullMobileConnectionRepository.kt b/packages/SystemUI/src/com/android/systemui/statusbar/pipeline/mobile/data/repository/prod/FullMobileConnectionRepository.kt
index bb0af77..b085d80 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/pipeline/mobile/data/repository/prod/FullMobileConnectionRepository.kt
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/pipeline/mobile/data/repository/prod/FullMobileConnectionRepository.kt
@@ -291,21 +291,6 @@
)
.stateIn(scope, SharingStarted.WhileSubscribed(), activeRepo.value.dataEnabled.value)
- override val inflateSignalStrength =
- activeRepo
- .flatMapLatest { it.inflateSignalStrength }
- .logDiffsForTable(
- tableLogBuffer,
- columnPrefix = "",
- columnName = "inflate",
- initialValue = activeRepo.value.inflateSignalStrength.value,
- )
- .stateIn(
- scope,
- SharingStarted.WhileSubscribed(),
- activeRepo.value.inflateSignalStrength.value
- )
-
override val numberOfLevels =
activeRepo
.flatMapLatest { it.numberOfLevels }
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/pipeline/mobile/data/repository/prod/MobileConnectionRepositoryImpl.kt b/packages/SystemUI/src/com/android/systemui/statusbar/pipeline/mobile/data/repository/prod/MobileConnectionRepositoryImpl.kt
index 2cbe965..5ab2ae8 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/pipeline/mobile/data/repository/prod/MobileConnectionRepositoryImpl.kt
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/pipeline/mobile/data/repository/prod/MobileConnectionRepositoryImpl.kt
@@ -302,10 +302,8 @@
}
.stateIn(scope, SharingStarted.WhileSubscribed(), UnknownNetworkType)
- override val inflateSignalStrength = systemUiCarrierConfig.shouldInflateSignalStrength
-
override val numberOfLevels =
- inflateSignalStrength
+ systemUiCarrierConfig.shouldInflateSignalStrength
.map { shouldInflate ->
if (shouldInflate) {
DEFAULT_NUM_LEVELS + 1
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/pipeline/mobile/domain/interactor/MobileIconInteractor.kt b/packages/SystemUI/src/com/android/systemui/statusbar/pipeline/mobile/domain/interactor/MobileIconInteractor.kt
index cbebfd0..9d194cf 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/pipeline/mobile/domain/interactor/MobileIconInteractor.kt
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/pipeline/mobile/domain/interactor/MobileIconInteractor.kt
@@ -367,11 +367,8 @@
combine(
level,
isInService,
- connectionRepository.inflateSignalStrength,
- ) { level, isInService, inflate ->
- if (isInService) {
- if (inflate) level + 1 else level
- } else 0
+ ) { level, isInService ->
+ if (isInService) level else 0
}
.stateIn(scope, SharingStarted.WhileSubscribed(), 0)
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/pipeline/mobile/domain/model/SignalIconModel.kt b/packages/SystemUI/src/com/android/systemui/statusbar/pipeline/mobile/domain/model/SignalIconModel.kt
index d6b8fd4..5d3b9ef 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/pipeline/mobile/domain/model/SignalIconModel.kt
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/pipeline/mobile/domain/model/SignalIconModel.kt
@@ -94,7 +94,8 @@
}
override fun logFully(row: TableRowLogger) {
- row.logChange("numLevels", "HELLO")
+ // Satellite icon has only 3 levels, unchanging
+ row.logChange(COL_NUM_LEVELS, "3")
row.logChange(COL_TYPE, "s")
row.logChange(COL_LEVEL, level)
}
diff --git a/packages/SystemUI/src/com/android/systemui/temporarydisplay/chipbar/ChipbarCoordinator.kt b/packages/SystemUI/src/com/android/systemui/temporarydisplay/chipbar/ChipbarCoordinator.kt
index 2f2c4b0..b6f5433 100644
--- a/packages/SystemUI/src/com/android/systemui/temporarydisplay/chipbar/ChipbarCoordinator.kt
+++ b/packages/SystemUI/src/com/android/systemui/temporarydisplay/chipbar/ChipbarCoordinator.kt
@@ -31,6 +31,7 @@
import android.view.ViewGroup
import android.view.WindowManager
import android.view.accessibility.AccessibilityManager
+import android.view.accessibility.AccessibilityNodeInfo
import android.widget.ImageView
import android.widget.TextView
import androidx.annotation.DimenRes
@@ -57,6 +58,7 @@
import com.android.systemui.util.time.SystemClock
import com.android.systemui.util.view.ViewUtil
import com.android.systemui.util.wakelock.WakeLock
+import java.time.Duration
import javax.inject.Inject
/**
@@ -228,6 +230,18 @@
chipInnerView.contentDescription =
"$loadedIconDesc${newInfo.text.loadText(context)}$endItemDesc"
chipInnerView.accessibilityLiveRegion = ACCESSIBILITY_LIVE_REGION_ASSERTIVE
+ // Set minimum duration between content changes to 1 second in order to announce quick
+ // state changes.
+ chipInnerView.accessibilityDelegate =
+ object : View.AccessibilityDelegate() {
+ override fun onInitializeAccessibilityNodeInfo(
+ host: View,
+ info: AccessibilityNodeInfo
+ ) {
+ super.onInitializeAccessibilityNodeInfo(host, info)
+ info.minDurationBetweenContentChanges = Duration.ofMillis(1000)
+ }
+ }
maybeGetAccessibilityFocus(newInfo, currentView)
// ---- Haptics ----
diff --git a/packages/SystemUI/tests/src/com/android/systemui/keyguard/domain/interactor/FromAodTransitionInteractorTest.kt b/packages/SystemUI/tests/src/com/android/systemui/keyguard/domain/interactor/FromAodTransitionInteractorTest.kt
index 3926f92..0a7e72c 100644
--- a/packages/SystemUI/tests/src/com/android/systemui/keyguard/domain/interactor/FromAodTransitionInteractorTest.kt
+++ b/packages/SystemUI/tests/src/com/android/systemui/keyguard/domain/interactor/FromAodTransitionInteractorTest.kt
@@ -288,4 +288,16 @@
assertThat(transitionRepository)
.startedTransition(from = KeyguardState.AOD, to = KeyguardState.GONE)
}
+
+ @Test
+ fun testTransitionToOccluded_onWake() =
+ testScope.runTest {
+ kosmos.fakeKeyguardRepository.setKeyguardOccluded(true)
+ powerInteractor.setAwakeForTest()
+ runCurrent()
+
+ // Waking up from AOD while occluded should transition to OCCLUDED.
+ assertThat(transitionRepository)
+ .startedTransition(from = KeyguardState.AOD, to = KeyguardState.OCCLUDED)
+ }
}
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 5ca6cf1..e611da0 100644
--- a/packages/SystemUI/tests/src/com/android/systemui/shade/GlanceableHubContainerControllerTest.kt
+++ b/packages/SystemUI/tests/src/com/android/systemui/shade/GlanceableHubContainerControllerTest.kt
@@ -36,22 +36,30 @@
import com.android.systemui.communal.domain.interactor.setCommunalAvailable
import com.android.systemui.communal.shared.model.CommunalScenes
import com.android.systemui.communal.ui.viewmodel.CommunalViewModel
+import com.android.systemui.keyguard.data.repository.fakeKeyguardRepository
+import com.android.systemui.keyguard.data.repository.fakeKeyguardTransitionRepository
+import com.android.systemui.keyguard.domain.interactor.KeyguardInteractor
import com.android.systemui.keyguard.domain.interactor.KeyguardTransitionInteractor
+import com.android.systemui.keyguard.domain.interactor.keyguardInteractor
+import com.android.systemui.keyguard.domain.interactor.keyguardTransitionInteractor
+import com.android.systemui.keyguard.shared.model.KeyguardState
import com.android.systemui.kosmos.Kosmos
import com.android.systemui.kosmos.testDispatcher
import com.android.systemui.kosmos.testScope
import com.android.systemui.res.R
import com.android.systemui.scene.shared.model.sceneDataSourceDelegator
+import com.android.systemui.shade.data.repository.fakeShadeRepository
import com.android.systemui.shade.domain.interactor.ShadeInteractor
+import com.android.systemui.shade.domain.interactor.shadeInteractor
import com.android.systemui.statusbar.phone.SystemUIDialogFactory
import com.android.systemui.testKosmos
import com.android.systemui.util.mockito.any
-import com.android.systemui.util.mockito.whenever
import com.google.common.truth.Truth.assertThat
import kotlinx.coroutines.ExperimentalCoroutinesApi
-import kotlinx.coroutines.flow.MutableStateFlow
import kotlinx.coroutines.launch
import kotlinx.coroutines.test.UnconfinedTestDispatcher
+import kotlinx.coroutines.test.runCurrent
+import kotlinx.coroutines.test.runTest
import org.junit.After
import org.junit.Assert.assertThrows
import org.junit.Before
@@ -75,10 +83,11 @@
}
@Mock private lateinit var communalViewModel: CommunalViewModel
- @Mock private lateinit var keyguardTransitionInteractor: KeyguardTransitionInteractor
- @Mock private lateinit var shadeInteractor: ShadeInteractor
@Mock private lateinit var powerManager: PowerManager
@Mock private lateinit var dialogFactory: SystemUIDialogFactory
+ private lateinit var keyguardTransitionInteractor: KeyguardTransitionInteractor
+ private lateinit var shadeInteractor: ShadeInteractor
+ private lateinit var keyguardInteractor: KeyguardInteractor
private lateinit var parentView: FrameLayout
private lateinit var containerView: View
@@ -88,15 +97,15 @@
private lateinit var communalRepository: FakeCommunalRepository
private lateinit var underTest: GlanceableHubContainerController
- private val bouncerShowingFlow = MutableStateFlow(false)
- private val shadeShowingFlow = MutableStateFlow(false)
-
@Before
fun setUp() {
MockitoAnnotations.initMocks(this)
communalInteractor = kosmos.communalInteractor
communalRepository = kosmos.fakeCommunalRepository
+ keyguardTransitionInteractor = kosmos.keyguardTransitionInteractor
+ keyguardInteractor = kosmos.keyguardInteractor
+ shadeInteractor = kosmos.shadeInteractor
underTest =
GlanceableHubContainerController(
@@ -104,16 +113,13 @@
communalViewModel,
dialogFactory,
keyguardTransitionInteractor,
+ keyguardInteractor,
shadeInteractor,
powerManager,
kosmos.sceneDataSourceDelegator,
)
testableLooper = TestableLooper.get(this)
- whenever(keyguardTransitionInteractor.isFinishedInStateWhere(any()))
- .thenReturn(bouncerShowingFlow)
- whenever(shadeInteractor.isAnyFullyExpanded).thenReturn(shadeShowingFlow)
-
overrideResource(R.dimen.communal_right_edge_swipe_region_width, RIGHT_SWIPE_REGION_WIDTH)
overrideResource(R.dimen.communal_top_edge_swipe_region_height, TOP_SWIPE_REGION_WIDTH)
overrideResource(
@@ -138,116 +144,182 @@
}
@Test
- fun initView_calledTwice_throwsException() {
- underTest =
- GlanceableHubContainerController(
- communalInteractor,
- communalViewModel,
- dialogFactory,
- keyguardTransitionInteractor,
- shadeInteractor,
- powerManager,
- kosmos.sceneDataSourceDelegator,
- )
+ fun initView_calledTwice_throwsException() =
+ with(kosmos) {
+ testScope.runTest {
+ underTest =
+ GlanceableHubContainerController(
+ communalInteractor,
+ communalViewModel,
+ dialogFactory,
+ keyguardTransitionInteractor,
+ keyguardInteractor,
+ shadeInteractor,
+ powerManager,
+ kosmos.sceneDataSourceDelegator,
+ )
- // First call succeeds.
- underTest.initView(context)
+ // First call succeeds.
+ underTest.initView(context)
- // Second call throws.
- assertThrows(RuntimeException::class.java) { underTest.initView(context) }
- }
+ // Second call throws.
+ assertThrows(RuntimeException::class.java) { underTest.initView(context) }
+ }
+ }
@Test
- fun onTouchEvent_communalClosed_doesNotIntercept() {
- // Communal is closed.
- goToScene(CommunalScenes.Blank)
+ fun onTouchEvent_communalClosed_doesNotIntercept() =
+ with(kosmos) {
+ testScope.runTest {
+ // Communal is closed.
+ goToScene(CommunalScenes.Blank)
- assertThat(underTest.onTouchEvent(DOWN_EVENT)).isFalse()
- }
+ assertThat(underTest.onTouchEvent(DOWN_EVENT)).isFalse()
+ }
+ }
@Test
- fun onTouchEvent_openGesture_interceptsTouches() {
- // Communal is closed.
- goToScene(CommunalScenes.Blank)
+ fun onTouchEvent_openGesture_interceptsTouches() =
+ with(kosmos) {
+ testScope.runTest {
+ // Communal is closed.
+ goToScene(CommunalScenes.Blank)
- // Initial touch down is intercepted, and so are touches outside of the region, until an
- // up event is received.
- assertThat(underTest.onTouchEvent(DOWN_IN_RIGHT_SWIPE_REGION_EVENT)).isTrue()
- assertThat(underTest.onTouchEvent(MOVE_EVENT)).isTrue()
- assertThat(underTest.onTouchEvent(UP_EVENT)).isTrue()
- assertThat(underTest.onTouchEvent(MOVE_EVENT)).isFalse()
- }
+ // Initial touch down is intercepted, and so are touches outside of the region,
+ // until an
+ // up event is received.
+ assertThat(underTest.onTouchEvent(DOWN_IN_RIGHT_SWIPE_REGION_EVENT)).isTrue()
+ assertThat(underTest.onTouchEvent(MOVE_EVENT)).isTrue()
+ assertThat(underTest.onTouchEvent(UP_EVENT)).isTrue()
+ assertThat(underTest.onTouchEvent(MOVE_EVENT)).isFalse()
+ }
+ }
@Test
- fun onTouchEvent_communalOpen_interceptsTouches() {
- // Communal is open.
- goToScene(CommunalScenes.Communal)
+ fun onTouchEvent_communalOpen_interceptsTouches() =
+ with(kosmos) {
+ testScope.runTest {
+ // Communal is open.
+ goToScene(CommunalScenes.Communal)
- // Touch events are intercepted outside of any gesture areas.
- assertThat(underTest.onTouchEvent(DOWN_EVENT)).isTrue()
- // User activity sent to PowerManager.
- verify(powerManager).userActivity(any(), any(), any())
- }
+ // Touch events are intercepted outside of any gesture areas.
+ assertThat(underTest.onTouchEvent(DOWN_EVENT)).isTrue()
+ // User activity sent to PowerManager.
+ verify(powerManager).userActivity(any(), any(), any())
+ }
+ }
@Test
- fun onTouchEvent_topSwipeWhenCommunalOpen_doesNotIntercept() {
- // Communal is open.
- goToScene(CommunalScenes.Communal)
+ fun onTouchEvent_topSwipeWhenCommunalOpen_doesNotIntercept() =
+ with(kosmos) {
+ testScope.runTest {
+ // Communal is open.
+ goToScene(CommunalScenes.Communal)
- // Touch event in the top swipe reqgion is not intercepted.
- assertThat(underTest.onTouchEvent(DOWN_IN_TOP_SWIPE_REGION_EVENT)).isFalse()
- }
+ // Touch event in the top swipe region is not intercepted.
+ assertThat(underTest.onTouchEvent(DOWN_IN_TOP_SWIPE_REGION_EVENT)).isFalse()
+ }
+ }
@Test
- fun onTouchEvent_bottomSwipeWhenCommunalOpen_doesNotIntercept() {
- // Communal is open.
- goToScene(CommunalScenes.Communal)
+ fun onTouchEvent_bottomSwipeWhenCommunalOpen_doesNotIntercept() =
+ with(kosmos) {
+ testScope.runTest {
+ // Communal is open.
+ goToScene(CommunalScenes.Communal)
- // Touch event in the bottom swipe reqgion is not intercepted.
- assertThat(underTest.onTouchEvent(DOWN_IN_BOTTOM_SWIPE_REGION_EVENT)).isFalse()
- }
+ // Touch event in the bottom swipe region is not intercepted.
+ assertThat(underTest.onTouchEvent(DOWN_IN_BOTTOM_SWIPE_REGION_EVENT)).isFalse()
+ }
+ }
@Test
- fun onTouchEvent_communalAndBouncerShowing_doesNotIntercept() {
- // Communal is open.
- goToScene(CommunalScenes.Communal)
+ fun onTouchEvent_topSwipeWhenDreaming_doesNotIntercept() =
+ with(kosmos) {
+ testScope.runTest {
+ // Communal is open.
+ goToScene(CommunalScenes.Communal)
- // Bouncer is visible.
- bouncerShowingFlow.value = true
- testableLooper.processAllMessages()
+ // Device is dreaming.
+ fakeKeyguardRepository.setDreaming(true)
+ runCurrent()
- // Touch events are not intercepted.
- assertThat(underTest.onTouchEvent(DOWN_EVENT)).isFalse()
- // User activity is not sent to PowerManager.
- verify(powerManager, times(0)).userActivity(any(), any(), any())
- }
+ // Touch event in the top swipe region is not intercepted.
+ assertThat(underTest.onTouchEvent(DOWN_IN_TOP_SWIPE_REGION_EVENT)).isFalse()
+ }
+ }
@Test
- fun onTouchEvent_communalAndShadeShowing_doesNotIntercept() {
- // Communal is open.
- goToScene(CommunalScenes.Communal)
+ fun onTouchEvent_bottomSwipeWhenDreaming_doesNotIntercept() =
+ with(kosmos) {
+ testScope.runTest {
+ // Communal is open.
+ goToScene(CommunalScenes.Communal)
- shadeShowingFlow.value = true
- testableLooper.processAllMessages()
+ // Device is dreaming.
+ fakeKeyguardRepository.setDreaming(true)
+ runCurrent()
- // Touch events are not intercepted.
- assertThat(underTest.onTouchEvent(DOWN_EVENT)).isFalse()
- }
+ // Touch event in the bottom swipe region is not intercepted.
+ assertThat(underTest.onTouchEvent(DOWN_IN_BOTTOM_SWIPE_REGION_EVENT)).isFalse()
+ }
+ }
@Test
- fun onTouchEvent_containerViewDisposed_doesNotIntercept() {
- // Communal is open.
- goToScene(CommunalScenes.Communal)
+ fun onTouchEvent_communalAndBouncerShowing_doesNotIntercept() =
+ with(kosmos) {
+ testScope.runTest {
+ // Communal is open.
+ goToScene(CommunalScenes.Communal)
- // Touch events are intercepted.
- assertThat(underTest.onTouchEvent(DOWN_EVENT)).isTrue()
+ // Bouncer is visible.
+ fakeKeyguardTransitionRepository.sendTransitionSteps(
+ KeyguardState.GLANCEABLE_HUB,
+ KeyguardState.PRIMARY_BOUNCER,
+ testScope
+ )
+ testableLooper.processAllMessages()
- // Container view disposed.
- underTest.disposeView()
+ // Touch events are not intercepted.
+ assertThat(underTest.onTouchEvent(DOWN_EVENT)).isFalse()
+ // User activity is not sent to PowerManager.
+ verify(powerManager, times(0)).userActivity(any(), any(), any())
+ }
+ }
- // Touch events are not intercepted.
- assertThat(underTest.onTouchEvent(DOWN_EVENT)).isFalse()
- }
+ @Test
+ fun onTouchEvent_communalAndShadeShowing_doesNotIntercept() =
+ with(kosmos) {
+ testScope.runTest {
+ // Communal is open.
+ goToScene(CommunalScenes.Communal)
+
+ // Shade shows up.
+ fakeShadeRepository.setQsExpansion(1.0f)
+ testableLooper.processAllMessages()
+
+ // Touch events are not intercepted.
+ assertThat(underTest.onTouchEvent(DOWN_EVENT)).isFalse()
+ }
+ }
+
+ @Test
+ fun onTouchEvent_containerViewDisposed_doesNotIntercept() =
+ with(kosmos) {
+ testScope.runTest {
+ // Communal is open.
+ goToScene(CommunalScenes.Communal)
+
+ // Touch events are intercepted.
+ assertThat(underTest.onTouchEvent(DOWN_EVENT)).isTrue()
+
+ // Container view disposed.
+ underTest.disposeView()
+
+ // Touch events are not intercepted.
+ assertThat(underTest.onTouchEvent(DOWN_EVENT)).isFalse()
+ }
+ }
private fun initAndAttachContainerView() {
containerView = View(context)
@@ -259,6 +331,8 @@
// Attach the view so that flows start collecting.
ViewUtils.attachView(parentView)
+ // Attaching is async so processAllMessages is required for view.repeatWhenAttached to run.
+ testableLooper.processAllMessages()
// Give the view a fixed size to simplify testing for edge swipes.
val lp =
diff --git a/packages/SystemUI/tests/src/com/android/systemui/shared/plugins/PluginInstanceTest.java b/packages/SystemUI/tests/src/com/android/systemui/shared/plugins/PluginInstanceTest.java
index 722387c..02954b8 100644
--- a/packages/SystemUI/tests/src/com/android/systemui/shared/plugins/PluginInstanceTest.java
+++ b/packages/SystemUI/tests/src/com/android/systemui/shared/plugins/PluginInstanceTest.java
@@ -28,7 +28,7 @@
import android.content.pm.ApplicationInfo;
import android.test.suitebuilder.annotation.SmallTest;
import android.util.Log;
-import androidx.test.filters.FlakyTest;
+
import androidx.test.runner.AndroidJUnit4;
import com.android.systemui.SysuiTestCase;
@@ -46,11 +46,10 @@
import java.util.Collections;
import java.util.concurrent.Semaphore;
import java.util.concurrent.TimeUnit;
-import java.util.concurrent.atomic.AtomicBoolean;
import java.util.concurrent.atomic.AtomicInteger;
+import java.util.concurrent.atomic.AtomicReference;
import java.util.function.Supplier;
-@FlakyTest(bugId = 327655994) // Also b/324682425
@SmallTest
@RunWith(AndroidJUnit4.class)
public class PluginInstanceTest extends SysuiTestCase {
@@ -177,7 +176,7 @@
}
@Test
- public void testLoadUnloadSimultaneous_HoldsUnload() throws Exception {
+ public void testLoadUnloadSimultaneous_HoldsUnload() throws Throwable {
final Semaphore loadLock = new Semaphore(1);
final Semaphore unloadLock = new Semaphore(1);
@@ -190,16 +189,16 @@
Thread.yield();
boolean isLocked = getLock(unloadLock, 1000);
- // Ensure the bg thread failed to do delete the plugin
+ // Ensure the bg thread failed to delete the plugin
assertNotNull(mPluginInstance.getPlugin());
// We expect that bgThread deadlocked holding the semaphore
assertFalse(isLocked);
};
- AtomicBoolean isBgThreadFailed = new AtomicBoolean(false);
+ AtomicReference<Throwable> bgFailure = new AtomicReference<Throwable>(null);
Thread bgThread = new Thread(() -> {
assertTrue(getLock(unloadLock, 10));
- assertTrue(getLock(loadLock, 4000)); // Wait for the foreground thread
+ assertTrue(getLock(loadLock, 10000)); // Wait for the foreground thread
assertNotNull(mPluginInstance.getPlugin());
// Attempt to delete the plugin, this should block until the load completes
mPluginInstance.unloadPlugin();
@@ -210,8 +209,9 @@
// This protects the test suite from crashing due to the uncaught exception.
bgThread.setUncaughtExceptionHandler((Thread t, Throwable ex) -> {
- Log.e("testLoadUnloadSimultaneous_HoldsUnload", "Exception from BG Thread", ex);
- isBgThreadFailed.set(true);
+ Log.e("PluginInstanceTest#testLoadUnloadSimultaneous_HoldsUnload",
+ "Exception from BG Thread", ex);
+ bgFailure.set(ex);
});
loadLock.acquire();
@@ -222,7 +222,13 @@
mPluginInstance.loadPlugin();
bgThread.join(5000);
- assertFalse(isBgThreadFailed.get());
+
+ // Rethrow final background exception on test thread
+ Throwable bgEx = bgFailure.get();
+ if (bgEx != null) {
+ throw bgEx;
+ }
+
assertNull(mPluginInstance.getPlugin());
}
@@ -230,6 +236,8 @@
try {
return lock.tryAcquire(millis, TimeUnit.MILLISECONDS);
} catch (InterruptedException ex) {
+ Log.e("PluginInstanceTest#getLock",
+ "Interrupted Exception getting lock", ex);
fail();
return false;
}
diff --git a/packages/SystemUI/tests/src/com/android/systemui/statusbar/pipeline/mobile/data/repository/prod/FullMobileConnectionRepositoryTest.kt b/packages/SystemUI/tests/src/com/android/systemui/statusbar/pipeline/mobile/data/repository/prod/FullMobileConnectionRepositoryTest.kt
index 3c13906..c13e830 100644
--- a/packages/SystemUI/tests/src/com/android/systemui/statusbar/pipeline/mobile/data/repository/prod/FullMobileConnectionRepositoryTest.kt
+++ b/packages/SystemUI/tests/src/com/android/systemui/statusbar/pipeline/mobile/data/repository/prod/FullMobileConnectionRepositoryTest.kt
@@ -17,7 +17,6 @@
package com.android.systemui.statusbar.pipeline.mobile.data.repository.prod
import android.net.ConnectivityManager
-import android.os.PersistableBundle
import android.telephony.ServiceState
import android.telephony.SignalStrength
import android.telephony.SubscriptionManager.PROFILE_CLASS_UNSET
@@ -100,9 +99,6 @@
)
)
- // Use a real config, with no overrides
- private val systemUiCarrierConfig = SystemUiCarrierConfig(SUB_ID, PersistableBundle())
-
private lateinit var mobileRepo: FakeMobileConnectionRepository
private lateinit var carrierMergedRepo: FakeMobileConnectionRepository
@@ -684,6 +680,10 @@
telephonyManager: TelephonyManager,
): MobileConnectionRepositoryImpl {
whenever(telephonyManager.subscriptionId).thenReturn(SUB_ID)
+ val systemUiCarrierConfigMock: SystemUiCarrierConfig = mock()
+ whenever(systemUiCarrierConfigMock.satelliteConnectionHysteresisSeconds)
+ .thenReturn(MutableStateFlow(0))
+
val realRepo =
MobileConnectionRepositoryImpl(
SUB_ID,
@@ -693,7 +693,7 @@
SEP,
connectivityManager,
telephonyManager,
- systemUiCarrierConfig = systemUiCarrierConfig,
+ systemUiCarrierConfig = systemUiCarrierConfigMock,
fakeBroadcastDispatcher,
mobileMappingsProxy = mock(),
testDispatcher,
diff --git a/packages/SystemUI/tests/src/com/android/systemui/statusbar/pipeline/mobile/data/repository/prod/MobileConnectionRepositoryTest.kt b/packages/SystemUI/tests/src/com/android/systemui/statusbar/pipeline/mobile/data/repository/prod/MobileConnectionRepositoryTest.kt
index 9d14116..f761bcf 100644
--- a/packages/SystemUI/tests/src/com/android/systemui/statusbar/pipeline/mobile/data/repository/prod/MobileConnectionRepositoryTest.kt
+++ b/packages/SystemUI/tests/src/com/android/systemui/statusbar/pipeline/mobile/data/repository/prod/MobileConnectionRepositoryTest.kt
@@ -1030,26 +1030,6 @@
}
@Test
- fun inflateSignalStrength_usesCarrierConfig() =
- testScope.runTest {
- val latest by collectLastValue(underTest.inflateSignalStrength)
-
- assertThat(latest).isEqualTo(false)
-
- systemUiCarrierConfig.processNewCarrierConfig(
- configWithOverride(KEY_INFLATE_SIGNAL_STRENGTH_BOOL, true)
- )
-
- assertThat(latest).isEqualTo(true)
-
- systemUiCarrierConfig.processNewCarrierConfig(
- configWithOverride(KEY_INFLATE_SIGNAL_STRENGTH_BOOL, false)
- )
-
- assertThat(latest).isEqualTo(false)
- }
-
- @Test
fun isAllowedDuringAirplaneMode_alwaysFalse() =
testScope.runTest {
val latest by collectLastValue(underTest.isAllowedDuringAirplaneMode)
diff --git a/packages/SystemUI/tests/src/com/android/systemui/statusbar/pipeline/mobile/domain/interactor/MobileIconInteractorTest.kt b/packages/SystemUI/tests/src/com/android/systemui/statusbar/pipeline/mobile/domain/interactor/MobileIconInteractorTest.kt
index f9ab25e..c49fcf8 100644
--- a/packages/SystemUI/tests/src/com/android/systemui/statusbar/pipeline/mobile/domain/interactor/MobileIconInteractorTest.kt
+++ b/packages/SystemUI/tests/src/com/android/systemui/statusbar/pipeline/mobile/domain/interactor/MobileIconInteractorTest.kt
@@ -181,22 +181,6 @@
}
@Test
- fun inflateSignalStrength_arbitrarilyAddsOneToTheReportedLevel() =
- testScope.runTest {
- connectionRepository.inflateSignalStrength.value = false
- val latest by collectLastValue(underTest.signalLevelIcon)
-
- connectionRepository.primaryLevel.value = 4
- assertThat(latest!!.level).isEqualTo(4)
-
- connectionRepository.inflateSignalStrength.value = true
- connectionRepository.primaryLevel.value = 4
-
- // when INFLATE_SIGNAL_STRENGTH is true, we add 1 to the reported signal level
- assertThat(latest!!.level).isEqualTo(5)
- }
-
- @Test
fun iconGroup_three_g() =
testScope.runTest {
connectionRepository.resolvedNetworkType.value =
diff --git a/packages/SystemUI/tests/utils/kosmos/src/com/android/systemui/kosmos/Kosmos.kt b/packages/SystemUI/tests/utils/kosmos/src/com/android/systemui/kosmos/Kosmos.kt
new file mode 100644
index 0000000..685bb0a
--- /dev/null
+++ b/packages/SystemUI/tests/utils/kosmos/src/com/android/systemui/kosmos/Kosmos.kt
@@ -0,0 +1,97 @@
+/*
+ * 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.kosmos
+
+import kotlin.reflect.KProperty
+
+// (Historical note: The name Kosmos is meant to invoke "Kotlin", the "Object Mother" pattern
+// (https://martinfowler.com/bliki/ObjectMother.html), and of course the Greek word "kosmos" for
+// the "order of the world" (https://en.wiktionary.org/wiki/%CE%BA%CF%8C%CF%83%CE%BC%CE%BF%CF%82)
+
+/**
+ * Each Kosmos is its own self-contained set of fixtures, which may reference each other. Fixtures
+ * can be defined through extension properties in any file:
+ * ```
+ * // fixture that must be set:
+ * var Kosmos.context by Fixture<Context>()
+ *
+ * // fixture with overrideable default.
+ * var Kosmos.landscapeMode by Fixture { false }
+ *
+ * // fixture forbidding override (note `val`, and referencing context fixture from above)
+ * val Kosmos.lifecycleScope by Fixture { context.lifecycleScope }
+ * ```
+ *
+ * To use the fixtures, create an instance of Kosmos and retrieve the values you need:
+ * ```
+ * val k = Kosmos()
+ * k.context = mContext
+ * val underTest = YourInteractor(
+ * context = k.context,
+ * landscapeMode = k.landscapeMode,
+ * )
+ * ```
+ */
+interface Kosmos {
+ /**
+ * Lookup a fixture in the Kosmos by [name], using [creator] to instantiate and store one if
+ * there is none present.
+ */
+ fun <T> get(name: String, creator: (Kosmos.() -> T)?): T
+
+ /** Sets the [value] of a fixture with the given [name]. */
+ fun set(name: String, value: Any?)
+
+ /**
+ * A value in the kosmos that has a single value once it's read. It can be overridden before
+ * first use only; all objects that are dependent on this fixture will get the same value.
+ *
+ * Example classic uses would be a clock, filesystem, or singleton controller.
+ *
+ * If no [creator] parameter is provided, the fixture must be set before use.
+ */
+ class Fixture<T>(private val creator: (Kosmos.() -> T)? = null) {
+ operator fun getValue(thisRef: Kosmos, property: KProperty<*>): T =
+ thisRef.get(property.name, creator)
+
+ operator fun setValue(thisRef: Kosmos, property: KProperty<*>, value: T) {
+ thisRef.set(property.name, value)
+ }
+ }
+}
+
+/** Constructs a fresh Kosmos. */
+fun Kosmos(): Kosmos = KosmosRegistry()
+
+private class KosmosRegistry : Kosmos {
+ val map: MutableMap<String, Any?> = mutableMapOf()
+ val gotten: MutableSet<String> = mutableSetOf()
+
+ override fun <T> get(name: String, creator: (Kosmos.() -> T)?): T {
+ gotten.add(name)
+ if (name !in map) {
+ checkNotNull(creator) { "Fixture $name has no default, and is read before set." }
+ map[name] = creator()
+ }
+ @Suppress("UNCHECKED_CAST") return map[name] as T
+ }
+
+ override fun set(name: String, value: Any?) {
+ check(name !in gotten) { "Tried to set fixture '$name' after it's already been read." }
+ map[name] = value
+ }
+}
diff --git a/packages/SystemUI/tests/utils/src/com/android/systemui/broadcast/BroadcastSenderKosmos.kt b/packages/SystemUI/tests/utils/src/com/android/systemui/broadcast/BroadcastSenderKosmos.kt
new file mode 100644
index 0000000..42ad679
--- /dev/null
+++ b/packages/SystemUI/tests/utils/src/com/android/systemui/broadcast/BroadcastSenderKosmos.kt
@@ -0,0 +1,29 @@
+/*
+ * 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.broadcast
+
+import android.content.applicationContext
+import com.android.systemui.concurrency.fakeExecutor
+import com.android.systemui.kosmos.Kosmos
+import com.android.systemui.util.mockito.mock
+import com.android.systemui.util.wakelock.WakeLockFake
+
+val Kosmos.mockBroadcastSender by Kosmos.Fixture { mock<BroadcastSender>() }
+var Kosmos.broadcastSender by
+ Kosmos.Fixture {
+ BroadcastSender(applicationContext, WakeLockFake.Builder(applicationContext), fakeExecutor)
+ }
diff --git a/packages/SystemUI/tests/utils/src/com/android/systemui/kosmos/Kosmos.kt b/packages/SystemUI/tests/utils/src/com/android/systemui/kosmos/Kosmos.kt
deleted file mode 100644
index c74cdd4..0000000
--- a/packages/SystemUI/tests/utils/src/com/android/systemui/kosmos/Kosmos.kt
+++ /dev/null
@@ -1,69 +0,0 @@
-package com.android.systemui.kosmos
-
-import kotlin.reflect.KProperty
-
-// (Historical note: The name Kosmos is meant to invoke "Kotlin", the "Object Mother" pattern
-// (https://martinfowler.com/bliki/ObjectMother.html), and of course the Greek word "kosmos" for
-// the "order of the world" (https://en.wiktionary.org/wiki/%CE%BA%CF%8C%CF%83%CE%BC%CE%BF%CF%82)
-/**
- * Each Kosmos is its own self-contained set of fixtures, which may reference each other. Fixtures
- * can be defined through extension properties in any file:
- * ```
- * // fixture that must be set:
- * var Kosmos.context by Fixture<Context>()
- *
- * // fixture with overrideable default.
- * var Kosmos.landscapeMode by Fixture { false }
- *
- * // fixture forbidding override (note `val`, and referencing context fixture from above)
- * val Kosmos.lifecycleScope by Fixture { context.lifecycleScope }
- * ```
- *
- * To use the fixtures, create an instance of Kosmos and retrieve the values you need:
- * ```
- * val k = Kosmos()
- * k.context = mContext
- * val underTest = YourInteractor(
- * context = k.context,
- * landscapeMode = k.landscapeMode,
- * )
- * ```
- */
-class Kosmos {
- private val map: MutableMap<String, Any?> = mutableMapOf()
- private val gotten: MutableSet<String> = mutableSetOf()
-
- /**
- * A value in the kosmos that has a single value once it's read. It can be overridden before
- * first use only; all objects that are dependent on this fixture will get the same value.
- *
- * Example classic uses would be a clock, filesystem, or singleton controller.
- *
- * If no [creator] parameter is provided, the fixture must be set before use.
- */
- class Fixture<T>(private val creator: (Kosmos.() -> T)? = null) {
- operator fun getValue(thisRef: Kosmos, property: KProperty<*>): T {
- thisRef.gotten.add(property.name)
- @Suppress("UNCHECKED_CAST")
- if (!thisRef.map.contains(property.name)) {
- if (creator == null) {
- throw IllegalStateException(
- "Fixture ${property.name} has no default, and is read before set."
- )
- } else {
- val nonNullCreator = creator
- // The Kotlin compiler seems to need this odd workaround
- thisRef.map[property.name] = thisRef.nonNullCreator()
- }
- }
- return thisRef.map[property.name] as T
- }
-
- operator fun setValue(thisRef: Kosmos, property: KProperty<*>, value: T) {
- check(!thisRef.gotten.contains(property.name)) {
- "Tried to set fixture '${property.name}' after it's already been read."
- }
- thisRef.map[property.name] = value
- }
- }
-}
diff --git a/packages/SystemUI/tests/utils/src/com/android/systemui/media/controls/domain/pipeline/interactor/MediaRecommendationsInteractorKosmos.kt b/packages/SystemUI/tests/utils/src/com/android/systemui/media/controls/domain/pipeline/interactor/MediaRecommendationsInteractorKosmos.kt
index 372a1961..1edd405 100644
--- a/packages/SystemUI/tests/utils/src/com/android/systemui/media/controls/domain/pipeline/interactor/MediaRecommendationsInteractorKosmos.kt
+++ b/packages/SystemUI/tests/utils/src/com/android/systemui/media/controls/domain/pipeline/interactor/MediaRecommendationsInteractorKosmos.kt
@@ -17,10 +17,12 @@
package com.android.systemui.media.controls.domain.pipeline.interactor
import android.content.applicationContext
+import com.android.systemui.broadcast.broadcastSender
import com.android.systemui.kosmos.Kosmos
import com.android.systemui.kosmos.applicationCoroutineScope
import com.android.systemui.media.controls.data.repository.mediaFilterRepository
import com.android.systemui.media.controls.domain.pipeline.mediaDataProcessor
+import com.android.systemui.plugins.activityStarter
val Kosmos.mediaRecommendationsInteractor by
Kosmos.Fixture {
@@ -29,5 +31,7 @@
applicationContext = applicationContext,
repository = mediaFilterRepository,
mediaDataProcessor = mediaDataProcessor,
+ broadcastSender = broadcastSender,
+ activityStarter = activityStarter,
)
}
diff --git a/packages/SystemUI/tests/utils/src/com/android/systemui/media/controls/ui/viewmodel/MediaRecommendationsViewModelKosmos.kt b/packages/SystemUI/tests/utils/src/com/android/systemui/media/controls/ui/viewmodel/MediaRecommendationsViewModelKosmos.kt
new file mode 100644
index 0000000..34a5277
--- /dev/null
+++ b/packages/SystemUI/tests/utils/src/com/android/systemui/media/controls/ui/viewmodel/MediaRecommendationsViewModelKosmos.kt
@@ -0,0 +1,33 @@
+/*
+ * 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.testDispatcher
+import com.android.systemui.media.controls.domain.pipeline.interactor.mediaRecommendationsInteractor
+import com.android.systemui.media.controls.util.mediaUiEventLogger
+
+val Kosmos.mediaRecommendationsViewModel by
+ Kosmos.Fixture {
+ MediaRecommendationsViewModel(
+ applicationContext = applicationContext,
+ backgroundDispatcher = testDispatcher,
+ interactor = mediaRecommendationsInteractor,
+ logger = mediaUiEventLogger,
+ )
+ }
diff --git a/packages/SystemUI/tests/utils/src/com/android/systemui/statusbar/pipeline/mobile/data/repository/FakeMobileConnectionRepository.kt b/packages/SystemUI/tests/utils/src/com/android/systemui/statusbar/pipeline/mobile/data/repository/FakeMobileConnectionRepository.kt
index 8109b60..2d5a361 100644
--- a/packages/SystemUI/tests/utils/src/com/android/systemui/statusbar/pipeline/mobile/data/repository/FakeMobileConnectionRepository.kt
+++ b/packages/SystemUI/tests/utils/src/com/android/systemui/statusbar/pipeline/mobile/data/repository/FakeMobileConnectionRepository.kt
@@ -31,7 +31,6 @@
override val tableLogBuffer: TableLogBuffer,
) : MobileConnectionRepository {
override val carrierId = MutableStateFlow(UNKNOWN_CARRIER_ID)
- override val inflateSignalStrength: MutableStateFlow<Boolean> = MutableStateFlow(false)
override val isEmergencyOnly = MutableStateFlow(false)
override val isRoaming = MutableStateFlow(false)
override val operatorAlphaShort: MutableStateFlow<String?> = MutableStateFlow(null)
diff --git a/packages/VpnDialogs/res/values-de/strings.xml b/packages/VpnDialogs/res/values-de/strings.xml
index 7397ddb..062f61c 100644
--- a/packages/VpnDialogs/res/values-de/strings.xml
+++ b/packages/VpnDialogs/res/values-de/strings.xml
@@ -17,7 +17,7 @@
<resources xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="prompt" msgid="3183836924226407828">"Verbindungsanfrage"</string>
- <string name="warning" msgid="809658604548412033">"<xliff:g id="APP">%s</xliff:g> möchte eine VPN-Verbindung herstellen, über die der Netzwerkverkehr überwacht werden kann. Lass die Verbindung nur zu, wenn die App vertrauenswürdig ist. <br /> <br /> Wenn das VPN aktiv ist, wird oben im Display <img src=vpn_icon /> angezeigt."</string>
+ <string name="warning" msgid="809658604548412033">"<xliff:g id="APP">%s</xliff:g> möchte eine VPN-Verbindung herstellen, über die der Netzwerkverkehr überwacht werden kann. Lass die Verbindung nur zu, wenn die App vertrauenswürdig ist. <br /> <br /> Wenn das VPN aktiv ist, wird oben auf dem Display das Symbol „<img src=vpn_icon />“ angezeigt."</string>
<string name="warning" product="tv" msgid="5188957997628124947">"<xliff:g id="APP">%s</xliff:g> möchte eine VPN-Verbindung herstellen, über die der Netzwerkverkehr überwacht werden kann. Lass die Verbindung nur zu, wenn die App vertrauenswürdig ist. <br /> <br /> <img src=vpn_icon /> wird auf dem Display angezeigt, wenn VPN aktiv ist."</string>
<string name="legacy_title" msgid="192936250066580964">"VPN ist verbunden"</string>
<string name="session" msgid="6470628549473641030">"Sitzung:"</string>
diff --git a/services/autofill/bugfixes.aconfig b/services/autofill/bugfixes.aconfig
index ced10fb..0a3906a 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/AutofillManagerService.java b/services/autofill/java/com/android/server/autofill/AutofillManagerService.java
index fef3216..9701292 100644
--- a/services/autofill/java/com/android/server/autofill/AutofillManagerService.java
+++ b/services/autofill/java/com/android/server/autofill/AutofillManagerService.java
@@ -79,6 +79,7 @@
import android.view.autofill.IAutoFillManager;
import android.view.autofill.IAutoFillManagerClient;
+import com.android.internal.R;
import com.android.internal.annotations.GuardedBy;
import com.android.internal.annotations.VisibleForTesting;
import com.android.internal.infra.AbstractRemoteService;
@@ -159,6 +160,7 @@
final FrameworkResourcesServiceNameResolver mFieldClassificationResolver;
private final AutoFillUI mUi;
+ final ComponentName mCredentialAutofillService;
private final LocalLog mRequestsHistory = new LocalLog(20);
private final LocalLog mUiLatencyHistory = new LocalLog(20);
@@ -288,6 +290,16 @@
mAugmentedAutofillResolver.isTemporary(userId));
}
}
+ String credentialManagerAutofillCompName = context.getResources().getString(
+ R.string.config_defaultCredentialManagerAutofillService);
+ if (credentialManagerAutofillCompName != null
+ && !credentialManagerAutofillCompName.isEmpty()) {
+ mCredentialAutofillService = ComponentName.unflattenFromString(
+ credentialManagerAutofillCompName);
+ } else {
+ mCredentialAutofillService = null;
+ Slog.w(TAG, "Invalid CredentialAutofillService");
+ }
}
@Override // from AbstractMasterSystemService
@@ -417,7 +429,6 @@
} finally {
Binder.restoreCallingIdentity(token);
}
-
return managerService;
}
diff --git a/services/autofill/java/com/android/server/autofill/AutofillManagerServiceImpl.java b/services/autofill/java/com/android/server/autofill/AutofillManagerServiceImpl.java
index 272d63d..6822229 100644
--- a/services/autofill/java/com/android/server/autofill/AutofillManagerServiceImpl.java
+++ b/services/autofill/java/com/android/server/autofill/AutofillManagerServiceImpl.java
@@ -1291,7 +1291,8 @@
RemoteFillService remoteService =
new RemoteFillService(
getContext(), mInfo.getServiceInfo().getComponentName(), mUserId,
- /* callbacks= */ null, mMaster.isInstantServiceAllowed());
+ /* callbacks= */ null, mMaster.isInstantServiceAllowed(),
+ mMaster.mCredentialAutofillService);
remoteService.onSavedPasswordCountRequest(receiver);
}
diff --git a/services/autofill/java/com/android/server/autofill/RemoteFillService.java b/services/autofill/java/com/android/server/autofill/RemoteFillService.java
index f914ed5..c96688c 100644
--- a/services/autofill/java/com/android/server/autofill/RemoteFillService.java
+++ b/services/autofill/java/com/android/server/autofill/RemoteFillService.java
@@ -62,10 +62,6 @@
private static final long TIMEOUT_IDLE_BIND_MILLIS = 5 * DateUtils.SECOND_IN_MILLIS;
private static final long TIMEOUT_REMOTE_REQUEST_MILLIS = 5 * DateUtils.SECOND_IN_MILLIS;
- private static final ComponentName CREDMAN_SERVICE_COMPONENT_NAME =
- new ComponentName("com.android.credentialmanager",
- "com.android.credentialmanager.autofill.CredentialAutofillService");
-
private final FillServiceCallbacks mCallbacks;
private final Object mLock = new Object();
private CompletableFuture<FillResponse> mPendingFillRequest;
@@ -102,14 +98,15 @@
}
RemoteFillService(Context context, ComponentName componentName, int userId,
- FillServiceCallbacks callbacks, boolean bindInstantServiceAllowed) {
+ FillServiceCallbacks callbacks, boolean bindInstantServiceAllowed,
+ @Nullable ComponentName credentialAutofillService) {
super(context, new Intent(AutofillService.SERVICE_INTERFACE).setComponent(componentName),
Context.BIND_ALLOW_BACKGROUND_ACTIVITY_STARTS
| (bindInstantServiceAllowed ? Context.BIND_ALLOW_INSTANT : 0),
userId, IAutoFillService.Stub::asInterface);
mCallbacks = callbacks;
mComponentName = componentName;
- mIsCredentialAutofillService = mComponentName.equals(CREDMAN_SERVICE_COMPONENT_NAME);
+ mIsCredentialAutofillService = mComponentName.equals(credentialAutofillService);
}
@Override // from ServiceConnector.Impl
diff --git a/services/autofill/java/com/android/server/autofill/SecondaryProviderHandler.java b/services/autofill/java/com/android/server/autofill/SecondaryProviderHandler.java
index 0af703e..4506779 100644
--- a/services/autofill/java/com/android/server/autofill/SecondaryProviderHandler.java
+++ b/services/autofill/java/com/android/server/autofill/SecondaryProviderHandler.java
@@ -59,9 +59,10 @@
SecondaryProviderHandler(
@NonNull Context context, int userId, boolean bindInstantServiceAllowed,
- SecondaryProviderCallback callback, ComponentName componentName) {
+ SecondaryProviderCallback callback, ComponentName componentName,
+ @Nullable ComponentName credentialAutofillService) {
mRemoteFillService = new RemoteFillService(context, componentName, userId, this,
- bindInstantServiceAllowed);
+ bindInstantServiceAllowed, credentialAutofillService);
mCallback = callback;
Slog.v(TAG, "Creating a secondary provider handler with component name, " + componentName);
}
diff --git a/services/autofill/java/com/android/server/autofill/Session.java b/services/autofill/java/com/android/server/autofill/Session.java
index b8a18c0..0b68f5f 100644
--- a/services/autofill/java/com/android/server/autofill/Session.java
+++ b/services/autofill/java/com/android/server/autofill/Session.java
@@ -244,10 +244,6 @@
private static final int DEFAULT__FILL_REQUEST_ID_SNAPSHOT = -2;
private static final int DEFAULT__FIELD_CLASSIFICATION_REQUEST_ID_SNAPSHOT = -2;
- private static final ComponentName CREDMAN_SERVICE_COMPONENT_NAME =
- new ComponentName("com.android.credentialmanager",
- "com.android.credentialmanager.autofill.CredentialAutofillService");
-
static final String SESSION_ID_KEY = "autofill_session_id";
static final String REQUEST_ID_KEY = "autofill_request_id";
@@ -524,6 +520,9 @@
private final ClassificationState mClassificationState = new ClassificationState();
+ @Nullable
+ private final ComponentName mCredentialAutofillService;
+
// TODO(b/216576510): Share one BroadcastReceiver between all Sessions instead of creating a
// new one per Session.
private final BroadcastReceiver mDelayedFillBroadcastReceiver =
@@ -1481,23 +1480,26 @@
mUi = ui;
mHandler = handler;
+ mCredentialAutofillService = getCredentialAutofillService(context);
+
ComponentName primaryServiceComponentName, secondaryServiceComponentName;
if (isPrimaryCredential) {
- primaryServiceComponentName = CREDMAN_SERVICE_COMPONENT_NAME;
+ primaryServiceComponentName = mCredentialAutofillService;
secondaryServiceComponentName = serviceComponentName;
} else {
primaryServiceComponentName = serviceComponentName;
- secondaryServiceComponentName = CREDMAN_SERVICE_COMPONENT_NAME;
+ secondaryServiceComponentName = mCredentialAutofillService;
}
Slog.v(TAG, "Primary service component name: " + primaryServiceComponentName
+ ", secondary service component name: " + secondaryServiceComponentName);
mRemoteFillService = primaryServiceComponentName == null ? null
: new RemoteFillService(context, primaryServiceComponentName, userId, this,
- bindInstantServiceAllowed);
+ bindInstantServiceAllowed, mCredentialAutofillService);
mSecondaryProviderHandler = secondaryServiceComponentName == null ? null
: new SecondaryProviderHandler(context, userId, bindInstantServiceAllowed,
- this::onSecondaryFillResponse, secondaryServiceComponentName);
+ this::onSecondaryFillResponse, secondaryServiceComponentName,
+ mCredentialAutofillService);
mActivityToken = activityToken;
mHasCallback = hasCallback;
mUiLatencyHistory = uiLatencyHistory;
@@ -1556,6 +1558,21 @@
mLogViewEntered = false;
}
+ private ComponentName getCredentialAutofillService(Context context) {
+ ComponentName componentName = null;
+ String credentialManagerAutofillCompName = context.getResources().getString(
+ R.string.config_defaultCredentialManagerAutofillService);
+ if (credentialManagerAutofillCompName != null
+ && !credentialManagerAutofillCompName.isEmpty()) {
+ componentName = ComponentName.unflattenFromString(
+ credentialManagerAutofillCompName);
+ }
+ if (componentName == null) {
+ Slog.w(TAG, "Invalid CredentialAutofillService");
+ }
+ return componentName;
+ }
+
/**
* Gets the currently registered activity token
*
diff --git a/services/backup/flags.aconfig b/services/backup/flags.aconfig
index e9f959f..74adfe0 100644
--- a/services/backup/flags.aconfig
+++ b/services/backup/flags.aconfig
@@ -50,4 +50,12 @@
"logger."
bug: "296844513"
is_fixed_read_only: true
+}
+
+flag {
+ name: "enable_increased_bmm_logging_for_restore_at_install"
+ namespace: "onboarding"
+ description: "Increase BMM logging coverage in restore at install flow."
+ bug: "331749778"
+ is_fixed_read_only: true
}
\ No newline at end of file
diff --git a/services/backup/java/com/android/server/backup/UserBackupManagerService.java b/services/backup/java/com/android/server/backup/UserBackupManagerService.java
index 976504a..dc1cfb9 100644
--- a/services/backup/java/com/android/server/backup/UserBackupManagerService.java
+++ b/services/backup/java/com/android/server/backup/UserBackupManagerService.java
@@ -3903,11 +3903,33 @@
skip = true;
}
+ BackupManagerMonitorEventSender mBMMEventSender =
+ getBMMEventSender(/*monitor=*/ null);
+ PackageInfo packageInfo = getPackageInfoForBMMLogging(packageName);
TransportConnection transportConnection =
mTransportManager.getCurrentTransportClient("BMS.restoreAtInstall()");
if (transportConnection == null) {
if (DEBUG) Slog.w(TAG, addUserIdToLogMessage(mUserId, "No transport client"));
skip = true;
+ } else if (Flags.enableIncreasedBmmLoggingForRestoreAtInstall()) {
+ try {
+ BackupTransportClient transportClient = transportConnection.connectOrThrow(
+ "BMS.restoreAtInstall");
+ mBMMEventSender.setMonitor(transportClient.getBackupManagerMonitor());
+ } catch (TransportNotAvailableException | RemoteException e) {
+ mBMMEventSender.monitorEvent(
+ BackupManagerMonitor.LOG_EVENT_ID_TRANSPORT_IS_NULL, packageInfo,
+ BackupManagerMonitor.LOG_EVENT_CATEGORY_TRANSPORT, null);
+ }
+ }
+
+ if (Flags.enableIncreasedBmmLoggingForRestoreAtInstall()) {
+ mBMMEventSender.monitorEvent(
+ BackupManagerMonitor.LOG_EVENT_ID_RESTORE_AT_INSTALL_INVOKED, packageInfo,
+ BackupManagerMonitor.LOG_EVENT_CATEGORY_BACKUP_MANAGER_POLICY,
+ mBMMEventSender.putMonitoringExtra(/*extras=*/null,
+ BackupManagerMonitor.EXTRA_LOG_OPERATION_TYPE,
+ BackupAnnotations.OperationType.RESTORE));
}
if (!mAutoRestore) {
@@ -3943,7 +3965,7 @@
RestoreParams.createForRestoreAtInstall(
transportConnection,
/* observer */ null,
- /* monitor */ null,
+ mBMMEventSender.getMonitor(),
restoreSet,
packageName,
token,
@@ -3963,6 +3985,15 @@
if (skip) {
// Auto-restore disabled or no way to attempt a restore
+ if (Flags.enableIncreasedBmmLoggingForRestoreAtInstall()) {
+ mBMMEventSender.monitorEvent(
+ BackupManagerMonitor.LOG_EVENT_ID_SKIP_RESTORE_AT_INSTALL, packageInfo,
+ BackupManagerMonitor.LOG_EVENT_CATEGORY_BACKUP_MANAGER_POLICY,
+ mBMMEventSender.putMonitoringExtra(/*extras=*/null,
+ BackupManagerMonitor.EXTRA_LOG_OPERATION_TYPE,
+ BackupAnnotations.OperationType.RESTORE));
+ }
+
if (transportConnection != null) {
mTransportManager.disposeOfTransportClient(
transportConnection, "BMS.restoreAtInstall()");
@@ -3976,6 +4007,23 @@
}
}
+ private PackageInfo getPackageInfoForBMMLogging(String packageName) {
+ try {
+ return mPackageManager.getPackageInfoAsUser(packageName, 0, mUserId);
+ } catch (NameNotFoundException e) {
+ Slog.w(
+ TAG,
+ addUserIdToLogMessage(
+ mUserId, "Asked to get PackageInfo for BMM logging of nonexistent pkg "
+ + packageName));
+
+ PackageInfo packageInfo = new PackageInfo();
+ packageInfo.packageName = packageName;
+
+ return packageInfo;
+ }
+ }
+
/** Hand off a restore session. */
public IRestoreSession beginRestoreSession(String packageName, String transport) {
if (DEBUG) {
diff --git a/services/backup/java/com/android/server/backup/restore/FullRestoreEngine.java b/services/backup/java/com/android/server/backup/restore/FullRestoreEngine.java
index 2c9eb51..b414b25 100644
--- a/services/backup/java/com/android/server/backup/restore/FullRestoreEngine.java
+++ b/services/backup/java/com/android/server/backup/restore/FullRestoreEngine.java
@@ -29,6 +29,7 @@
import android.app.IBackupAgent;
import android.app.backup.BackupAgent;
import android.app.backup.BackupAnnotations;
+import android.app.backup.BackupManagerMonitor;
import android.app.backup.FullBackup;
import android.app.backup.IBackupManagerMonitor;
import android.app.backup.IFullBackupRestoreObserver;
@@ -57,6 +58,7 @@
import com.android.server.backup.UserBackupManagerService;
import com.android.server.backup.fullbackup.FullBackupObbConnection;
import com.android.server.backup.utils.BackupEligibilityRules;
+import com.android.server.backup.utils.BackupManagerMonitorEventSender;
import com.android.server.backup.utils.BytesReadListener;
import com.android.server.backup.utils.FullBackupRestoreObserverUtils;
import com.android.server.backup.utils.RestoreUtils;
@@ -143,6 +145,8 @@
private FileMetadata mReadOnlyParent = null;
+ private BackupManagerMonitorEventSender mBackupManagerMonitorEventSender;
+
public FullRestoreEngine(
UserBackupManagerService backupManagerService, OperationStorage operationStorage,
BackupRestoreTask monitorTask, IFullBackupRestoreObserver observer,
@@ -155,6 +159,7 @@
mMonitorTask = monitorTask;
mObserver = observer;
mMonitor = monitor;
+ mBackupManagerMonitorEventSender = new BackupManagerMonitorEventSender(monitor);
mOnlyPackage = onlyPackage;
mAllowApks = allowApks;
mAgentTimeoutParameters = Objects.requireNonNull(
@@ -225,6 +230,9 @@
// one app's data but see a different app's on the wire
if (onlyPackage != null) {
if (!pkg.equals(onlyPackage.packageName)) {
+ logBMMEvent(
+ BackupManagerMonitor.LOG_EVENT_ID_RESTORE_DATA_DOES_NOT_BELONG_TO_PACKAGE,
+ onlyPackage);
Slog.w(TAG, "Expected data for " + onlyPackage + " but saw " + pkg);
setResult(RestoreEngine.TRANSPORT_FAILURE);
setRunning(false);
@@ -412,6 +420,9 @@
}
if (mAgent == null) {
+ logBMMEvent(
+ BackupManagerMonitor.LOG_EVENT_ID_UNABLE_TO_CREATE_AGENT_FOR_RESTORE,
+ onlyPackage);
Slog.e(TAG, "Unable to create agent for " + pkg);
okay = false;
tearDownPipes();
@@ -501,6 +512,9 @@
} catch (RemoteException e) {
// whoops, remote entity went away. We'll eat the content
// ourselves, then, and not copy it over.
+ logBMMEvent(
+ BackupManagerMonitor.LOG_EVENT_ID_AGENT_CRASHED_BEFORE_RESTORE_DATA_IS_SENT,
+ onlyPackage);
Slog.e(TAG, "Agent crashed during full restore");
agentSuccess = false;
okay = false;
@@ -531,6 +545,9 @@
} catch (IOException e) {
Slog.e(TAG, "Failed to write to restore pipe: "
+ e.getMessage());
+ logBMMEvent(
+ BackupManagerMonitor.LOG_EVENT_ID_FAILED_TO_SEND_DATA_TO_AGENT_DURING_RESTORE,
+ onlyPackage);
pipeOkay = false;
}
}
@@ -548,6 +565,8 @@
// okay, if the remote end failed at any point, deal with
// it by ignoring the rest of the restore on it
if (!agentSuccess) {
+ logBMMEvent(BackupManagerMonitor.LOG_EVENT_ID_AGENT_FAILURE_DURING_RESTORE,
+ onlyPackage);
Slog.w(TAG, "Agent failure restoring " + pkg + "; ending restore");
mBackupManagerService.getBackupHandler().removeMessages(
MSG_RESTORE_OPERATION_TIMEOUT);
@@ -590,6 +609,8 @@
if (DEBUG) {
Slog.w(TAG, "io exception on restore socket read: " + e.getMessage());
}
+ logBMMEvent(BackupManagerMonitor.LOG_EVENT_ID_FAILED_TO_READ_DATA_FROM_TRANSPORT,
+ onlyPackage);
setResult(RestoreEngine.TRANSPORT_FAILURE);
info = null;
}
@@ -631,6 +652,16 @@
return false;
}
+ private void logBMMEvent(int eventId, PackageInfo pkgInfo) {
+ if (Flags.enableIncreasedBmmLoggingForRestoreAtInstall()) {
+ mBackupManagerMonitorEventSender.monitorEvent(eventId, pkgInfo,
+ BackupManagerMonitor.LOG_EVENT_CATEGORY_BACKUP_MANAGER_POLICY,
+ mBackupManagerMonitorEventSender.putMonitoringExtra(/*extras=*/
+ null, BackupManagerMonitor.EXTRA_LOG_OPERATION_TYPE,
+ BackupAnnotations.OperationType.RESTORE));
+ }
+ }
+
private static boolean isValidParent(FileMetadata parentDir, @NonNull FileMetadata childDir) {
return parentDir != null
&& childDir.packageName.equals(parentDir.packageName)
diff --git a/services/backup/java/com/android/server/backup/restore/PerformUnifiedRestoreTask.java b/services/backup/java/com/android/server/backup/restore/PerformUnifiedRestoreTask.java
index 8fece82..e536876 100644
--- a/services/backup/java/com/android/server/backup/restore/PerformUnifiedRestoreTask.java
+++ b/services/backup/java/com/android/server/backup/restore/PerformUnifiedRestoreTask.java
@@ -418,25 +418,6 @@
private void startRestore() {
sendStartRestore(mAcceptSet.size());
- // If we're starting a full-system restore, set up to begin widget ID remapping
- if (mIsSystemRestore) {
- AppWidgetBackupBridge.systemRestoreStarting(mUserId);
- Bundle monitoringExtras = addRestoreOperationTypeToEvent(/* extras= */ null);
- mBackupManagerMonitorEventSender.monitorEvent(
- BackupManagerMonitor.LOG_EVENT_ID_START_SYSTEM_RESTORE,
- null,
- BackupManagerMonitor.LOG_EVENT_CATEGORY_BACKUP_MANAGER_POLICY,
- monitoringExtras);
- } else {
- // We are either performing RestoreAtInstall or Bmgr.
- Bundle monitoringExtras = addRestoreOperationTypeToEvent(/* extras= */ null);
- mBackupManagerMonitorEventSender.monitorEvent(
- BackupManagerMonitor.LOG_EVENT_ID_START_RESTORE_AT_INSTALL,
- null,
- BackupManagerMonitor.LOG_EVENT_CATEGORY_BACKUP_MANAGER_POLICY,
- monitoringExtras);
- }
-
try {
String transportDirName =
mTransportManager.getTransportDirName(
@@ -459,6 +440,34 @@
mBackupManagerMonitorEventSender.setMonitor(transport.getBackupManagerMonitor());
}
+ if (Flags.enableIncreasedBmmLoggingForRestoreAtInstall()) {
+ for (PackageInfo info : mAcceptSet) {
+ mBackupManagerMonitorEventSender.monitorEvent(
+ BackupManagerMonitor.LOG_EVENT_ID_PACKAGE_ACCEPTED_FOR_RESTORE, info,
+ BackupManagerMonitor.LOG_EVENT_CATEGORY_BACKUP_MANAGER_POLICY,
+ addRestoreOperationTypeToEvent(/* extras= */ null));
+ }
+ }
+
+ // If we're starting a full-system restore, set up to begin widget ID remapping
+ if (mIsSystemRestore) {
+ AppWidgetBackupBridge.systemRestoreStarting(mUserId);
+ Bundle monitoringExtras = addRestoreOperationTypeToEvent(/* extras= */ null);
+ mBackupManagerMonitorEventSender.monitorEvent(
+ BackupManagerMonitor.LOG_EVENT_ID_START_SYSTEM_RESTORE,
+ null,
+ BackupManagerMonitor.LOG_EVENT_CATEGORY_BACKUP_MANAGER_POLICY,
+ monitoringExtras);
+ } else {
+ // We are either performing RestoreAtInstall or Bmgr.
+ Bundle monitoringExtras = addRestoreOperationTypeToEvent(/* extras= */ null);
+ mBackupManagerMonitorEventSender.monitorEvent(
+ BackupManagerMonitor.LOG_EVENT_ID_START_RESTORE_AT_INSTALL,
+ null,
+ BackupManagerMonitor.LOG_EVENT_CATEGORY_BACKUP_MANAGER_POLICY,
+ monitoringExtras);
+ }
+
mStatus = transport.startRestore(mToken, packages);
if (mStatus != BackupTransport.TRANSPORT_OK) {
Slog.e(TAG, "Transport error " + mStatus + "; no restore possible");
@@ -638,7 +647,7 @@
Bundle monitoringExtras = addRestoreOperationTypeToEvent(/* extras= */ null);
mBackupManagerMonitorEventSender.monitorEvent(
BackupManagerMonitor.LOG_EVENT_ID_PACKAGE_NOT_PRESENT,
- mCurrentPackage,
+ createPackageInfoForBMMLogging(pkgName),
BackupManagerMonitor.LOG_EVENT_CATEGORY_BACKUP_MANAGER_POLICY,
monitoringExtras);
EventLog.writeEvent(
@@ -739,7 +748,7 @@
Bundle monitoringExtras = addRestoreOperationTypeToEvent(/* extras= */ null);
mBackupManagerMonitorEventSender.monitorEvent(
BackupManagerMonitor.LOG_EVENT_ID_NO_NEXT_RESTORE_TARGET,
- mCurrentPackage,
+ null,
BackupManagerMonitor.LOG_EVENT_CATEGORY_BACKUP_MANAGER_POLICY,
monitoringExtras);
EventLog.writeEvent(EventLogTags.RESTORE_TRANSPORT_FAILURE);
@@ -1804,4 +1813,10 @@
monitoringExtrasDenylist);
}
+ private PackageInfo createPackageInfoForBMMLogging(String packageName) {
+ PackageInfo packageInfo = new PackageInfo();
+ packageInfo.packageName = packageName;
+
+ return packageInfo;
+ }
}
diff --git a/services/backup/java/com/android/server/backup/utils/BackupManagerMonitorDumpsysUtils.java b/services/backup/java/com/android/server/backup/utils/BackupManagerMonitorDumpsysUtils.java
index 6d315ba..fad59d2 100644
--- a/services/backup/java/com/android/server/backup/utils/BackupManagerMonitorDumpsysUtils.java
+++ b/services/backup/java/com/android/server/backup/utils/BackupManagerMonitorDumpsysUtils.java
@@ -371,6 +371,24 @@
"V to U restore pkg not eligible";
case BackupManagerMonitor.LOG_EVENT_ID_V_TO_U_RESTORE_SET_LIST ->
"V to U restore lists";
+ case BackupManagerMonitor.LOG_EVENT_ID_RESTORE_AT_INSTALL_INVOKED ->
+ "Invoked restore at install";
+ case BackupManagerMonitor.LOG_EVENT_ID_SKIP_RESTORE_AT_INSTALL ->
+ "Skip restore at install";
+ case BackupManagerMonitor.LOG_EVENT_ID_PACKAGE_ACCEPTED_FOR_RESTORE ->
+ "Pkg accepted for restore";
+ case BackupManagerMonitor.LOG_EVENT_ID_RESTORE_DATA_DOES_NOT_BELONG_TO_PACKAGE ->
+ "Restore data does not belong to package";
+ case BackupManagerMonitor.LOG_EVENT_ID_UNABLE_TO_CREATE_AGENT_FOR_RESTORE ->
+ "Unable to create Agent";
+ case BackupManagerMonitor.LOG_EVENT_ID_AGENT_CRASHED_BEFORE_RESTORE_DATA_IS_SENT ->
+ "Agent crashed before restore data is streamed";
+ case BackupManagerMonitor.LOG_EVENT_ID_FAILED_TO_SEND_DATA_TO_AGENT_DURING_RESTORE ->
+ "Failed to send data to agent";
+ case BackupManagerMonitor.LOG_EVENT_ID_AGENT_FAILURE_DURING_RESTORE ->
+ "Agent failure during restore";
+ case BackupManagerMonitor.LOG_EVENT_ID_FAILED_TO_READ_DATA_FROM_TRANSPORT ->
+ "Failed to read data from Transport";
default -> "Unknown log event ID: " + code;
};
return id;
diff --git a/services/companion/java/com/android/server/companion/virtual/GenericWindowPolicyController.java b/services/companion/java/com/android/server/companion/virtual/GenericWindowPolicyController.java
index 9e3f5ce..f38d772b 100644
--- a/services/companion/java/com/android/server/companion/virtual/GenericWindowPolicyController.java
+++ b/services/companion/java/com/android/server/companion/virtual/GenericWindowPolicyController.java
@@ -334,7 +334,7 @@
// The error dialog alerting users that streaming is blocked is always allowed.
return true;
}
- if (!mAllowedUsers.contains(activityUser)) {
+ if (!activityUser.isSystem() && !mAllowedUsers.contains(activityUser)) {
Slog.d(TAG, "Virtual device launch disallowed from user " + activityUser);
return false;
}
diff --git a/services/core/java/com/android/server/VpnManagerService.java b/services/core/java/com/android/server/VpnManagerService.java
index 1d1e2d9..626fa70 100644
--- a/services/core/java/com/android/server/VpnManagerService.java
+++ b/services/core/java/com/android/server/VpnManagerService.java
@@ -1007,6 +1007,71 @@
}
}
+ /**
+ * Get the vpn profile owned by the calling uid with the given name from the vpn database.
+ *
+ * <p>Note this method should not be used for platform VPN profiles. </p>
+ *
+ * @param name The name of the profile to retrieve.
+ * @return the unstructured blob for the matching vpn profile.
+ * Returns null if no profile with a matching name was found.
+ * @hide
+ */
+ @Override
+ @Nullable
+ public byte[] getFromVpnProfileStore(@NonNull String name) {
+ return mVpnProfileStore.get(name);
+ }
+
+ /**
+ * Put the given vpn profile owned by the calling uid with the given name into the vpn database.
+ * Existing profiles with the same name will be replaced.
+ *
+ * <p>Note this method should not be used for platform VPN profiles.
+ * To update a platform VPN, use provisionVpnProfile() instead. </p>
+ *
+ * @param name The name of the profile to put.
+ * @param blob The profile.
+ * @return true if the profile was successfully added. False otherwise.
+ * @hide
+ */
+ @Override
+ public boolean putIntoVpnProfileStore(@NonNull String name, @NonNull byte[] blob) {
+ return mVpnProfileStore.put(name, blob);
+ }
+
+ /**
+ * Removes the vpn profile owned by the calling uid with the given name from the vpn database.
+ *
+ * <p>Note this method should not be used for platform VPN profiles.
+ * To remove a platform VPN, use deleteVpnProfile() instead.</p>
+ *
+ * @param name The name of the profile to be removed.
+ * @return true if a profile was removed. False if no profile with a matching name was found.
+ * @hide
+ */
+ @Override
+ public boolean removeFromVpnProfileStore(@NonNull String name) {
+ return mVpnProfileStore.remove(name);
+ }
+
+ /**
+ * Returns a list of the name suffixes of the vpn profiles owned by the calling uid in the vpn
+ * database matching the given prefix, sorted in ascending order.
+ *
+ * <p>Note this method should not be used for platform VPN profiles. </p>
+ *
+ * @param prefix The prefix to match.
+ * @return an array of strings representing the name suffixes stored in the profile database
+ * matching the given prefix. The return value may be empty but never null.
+ * @hide
+ */
+ @Override
+ @NonNull
+ public String[] listFromVpnProfileStore(@NonNull String prefix) {
+ return mVpnProfileStore.list(prefix);
+ }
+
private void ensureRunningOnHandlerThread() {
if (mHandler.getLooper().getThread() != Thread.currentThread()) {
throw new IllegalStateException(
diff --git a/services/core/java/com/android/server/accounts/AccountManagerService.java b/services/core/java/com/android/server/accounts/AccountManagerService.java
index 1334a95..586b095 100644
--- a/services/core/java/com/android/server/accounts/AccountManagerService.java
+++ b/services/core/java/com/android/server/accounts/AccountManagerService.java
@@ -3666,6 +3666,11 @@
// Strip auth token from result.
result.remove(AccountManager.KEY_AUTHTOKEN);
+ if (!checkKeyIntent(Binder.getCallingUid(), result)) {
+ onError(AccountManager.ERROR_CODE_INVALID_RESPONSE,
+ "invalid intent in bundle returned");
+ return;
+ }
if (Log.isLoggable(TAG, Log.VERBOSE)) {
Log.v(TAG,
@@ -5276,6 +5281,11 @@
} else {
if (mStripAuthTokenFromResult) {
result.remove(AccountManager.KEY_AUTHTOKEN);
+ if (!checkKeyIntent(Binder.getCallingUid(), result)) {
+ onError(AccountManager.ERROR_CODE_INVALID_RESPONSE,
+ "invalid intent in bundle returned");
+ return;
+ }
}
if (Log.isLoggable(TAG, Log.VERBOSE)) {
Log.v(TAG, getClass().getSimpleName()
diff --git a/services/core/java/com/android/server/am/AccessCheckDelegateHelper.java b/services/core/java/com/android/server/am/AccessCheckDelegateHelper.java
new file mode 100644
index 0000000..62c6329
--- /dev/null
+++ b/services/core/java/com/android/server/am/AccessCheckDelegateHelper.java
@@ -0,0 +1,272 @@
+/*
+ * 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.server.am;
+
+import android.annotation.Nullable;
+import android.os.Process;
+import android.os.UserHandle;
+
+import com.android.internal.annotations.GuardedBy;
+import com.android.server.appop.AppOpsService;
+import com.android.server.pm.permission.AccessCheckDelegate;
+import com.android.server.pm.permission.PermissionManagerServiceInternal;
+
+import java.util.Collections;
+import java.util.List;
+
+class AccessCheckDelegateHelper {
+ private final ActivityManagerGlobalLock mProcLock;
+
+ @GuardedBy("mProcLock")
+ private final List<ActiveInstrumentation> mActiveInstrumentation;
+
+ private final AppOpsService mAppOpsService;
+
+ private final PermissionManagerServiceInternal mPermissionManagerInternal;
+
+ @GuardedBy("mProcLock")
+ private AccessCheckDelegate mAccessCheckDelegate;
+
+ AccessCheckDelegateHelper(ActivityManagerGlobalLock procLock,
+ List<ActiveInstrumentation> activeInstrumentation, AppOpsService appOpsService,
+ PermissionManagerServiceInternal permissionManagerInternal) {
+ mProcLock = procLock;
+ mActiveInstrumentation = activeInstrumentation;
+ mAppOpsService = appOpsService;
+ mPermissionManagerInternal = permissionManagerInternal;
+ }
+
+ @GuardedBy("mProcLock")
+ private AccessCheckDelegate getAccessCheckDelegateLPr(boolean create) {
+ if (create && mAccessCheckDelegate == null) {
+ mAccessCheckDelegate = new AccessCheckDelegate.AccessCheckDelegateImpl();
+ mAppOpsService.setCheckOpsDelegate(mAccessCheckDelegate);
+ mPermissionManagerInternal.setCheckPermissionDelegate(mAccessCheckDelegate);
+ }
+
+ return mAccessCheckDelegate;
+ }
+
+ @GuardedBy("mProcLock")
+ private void removeAccessCheckDelegateLPr() {
+ mAccessCheckDelegate = null;
+ mAppOpsService.setCheckOpsDelegate(null);
+ mPermissionManagerInternal.setCheckPermissionDelegate(null);
+ }
+
+ void startDelegateShellPermissionIdentity(int delegateUid,
+ @Nullable String[] permissions) {
+ if (UserHandle.getCallingAppId() != Process.SHELL_UID
+ && UserHandle.getCallingAppId() != Process.ROOT_UID) {
+ throw new SecurityException("Only the shell can delegate its permissions");
+ }
+
+ synchronized (mProcLock) {
+ AccessCheckDelegate delegate = getAccessCheckDelegateLPr(false);
+ if (delegate != null && !delegate.isDelegateAndOwnerUid(delegateUid)) {
+ throw new SecurityException("Shell can delegate permissions only "
+ + "to one instrumentation at a time");
+ }
+ final int instrCount = mActiveInstrumentation.size();
+ for (int i = 0; i < instrCount; i++) {
+ final ActiveInstrumentation instr =
+ mActiveInstrumentation.get(i);
+ if (instr.mTargetInfo.uid != delegateUid) {
+ continue;
+ }
+
+ // If instrumentation started from the shell the connection is not null
+ if (instr.mUiAutomationConnection == null) {
+ throw new SecurityException("Shell can delegate its permissions"
+ + " only to an instrumentation started from the shell");
+ }
+
+ final String packageName = instr.mTargetInfo.packageName;
+ delegate = getAccessCheckDelegateLPr(true);
+ delegate.setShellPermissionDelegate(delegateUid, packageName, permissions);
+ return;
+ }
+ }
+ }
+
+ void stopDelegateShellPermissionIdentity() {
+ if (UserHandle.getCallingAppId() != Process.SHELL_UID
+ && UserHandle.getCallingAppId() != Process.ROOT_UID) {
+ throw new SecurityException("Only the shell can delegate its permissions");
+ }
+ synchronized (mProcLock) {
+ AccessCheckDelegate delegate = getAccessCheckDelegateLPr(false);
+ if (delegate == null) {
+ return;
+ }
+
+ if (!delegate.hasShellPermissionDelegate()) {
+ return;
+ }
+
+ delegate.removeShellPermissionDelegate();
+
+ if (!delegate.hasDelegateOrOverrides()) {
+ removeAccessCheckDelegateLPr();
+ }
+ }
+ }
+
+ List<String> getDelegatedShellPermissions() {
+ if (UserHandle.getCallingAppId() != Process.SHELL_UID
+ && UserHandle.getCallingAppId() != Process.ROOT_UID) {
+ throw new SecurityException("Only the shell can get delegated permissions");
+ }
+ synchronized (mProcLock) {
+ AccessCheckDelegate delegate = getAccessCheckDelegateLPr(false);
+ if (delegate == null) {
+ return Collections.EMPTY_LIST;
+ }
+
+ return delegate.getDelegatedPermissionNames();
+ }
+ }
+
+ void addOverridePermissionState(int originatingUid, int uid, String permission, int result) {
+ if (UserHandle.getCallingAppId() != Process.ROOT_UID) {
+ throw new SecurityException("Only root can override permissions");
+ }
+
+ synchronized (mProcLock) {
+ final int instrCount = mActiveInstrumentation.size();
+ for (int i = 0; i < instrCount; i++) {
+ final ActiveInstrumentation instr =
+ mActiveInstrumentation.get(i);
+ if (instr.mTargetInfo.uid != originatingUid) {
+ continue;
+ }
+ // If instrumentation started from the shell the connection is not null
+ if (instr.mSourceUid != Process.ROOT_UID || instr.mUiAutomationConnection == null) {
+ throw new SecurityException("Root can only override permissions only if the "
+ + "owning app was instrumented from root.");
+ }
+
+ AccessCheckDelegate delegate =
+ getAccessCheckDelegateLPr(true);
+ if (delegate.hasOverriddenPermissions()
+ && !delegate.isDelegateAndOwnerUid(originatingUid)) {
+ throw new SecurityException("Only one instrumentation to grant"
+ + " overrides is allowed at a time.");
+ }
+
+ delegate.addOverridePermissionState(originatingUid, uid, permission, result);
+ return;
+ }
+ }
+ }
+
+ void removeOverridePermissionState(int originatingUid, int uid, String permission) {
+ if (UserHandle.getCallingAppId() != Process.ROOT_UID) {
+ throw new SecurityException("Only root can override permissions.");
+ }
+
+ synchronized (mProcLock) {
+ AccessCheckDelegate delegate = getAccessCheckDelegateLPr(false);
+ if (delegate == null) {
+ return;
+ }
+
+ if (!delegate.isDelegateAndOwnerUid(originatingUid)) {
+ if (delegate.hasOverriddenPermissions()) {
+ throw new SecurityException("Only the granter of current overrides can remove "
+ + "them.");
+ }
+ return;
+ }
+
+ delegate.removeOverridePermissionState(uid, permission);
+
+ if (!delegate.hasDelegateOrOverrides()) {
+ removeAccessCheckDelegateLPr();
+ }
+ }
+ }
+
+ void clearOverridePermissionStates(int originatingUid, int uid) {
+ if (UserHandle.getCallingAppId() != Process.ROOT_UID) {
+ throw new SecurityException("Only root can override permissions.");
+ }
+ synchronized (mProcLock) {
+ AccessCheckDelegate delegate = getAccessCheckDelegateLPr(false);
+ if (delegate == null) {
+ return;
+ }
+
+ if (!delegate.isDelegateAndOwnerUid(originatingUid)) {
+ if (delegate.hasOverriddenPermissions()) {
+ throw new SecurityException(
+ "Only the granter of current overrides can remove them.");
+ }
+ return;
+ }
+
+ delegate.clearOverridePermissionStates(uid);
+
+ if (!delegate.hasDelegateOrOverrides()) {
+ removeAccessCheckDelegateLPr();
+ }
+ }
+ }
+
+ void clearAllOverridePermissionStates(int originatingUid) {
+ if (UserHandle.getCallingAppId() != Process.ROOT_UID) {
+ throw new SecurityException("Only root can override permissions.");
+ }
+ synchronized (mProcLock) {
+ AccessCheckDelegate delegate = getAccessCheckDelegateLPr(false);
+ if (delegate == null) {
+ return;
+ }
+
+ if (!delegate.isDelegateAndOwnerUid(originatingUid)) {
+ if (delegate.hasOverriddenPermissions()) {
+ throw new SecurityException(
+ "Only the granter of current overrides can remove them.");
+ }
+ return;
+ }
+
+ delegate.clearAllOverridePermissionStates();
+
+ if (!delegate.hasDelegateOrOverrides()) {
+ removeAccessCheckDelegateLPr();
+ }
+ }
+ }
+
+ void onInstrumentationFinished(int uid, String packageName) {
+ synchronized (mProcLock) {
+ AccessCheckDelegate delegate = getAccessCheckDelegateLPr(false);
+ if (delegate != null) {
+ if (delegate.isDelegatePackage(uid, packageName)) {
+ delegate.removeShellPermissionDelegate();
+ }
+ if (delegate.isDelegateAndOwnerUid(uid)) {
+ delegate.clearAllOverridePermissionStates();
+ }
+ if (!delegate.hasDelegateOrOverrides()) {
+ removeAccessCheckDelegateLPr();
+ }
+ }
+ }
+ }
+}
diff --git a/services/core/java/com/android/server/am/ActivityManagerService.java b/services/core/java/com/android/server/am/ActivityManagerService.java
index 0bc2a91..a66c23f 100644
--- a/services/core/java/com/android/server/am/ActivityManagerService.java
+++ b/services/core/java/com/android/server/am/ActivityManagerService.java
@@ -51,7 +51,6 @@
import static android.app.ActivityManagerInternal.OOM_ADJ_REASON_SHELL;
import static android.app.ActivityManagerInternal.OOM_ADJ_REASON_SYSTEM_INIT;
import static android.app.ActivityManagerInternal.OOM_ADJ_REASON_UI_VISIBILITY;
-import static android.app.AppOpsManager.MODE_ALLOWED;
import static android.app.AppOpsManager.OP_NONE;
import static android.app.ProcessMemoryState.HOSTING_COMPONENT_TYPE_BACKUP;
import static android.app.ProcessMemoryState.HOSTING_COMPONENT_TYPE_INSTRUMENTATION;
@@ -251,7 +250,6 @@
import android.app.ProcessMemoryState;
import android.app.ProfilerInfo;
import android.app.ServiceStartNotAllowedException;
-import android.app.SyncNotedAppOp;
import android.app.WaitResult;
import android.app.assist.ActivityId;
import android.app.backup.BackupAnnotations.BackupDestination;
@@ -427,17 +425,11 @@
import com.android.internal.pm.pkg.parsing.ParsingPackageUtils;
import com.android.internal.policy.AttributeCache;
import com.android.internal.protolog.common.ProtoLog;
-import com.android.internal.util.ArrayUtils;
import com.android.internal.util.DumpUtils;
import com.android.internal.util.FastPrintWriter;
import com.android.internal.util.FrameworkStatsLog;
import com.android.internal.util.MemInfoReader;
import com.android.internal.util.Preconditions;
-import com.android.internal.util.function.DodecFunction;
-import com.android.internal.util.function.HexFunction;
-import com.android.internal.util.function.OctFunction;
-import com.android.internal.util.function.QuadFunction;
-import com.android.internal.util.function.UndecFunction;
import com.android.server.AlarmManagerInternal;
import com.android.server.BootReceiver;
import com.android.server.DeviceIdleInternal;
@@ -770,6 +762,8 @@
@GuardedBy("mDeliveryGroupPolicyIgnoredActions")
private final ArraySet<String> mDeliveryGroupPolicyIgnoredActions = new ArraySet();
+ private AccessCheckDelegateHelper mAccessCheckDelegateHelper;
+
/**
* Uids of apps with current active camera sessions. Access synchronized on
* the IntArray instance itself, and no other locks must be acquired while that
@@ -6937,6 +6931,16 @@
return mPermissionManagerInt;
}
+ private AccessCheckDelegateHelper getAccessCheckDelegateHelper() {
+ // Intentionally hold no locks: in case of race conditions, the mPermissionManagerInt will
+ // be set to the same value anyway.
+ if (mAccessCheckDelegateHelper == null) {
+ mAccessCheckDelegateHelper = new AccessCheckDelegateHelper(mProcLock,
+ mActiveInstrumentation, mAppOpsService, getPermissionManagerInternal());
+ }
+ return mAccessCheckDelegateHelper;
+ }
+
/** Returns whether the given package was ever launched since install */
boolean wasPackageEverLaunched(String packageName, @UserIdInt int userId) {
boolean wasLaunched = false;
@@ -16598,8 +16602,8 @@
// Go back to the default mode of denying OP_NO_ISOLATED_STORAGE app op.
mAppOpsService.setMode(AppOpsManager.OP_NO_ISOLATED_STORAGE, app.uid,
app.info.packageName, AppOpsManager.MODE_ERRORED);
- mAppOpsService.setAppOpsServiceDelegate(null);
- getPermissionManagerInternal().stopShellPermissionIdentityDelegation();
+ getAccessCheckDelegateHelper()
+ .onInstrumentationFinished(app.uid, app.info.packageName);
mHandler.obtainMessage(SHUTDOWN_UI_AUTOMATION_CONNECTION_MSG,
instr.mUiAutomationConnection).sendToTarget();
}
@@ -18122,7 +18126,8 @@
public ComponentName startSdkSandboxService(Intent service, int clientAppUid,
String clientAppPackage, String processName) throws RemoteException {
validateSdkSandboxParams(service, clientAppUid, clientAppPackage, processName);
- if (mAppOpsService.checkPackage(clientAppUid, clientAppPackage) != MODE_ALLOWED) {
+ if (mAppOpsService.checkPackage(clientAppUid, clientAppPackage)
+ != AppOpsManager.MODE_ALLOWED) {
throw new IllegalArgumentException("uid does not belong to provided package");
}
// TODO(b/269598719): Is passing the application thread of the system_server alright?
@@ -18191,7 +18196,8 @@
String processName, long flags)
throws RemoteException {
validateSdkSandboxParams(service, clientAppUid, clientAppPackage, processName);
- if (mAppOpsService.checkPackage(clientAppUid, clientAppPackage) != MODE_ALLOWED) {
+ if (mAppOpsService.checkPackage(clientAppUid, clientAppPackage)
+ != AppOpsManager.MODE_ALLOWED) {
throw new IllegalArgumentException("uid does not belong to provided package");
}
if (conn == null) {
@@ -20499,268 +20505,41 @@
@Override
public void startDelegateShellPermissionIdentity(int delegateUid,
@Nullable String[] permissions) {
- if (UserHandle.getCallingAppId() != Process.SHELL_UID
- && UserHandle.getCallingAppId() != Process.ROOT_UID) {
- throw new SecurityException("Only the shell can delegate its permissions");
- }
-
- // We allow delegation only to one instrumentation started from the shell
- synchronized (mProcLock) {
- // If the delegate is already set up for the target UID, nothing to do.
- if (mAppOpsService.getAppOpsServiceDelegate() != null) {
- if (!(mAppOpsService.getAppOpsServiceDelegate() instanceof ShellDelegate)) {
- throw new IllegalStateException("Bad shell delegate state");
- }
- final ShellDelegate delegate = (ShellDelegate) mAppOpsService
- .getAppOpsServiceDelegate();
- if (delegate.getDelegateUid() != delegateUid) {
- throw new SecurityException("Shell can delegate permissions only "
- + "to one instrumentation at a time");
- }
- }
-
- final int instrCount = mActiveInstrumentation.size();
- for (int i = 0; i < instrCount; i++) {
- final ActiveInstrumentation instr = mActiveInstrumentation.get(i);
- if (instr.mTargetInfo.uid != delegateUid) {
- continue;
- }
- // If instrumentation started from the shell the connection is not null
- if (instr.mUiAutomationConnection == null) {
- throw new SecurityException("Shell can delegate its permissions" +
- " only to an instrumentation started from the shell");
- }
-
- // Hook them up...
- final ShellDelegate shellDelegate = new ShellDelegate(delegateUid,
- permissions);
- mAppOpsService.setAppOpsServiceDelegate(shellDelegate);
- final String packageName = instr.mTargetInfo.packageName;
- final List<String> permissionNames = permissions != null ?
- Arrays.asList(permissions) : null;
- getPermissionManagerInternal().startShellPermissionIdentityDelegation(
- delegateUid, packageName, permissionNames);
- return;
- }
- }
+ getAccessCheckDelegateHelper()
+ .startDelegateShellPermissionIdentity(delegateUid, permissions);
}
@Override
public void stopDelegateShellPermissionIdentity() {
- if (UserHandle.getCallingAppId() != Process.SHELL_UID
- && UserHandle.getCallingAppId() != Process.ROOT_UID) {
- throw new SecurityException("Only the shell can delegate its permissions");
- }
- synchronized (mProcLock) {
- mAppOpsService.setAppOpsServiceDelegate(null);
- getPermissionManagerInternal().stopShellPermissionIdentityDelegation();
- }
+ getAccessCheckDelegateHelper().stopDelegateShellPermissionIdentity();
}
@Override
public List<String> getDelegatedShellPermissions() {
- if (UserHandle.getCallingAppId() != Process.SHELL_UID
- && UserHandle.getCallingAppId() != Process.ROOT_UID) {
- throw new SecurityException("Only the shell can get delegated permissions");
- }
- synchronized (mProcLock) {
- return getPermissionManagerInternal().getDelegatedShellPermissions();
- }
+ return getAccessCheckDelegateHelper().getDelegatedShellPermissions();
}
- private class ShellDelegate implements CheckOpsDelegate {
- private final int mTargetUid;
- @Nullable
- private final String[] mPermissions;
+ @Override
+ public void addOverridePermissionState(int originatingUid, int uid, String permission,
+ int result) {
+ getAccessCheckDelegateHelper()
+ .addOverridePermissionState(originatingUid, uid, permission, result);
+ }
- ShellDelegate(int targetUid, @Nullable String[] permissions) {
- mTargetUid = targetUid;
- mPermissions = permissions;
- }
+ @Override
+ public void removeOverridePermissionState(int originatingUid, int uid, String permission) {
+ getAccessCheckDelegateHelper()
+ .removeOverridePermissionState(originatingUid, uid, permission);
+ }
- int getDelegateUid() {
- return mTargetUid;
- }
+ @Override
+ public void clearOverridePermissionStates(int originatingUid, int uid) {
+ getAccessCheckDelegateHelper().clearOverridePermissionStates(originatingUid, uid);
+ }
- @Override
- public int checkOperation(int code, int uid, String packageName, String attributionTag,
- int virtualDeviceId, boolean raw, HexFunction<Integer, Integer, String, String,
- Integer, Boolean, Integer> superImpl) {
- if (uid == mTargetUid && isTargetOp(code)) {
- final int shellUid = UserHandle.getUid(UserHandle.getUserId(uid),
- Process.SHELL_UID);
- final long identity = Binder.clearCallingIdentity();
- try {
- return superImpl.apply(code, shellUid, "com.android.shell", null,
- virtualDeviceId, raw);
- } finally {
- Binder.restoreCallingIdentity(identity);
- }
- }
- return superImpl.apply(code, uid, packageName, attributionTag, virtualDeviceId, raw);
- }
-
- @Override
- public int checkAudioOperation(int code, int usage, int uid, String packageName,
- QuadFunction<Integer, Integer, Integer, String, Integer> superImpl) {
- if (uid == mTargetUid && isTargetOp(code)) {
- final int shellUid = UserHandle.getUid(UserHandle.getUserId(uid),
- Process.SHELL_UID);
- final long identity = Binder.clearCallingIdentity();
- try {
- return superImpl.apply(code, usage, shellUid, "com.android.shell");
- } finally {
- Binder.restoreCallingIdentity(identity);
- }
- }
- return superImpl.apply(code, usage, uid, packageName);
- }
-
- @Override
- public SyncNotedAppOp noteOperation(int code, int uid, @Nullable String packageName,
- @Nullable String featureId, int virtualDeviceId, boolean shouldCollectAsyncNotedOp,
- @Nullable String message, boolean shouldCollectMessage,
- @NonNull OctFunction<Integer, Integer, String, String, Integer, Boolean, String,
- Boolean, SyncNotedAppOp> superImpl) {
- if (uid == mTargetUid && isTargetOp(code)) {
- final int shellUid = UserHandle.getUid(UserHandle.getUserId(uid),
- Process.SHELL_UID);
- final long identity = Binder.clearCallingIdentity();
- try {
- return superImpl.apply(code, shellUid, "com.android.shell", featureId,
- virtualDeviceId, shouldCollectAsyncNotedOp, message,
- shouldCollectMessage);
- } finally {
- Binder.restoreCallingIdentity(identity);
- }
- }
- return superImpl.apply(code, uid, packageName, featureId, virtualDeviceId,
- shouldCollectAsyncNotedOp, message, shouldCollectMessage);
- }
-
- @Override
- public SyncNotedAppOp noteProxyOperation(int code,
- @NonNull AttributionSource attributionSource, boolean shouldCollectAsyncNotedOp,
- @Nullable String message, boolean shouldCollectMessage, boolean skiProxyOperation,
- @NonNull HexFunction<Integer, AttributionSource, Boolean, String, Boolean,
- Boolean, SyncNotedAppOp> superImpl) {
- if (attributionSource.getUid() == mTargetUid && isTargetOp(code)) {
- final int shellUid = UserHandle.getUid(UserHandle.getUserId(
- attributionSource.getUid()), Process.SHELL_UID);
- final long identity = Binder.clearCallingIdentity();
- try {
- return superImpl.apply(code, new AttributionSource(shellUid,
- Process.INVALID_PID, "com.android.shell",
- attributionSource.getAttributionTag(), attributionSource.getToken(),
- /*renouncedPermissions*/ null, attributionSource.getDeviceId(),
- attributionSource.getNext()),
- shouldCollectAsyncNotedOp, message, shouldCollectMessage,
- skiProxyOperation);
- } finally {
- Binder.restoreCallingIdentity(identity);
- }
- }
- return superImpl.apply(code, attributionSource, shouldCollectAsyncNotedOp,
- message, shouldCollectMessage, skiProxyOperation);
- }
-
- @Override
- public SyncNotedAppOp startOperation(IBinder token, int code, int uid,
- @Nullable String packageName, @Nullable String attributionTag, int virtualDeviceId,
- boolean startIfModeDefault, boolean shouldCollectAsyncNotedOp,
- @Nullable String message, boolean shouldCollectMessage,
- @AttributionFlags int attributionFlags, int attributionChainId,
- @NonNull DodecFunction<IBinder, Integer, Integer, String, String, Integer, Boolean,
- Boolean, String, Boolean, Integer, Integer, SyncNotedAppOp> superImpl) {
- if (uid == mTargetUid && isTargetOp(code)) {
- final int shellUid = UserHandle.getUid(UserHandle.getUserId(uid),
- Process.SHELL_UID);
- final long identity = Binder.clearCallingIdentity();
- try {
- return superImpl.apply(token, code, shellUid, "com.android.shell",
- attributionTag, virtualDeviceId, startIfModeDefault,
- shouldCollectAsyncNotedOp, message, shouldCollectMessage,
- attributionFlags, attributionChainId);
- } finally {
- Binder.restoreCallingIdentity(identity);
- }
- }
- return superImpl.apply(token, code, uid, packageName, attributionTag, virtualDeviceId,
- startIfModeDefault, shouldCollectAsyncNotedOp, message, shouldCollectMessage,
- attributionFlags, attributionChainId);
- }
-
- @Override
- public SyncNotedAppOp startProxyOperation(@NonNull IBinder clientId, int code,
- @NonNull AttributionSource attributionSource, boolean startIfModeDefault,
- boolean shouldCollectAsyncNotedOp, String message, boolean shouldCollectMessage,
- boolean skipProxyOperation, @AttributionFlags int proxyAttributionFlags,
- @AttributionFlags int proxiedAttributionFlags, int attributionChainId,
- @NonNull UndecFunction<IBinder, Integer, AttributionSource,
- Boolean, Boolean, String, Boolean, Boolean, Integer, Integer, Integer,
- SyncNotedAppOp> superImpl) {
- if (attributionSource.getUid() == mTargetUid && isTargetOp(code)) {
- final int shellUid = UserHandle.getUid(UserHandle.getUserId(
- attributionSource.getUid()), Process.SHELL_UID);
- final long identity = Binder.clearCallingIdentity();
- try {
- return superImpl.apply(clientId, code, new AttributionSource(shellUid,
- Process.INVALID_PID, "com.android.shell",
- attributionSource.getAttributionTag(), attributionSource.getToken(),
- /*renouncedPermissions*/ null, attributionSource.getDeviceId(),
- attributionSource.getNext()),
- startIfModeDefault, shouldCollectAsyncNotedOp, message,
- shouldCollectMessage, skipProxyOperation, proxyAttributionFlags,
- proxiedAttributionFlags, attributionChainId);
- } finally {
- Binder.restoreCallingIdentity(identity);
- }
- }
- return superImpl.apply(clientId, code, attributionSource, startIfModeDefault,
- shouldCollectAsyncNotedOp, message, shouldCollectMessage, skipProxyOperation,
- proxyAttributionFlags, proxiedAttributionFlags, attributionChainId);
- }
-
- @Override
- public void finishProxyOperation(@NonNull IBinder clientId, int code,
- @NonNull AttributionSource attributionSource, boolean skipProxyOperation,
- @NonNull QuadFunction<IBinder, Integer, AttributionSource, Boolean,
- Void> superImpl) {
- if (attributionSource.getUid() == mTargetUid && isTargetOp(code)) {
- final int shellUid = UserHandle.getUid(UserHandle.getUserId(
- attributionSource.getUid()), Process.SHELL_UID);
- final long identity = Binder.clearCallingIdentity();
- try {
- superImpl.apply(clientId, code, new AttributionSource(shellUid,
- Process.INVALID_PID, "com.android.shell",
- attributionSource.getAttributionTag(), attributionSource.getToken(),
- /*renouncedPermissions*/ null, attributionSource.getDeviceId(),
- attributionSource.getNext()),
- skipProxyOperation);
- } finally {
- Binder.restoreCallingIdentity(identity);
- }
- }
- superImpl.apply(clientId, code, attributionSource, skipProxyOperation);
- }
-
- private boolean isTargetOp(int code) {
- // null permissions means all ops are targeted
- if (mPermissions == null) {
- return true;
- }
- // no permission for the op means the op is targeted
- final String permission = AppOpsManager.opToPermission(code);
- if (permission == null) {
- return true;
- }
- return isTargetPermission(permission);
- }
-
- private boolean isTargetPermission(@NonNull String permission) {
- // null permissions means all permissions are targeted
- return (mPermissions == null || ArrayUtils.contains(mPermissions, permission));
- }
+ @Override
+ public void clearAllOverridePermissionStates(int originatingUid) {
+ getAccessCheckDelegateHelper().clearAllOverridePermissionStates(originatingUid);
}
/**
diff --git a/services/core/java/com/android/server/am/OWNERS b/services/core/java/com/android/server/am/OWNERS
index bf7cc10..a656287 100644
--- a/services/core/java/com/android/server/am/OWNERS
+++ b/services/core/java/com/android/server/am/OWNERS
@@ -18,6 +18,7 @@
# Permissions & Packages
patb@google.com
+per-file AccessCheckDelegateHelper.java = file:/core/java/android/permission/OWNERS
# Battery Stats
joeo@google.com
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/appop/AppOpsService.java b/services/core/java/com/android/server/appop/AppOpsService.java
index fb62785..debd9d0 100644
--- a/services/core/java/com/android/server/appop/AppOpsService.java
+++ b/services/core/java/com/android/server/appop/AppOpsService.java
@@ -2671,14 +2671,10 @@
}
}
- public CheckOpsDelegate getAppOpsServiceDelegate() {
- synchronized (AppOpsService.this) {
- final CheckOpsDelegateDispatcher dispatcher = mCheckOpsDelegateDispatcher;
- return (dispatcher != null) ? dispatcher.getCheckOpsDelegate() : null;
- }
- }
-
- public void setAppOpsServiceDelegate(CheckOpsDelegate delegate) {
+ /**
+ * Sets the CheckOpDelegate
+ */
+ public void setCheckOpsDelegate(CheckOpsDelegate delegate) {
synchronized (AppOpsService.this) {
final CheckOpsDelegateDispatcher oldDispatcher = mCheckOpsDelegateDispatcher;
final CheckOpsDelegate policy = (oldDispatcher != null) ? oldDispatcher.mPolicy : null;
@@ -7157,10 +7153,6 @@
mCheckOpsDelegate = checkOpsDelegate;
}
- public @NonNull CheckOpsDelegate getCheckOpsDelegate() {
- return mCheckOpsDelegate;
- }
-
public int checkOperation(int code, int uid, String packageName,
@Nullable String attributionTag, int virtualDeviceId, boolean raw) {
if (mPolicy != null) {
diff --git a/services/core/java/com/android/server/content/SyncStorageEngine.java b/services/core/java/com/android/server/content/SyncStorageEngine.java
index 333f62a..3ad6a4a 100644
--- a/services/core/java/com/android/server/content/SyncStorageEngine.java
+++ b/services/core/java/com/android/server/content/SyncStorageEngine.java
@@ -347,6 +347,11 @@
return target + ", enabled=" + enabled + ", syncable=" + syncable + ", backoff="
+ backoffTime + ", delay=" + delayUntil;
}
+
+ public String toSafeString() {
+ return target.toSafeString() + ", enabled=" + enabled + ", syncable=" + syncable
+ + ", backoff=" + backoffTime + ", delay=" + delayUntil;
+ }
}
public static class SyncHistoryItem {
@@ -553,7 +558,7 @@
final int size = mAuthorities.size();
mLogger.log("Loaded ", size, " items");
for (int i = 0; i < size; i++) {
- mLogger.log(mAuthorities.valueAt(i));
+ mLogger.log(mAuthorities.valueAt(i).toSafeString());
}
}
}
@@ -734,7 +739,7 @@
Slog.d(TAG, "setSyncAutomatically: " + /* account + */" provider " + providerName
+ ", user " + userId + " -> " + sync);
}
- mLogger.log("Set sync auto account=", account,
+ mLogger.log("Set sync auto account=", account.toSafeString(),
" user=", userId,
" authority=", providerName,
" value=", Boolean.toString(sync),
@@ -812,7 +817,8 @@
private void setSyncableStateForEndPoint(EndPoint target, int syncable,
int callingUid, int callingPid) {
AuthorityInfo aInfo;
- mLogger.log("Set syncable ", target, " value=", Integer.toString(syncable),
+ mLogger.log("Set syncable ", target.toSafeString(),
+ " value=", Integer.toString(syncable),
" cuid=", callingUid,
" cpid=", callingPid);
synchronized (mAuthorities) {
diff --git a/services/core/java/com/android/server/display/DisplayManagerService.java b/services/core/java/com/android/server/display/DisplayManagerService.java
index 434985e..40f0362 100644
--- a/services/core/java/com/android/server/display/DisplayManagerService.java
+++ b/services/core/java/com/android/server/display/DisplayManagerService.java
@@ -150,6 +150,7 @@
import com.android.internal.annotations.GuardedBy;
import com.android.internal.annotations.VisibleForTesting;
import com.android.internal.display.BrightnessSynchronizer;
+import com.android.internal.foldables.FoldGracePeriodProvider;
import com.android.internal.foldables.FoldLockSettingAvailabilityProvider;
import com.android.internal.os.BackgroundThread;
import com.android.internal.util.ArrayUtils;
@@ -596,7 +597,7 @@
mUiHandler = UiThread.getHandler();
mDisplayDeviceRepo = new DisplayDeviceRepository(mSyncRoot, mPersistentDataStore);
mLogicalDisplayMapper = new LogicalDisplayMapper(mContext,
- foldSettingProvider,
+ foldSettingProvider, new FoldGracePeriodProvider(),
mDisplayDeviceRepo, new LogicalDisplayListener(), mSyncRoot, mHandler, mFlags);
mDisplayModeDirector = new DisplayModeDirector(context, mHandler, mFlags);
mBrightnessSynchronizer = new BrightnessSynchronizer(mContext,
diff --git a/services/core/java/com/android/server/display/LogicalDisplayMapper.java b/services/core/java/com/android/server/display/LogicalDisplayMapper.java
index f727eac..6203a32 100644
--- a/services/core/java/com/android/server/display/LogicalDisplayMapper.java
+++ b/services/core/java/com/android/server/display/LogicalDisplayMapper.java
@@ -40,6 +40,7 @@
import android.view.DisplayInfo;
import com.android.internal.annotations.VisibleForTesting;
+import com.android.internal.foldables.FoldGracePeriodProvider;
import com.android.server.display.feature.DisplayManagerFlags;
import com.android.server.display.layout.DisplayIdProducer;
import com.android.server.display.layout.Layout;
@@ -120,7 +121,7 @@
/**
* Sleep the device when transitioning into these device state.
*/
- private final SparseBooleanArray mDeviceStatesOnWhichToSleep;
+ private final SparseBooleanArray mDeviceStatesOnWhichToSelectiveSleep;
/**
* Map of all logical displays indexed by logical display id.
@@ -153,6 +154,7 @@
private final DisplayManagerService.SyncRoot mSyncRoot;
private final LogicalDisplayMapperHandler mHandler;
private final FoldSettingProvider mFoldSettingProvider;
+ private final FoldGracePeriodProvider mFoldGracePeriodProvider;
private final PowerManager mPowerManager;
/**
@@ -201,15 +203,18 @@
private final DisplayManagerFlags mFlags;
LogicalDisplayMapper(@NonNull Context context, FoldSettingProvider foldSettingProvider,
+ FoldGracePeriodProvider foldGracePeriodProvider,
@NonNull DisplayDeviceRepository repo,
@NonNull Listener listener, @NonNull DisplayManagerService.SyncRoot syncRoot,
@NonNull Handler handler, DisplayManagerFlags flags) {
- this(context, foldSettingProvider, repo, listener, syncRoot, handler,
+ this(context, foldSettingProvider, foldGracePeriodProvider, repo, listener, syncRoot,
+ handler,
new DeviceStateToLayoutMap((isDefault) -> isDefault ? DEFAULT_DISPLAY
: sNextNonDefaultDisplayId++, flags), flags);
}
LogicalDisplayMapper(@NonNull Context context, FoldSettingProvider foldSettingProvider,
+ FoldGracePeriodProvider foldGracePeriodProvider,
@NonNull DisplayDeviceRepository repo,
@NonNull Listener listener, @NonNull DisplayManagerService.SyncRoot syncRoot,
@NonNull Handler handler, @NonNull DeviceStateToLayoutMap deviceStateToLayoutMap,
@@ -221,13 +226,15 @@
mDisplayDeviceRepo = repo;
mListener = listener;
mFoldSettingProvider = foldSettingProvider;
+ mFoldGracePeriodProvider = foldGracePeriodProvider;
mSingleDisplayDemoMode = SystemProperties.getBoolean("persist.demo.singledisplay", false);
mSupportsConcurrentInternalDisplays = context.getResources().getBoolean(
com.android.internal.R.bool.config_supportsConcurrentInternalDisplays);
mDeviceStatesOnWhichToWakeUp = toSparseBooleanArray(context.getResources().getIntArray(
com.android.internal.R.array.config_deviceStatesOnWhichToWakeUp));
- mDeviceStatesOnWhichToSleep = toSparseBooleanArray(context.getResources().getIntArray(
- com.android.internal.R.array.config_deviceStatesOnWhichToSleep));
+ mDeviceStatesOnWhichToSelectiveSleep = toSparseBooleanArray(
+ context.getResources().getIntArray(
+ com.android.internal.R.array.config_deviceStatesOnWhichToSleep));
mDisplayDeviceRepo.addListener(this);
mDeviceStateToLayoutMap = deviceStateToLayoutMap;
mFlags = flags;
@@ -404,7 +411,7 @@
ipw.println("mSingleDisplayDemoMode=" + mSingleDisplayDemoMode);
ipw.println("mCurrentLayout=" + mCurrentLayout);
ipw.println("mDeviceStatesOnWhichToWakeUp=" + mDeviceStatesOnWhichToWakeUp);
- ipw.println("mDeviceStatesOnWhichToSleep=" + mDeviceStatesOnWhichToSleep);
+ ipw.println("mDeviceStatesOnWhichSelectiveSleep=" + mDeviceStatesOnWhichToSelectiveSleep);
ipw.println("mInteractive=" + mInteractive);
ipw.println("mBootCompleted=" + mBootCompleted);
@@ -569,8 +576,8 @@
boolean shouldDeviceBePutToSleep(int pendingState, int currentState, boolean isInteractive,
boolean isBootCompleted) {
return currentState != DeviceStateManager.INVALID_DEVICE_STATE_IDENTIFIER
- && mDeviceStatesOnWhichToSleep.get(pendingState)
- && !mDeviceStatesOnWhichToSleep.get(currentState)
+ && mDeviceStatesOnWhichToSelectiveSleep.get(pendingState)
+ && !mDeviceStatesOnWhichToSelectiveSleep.get(currentState)
&& isInteractive
&& isBootCompleted
&& !mFoldSettingProvider.shouldStayAwakeOnFold();
@@ -611,9 +618,12 @@
final boolean waitingToWakeDevice = mDeviceStatesOnWhichToWakeUp.get(mPendingDeviceState)
&& !mDeviceStatesOnWhichToWakeUp.get(mDeviceState)
&& !mInteractive && mBootCompleted;
- final boolean waitingToSleepDevice = mDeviceStatesOnWhichToSleep.get(mPendingDeviceState)
- && !mDeviceStatesOnWhichToSleep.get(mDeviceState)
- && mInteractive && mBootCompleted;
+ // The device should only wait for sleep if #shouldStayAwakeOnFold method returns false.
+ // If not, device should be marked ready for transition immediately.
+ final boolean waitingToSleepDevice = mDeviceStatesOnWhichToSelectiveSleep.get(
+ mPendingDeviceState)
+ && !mDeviceStatesOnWhichToSelectiveSleep.get(mDeviceState)
+ && mInteractive && mBootCompleted && !shouldStayAwakeOnFold();
final boolean displaysOff = areAllTransitioningDisplaysOffLocked();
final boolean isReadyToTransition = displaysOff && !waitingToWakeDevice
@@ -1233,6 +1243,16 @@
return retval;
}
+ /**
+ * Returns true if the device would definitely have outer display ON/Stay Awake on fold based on
+ * the value of `Continue using app on fold` setting
+ */
+ private boolean shouldStayAwakeOnFold() {
+ return mFoldSettingProvider.shouldStayAwakeOnFold() || (
+ mFoldSettingProvider.shouldSelectiveStayAwakeOnFold()
+ && mFoldGracePeriodProvider.isEnabled());
+ }
+
private String displayEventToString(int msg) {
switch(msg) {
case LOGICAL_DISPLAY_EVENT_ADDED:
diff --git a/services/core/java/com/android/server/display/brightness/clamper/BrightnessLowLuxModifier.java b/services/core/java/com/android/server/display/brightness/clamper/BrightnessLowLuxModifier.java
index 29b457f..a3dfe22 100644
--- a/services/core/java/com/android/server/display/brightness/clamper/BrightnessLowLuxModifier.java
+++ b/services/core/java/com/android/server/display/brightness/clamper/BrightnessLowLuxModifier.java
@@ -70,11 +70,10 @@
mHandler = handler;
mContentResolver = context.getContentResolver();
mSettingsObserver = new SettingsObserver(mHandler);
+ mDisplayDeviceConfig = displayDeviceConfig;
mHandler.post(() -> {
start();
});
-
- mDisplayDeviceConfig = displayDeviceConfig;
}
/**
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..8e0eb05 100644
--- a/services/core/java/com/android/server/flags/services.aconfig
+++ b/services/core/java/com/android/server/flags/services.aconfig
@@ -1,4 +1,5 @@
package: "com.android.server.flags"
+container: "system"
flag {
namespace: "wear_frameworks"
diff --git a/services/core/java/com/android/server/graphics/fonts/UpdatableFontDir.java b/services/core/java/com/android/server/graphics/fonts/UpdatableFontDir.java
index 1715254..9d04682 100644
--- a/services/core/java/com/android/server/graphics/fonts/UpdatableFontDir.java
+++ b/services/core/java/com/android/server/graphics/fonts/UpdatableFontDir.java
@@ -196,8 +196,7 @@
File signatureFile = new File(dir, FONT_SIGNATURE_FILE);
if (!signatureFile.exists()) {
Slog.i(TAG, "The signature file is missing.");
- FileUtils.deleteContentsAndDir(dir);
- continue;
+ return;
}
byte[] signature;
try {
@@ -222,10 +221,36 @@
FontFileInfo fontFileInfo = validateFontFile(fontFile, signature);
if (fontConfig == null) {
- fontConfig = getSystemFontConfig();
+ // Use preinstalled font config for checking revision number.
+ fontConfig = mConfigSupplier.apply(Collections.emptyMap());
}
addFileToMapIfSameOrNewer(fontFileInfo, fontConfig, true /* deleteOldFile */);
}
+
+ // Treat as error if post script name of font family was not installed.
+ for (int i = 0; i < config.fontFamilies.size(); ++i) {
+ FontUpdateRequest.Family family = config.fontFamilies.get(i);
+ for (int j = 0; j < family.getFonts().size(); ++j) {
+ FontUpdateRequest.Font font = family.getFonts().get(j);
+ if (mFontFileInfoMap.containsKey(font.getPostScriptName())) {
+ continue;
+ }
+
+ if (fontConfig == null) {
+ fontConfig = mConfigSupplier.apply(Collections.emptyMap());
+ }
+
+ if (getFontByPostScriptName(font.getPostScriptName(), fontConfig) != null) {
+ continue;
+ }
+
+ Slog.e(TAG, "Unknown font that has PostScript name "
+ + font.getPostScriptName() + " is requested in FontFamily "
+ + family.getName());
+ return;
+ }
+ }
+
success = true;
} catch (Throwable t) {
// If something happened during loading system fonts, clear all contents in finally
@@ -237,6 +262,7 @@
mFontFileInfoMap.clear();
mLastModifiedMillis = 0;
FileUtils.deleteContents(mFilesDir);
+ mConfigFile.delete();
}
}
}
@@ -485,8 +511,7 @@
return shouldAddToMap;
}
- private long getPreinstalledFontRevision(FontFileInfo info, FontConfig fontConfig) {
- String psName = info.getPostScriptName();
+ private FontConfig.Font getFontByPostScriptName(String psName, FontConfig fontConfig) {
FontConfig.Font targetFont = null;
for (int i = 0; i < fontConfig.getFontFamilies().size(); i++) {
FontConfig.FontFamily family = fontConfig.getFontFamilies().get(i);
@@ -511,6 +536,13 @@
}
}
}
+ return targetFont;
+ }
+
+ private long getPreinstalledFontRevision(FontFileInfo info, FontConfig fontConfig) {
+ String psName = info.getPostScriptName();
+ FontConfig.Font targetFont = getFontByPostScriptName(psName, fontConfig);
+
if (targetFont == null) {
return -1;
}
diff --git a/services/core/java/com/android/server/hdmi/HdmiCecLocalDevicePlayback.java b/services/core/java/com/android/server/hdmi/HdmiCecLocalDevicePlayback.java
index 731c78e..d21fc85 100644
--- a/services/core/java/com/android/server/hdmi/HdmiCecLocalDevicePlayback.java
+++ b/services/core/java/com/android/server/hdmi/HdmiCecLocalDevicePlayback.java
@@ -29,6 +29,7 @@
import android.os.Handler;
import android.os.PowerManager;
import android.os.SystemProperties;
+import android.os.UserHandle;
import android.sysprop.HdmiProperties;
import android.util.Slog;
@@ -53,6 +54,16 @@
@VisibleForTesting
static final long STANDBY_AFTER_HOTPLUG_OUT_DELAY_MS = 30_000;
+ // How long to wait on active source lost before possibly going to Standby.
+ @VisibleForTesting
+ static final long STANDBY_AFTER_ACTIVE_SOURCE_LOST_DELAY_MS = 30_000;
+
+ // How long to wait after losing active source, before launching the pop-up that allows the user
+ // to keep the device as the current active source.
+ // We do this to prevent an unnecessary pop-up from being displayed when we lose and regain
+ // active source within this timeout.
+ static final long POPUP_AFTER_ACTIVE_SOURCE_LOST_DELAY_MS = 5_000;
+
// Used to keep the device awake while it is the active source. For devices that
// cannot wake up via CEC commands, this address the inconvenience of having to
// turn them on. True by default, and can be disabled (i.e. device can go to sleep
@@ -64,6 +75,14 @@
// Handler for queueing a delayed Standby runnable after hotplug out.
private Handler mDelayedStandbyHandler;
+ // Handler for queueing a delayed Standby runnable after active source lost and after the pop-up
+ // on active source lost was displayed.
+ Handler mDelayedStandbyOnActiveSourceLostHandler;
+
+ // Handler for queueing a delayed runnable that triggers a pop-up notification on active source
+ // lost.
+ private Handler mDelayedPopupOnActiveSourceLostHandler;
+
// Determines what action should be taken upon receiving Routing Control messages.
@VisibleForTesting
protected HdmiProperties.playback_device_action_on_routing_control_values
@@ -75,6 +94,8 @@
super(service, HdmiDeviceInfo.DEVICE_PLAYBACK);
mDelayedStandbyHandler = new Handler(service.getServiceLooper());
+ mDelayedStandbyOnActiveSourceLostHandler = new Handler(service.getServiceLooper());
+ mDelayedPopupOnActiveSourceLostHandler = new Handler(service.getServiceLooper());
mStandbyHandler = new HdmiCecStandbyModeHandler(service, this);
}
@@ -239,6 +260,28 @@
}
}
+ private class DelayedStandbyOnActiveSourceLostRunnable implements Runnable {
+ @Override
+ public void run() {
+ if (mService.getPowerManagerInternal().wasDeviceIdleFor(
+ STANDBY_AFTER_ACTIVE_SOURCE_LOST_DELAY_MS)) {
+ mService.standby();
+ } else {
+ mService.setAndBroadcastActiveSource(mService.getPhysicalAddress(),
+ getDeviceInfo().getDeviceType(), Constants.ADDR_TV,
+ "DelayedActiveSourceLostStandbyRunnable");
+ }
+ }
+ }
+
+ @ServiceThreadOnly
+ void dismissUiOnActiveSourceStatusRecovered() {
+ assertRunOnServiceThread();
+ Intent intent = new Intent(HdmiControlManager.ACTION_ON_ACTIVE_SOURCE_RECOVERED_DISMISS_UI);
+ mService.getContext().sendBroadcastAsUser(intent, UserHandle.ALL,
+ HdmiControlService.PERMISSION);
+ }
+
@Override
@ServiceThreadOnly
protected void onStandby(boolean initiatedByCec, int standbyAction,
@@ -387,13 +430,47 @@
switch (mService.getHdmiCecConfig().getStringValue(
HdmiControlManager.CEC_SETTING_NAME_POWER_STATE_CHANGE_ON_ACTIVE_SOURCE_LOST)) {
case HdmiControlManager.POWER_STATE_CHANGE_ON_ACTIVE_SOURCE_LOST_STANDBY_NOW:
- mService.standby();
+ mDelayedPopupOnActiveSourceLostHandler.removeCallbacksAndMessages(null);
+ mDelayedPopupOnActiveSourceLostHandler.postDelayed(
+ new Runnable() {
+ @Override
+ public void run() {
+ if (!isActiveSource()) {
+ startHdmiCecActiveSourceLostActivity();
+ mDelayedStandbyOnActiveSourceLostHandler
+ .removeCallbacksAndMessages(null);
+ mDelayedStandbyOnActiveSourceLostHandler.postDelayed(
+ new DelayedStandbyOnActiveSourceLostRunnable(),
+ STANDBY_AFTER_ACTIVE_SOURCE_LOST_DELAY_MS);
+ }
+ }
+ }, POPUP_AFTER_ACTIVE_SOURCE_LOST_DELAY_MS);
return;
case HdmiControlManager.POWER_STATE_CHANGE_ON_ACTIVE_SOURCE_LOST_NONE:
return;
}
}
+ @VisibleForTesting
+ @ServiceThreadOnly
+ void startHdmiCecActiveSourceLostActivity() {
+ final long identity = Binder.clearCallingIdentity();
+ try {
+ Context context = mService.getContext();
+ Intent intent = new Intent();
+ intent.setComponent(
+ ComponentName.unflattenFromString(context.getResources().getString(
+ com.android.internal.R.string.config_hdmiCecActiveSourceLostActivity
+ )));
+ intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
+ context.startActivityAsUser(intent, context.getUser());
+ } catch (ActivityNotFoundException e) {
+ Slog.e(TAG, "Unable to start HdmiCecActiveSourceLostActivity");
+ } finally {
+ Binder.restoreCallingIdentity(identity);
+ }
+ }
+
@ServiceThreadOnly
@Constants.HandleMessageResult
protected int handleUserControlPressed(HdmiCecMessage message) {
@@ -557,6 +634,7 @@
setActiveSource(physicalAddress,
"HdmiCecLocalDevicePlayback#handleRoutingChangeAndInformation()");
}
+ dismissUiOnActiveSourceStatusRecovered();
switch (mPlaybackDeviceActionOnRoutingControl) {
case WAKE_UP_AND_SEND_ACTIVE_SOURCE:
setAndBroadcastActiveSource(message, physicalAddress,
diff --git a/services/core/java/com/android/server/hdmi/HdmiControlService.java b/services/core/java/com/android/server/hdmi/HdmiControlService.java
index 91e35e9..54e1217 100644
--- a/services/core/java/com/android/server/hdmi/HdmiControlService.java
+++ b/services/core/java/com/android/server/hdmi/HdmiControlService.java
@@ -4205,10 +4205,12 @@
// playback will claim active source. Otherwise audio system will.
if (deviceType == HdmiDeviceInfo.DEVICE_PLAYBACK) {
HdmiCecLocalDevicePlayback playback = playback();
+ playback.dismissUiOnActiveSourceStatusRecovered();
playback.setActiveSource(playback.getDeviceInfo().getLogicalAddress(), physicalAddress,
caller);
playback.wakeUpIfActiveSource();
playback.maySendActiveSource(source);
+ playback.mDelayedStandbyOnActiveSourceLostHandler.removeCallbacksAndMessages(null);
}
if (deviceType == HdmiDeviceInfo.DEVICE_AUDIO_SYSTEM) {
diff --git a/services/core/java/com/android/server/notification/NotificationChannelExtractor.java b/services/core/java/com/android/server/notification/NotificationChannelExtractor.java
index 2f60e42..bd73cb6 100644
--- a/services/core/java/com/android/server/notification/NotificationChannelExtractor.java
+++ b/services/core/java/com/android/server/notification/NotificationChannelExtractor.java
@@ -15,8 +15,16 @@
*/
package com.android.server.notification;
+import static android.app.Flags.restrictAudioAttributesAlarm;
+import static android.app.Flags.restrictAudioAttributesCall;
+import static android.app.Flags.restrictAudioAttributesMedia;
+import static android.app.Notification.CATEGORY_ALARM;
+import static android.media.AudioAttributes.USAGE_NOTIFICATION;
+
+import android.app.Notification;
import android.app.NotificationChannel;
import android.content.Context;
+import android.media.AudioAttributes;
import android.util.Slog;
/**
@@ -50,6 +58,36 @@
record.getSbn().getShortcutId(), true, false);
record.updateNotificationChannel(updatedChannel);
+ if (restrictAudioAttributesCall() || restrictAudioAttributesAlarm()
+ || restrictAudioAttributesMedia()) {
+ AudioAttributes attributes = record.getChannel().getAudioAttributes();
+ boolean updateAttributes = false;
+ if (restrictAudioAttributesCall()
+ && !record.getNotification().isStyle(Notification.CallStyle.class)
+ && attributes.getUsage() == AudioAttributes.USAGE_NOTIFICATION_RINGTONE) {
+ updateAttributes = true;
+ }
+ if (restrictAudioAttributesAlarm()
+ && record.getNotification().category != CATEGORY_ALARM
+ && attributes.getUsage() == AudioAttributes.USAGE_ALARM) {
+ updateAttributes = true;
+ }
+
+ if (restrictAudioAttributesMedia()
+ && (attributes.getUsage() == AudioAttributes.USAGE_UNKNOWN
+ || attributes.getUsage() == AudioAttributes.USAGE_MEDIA)) {
+ updateAttributes = true;
+ }
+
+ if (updateAttributes) {
+ NotificationChannel clone = record.getChannel().copy();
+ clone.setSound(clone.getSound(), new AudioAttributes.Builder(attributes)
+ .setUsage(USAGE_NOTIFICATION)
+ .build());
+ record.updateNotificationChannel(clone);
+ }
+ }
+
return null;
}
diff --git a/services/core/java/com/android/server/notification/NotificationRecord.java b/services/core/java/com/android/server/notification/NotificationRecord.java
index a4464a1..97d2620 100644
--- a/services/core/java/com/android/server/notification/NotificationRecord.java
+++ b/services/core/java/com/android/server/notification/NotificationRecord.java
@@ -15,6 +15,9 @@
*/
package com.android.server.notification;
+import static android.app.Flags.restrictAudioAttributesAlarm;
+import static android.app.Flags.restrictAudioAttributesCall;
+import static android.app.Flags.restrictAudioAttributesMedia;
import static android.app.Flags.updateRankingTime;
import static android.app.NotificationChannel.USER_LOCKED_IMPORTANCE;
import static android.app.NotificationManager.IMPORTANCE_DEFAULT;
@@ -1159,6 +1162,11 @@
mChannel = channel;
calculateImportance();
calculateUserSentiment();
+ mVibration = calculateVibration();
+ if (restrictAudioAttributesCall() || restrictAudioAttributesAlarm()
+ || restrictAudioAttributesMedia()) {
+ mAttributes = channel.getAudioAttributes();
+ }
}
}
diff --git a/services/core/java/com/android/server/ondeviceintelligence/BundleUtil.java b/services/core/java/com/android/server/ondeviceintelligence/BundleUtil.java
new file mode 100644
index 0000000..681dd0b
--- /dev/null
+++ b/services/core/java/com/android/server/ondeviceintelligence/BundleUtil.java
@@ -0,0 +1,352 @@
+/*
+ * 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.server.ondeviceintelligence;
+
+import static android.system.OsConstants.F_GETFL;
+import static android.system.OsConstants.O_ACCMODE;
+import static android.system.OsConstants.O_RDONLY;
+import static android.system.OsConstants.PROT_READ;
+
+import android.app.ondeviceintelligence.IResponseCallback;
+import android.app.ondeviceintelligence.IStreamingResponseCallback;
+import android.app.ondeviceintelligence.ITokenInfoCallback;
+import android.app.ondeviceintelligence.OnDeviceIntelligenceManager.InferenceParams;
+import android.app.ondeviceintelligence.OnDeviceIntelligenceManager.ResponseParams;
+import android.app.ondeviceintelligence.OnDeviceIntelligenceManager.StateParams;
+import android.app.ondeviceintelligence.TokenInfo;
+import android.database.CursorWindow;
+import android.graphics.Bitmap;
+import android.os.BadParcelableException;
+import android.os.Bundle;
+import android.os.ParcelFileDescriptor;
+import android.os.PersistableBundle;
+import android.os.RemoteCallback;
+import android.os.RemoteException;
+import android.os.SharedMemory;
+import android.system.ErrnoException;
+import android.system.Os;
+import android.util.Log;
+
+import java.util.concurrent.Executor;
+
+/**
+ * Util methods for ensuring the Bundle passed in various methods are read-only and restricted to
+ * some known types.
+ */
+public class BundleUtil {
+ private static final String TAG = "BundleUtil";
+
+ /**
+ * Validation of the inference request payload as described in {@link InferenceParams}
+ * description.
+ *
+ * @throws BadParcelableException when the bundle does not meet the read-only requirements.
+ */
+ public static void sanitizeInferenceParams(
+ @InferenceParams Bundle bundle) {
+ ensureValidBundle(bundle);
+
+ if (!bundle.hasFileDescriptors()) {
+ return; //safe to exit if there are no FDs and Binders
+ }
+
+ for (String key : bundle.keySet()) {
+ Object obj = bundle.get(key);
+ if (obj == null) {
+ /* Null value here could also mean deserializing a custom parcelable has failed,
+ * and since {@link Bundle} is marked as defusable in system-server - the
+ * {@link ClassNotFoundException} exception is swallowed and `null` is returned
+ * instead. We want to ensure cleanup of null entries in such case.
+ */
+ bundle.putObject(key, null);
+ continue;
+ }
+ if (canMarshall(obj) || obj instanceof CursorWindow) {
+ continue;
+ }
+
+ if (obj instanceof ParcelFileDescriptor) {
+ validatePfdReadOnly((ParcelFileDescriptor) obj);
+ } else if (obj instanceof SharedMemory) {
+ ((SharedMemory) obj).setProtect(PROT_READ);
+ } else if (obj instanceof Bitmap) {
+ if (((Bitmap) obj).isMutable()) {
+ throw new BadParcelableException(
+ "Encountered a mutable Bitmap in the Bundle at key : " + key);
+ }
+ } else {
+ throw new BadParcelableException(
+ "Unsupported Parcelable type encountered in the Bundle: "
+ + obj.getClass().getSimpleName());
+ }
+ }
+ }
+
+ /**
+ * Validation of the inference request payload as described in {@link ResponseParams}
+ * description.
+ *
+ * @throws BadParcelableException when the bundle does not meet the read-only requirements.
+ */
+ public static void sanitizeResponseParams(
+ @ResponseParams Bundle bundle) {
+ ensureValidBundle(bundle);
+
+ if (!bundle.hasFileDescriptors()) {
+ return; //safe to exit if there are no FDs and Binders
+ }
+
+ for (String key : bundle.keySet()) {
+ Object obj = bundle.get(key);
+ if (obj == null) {
+ /* Null value here could also mean deserializing a custom parcelable has failed,
+ * and since {@link Bundle} is marked as defusable in system-server - the
+ * {@link ClassNotFoundException} exception is swallowed and `null` is returned
+ * instead. We want to ensure cleanup of null entries in such case.
+ */
+ bundle.putObject(key, null);
+ continue;
+ }
+ if (canMarshall(obj)) {
+ continue;
+ }
+
+ if (obj instanceof ParcelFileDescriptor) {
+ validatePfdReadOnly((ParcelFileDescriptor) obj);
+ } else if (obj instanceof Bitmap) {
+ if (((Bitmap) obj).isMutable()) {
+ throw new BadParcelableException(
+ "Encountered a mutable Bitmap in the Bundle at key : " + key);
+ }
+ } else {
+ throw new BadParcelableException(
+ "Unsupported Parcelable type encountered in the Bundle: "
+ + obj.getClass().getSimpleName());
+ }
+ }
+ Log.e(TAG, "validateResponseParams : Finished");
+ }
+
+ /**
+ * Validation of the inference request payload as described in {@link StateParams}
+ * description.
+ *
+ * @throws BadParcelableException when the bundle does not meet the read-only requirements.
+ */
+ public static void sanitizeStateParams(
+ @StateParams Bundle bundle) {
+ ensureValidBundle(bundle);
+
+ if (!bundle.hasFileDescriptors()) {
+ return; //safe to exit if there are no FDs and Binders
+ }
+
+ for (String key : bundle.keySet()) {
+ Object obj = bundle.get(key);
+ if (obj == null) {
+ /* Null value here could also mean deserializing a custom parcelable has failed,
+ * and since {@link Bundle} is marked as defusable in system-server - the
+ * {@link ClassNotFoundException} exception is swallowed and `null` is returned
+ * instead. We want to ensure cleanup of null entries in such case.
+ */
+ bundle.putObject(key, null);
+ continue;
+ }
+ if (canMarshall(obj)) {
+ continue;
+ }
+
+ if (obj instanceof ParcelFileDescriptor) {
+ validatePfdReadOnly((ParcelFileDescriptor) obj);
+ } else {
+ throw new BadParcelableException(
+ "Unsupported Parcelable type encountered in the Bundle: "
+ + obj.getClass().getSimpleName());
+ }
+ }
+ }
+
+
+ public static IStreamingResponseCallback wrapWithValidation(
+ IStreamingResponseCallback streamingResponseCallback,
+ Executor resourceClosingExecutor) {
+ return new IStreamingResponseCallback.Stub() {
+ @Override
+ public void onNewContent(Bundle processedResult) throws RemoteException {
+ try {
+ sanitizeResponseParams(processedResult);
+ streamingResponseCallback.onNewContent(processedResult);
+ } finally {
+ resourceClosingExecutor.execute(() -> tryCloseResource(processedResult));
+ }
+ }
+
+ @Override
+ public void onSuccess(Bundle resultBundle)
+ throws RemoteException {
+ try {
+ sanitizeResponseParams(resultBundle);
+ streamingResponseCallback.onSuccess(resultBundle);
+ } finally {
+ resourceClosingExecutor.execute(() -> tryCloseResource(resultBundle));
+ }
+ }
+
+ @Override
+ public void onFailure(int errorCode, String errorMessage,
+ PersistableBundle errorParams) throws RemoteException {
+ streamingResponseCallback.onFailure(errorCode, errorMessage, errorParams);
+ }
+
+ @Override
+ public void onDataAugmentRequest(Bundle processedContent,
+ RemoteCallback remoteCallback)
+ throws RemoteException {
+ try {
+ sanitizeResponseParams(processedContent);
+ streamingResponseCallback.onDataAugmentRequest(processedContent,
+ new RemoteCallback(
+ augmentedData -> {
+ try {
+ sanitizeInferenceParams(augmentedData);
+ remoteCallback.sendResult(augmentedData);
+ } finally {
+ resourceClosingExecutor.execute(
+ () -> tryCloseResource(augmentedData));
+ }
+ }));
+ } finally {
+ resourceClosingExecutor.execute(() -> tryCloseResource(processedContent));
+ }
+ }
+ };
+ }
+
+ public static IResponseCallback wrapWithValidation(IResponseCallback responseCallback,
+ Executor resourceClosingExecutor) {
+ return new IResponseCallback.Stub() {
+ @Override
+ public void onSuccess(Bundle resultBundle)
+ throws RemoteException {
+ try {
+ sanitizeResponseParams(resultBundle);
+ responseCallback.onSuccess(resultBundle);
+ } finally {
+ resourceClosingExecutor.execute(() -> tryCloseResource(resultBundle));
+ }
+ }
+
+ @Override
+ public void onFailure(int errorCode, String errorMessage,
+ PersistableBundle errorParams) throws RemoteException {
+ responseCallback.onFailure(errorCode, errorMessage, errorParams);
+ }
+
+ @Override
+ public void onDataAugmentRequest(Bundle processedContent,
+ RemoteCallback remoteCallback)
+ throws RemoteException {
+ try {
+ sanitizeResponseParams(processedContent);
+ responseCallback.onDataAugmentRequest(processedContent, new RemoteCallback(
+ augmentedData -> {
+ try {
+ sanitizeInferenceParams(augmentedData);
+ remoteCallback.sendResult(augmentedData);
+ } finally {
+ resourceClosingExecutor.execute(
+ () -> tryCloseResource(augmentedData));
+ }
+ }));
+ } finally {
+ resourceClosingExecutor.execute(() -> tryCloseResource(processedContent));
+ }
+ }
+ };
+ }
+
+
+ public static ITokenInfoCallback wrapWithValidation(ITokenInfoCallback responseCallback) {
+ return new ITokenInfoCallback.Stub() {
+ @Override
+ public void onSuccess(TokenInfo tokenInfo) throws RemoteException {
+ responseCallback.onSuccess(tokenInfo);
+ }
+
+ @Override
+ public void onFailure(int errorCode, String errorMessage, PersistableBundle errorParams)
+ throws RemoteException {
+ responseCallback.onFailure(errorCode, errorMessage, errorParams);
+ }
+ };
+ }
+
+ private static boolean canMarshall(Object obj) {
+ return obj instanceof byte[] || obj instanceof PersistableBundle
+ || PersistableBundle.isValidType(obj);
+ }
+
+ private static void ensureValidBundle(Bundle bundle) {
+ if (bundle == null) {
+ throw new IllegalArgumentException("Request passed is expected to be non-null");
+ }
+
+ if (bundle.hasBinders() != Bundle.STATUS_BINDERS_NOT_PRESENT) {
+ throw new BadParcelableException("Bundle should not contain IBinder objects.");
+ }
+ }
+
+ public static void validatePfdReadOnly(ParcelFileDescriptor pfd) {
+ if (pfd == null) {
+ return;
+ }
+ try {
+ int readMode = Os.fcntlInt(pfd.getFileDescriptor(), F_GETFL, 0) & O_ACCMODE;
+ if (readMode != O_RDONLY) {
+ throw new BadParcelableException(
+ "Bundle contains a parcel file descriptor which is not read-only.");
+ }
+ } catch (ErrnoException e) {
+ throw new BadParcelableException(
+ "Invalid File descriptor passed in the Bundle.", e);
+ }
+ }
+
+ public static void tryCloseResource(Bundle bundle) {
+ if (bundle == null || bundle.isEmpty() || !bundle.hasFileDescriptors()) {
+ return;
+ }
+
+ for (String key : bundle.keySet()) {
+ Object obj = bundle.get(key);
+
+ try {
+ // TODO(b/329898589) : This can be cleaned up after the flag passing is fixed.
+ if (obj instanceof ParcelFileDescriptor) {
+ ((ParcelFileDescriptor) obj).close();
+ } else if (obj instanceof CursorWindow) {
+ ((CursorWindow) obj).close();
+ } else if (obj instanceof SharedMemory) {
+ // TODO(b/331796886) : Shared memory should honour parcelable flags.
+ ((SharedMemory) obj).close();
+ }
+ } catch (Exception e) {
+ Log.e(TAG, "Error closing resource with key: " + key, e);
+ }
+ }
+ }
+}
diff --git a/services/core/java/com/android/server/ondeviceintelligence/OnDeviceIntelligenceManagerService.java b/services/core/java/com/android/server/ondeviceintelligence/OnDeviceIntelligenceManagerService.java
index d39debb..af339df 100644
--- a/services/core/java/com/android/server/ondeviceintelligence/OnDeviceIntelligenceManagerService.java
+++ b/services/core/java/com/android/server/ondeviceintelligence/OnDeviceIntelligenceManagerService.java
@@ -16,6 +16,12 @@
package com.android.server.ondeviceintelligence;
+import static com.android.server.ondeviceintelligence.BundleUtil.sanitizeInferenceParams;
+import static com.android.server.ondeviceintelligence.BundleUtil.validatePfdReadOnly;
+import static com.android.server.ondeviceintelligence.BundleUtil.sanitizeStateParams;
+import static com.android.server.ondeviceintelligence.BundleUtil.wrapWithValidation;
+
+
import android.Manifest;
import android.annotation.NonNull;
import android.annotation.Nullable;
@@ -61,6 +67,7 @@
import android.service.ondeviceintelligence.OnDeviceIntelligenceService;
import android.service.ondeviceintelligence.OnDeviceSandboxedInferenceService;
import android.text.TextUtils;
+import android.util.Log;
import android.util.Slog;
import com.android.internal.R;
@@ -72,8 +79,11 @@
import com.android.server.SystemService;
import java.io.FileDescriptor;
+import java.io.IOException;
import java.util.Objects;
import java.util.Set;
+import java.util.concurrent.Executor;
+import java.util.concurrent.Executors;
/**
* This is the system service for handling calls on the
@@ -99,6 +109,9 @@
private static final boolean DEFAULT_SERVICE_ENABLED = true;
private static final String NAMESPACE_ON_DEVICE_INTELLIGENCE = "ondeviceintelligence";
+ private final Executor resourceClosingExecutor = Executors.newCachedThreadPool();
+ private final Executor callbackExecutor = Executors.newCachedThreadPool();
+
private final Context mContext;
protected final Object mLock = new Object();
@@ -261,7 +274,7 @@
ensureRemoteIntelligenceServiceInitialized();
mRemoteOnDeviceIntelligenceService.run(
service -> service.requestFeatureDownload(Binder.getCallingUid(), feature,
- cancellationSignalFuture,
+ wrapCancellationFuture(cancellationSignalFuture),
downloadCallback));
}
@@ -272,26 +285,35 @@
AndroidFuture cancellationSignalFuture,
ITokenInfoCallback tokenInfoCallback) throws RemoteException {
Slog.i(TAG, "OnDeviceIntelligenceManagerInternal requestTokenInfo");
- Objects.requireNonNull(feature);
- Objects.requireNonNull(request);
- Objects.requireNonNull(tokenInfoCallback);
+ AndroidFuture<Void> result = null;
+ try {
+ Objects.requireNonNull(feature);
+ sanitizeInferenceParams(request);
+ Objects.requireNonNull(tokenInfoCallback);
- mContext.enforceCallingOrSelfPermission(
- Manifest.permission.USE_ON_DEVICE_INTELLIGENCE, TAG);
- if (!mIsServiceEnabled) {
- Slog.w(TAG, "Service not available");
- tokenInfoCallback.onFailure(
- OnDeviceIntelligenceException.ON_DEVICE_INTELLIGENCE_SERVICE_UNAVAILABLE,
- "OnDeviceIntelligenceManagerService is unavailable",
- PersistableBundle.EMPTY);
+ mContext.enforceCallingOrSelfPermission(
+ Manifest.permission.USE_ON_DEVICE_INTELLIGENCE, TAG);
+ if (!mIsServiceEnabled) {
+ Slog.w(TAG, "Service not available");
+ tokenInfoCallback.onFailure(
+ OnDeviceIntelligenceException.ON_DEVICE_INTELLIGENCE_SERVICE_UNAVAILABLE,
+ "OnDeviceIntelligenceManagerService is unavailable",
+ PersistableBundle.EMPTY);
+ }
+ ensureRemoteInferenceServiceInitialized();
+
+ result = mRemoteInferenceService.post(
+ service -> service.requestTokenInfo(Binder.getCallingUid(), feature,
+ request,
+ wrapCancellationFuture(cancellationSignalFuture),
+ wrapWithValidation(tokenInfoCallback)));
+ result.whenCompleteAsync((c, e) -> BundleUtil.tryCloseResource(request),
+ resourceClosingExecutor);
+ } finally {
+ if (result == null) {
+ resourceClosingExecutor.execute(() -> BundleUtil.tryCloseResource(request));
+ }
}
- ensureRemoteInferenceServiceInitialized();
-
- mRemoteInferenceService.run(
- service -> service.requestTokenInfo(Binder.getCallingUid(), feature,
- request,
- cancellationSignalFuture,
- tokenInfoCallback));
}
@Override
@@ -302,24 +324,36 @@
AndroidFuture processingSignalFuture,
IResponseCallback responseCallback)
throws RemoteException {
- Slog.i(TAG, "OnDeviceIntelligenceManagerInternal processRequest");
- Objects.requireNonNull(feature);
- Objects.requireNonNull(responseCallback);
- mContext.enforceCallingOrSelfPermission(
- Manifest.permission.USE_ON_DEVICE_INTELLIGENCE, TAG);
- if (!mIsServiceEnabled) {
- Slog.w(TAG, "Service not available");
- responseCallback.onFailure(
- OnDeviceIntelligenceException.PROCESSING_ERROR_SERVICE_UNAVAILABLE,
- "OnDeviceIntelligenceManagerService is unavailable",
- PersistableBundle.EMPTY);
+ AndroidFuture<Void> result = null;
+ try {
+ Slog.i(TAG, "OnDeviceIntelligenceManagerInternal processRequest");
+ Objects.requireNonNull(feature);
+ sanitizeInferenceParams(request);
+ Objects.requireNonNull(responseCallback);
+ mContext.enforceCallingOrSelfPermission(
+ Manifest.permission.USE_ON_DEVICE_INTELLIGENCE, TAG);
+ if (!mIsServiceEnabled) {
+ Slog.w(TAG, "Service not available");
+ responseCallback.onFailure(
+ OnDeviceIntelligenceException.PROCESSING_ERROR_SERVICE_UNAVAILABLE,
+ "OnDeviceIntelligenceManagerService is unavailable",
+ PersistableBundle.EMPTY);
+ }
+ ensureRemoteInferenceServiceInitialized();
+ result = mRemoteInferenceService.post(
+ service -> service.processRequest(Binder.getCallingUid(), feature,
+ request,
+ requestType,
+ wrapCancellationFuture(cancellationSignalFuture),
+ wrapProcessingFuture(processingSignalFuture),
+ wrapWithValidation(responseCallback, resourceClosingExecutor)));
+ result.whenCompleteAsync((c, e) -> BundleUtil.tryCloseResource(request),
+ resourceClosingExecutor);
+ } finally {
+ if (result == null) {
+ resourceClosingExecutor.execute(() -> BundleUtil.tryCloseResource(request));
+ }
}
- ensureRemoteInferenceServiceInitialized();
- mRemoteInferenceService.run(
- service -> service.processRequest(Binder.getCallingUid(), feature, request,
- requestType,
- cancellationSignalFuture, processingSignalFuture,
- responseCallback));
}
@Override
@@ -329,24 +363,36 @@
AndroidFuture cancellationSignalFuture,
AndroidFuture processingSignalFuture,
IStreamingResponseCallback streamingCallback) throws RemoteException {
- Slog.i(TAG, "OnDeviceIntelligenceManagerInternal processRequestStreaming");
- Objects.requireNonNull(feature);
- Objects.requireNonNull(streamingCallback);
- mContext.enforceCallingOrSelfPermission(
- Manifest.permission.USE_ON_DEVICE_INTELLIGENCE, TAG);
- if (!mIsServiceEnabled) {
- Slog.w(TAG, "Service not available");
- streamingCallback.onFailure(
- OnDeviceIntelligenceException.PROCESSING_ERROR_SERVICE_UNAVAILABLE,
- "OnDeviceIntelligenceManagerService is unavailable",
- PersistableBundle.EMPTY);
+ AndroidFuture<Void> result = null;
+ try {
+ Slog.i(TAG, "OnDeviceIntelligenceManagerInternal processRequestStreaming");
+ Objects.requireNonNull(feature);
+ sanitizeInferenceParams(request);
+ Objects.requireNonNull(streamingCallback);
+ mContext.enforceCallingOrSelfPermission(
+ Manifest.permission.USE_ON_DEVICE_INTELLIGENCE, TAG);
+ if (!mIsServiceEnabled) {
+ Slog.w(TAG, "Service not available");
+ streamingCallback.onFailure(
+ OnDeviceIntelligenceException.PROCESSING_ERROR_SERVICE_UNAVAILABLE,
+ "OnDeviceIntelligenceManagerService is unavailable",
+ PersistableBundle.EMPTY);
+ }
+ ensureRemoteInferenceServiceInitialized();
+ result = mRemoteInferenceService.post(
+ service -> service.processRequestStreaming(Binder.getCallingUid(),
+ feature,
+ request, requestType,
+ wrapCancellationFuture(cancellationSignalFuture),
+ wrapProcessingFuture(processingSignalFuture),
+ streamingCallback));
+ result.whenCompleteAsync((c, e) -> BundleUtil.tryCloseResource(request),
+ resourceClosingExecutor);
+ } finally {
+ if (result == null) {
+ resourceClosingExecutor.execute(() -> BundleUtil.tryCloseResource(request));
+ }
}
- ensureRemoteInferenceServiceInitialized();
- mRemoteInferenceService.run(
- service -> service.processRequestStreaming(Binder.getCallingUid(), feature,
- request, requestType,
- cancellationSignalFuture, processingSignalFuture,
- streamingCallback));
}
@Override
@@ -372,9 +418,9 @@
public void onConnected(
@NonNull IOnDeviceIntelligenceService service) {
try {
- service.ready();
service.registerRemoteServices(
getRemoteProcessingService());
+ service.ready();
} catch (RemoteException ex) {
Slog.w(TAG, "Failed to send connected event", ex);
}
@@ -391,10 +437,24 @@
public void updateProcessingState(
Bundle processingState,
IProcessingUpdateStatusCallback callback) {
- ensureRemoteInferenceServiceInitialized();
- mRemoteInferenceService.run(
- service -> service.updateProcessingState(
- processingState, callback));
+ callbackExecutor.execute(() -> {
+ AndroidFuture<Void> result = null;
+ try {
+ sanitizeStateParams(processingState);
+ ensureRemoteInferenceServiceInitialized();
+ result = mRemoteInferenceService.post(
+ service -> service.updateProcessingState(
+ processingState, callback));
+ result.whenCompleteAsync(
+ (c, e) -> BundleUtil.tryCloseResource(processingState),
+ resourceClosingExecutor);
+ } finally {
+ if (result == null) {
+ resourceClosingExecutor.execute(
+ () -> BundleUtil.tryCloseResource(processingState));
+ }
+ }
+ });
}
};
}
@@ -415,7 +475,7 @@
try {
ensureRemoteIntelligenceServiceInitialized();
mRemoteOnDeviceIntelligenceService.run(
- intelligenceService -> intelligenceService.notifyInferenceServiceConnected());
+ IOnDeviceIntelligenceService::notifyInferenceServiceConnected);
service.registerRemoteStorageService(
getIRemoteStorageService());
} catch (RemoteException ex) {
@@ -434,18 +494,49 @@
public void getReadOnlyFileDescriptor(
String filePath,
AndroidFuture<ParcelFileDescriptor> future) {
+ ensureRemoteIntelligenceServiceInitialized();
+ AndroidFuture<ParcelFileDescriptor> pfdFuture = new AndroidFuture<>();
mRemoteOnDeviceIntelligenceService.run(
service -> service.getReadOnlyFileDescriptor(
- filePath, future));
+ filePath, pfdFuture));
+ pfdFuture.whenCompleteAsync((pfd, error) -> {
+ try {
+ if (error != null) {
+ future.completeExceptionally(error);
+ } else {
+ validatePfdReadOnly(pfd);
+ future.complete(pfd);
+ }
+ } finally {
+ tryClosePfd(pfd);
+ }
+ }, callbackExecutor);
}
@Override
public void getReadOnlyFeatureFileDescriptorMap(
Feature feature,
RemoteCallback remoteCallback) {
+ ensureRemoteIntelligenceServiceInitialized();
mRemoteOnDeviceIntelligenceService.run(
service -> service.getReadOnlyFeatureFileDescriptorMap(
- feature, remoteCallback));
+ feature,
+ new RemoteCallback(result -> callbackExecutor.execute(() -> {
+ try {
+ if (result == null) {
+ remoteCallback.sendResult(null);
+ }
+ for (String key : result.keySet()) {
+ ParcelFileDescriptor pfd = result.getParcelable(key,
+ ParcelFileDescriptor.class);
+ validatePfdReadOnly(pfd);
+ }
+ remoteCallback.sendResult(result);
+ } finally {
+ resourceClosingExecutor.execute(
+ () -> BundleUtil.tryCloseResource(result));
+ }
+ }))));
}
};
}
@@ -461,7 +552,8 @@
ServiceInfo serviceInfo = AppGlobals.getPackageManager().getServiceInfo(
serviceComponent,
PackageManager.MATCH_DIRECT_BOOT_AWARE
- | PackageManager.MATCH_DIRECT_BOOT_UNAWARE, 0);
+ | PackageManager.MATCH_DIRECT_BOOT_UNAWARE,
+ UserHandle.SYSTEM.getIdentifier());
if (serviceInfo != null) {
if (!checkIsolated) {
checkServiceRequiresPermission(serviceInfo,
@@ -539,10 +631,14 @@
Manifest.permission.USE_ON_DEVICE_INTELLIGENCE, TAG);
synchronized (mLock) {
mTemporaryServiceNames = componentNames;
- mRemoteInferenceService.unbind();
- mRemoteOnDeviceIntelligenceService.unbind();
- mRemoteOnDeviceIntelligenceService = null;
- mRemoteInferenceService = null;
+ if (mRemoteInferenceService != null) {
+ mRemoteInferenceService.unbind();
+ mRemoteInferenceService = null;
+ }
+ if (mRemoteOnDeviceIntelligenceService != null) {
+ mRemoteOnDeviceIntelligenceService.unbind();
+ mRemoteOnDeviceIntelligenceService = null;
+ }
if (mTemporaryHandler == null) {
mTemporaryHandler = new Handler(Looper.getMainLooper(), null, true) {
@Override
@@ -592,4 +688,57 @@
throw new SecurityException(message + ": Only shell user can call it");
}
+
+ private AndroidFuture<IBinder> wrapCancellationFuture(
+ AndroidFuture future) {
+ if (future == null) {
+ return null;
+ }
+ AndroidFuture<IBinder> cancellationFuture = new AndroidFuture<>();
+ cancellationFuture.whenCompleteAsync((c, e) -> {
+ if (e != null) {
+ Log.e(TAG, "Error forwarding ICancellationSignal to manager layer", e);
+ future.completeExceptionally(e);
+ } else {
+ future.complete(new ICancellationSignal.Stub() {
+ @Override
+ public void cancel() throws RemoteException {
+ ICancellationSignal.Stub.asInterface(c).cancel();
+ }
+ });
+ }
+ });
+ return cancellationFuture;
+ }
+
+ private AndroidFuture<IBinder> wrapProcessingFuture(
+ AndroidFuture future) {
+ if (future == null) {
+ return null;
+ }
+ AndroidFuture<IBinder> processingSignalFuture = new AndroidFuture<>();
+ processingSignalFuture.whenCompleteAsync((c, e) -> {
+ if (e != null) {
+ future.completeExceptionally(e);
+ } else {
+ future.complete(new IProcessingSignal.Stub() {
+ @Override
+ public void sendSignal(PersistableBundle actionParams) throws RemoteException {
+ IProcessingSignal.Stub.asInterface(c).sendSignal(actionParams);
+ }
+ });
+ }
+ });
+ return processingSignalFuture;
+ }
+
+ private static void tryClosePfd(ParcelFileDescriptor pfd) {
+ if (pfd != null) {
+ try {
+ pfd.close();
+ } catch (IOException e) {
+ Log.e(TAG, "Failed to close parcel file descriptor ", e);
+ }
+ }
+ }
}
diff --git a/services/core/java/com/android/server/pm/PackageManagerInternalBase.java b/services/core/java/com/android/server/pm/PackageManagerInternalBase.java
index 7a72e70..d2b60a4 100644
--- a/services/core/java/com/android/server/pm/PackageManagerInternalBase.java
+++ b/services/core/java/com/android/server/pm/PackageManagerInternalBase.java
@@ -16,7 +16,7 @@
package com.android.server.pm;
-import static android.app.admin.flags.Flags.crossUserSuspensionEnabled;
+import static android.app.admin.flags.Flags.crossUserSuspensionEnabledRo;
import static android.content.pm.PackageManager.COMPONENT_ENABLED_STATE_DEFAULT;
import static android.content.pm.PackageManager.RESTRICTION_NONE;
@@ -690,7 +690,7 @@
@Deprecated
public final void unsuspendAdminSuspendedPackages(int affectedUser) {
final int suspendingUserId =
- crossUserSuspensionEnabled() ? UserHandle.USER_SYSTEM : affectedUser;
+ crossUserSuspensionEnabledRo() ? UserHandle.USER_SYSTEM : affectedUser;
mService.unsuspendForSuspendingPackage(
snapshot(), PLATFORM_PACKAGE_NAME, suspendingUserId, /* inAllUsers= */ false);
}
@@ -699,7 +699,7 @@
@Deprecated
public final boolean isAdminSuspendingAnyPackages(int userId) {
final int suspendingUserId =
- crossUserSuspensionEnabled() ? UserHandle.USER_SYSTEM : userId;
+ crossUserSuspensionEnabledRo() ? UserHandle.USER_SYSTEM : userId;
return snapshot().isSuspendingAnyPackages(PLATFORM_PACKAGE_NAME, suspendingUserId, userId);
}
diff --git a/services/core/java/com/android/server/pm/PackageManagerService.java b/services/core/java/com/android/server/pm/PackageManagerService.java
index a86f838..72cd447 100644
--- a/services/core/java/com/android/server/pm/PackageManagerService.java
+++ b/services/core/java/com/android/server/pm/PackageManagerService.java
@@ -18,7 +18,7 @@
import static android.Manifest.permission.MANAGE_DEVICE_ADMINS;
import static android.Manifest.permission.SET_HARMFUL_APP_WARNINGS;
import static android.app.AppOpsManager.MODE_IGNORED;
-import static android.app.admin.flags.Flags.crossUserSuspensionEnabled;
+import static android.app.admin.flags.Flags.crossUserSuspensionEnabledRo;
import static android.content.pm.PackageManager.APP_METADATA_SOURCE_APK;
import static android.content.pm.PackageManager.APP_METADATA_SOURCE_UNKNOWN;
import static android.content.pm.PackageManager.COMPONENT_ENABLED_STATE_DEFAULT;
@@ -3182,7 +3182,7 @@
callingMethod);
}
- if (crossUserSuspensionEnabled()) {
+ if (crossUserSuspensionEnabledRo()) {
final int suspendingPackageUid =
snapshot.getPackageUid(suspender.packageName, 0, suspender.userId);
if (suspendingPackageUid != callingUid) {
@@ -3220,7 +3220,7 @@
final String[] allPackages = computer.getPackageStates().keySet().toArray(new String[0]);
final Predicate<UserPackage> suspenderPredicate =
UserPackage.of(suspendingUserId, suspendingPackage)::equals;
- if (!crossUserSuspensionEnabled() || !inAllUsers) {
+ if (!crossUserSuspensionEnabledRo() || !inAllUsers) {
mSuspendPackageHelper.removeSuspensionsBySuspendingPackage(computer,
allPackages, suspenderPredicate, suspendingUserId);
} else {
@@ -4366,7 +4366,7 @@
}
mInstantAppRegistry.onUserRemoved(userId);
mPackageMonitorCallbackHelper.onUserRemoved(userId);
- if (crossUserSuspensionEnabled()) {
+ if (crossUserSuspensionEnabledRo()) {
cleanUpCrossUserSuspension(userId);
}
}
@@ -6302,7 +6302,7 @@
final boolean quarantined = ((flags & PackageManager.FLAG_SUSPEND_QUARANTINED) != 0)
&& Flags.quarantinedEnabled();
final Computer snapshot = snapshotComputer();
- final UserPackage suspender = crossUserSuspensionEnabled()
+ final UserPackage suspender = crossUserSuspensionEnabledRo()
? UserPackage.of(suspendingUserId, suspendingPackage)
: UserPackage.of(targetUserId, suspendingPackage);
enforceCanSetPackagesSuspendedAsUser(snapshot, quarantined, suspender, callingUid,
@@ -6787,7 +6787,7 @@
// Suspension by admin isn't attributed to admin package but to the platform,
// Using USER_SYSTEM for consistency with other internal suspenders, like shell or root.
final int suspendingUserId =
- crossUserSuspensionEnabled() ? UserHandle.USER_SYSTEM : userId;
+ crossUserSuspensionEnabledRo() ? UserHandle.USER_SYSTEM : userId;
final UserPackage suspender = UserPackage.of(
suspendingUserId, PackageManagerService.PLATFORM_PACKAGE_NAME);
return mSuspendPackageHelper.setPackagesSuspended(snapshotComputer(), packageNames,
diff --git a/services/core/java/com/android/server/pm/PackageSetting.java b/services/core/java/com/android/server/pm/PackageSetting.java
index b44042c..7870b17 100644
--- a/services/core/java/com/android/server/pm/PackageSetting.java
+++ b/services/core/java/com/android/server/pm/PackageSetting.java
@@ -16,7 +16,7 @@
package com.android.server.pm;
-import static android.app.admin.flags.Flags.crossUserSuspensionEnabled;
+import static android.app.admin.flags.Flags.crossUserSuspensionEnabledRo;
import static android.content.pm.ApplicationInfo.PRIVATE_FLAG_DEFAULT_TO_DEVICE_PROTECTED_STORAGE;
import static android.content.pm.PackageManager.COMPONENT_ENABLED_STATE_DEFAULT;
import static android.content.pm.PackageManager.COMPONENT_ENABLED_STATE_DISABLED;
@@ -1241,7 +1241,7 @@
for (int j = 0; j < state.getSuspendParams().size(); j++) {
proto.write(PackageProto.UserInfoProto.SUSPENDING_PACKAGE,
state.getSuspendParams().keyAt(j).packageName);
- if (crossUserSuspensionEnabled()) {
+ if (crossUserSuspensionEnabledRo()) {
proto.write(PackageProto.UserInfoProto.SUSPENDING_USER,
state.getSuspendParams().keyAt(j).userId);
}
diff --git a/services/core/java/com/android/server/pm/Settings.java b/services/core/java/com/android/server/pm/Settings.java
index 9f2c36a..0f868eb 100644
--- a/services/core/java/com/android/server/pm/Settings.java
+++ b/services/core/java/com/android/server/pm/Settings.java
@@ -16,7 +16,7 @@
package com.android.server.pm;
-import static android.app.admin.flags.Flags.crossUserSuspensionEnabled;
+import static android.app.admin.flags.Flags.crossUserSuspensionEnabledRo;
import static android.content.pm.PackageManager.COMPONENT_ENABLED_STATE_DEFAULT;
import static android.content.pm.PackageManager.COMPONENT_ENABLED_STATE_DISABLED;
import static android.content.pm.PackageManager.COMPONENT_ENABLED_STATE_ENABLED;
@@ -2058,7 +2058,7 @@
return null;
}
int suspendingUserId;
- if (crossUserSuspensionEnabled()) {
+ if (crossUserSuspensionEnabledRo()) {
suspendingUserId = parser.getAttributeInt(
null, ATTR_SUSPENDING_USER, UserHandle.USER_NULL);
if (suspendingUserId == UserHandle.USER_NULL) {
@@ -2437,7 +2437,7 @@
serializer.startTag(null, TAG_SUSPEND_PARAMS);
serializer.attribute(null, ATTR_SUSPENDING_PACKAGE,
suspendingPackage.packageName);
- if (crossUserSuspensionEnabled()) {
+ if (crossUserSuspensionEnabledRo()) {
serializer.attributeInt(null, ATTR_SUSPENDING_USER,
suspendingPackage.userId);
}
diff --git a/services/core/java/com/android/server/pm/permission/AccessCheckDelegate.java b/services/core/java/com/android/server/pm/permission/AccessCheckDelegate.java
new file mode 100644
index 0000000..3edd697
--- /dev/null
+++ b/services/core/java/com/android/server/pm/permission/AccessCheckDelegate.java
@@ -0,0 +1,499 @@
+/*
+ * 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.server.pm.permission;
+
+import static android.os.Process.INVALID_UID;
+
+import android.annotation.NonNull;
+import android.annotation.Nullable;
+import android.annotation.UserIdInt;
+import android.app.AppOpsManager;
+import android.app.AppOpsManager.AttributionFlags;
+import android.app.AppOpsManagerInternal.CheckOpsDelegate;
+import android.app.SyncNotedAppOp;
+import android.content.AttributionSource;
+import android.content.pm.PackageManager;
+import android.content.pm.PackageManagerInternal;
+import android.os.Binder;
+import android.os.IBinder;
+import android.os.Process;
+import android.os.UserHandle;
+import android.text.TextUtils;
+import android.util.ArrayMap;
+import android.util.SparseArray;
+
+import com.android.internal.util.ArrayUtils;
+import com.android.internal.util.function.DodecFunction;
+import com.android.internal.util.function.HexFunction;
+import com.android.internal.util.function.OctFunction;
+import com.android.internal.util.function.QuadFunction;
+import com.android.internal.util.function.TriFunction;
+import com.android.internal.util.function.UndecFunction;
+import com.android.server.LocalServices;
+import com.android.server.pm.permission.PermissionManagerServiceInternal.CheckPermissionDelegate;
+
+import java.util.List;
+import java.util.Map;
+
+/**
+ * Interface to intercept incoming parameters and outgoing results to permission and appop checks
+ */
+public interface AccessCheckDelegate extends CheckPermissionDelegate, CheckOpsDelegate {
+
+ /**
+ * Assigns the package whose permissions are delegated the state of Shell's permissions.
+ *
+ * @param delegateUid the UID whose permissions are delegated to shell
+ * @param packageName the name of the package whose permissions are delegated to shell
+ * @param permissions the set of permissions to delegate to shell. If null then all
+ * permission will be delegated
+ */
+ void setShellPermissionDelegate(int delegateUid, @NonNull String packageName,
+ @Nullable String[] permissions);
+
+ /**
+ * Removes the assigned Shell permission delegate.
+ */
+ void removeShellPermissionDelegate();
+
+ /**
+ * @return a list of permissions delegated to Shell's permission state
+ */
+ @NonNull
+ List<String> getDelegatedPermissionNames();
+
+ /**
+ * @return whether there exists a Shell permission delegate
+ */
+ boolean hasShellPermissionDelegate();
+
+ /**
+ * @param uid the UID to check
+ * @return whether the UID's permissions are delegated to Shell's and the owner of overrides
+ */
+ boolean isDelegateAndOwnerUid(int uid);
+
+ /**
+ * @param uid the UID to check
+ * @param packageName the package to check
+ * @return whether the UID and package combination's permissions are delegated to Shell's
+ * permissions
+ */
+ boolean isDelegatePackage(int uid, @NonNull String packageName);
+
+ /**
+ * Adds permission to be overridden to the given state.
+ *
+ * @param ownerUid the UID of the app who assigned the permission override
+ * @param uid The UID of the app whose permission will be overridden
+ * @param permission The permission whose state will be overridden
+ * @param result The state to override the permission to
+ */
+ void addOverridePermissionState(int ownerUid, int uid, @NonNull String permission,
+ int result);
+
+ /**
+ * Removes overridden permission. UiAutomation must be connected to root user.
+ *
+ * @param uid The UID of the app whose permission is overridden
+ * @param permission The permission whose state will no longer be overridden
+ *
+ * @hide
+ */
+ void removeOverridePermissionState(int uid, @NonNull String permission);
+
+ /**
+ * Clears all overridden permissions for the given UID.
+ *
+ * @param uid The UID of the app whose permissions will no longer be overridden
+ */
+ void clearOverridePermissionStates(int uid);
+
+ /**
+ * Clears all overridden permissions on the device.
+ */
+ void clearAllOverridePermissionStates();
+
+ /**
+ * @return whether there exists any permission overrides
+ */
+ boolean hasOverriddenPermissions();
+
+ /**
+ * @return whether there exists permissions delegated to Shell's permissions or overridden
+ */
+ boolean hasDelegateOrOverrides();
+
+ class AccessCheckDelegateImpl implements AccessCheckDelegate {
+ public static final String SHELL_PKG = "com.android.shell";
+ private int mDelegateAndOwnerUid = INVALID_UID;
+ @Nullable
+ private String mDelegatePackage;
+ @Nullable
+ private String[] mDelegatePermissions;
+ boolean mDelegateAllPermissions;
+ @Nullable
+ private SparseArray<ArrayMap<String, Integer>> mOverridePermissionStates;
+
+ @Override
+ public void setShellPermissionDelegate(int uid, @NonNull String packageName,
+ @Nullable String[] permissions) {
+ mDelegateAndOwnerUid = uid;
+ mDelegatePackage = packageName;
+ mDelegatePermissions = permissions;
+ mDelegateAllPermissions = permissions == null;
+ PackageManager.invalidatePackageInfoCache();
+ }
+
+ @Override
+ public void removeShellPermissionDelegate() {
+ mDelegatePackage = null;
+ mDelegatePermissions = null;
+ mDelegateAllPermissions = false;
+ PackageManager.invalidatePackageInfoCache();
+ }
+
+ @Override
+ public void addOverridePermissionState(int ownerUid, int uid, @NonNull String permission,
+ int state) {
+ if (mOverridePermissionStates == null) {
+ mDelegateAndOwnerUid = ownerUid;
+ mOverridePermissionStates = new SparseArray<>();
+ }
+
+ int uidIdx = mOverridePermissionStates.indexOfKey(uid);
+ ArrayMap<String, Integer> perUidOverrides;
+ if (uidIdx < 0) {
+ perUidOverrides = new ArrayMap<>();
+ mOverridePermissionStates.put(uid, perUidOverrides);
+ } else {
+ perUidOverrides = mOverridePermissionStates.valueAt(uidIdx);
+ }
+
+ perUidOverrides.put(permission, state);
+ PackageManager.invalidatePackageInfoCache();
+ }
+
+ @Override
+ public void removeOverridePermissionState(int uid, @NonNull String permission) {
+ if (mOverridePermissionStates == null) {
+ return;
+ }
+
+ ArrayMap<String, Integer> perUidOverrides = mOverridePermissionStates.get(uid);
+
+ if (perUidOverrides == null) {
+ return;
+ }
+
+ perUidOverrides.remove(permission);
+ PackageManager.invalidatePackageInfoCache();
+
+ if (perUidOverrides.isEmpty()) {
+ mOverridePermissionStates.remove(uid);
+ }
+ if (mOverridePermissionStates.size() == 0) {
+ mOverridePermissionStates = null;
+ }
+ }
+
+ @Override
+ public void clearOverridePermissionStates(int uid) {
+ if (mOverridePermissionStates == null) {
+ return;
+ }
+
+ mOverridePermissionStates.remove(uid);
+ PackageManager.invalidatePackageInfoCache();
+
+ if (mOverridePermissionStates.size() == 0) {
+ mOverridePermissionStates = null;
+ }
+ }
+
+ @Override
+ public void clearAllOverridePermissionStates() {
+ mOverridePermissionStates = null;
+ PackageManager.invalidatePackageInfoCache();
+ }
+
+ @Override
+ public List<String> getDelegatedPermissionNames() {
+ return mDelegatePermissions == null ? null : List.of(mDelegatePermissions);
+ }
+
+ @Override
+ public boolean hasShellPermissionDelegate() {
+ return mDelegateAllPermissions || mDelegatePermissions != null;
+ }
+
+ @Override
+ public boolean isDelegatePackage(int uid, @NonNull String packageName) {
+ return mDelegateAndOwnerUid == uid && TextUtils.equals(mDelegatePackage, packageName);
+ }
+
+ @Override
+ public boolean hasOverriddenPermissions() {
+ return mOverridePermissionStates != null;
+ }
+
+ @Override
+ public boolean isDelegateAndOwnerUid(int uid) {
+ return uid == mDelegateAndOwnerUid;
+ }
+
+ @Override
+ public boolean hasDelegateOrOverrides() {
+ return hasShellPermissionDelegate() || hasOverriddenPermissions();
+ }
+
+ @Override
+ public int checkPermission(@NonNull String packageName, @NonNull String permissionName,
+ @NonNull String persistentDeviceId, @UserIdInt int userId,
+ @NonNull QuadFunction<String, String, String, Integer, Integer> superImpl) {
+ if (TextUtils.equals(mDelegatePackage, packageName) && !SHELL_PKG.equals(packageName)) {
+ if (isDelegatePermission(permissionName)) {
+ final long identity = Binder.clearCallingIdentity();
+ try {
+ return checkPermission(SHELL_PKG, permissionName,
+ persistentDeviceId, userId, superImpl);
+ } finally {
+ Binder.restoreCallingIdentity(identity);
+ }
+ }
+ }
+ if (mOverridePermissionStates != null) {
+ int uid = LocalServices.getService(PackageManagerInternal.class)
+ .getPackageUid(packageName, 0, userId);
+ if (uid >= 0) {
+ Map<String, Integer> permissionGrants = mOverridePermissionStates.get(uid);
+ if (permissionGrants != null && permissionGrants.containsKey(permissionName)) {
+ return permissionGrants.get(permissionName);
+ }
+ }
+ }
+ return superImpl.apply(packageName, permissionName, persistentDeviceId, userId);
+ }
+
+ @Override
+ public int checkUidPermission(int uid, @NonNull String permissionName,
+ @NonNull String persistentDeviceId,
+ @NonNull TriFunction<Integer, String, String, Integer> superImpl) {
+ if (uid == mDelegateAndOwnerUid && uid != Process.SHELL_UID) {
+ if (isDelegatePermission(permissionName)) {
+ final long identity = Binder.clearCallingIdentity();
+ try {
+ return checkUidPermission(Process.SHELL_UID, permissionName,
+ persistentDeviceId, superImpl);
+ } finally {
+ Binder.restoreCallingIdentity(identity);
+ }
+ }
+ }
+ if (mOverridePermissionStates != null) {
+ Map<String, Integer> permissionGrants = mOverridePermissionStates.get(uid);
+ if (permissionGrants != null && permissionGrants.containsKey(permissionName)) {
+ return permissionGrants.get(permissionName);
+ }
+ }
+ return superImpl.apply(uid, permissionName, persistentDeviceId);
+ }
+
+ @Override
+ public int checkOperation(int code, int uid, @Nullable String packageName,
+ @Nullable String attributionTag, int virtualDeviceId, boolean raw,
+ @NonNull HexFunction<Integer, Integer, String, String, Integer, Boolean, Integer>
+ superImpl) {
+ if (uid == mDelegateAndOwnerUid && isDelegateOp(code)) {
+ final int shellUid = UserHandle.getUid(UserHandle.getUserId(uid),
+ Process.SHELL_UID);
+ final long identity = Binder.clearCallingIdentity();
+ try {
+ return superImpl.apply(code, shellUid, "com.android.shell", null,
+ virtualDeviceId, raw);
+ } finally {
+ Binder.restoreCallingIdentity(identity);
+ }
+ }
+ return superImpl.apply(code, uid, packageName, attributionTag, virtualDeviceId, raw);
+ }
+
+ @Override
+ public int checkAudioOperation(int code, int usage, int uid, @Nullable String packageName,
+ @NonNull QuadFunction<Integer, Integer, Integer, String, Integer> superImpl) {
+ if (uid == mDelegateAndOwnerUid && isDelegateOp(code)) {
+ final int shellUid = UserHandle.getUid(UserHandle.getUserId(uid),
+ Process.SHELL_UID);
+ final long identity = Binder.clearCallingIdentity();
+ try {
+ return superImpl.apply(code, usage, shellUid, "com.android.shell");
+ } finally {
+ Binder.restoreCallingIdentity(identity);
+ }
+ }
+ return superImpl.apply(code, usage, uid, packageName);
+ }
+
+ @Override
+ public SyncNotedAppOp noteOperation(int code, int uid, @Nullable String packageName,
+ @Nullable String featureId, int virtualDeviceId, boolean shouldCollectAsyncNotedOp,
+ @Nullable String message, boolean shouldCollectMessage,
+ @NonNull OctFunction<Integer, Integer, String, String, Integer, Boolean, String,
+ Boolean, SyncNotedAppOp> superImpl) {
+ if (uid == mDelegateAndOwnerUid && isDelegateOp(code)) {
+ final int shellUid = UserHandle.getUid(UserHandle.getUserId(uid),
+ Process.SHELL_UID);
+ final long identity = Binder.clearCallingIdentity();
+ try {
+ return superImpl.apply(code, shellUid, "com.android.shell", featureId,
+ virtualDeviceId, shouldCollectAsyncNotedOp, message,
+ shouldCollectMessage);
+ } finally {
+ Binder.restoreCallingIdentity(identity);
+ }
+ }
+ return superImpl.apply(code, uid, packageName, featureId, virtualDeviceId,
+ shouldCollectAsyncNotedOp, message, shouldCollectMessage);
+ }
+
+ @Override
+ public SyncNotedAppOp noteProxyOperation(int code,
+ @NonNull AttributionSource attributionSource, boolean shouldCollectAsyncNotedOp,
+ @Nullable String message, boolean shouldCollectMessage, boolean skiProxyOperation,
+ @NonNull HexFunction<Integer, AttributionSource, Boolean, String, Boolean,
+ Boolean, SyncNotedAppOp> superImpl) {
+ if (attributionSource.getUid() == mDelegateAndOwnerUid && isDelegateOp(code)) {
+ final int shellUid = UserHandle.getUid(
+ UserHandle.getUserId(attributionSource.getUid()), Process.SHELL_UID);
+ final long identity = Binder.clearCallingIdentity();
+ try {
+ return superImpl.apply(code,
+ new AttributionSource(shellUid, Process.INVALID_PID,
+ "com.android.shell", attributionSource.getAttributionTag(),
+ attributionSource.getToken(), /*renouncedPermissions*/ null,
+ attributionSource.getDeviceId(), attributionSource.getNext()),
+ shouldCollectAsyncNotedOp, message, shouldCollectMessage,
+ skiProxyOperation);
+ } finally {
+ Binder.restoreCallingIdentity(identity);
+ }
+ }
+ return superImpl.apply(code, attributionSource, shouldCollectAsyncNotedOp,
+ message, shouldCollectMessage, skiProxyOperation);
+ }
+
+ @Override
+ public SyncNotedAppOp startOperation(@NonNull IBinder token, int code, int uid,
+ @Nullable String packageName, @Nullable String attributionTag, int virtualDeviceId,
+ boolean startIfModeDefault, boolean shouldCollectAsyncNotedOp,
+ @Nullable String message, boolean shouldCollectMessage,
+ @AttributionFlags int attributionFlags, int attributionChainId,
+ @NonNull DodecFunction<IBinder, Integer, Integer, String, String, Integer, Boolean,
+ Boolean, String, Boolean, Integer, Integer, SyncNotedAppOp> superImpl) {
+ if (uid == mDelegateAndOwnerUid && isDelegateOp(code)) {
+ final int shellUid = UserHandle.getUid(UserHandle.getUserId(uid),
+ Process.SHELL_UID);
+ final long identity = Binder.clearCallingIdentity();
+ try {
+ return superImpl.apply(token, code, shellUid, "com.android.shell",
+ attributionTag, virtualDeviceId, startIfModeDefault,
+ shouldCollectAsyncNotedOp, message, shouldCollectMessage,
+ attributionFlags, attributionChainId);
+ } finally {
+ Binder.restoreCallingIdentity(identity);
+ }
+ }
+ return superImpl.apply(token, code, uid, packageName, attributionTag, virtualDeviceId,
+ startIfModeDefault, shouldCollectAsyncNotedOp, message, shouldCollectMessage,
+ attributionFlags, attributionChainId);
+ }
+
+ @Override
+ public SyncNotedAppOp startProxyOperation(@NonNull IBinder clientId, int code,
+ @NonNull AttributionSource attributionSource, boolean startIfModeDefault,
+ boolean shouldCollectAsyncNotedOp, @Nullable String message,
+ boolean shouldCollectMessage, boolean skipProxyOperation,
+ @AttributionFlags int proxyAttributionFlags,
+ @AttributionFlags int proxiedAttributionFlags, int attributionChainId,
+ @NonNull UndecFunction<IBinder, Integer, AttributionSource, Boolean,
+ Boolean, String, Boolean, Boolean, Integer, Integer, Integer,
+ SyncNotedAppOp> superImpl) {
+ if (attributionSource.getUid() == mDelegateAndOwnerUid && isDelegateOp(code)) {
+ final int shellUid = UserHandle.getUid(UserHandle.getUserId(
+ attributionSource.getUid()), Process.SHELL_UID);
+ final long identity = Binder.clearCallingIdentity();
+ try {
+ return superImpl.apply(clientId, code,
+ new AttributionSource(shellUid, Process.INVALID_PID,
+ "com.android.shell", attributionSource.getAttributionTag(),
+ attributionSource.getToken(), /*renouncedPermissions*/ null,
+ attributionSource.getDeviceId(), attributionSource.getNext()),
+ startIfModeDefault, shouldCollectAsyncNotedOp, message,
+ shouldCollectMessage, skipProxyOperation, proxyAttributionFlags,
+ proxiedAttributionFlags, attributionChainId);
+ } finally {
+ Binder.restoreCallingIdentity(identity);
+ }
+ }
+ return superImpl.apply(clientId, code, attributionSource, startIfModeDefault,
+ shouldCollectAsyncNotedOp, message, shouldCollectMessage, skipProxyOperation,
+ proxyAttributionFlags, proxiedAttributionFlags, attributionChainId);
+ }
+
+ @Override
+ public void finishProxyOperation(@NonNull IBinder clientId, int code,
+ @NonNull AttributionSource attributionSource, boolean skipProxyOperation,
+ @NonNull QuadFunction<IBinder, Integer, AttributionSource, Boolean,
+ Void> superImpl) {
+ if (attributionSource.getUid() == mDelegateAndOwnerUid && isDelegateOp(code)) {
+ final int shellUid = UserHandle.getUid(UserHandle.getUserId(
+ attributionSource.getUid()), Process.SHELL_UID);
+ final long identity = Binder.clearCallingIdentity();
+ try {
+ superImpl.apply(clientId, code,
+ new AttributionSource(shellUid, Process.INVALID_PID,
+ "com.android.shell", attributionSource.getAttributionTag(),
+ attributionSource.getToken(), /*renouncedPermissions*/ null,
+ attributionSource.getDeviceId(), attributionSource.getNext()),
+ skipProxyOperation);
+ } finally {
+ Binder.restoreCallingIdentity(identity);
+ }
+ }
+ superImpl.apply(clientId, code, attributionSource, skipProxyOperation);
+ }
+
+ private boolean isDelegatePermission(@NonNull String permission) {
+ // null permissions means all permissions are delegated
+ return mDelegateAndOwnerUid != INVALID_UID
+ && (mDelegateAllPermissions
+ || ArrayUtils.contains(mDelegatePermissions, permission));
+ }
+
+ private boolean isDelegateOp(int code) {
+ if (mDelegateAllPermissions) {
+ return true;
+ }
+ // no permission for the op means the op is targeted
+ final String permission = AppOpsManager.opToPermission(code);
+ if (permission == null) {
+ return true;
+ }
+ return isDelegatePermission(permission);
+ }
+ }
+}
diff --git a/services/core/java/com/android/server/pm/permission/PermissionManagerService.java b/services/core/java/com/android/server/pm/permission/PermissionManagerService.java
index 21e2bf2..bd0501d 100644
--- a/services/core/java/com/android/server/pm/permission/PermissionManagerService.java
+++ b/services/core/java/com/android/server/pm/permission/PermissionManagerService.java
@@ -76,11 +76,10 @@
import com.android.internal.annotations.GuardedBy;
import com.android.internal.util.ArrayUtils;
import com.android.internal.util.Preconditions;
-import com.android.internal.util.function.QuadFunction;
-import com.android.internal.util.function.TriFunction;
import com.android.server.LocalServices;
import com.android.server.companion.virtual.VirtualDeviceManagerInternal;
import com.android.server.pm.UserManagerService;
+import com.android.server.pm.permission.PermissionManagerServiceInternal.CheckPermissionDelegate;
import com.android.server.pm.permission.PermissionManagerServiceInternal.HotwordDetectionServiceProvider;
import com.android.server.pm.pkg.AndroidPackage;
import com.android.server.pm.pkg.PackageState;
@@ -88,7 +87,6 @@
import java.io.FileDescriptor;
import java.io.PrintWriter;
import java.util.ArrayList;
-import java.util.Collections;
import java.util.List;
import java.util.Map;
import java.util.NoSuchElementException;
@@ -323,6 +321,12 @@
return true;
}
+ private void setCheckPermissionDelegateInternal(CheckPermissionDelegate delegate) {
+ synchronized (mLock) {
+ mCheckPermissionDelegate = delegate;
+ }
+ }
+
private boolean checkAutoRevokeAccess(AndroidPackage pkg, int callingUid) {
final boolean isCallerPrivileged = mContext.checkCallingOrSelfPermission(
Manifest.permission.WHITELIST_AUTO_REVOKE_PERMISSIONS)
@@ -369,42 +373,6 @@
}
}
- private void startShellPermissionIdentityDelegationInternal(int uid,
- @NonNull String packageName, @Nullable List<String> permissionNames) {
- synchronized (mLock) {
- final CheckPermissionDelegate oldDelegate = mCheckPermissionDelegate;
- if (oldDelegate != null && oldDelegate.getDelegatedUid() != uid) {
- throw new SecurityException(
- "Shell can delegate permissions only to one UID at a time");
- }
- final ShellDelegate delegate = new ShellDelegate(uid, packageName, permissionNames);
- setCheckPermissionDelegateLocked(delegate);
- }
- }
-
- private void stopShellPermissionIdentityDelegationInternal() {
- synchronized (mLock) {
- setCheckPermissionDelegateLocked(null);
- }
- }
-
- @Nullable
- private List<String> getDelegatedShellPermissionsInternal() {
- synchronized (mLock) {
- if (mCheckPermissionDelegate == null) {
- return Collections.EMPTY_LIST;
- }
- return mCheckPermissionDelegate.getDelegatedPermissionNames();
- }
- }
-
- private void setCheckPermissionDelegateLocked(@Nullable CheckPermissionDelegate delegate) {
- if (delegate != null || mCheckPermissionDelegate != null) {
- PackageManager.invalidatePackageInfoCache();
- }
- mCheckPermissionDelegate = delegate;
- }
-
@NonNull
private OneTimePermissionUserManager getOneTimePermissionUserManager(@UserIdInt int userId) {
OneTimePermissionUserManager oneTimePermissionUserManager;
@@ -663,24 +631,6 @@
}
@Override
- public void startShellPermissionIdentityDelegation(int uid, @NonNull String packageName,
- @Nullable List<String> permissionNames) {
- Objects.requireNonNull(packageName, "packageName");
- startShellPermissionIdentityDelegationInternal(uid, packageName, permissionNames);
- }
-
- @Override
- public void stopShellPermissionIdentityDelegation() {
- stopShellPermissionIdentityDelegationInternal();
- }
-
- @Override
- @NonNull
- public List<String> getDelegatedShellPermissions() {
- return getDelegatedShellPermissionsInternal();
- }
-
- @Override
public void setHotwordDetectionServiceProvider(HotwordDetectionServiceProvider provider) {
mHotwordDetectionServiceProvider = provider;
}
@@ -891,6 +841,11 @@
.getAllPermissionsWithProtectionFlags(protectionFlags);
}
+ @Override
+ public void setCheckPermissionDelegate(CheckPermissionDelegate delegate) {
+ setCheckPermissionDelegateInternal(delegate);
+ }
+
/* End of delegate methods to PermissionManagerServiceInterface */
}
@@ -902,120 +857,6 @@
private int[] getAllUserIds() {
return UserManagerService.getInstance().getUserIdsIncludingPreCreated();
}
-
- /**
- * Interface to intercept permission checks and optionally pass through to the original
- * implementation.
- */
- private interface CheckPermissionDelegate {
- /**
- * Get the UID whose permission checks is being delegated.
- *
- * @return the UID
- */
- int getDelegatedUid();
-
- /**
- * Check whether the given package has been granted the specified permission.
- *
- * @param packageName the name of the package to be checked
- * @param permissionName the name of the permission to be checked
- * @param persistentDeviceId The persistent device ID
- * @param userId the user ID
- * @param superImpl the original implementation that can be delegated to
- * @return {@link android.content.pm.PackageManager#PERMISSION_GRANTED} if the package has
- * the permission, or {@link android.content.pm.PackageManager#PERMISSION_DENIED} otherwise
- *
- * @see android.content.pm.PackageManager#checkPermission(String, String)
- */
- int checkPermission(@NonNull String packageName, @NonNull String permissionName,
- String persistentDeviceId, @UserIdInt int userId,
- @NonNull QuadFunction<String, String, String, Integer, Integer> superImpl);
-
- /**
- * Check whether the given UID has been granted the specified permission.
- *
- * @param uid the UID to be checked
- * @param permissionName the name of the permission to be checked
- * @param persistentDeviceId The persistent device ID
- * @param superImpl the original implementation that can be delegated to
- * @return {@link android.content.pm.PackageManager#PERMISSION_GRANTED} if the package has
- * the permission, or {@link android.content.pm.PackageManager#PERMISSION_DENIED} otherwise
- */
- int checkUidPermission(int uid, @NonNull String permissionName, String persistentDeviceId,
- TriFunction<Integer, String, String, Integer> superImpl);
-
- /**
- * @return list of delegated permissions
- */
- List<String> getDelegatedPermissionNames();
- }
-
- private class ShellDelegate implements CheckPermissionDelegate {
- private final int mDelegatedUid;
- @NonNull
- private final String mDelegatedPackageName;
- @Nullable
- private final List<String> mDelegatedPermissionNames;
-
- public ShellDelegate(int delegatedUid, @NonNull String delegatedPackageName,
- @Nullable List<String> delegatedPermissionNames) {
- mDelegatedUid = delegatedUid;
- mDelegatedPackageName = delegatedPackageName;
- mDelegatedPermissionNames = delegatedPermissionNames;
- }
-
- @Override
- public int getDelegatedUid() {
- return mDelegatedUid;
- }
-
- @Override
- public int checkPermission(@NonNull String packageName, @NonNull String permissionName,
- String persistentDeviceId, int userId,
- @NonNull QuadFunction<String, String, String, Integer, Integer> superImpl) {
- if (mDelegatedPackageName.equals(packageName)
- && isDelegatedPermission(permissionName)) {
- final long identity = Binder.clearCallingIdentity();
- try {
- return superImpl.apply("com.android.shell", permissionName, persistentDeviceId,
- userId);
- } finally {
- Binder.restoreCallingIdentity(identity);
- }
- }
- return superImpl.apply(packageName, permissionName, persistentDeviceId, userId);
- }
-
- @Override
- public int checkUidPermission(int uid, @NonNull String permissionName,
- String persistentDeviceId,
- @NonNull TriFunction<Integer, String, String, Integer> superImpl) {
- if (uid == mDelegatedUid && isDelegatedPermission(permissionName)) {
- final long identity = Binder.clearCallingIdentity();
- try {
- return superImpl.apply(Process.SHELL_UID, permissionName, persistentDeviceId);
- } finally {
- Binder.restoreCallingIdentity(identity);
- }
- }
- return superImpl.apply(uid, permissionName, persistentDeviceId);
- }
-
- @Override
- public List<String> getDelegatedPermissionNames() {
- return mDelegatedPermissionNames == null
- ? null
- : new ArrayList<>(mDelegatedPermissionNames);
- }
-
- private boolean isDelegatedPermission(@NonNull String permissionName) {
- // null permissions means all permissions are targeted
- return mDelegatedPermissionNames == null
- || mDelegatedPermissionNames.contains(permissionName);
- }
- }
-
private static final class AttributionSourceRegistry {
private final Object mLock = new Object();
diff --git a/services/core/java/com/android/server/pm/permission/PermissionManagerServiceInternal.java b/services/core/java/com/android/server/pm/permission/PermissionManagerServiceInternal.java
index 132cdce..a5c1284 100644
--- a/services/core/java/com/android/server/pm/permission/PermissionManagerServiceInternal.java
+++ b/services/core/java/com/android/server/pm/permission/PermissionManagerServiceInternal.java
@@ -25,6 +25,8 @@
import android.permission.PermissionManagerInternal;
import android.util.ArrayMap;
+import com.android.internal.util.function.QuadFunction;
+import com.android.internal.util.function.TriFunction;
import com.android.server.pm.pkg.AndroidPackage;
import com.android.server.pm.pkg.PackageState;
@@ -173,29 +175,47 @@
@PermissionInfo.ProtectionFlags int protectionFlags);
/**
- * Start delegate the permission identity of the shell UID to the given UID.
- *
- * @param uid the UID to delegate shell permission identity to
- * @param packageName the name of the package to delegate shell permission identity to
- * @param permissionNames the names of the permissions to delegate shell permission identity
- * for, or {@code null} for all permissions
+ * Sets the current check permission delegate
*/
- //@SystemApi(client = SystemApi.Client.SYSTEM_SERVER)
- void startShellPermissionIdentityDelegation(int uid,
- @NonNull String packageName, @Nullable List<String> permissionNames);
+ void setCheckPermissionDelegate(CheckPermissionDelegate delegate);
- /**
- * Stop delegating the permission identity of the shell UID.
- *
- * @see #startShellPermissionIdentityDelegation(int, String, List)
+ /**
+ * Interface to intercept permission checks and optionally pass through to the original
+ * implementation.
*/
- //@SystemApi(client = SystemApi.Client.SYSTEM_SERVER)
- void stopShellPermissionIdentityDelegation();
+ interface CheckPermissionDelegate {
- /**
- * Get all delegated shell permissions.
- */
- @NonNull List<String> getDelegatedShellPermissions();
+ /**
+ * Check whether the given package has been granted the specified permission.
+ *
+ * @param packageName the name of the package to be checked
+ * @param permissionName the name of the permission to be checked
+ * @param persistentDeviceId The persistent device ID
+ * @param userId the user ID
+ * @param superImpl the original implementation that can be delegated to
+ * @return {@link android.content.pm.PackageManager#PERMISSION_GRANTED} if the package has
+ * the permission, or {@link android.content.pm.PackageManager#PERMISSION_DENIED} otherwise
+ *
+ * @see android.content.pm.PackageManager#checkPermission(String, String)
+ */
+ int checkPermission(@NonNull String packageName, @NonNull String permissionName,
+ @NonNull String persistentDeviceId, @UserIdInt int userId,
+ @NonNull QuadFunction<String, String, String, Integer, Integer> superImpl);
+
+ /**
+ * Check whether the given UID has been granted the specified permission.
+ *
+ * @param uid the UID to be checked
+ * @param permissionName the name of the permission to be checked
+ * @param persistentDeviceId The persistent device ID
+ * @param superImpl the original implementation that can be delegated to
+ * @return {@link android.content.pm.PackageManager#PERMISSION_GRANTED} if the package has
+ * the permission, or {@link android.content.pm.PackageManager#PERMISSION_DENIED} otherwise
+ */
+ int checkUidPermission(int uid, @NonNull String permissionName,
+ @NonNull String persistentDeviceId,
+ @NonNull TriFunction<Integer, String, String, Integer> superImpl);
+ }
/**
* Read legacy permissions from legacy permission settings.
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 3f1b1c1..101983e 100644
--- a/services/core/java/com/android/server/power/hint/HintManagerService.java
+++ b/services/core/java/com/android/server/power/hint/HintManagerService.java
@@ -456,6 +456,9 @@
totalDurationNs / durationNsList.length);
int th90DurationUs = (int) TimeUnit.NANOSECONDS.toMicros(
durationNsList[(int) (durationNsList.length * 0.9)]);
+ FrameworkStatsLog.write(FrameworkStatsLog.ADPF_HINT_SESSION_TID_CLEANUP, uid,
+ totalDurationUs, maxDurationUs, totalTidCnt, totalInvalidTidCnt,
+ maxInvalidTidCnt, sessionCnt, isForeground);
Slog.d(TAG,
"Invalid tid found for UID" + uid + " in " + totalDurationUs + "us:\n\t"
+ "count("
diff --git a/services/core/java/com/android/server/power/hint/TEST_MAPPING b/services/core/java/com/android/server/power/hint/TEST_MAPPING
index 10c5362..ce6277d 100644
--- a/services/core/java/com/android/server/power/hint/TEST_MAPPING
+++ b/services/core/java/com/android/server/power/hint/TEST_MAPPING
@@ -1,5 +1,5 @@
{
- "postsubmit": [
+ "presubmit": [
{
"name": "FrameworksServicesTests",
"options": [
@@ -10,6 +10,17 @@
"exclude-annotation": "androidx.test.filters.FlakyTest"
}
]
+ },
+ {
+ "name": "CtsStatsdAtomHostTestCases",
+ "options": [
+ {"exclude-annotation": "androidx.test.filters.FlakyTest"},
+ {"exclude-annotation": "org.junit.Ignore"},
+ {"include-filter": "android.cts.statsdatom.powermanager"}
+ ],
+ "file_patterns": [
+ "(/|^)ThermalManagerService.java"
+ ]
}
]
}
\ No newline at end of file
diff --git a/services/core/java/com/android/server/stats/pull/StatsPullAtomService.java b/services/core/java/com/android/server/stats/pull/StatsPullAtomService.java
index 02f90f2..b5df30f 100644
--- a/services/core/java/com/android/server/stats/pull/StatsPullAtomService.java
+++ b/services/core/java/com/android/server/stats/pull/StatsPullAtomService.java
@@ -37,6 +37,7 @@
import static android.net.NetworkTemplate.OEM_MANAGED_PAID;
import static android.net.NetworkTemplate.OEM_MANAGED_PRIVATE;
import static android.os.Debug.getIonHeapsSizeKb;
+import static android.os.Process.INVALID_UID;
import static android.os.Process.LAST_SHARED_APPLICATION_GID;
import static android.os.Process.SYSTEM_UID;
import static android.os.Process.getUidForPid;
@@ -3537,17 +3538,23 @@
String roleName = roleEntry.getKey();
Set<String> packageNames = roleEntry.getValue();
- for (String packageName : packageNames) {
- PackageInfo pkg;
- try {
- pkg = pm.getPackageInfoAsUser(packageName, 0, userId);
- } catch (PackageManager.NameNotFoundException e) {
- Slog.w(TAG, "Role holder " + packageName + " not found");
- return StatsManager.PULL_SKIP;
- }
+ if (!packageNames.isEmpty()) {
+ for (String packageName : packageNames) {
+ PackageInfo pkg;
+ try {
+ pkg = pm.getPackageInfoAsUser(packageName, 0, userId);
+ } catch (PackageManager.NameNotFoundException e) {
+ Slog.w(TAG, "Role holder " + packageName + " not found");
+ return StatsManager.PULL_SKIP;
+ }
+ pulledData.add(FrameworkStatsLog.buildStatsEvent(
+ atomTag, pkg.applicationInfo.uid, packageName, roleName));
+ }
+ } else {
+ // Ensure that roles set to None are logged with an empty state.
pulledData.add(FrameworkStatsLog.buildStatsEvent(
- atomTag, pkg.applicationInfo.uid, packageName, roleName));
+ atomTag, INVALID_UID, "", roleName));
}
}
}
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/ActivityClientController.java b/services/core/java/com/android/server/wm/ActivityClientController.java
index 981c4c0..fe4522a 100644
--- a/services/core/java/com/android/server/wm/ActivityClientController.java
+++ b/services/core/java/com/android/server/wm/ActivityClientController.java
@@ -1254,14 +1254,16 @@
private static void executeMultiWindowFullscreenRequest(int fullscreenRequest, Task requester) {
final int targetWindowingMode;
if (fullscreenRequest == FULLSCREEN_MODE_REQUEST_ENTER) {
- requester.mMultiWindowRestoreWindowingMode =
- requester.getRequestedOverrideWindowingMode();
+ final int restoreWindowingMode = requester.getRequestedOverrideWindowingMode();
targetWindowingMode = WINDOWING_MODE_FULLSCREEN;
+ requester.setWindowingMode(targetWindowingMode);
+ // The restore windowing mode must be set after the windowing mode is set since
+ // Task#setWindowingMode resets the restore windowing mode to WINDOWING_MODE_INVALID.
+ requester.mMultiWindowRestoreWindowingMode = restoreWindowingMode;
} else {
targetWindowingMode = requester.mMultiWindowRestoreWindowingMode;
- requester.mMultiWindowRestoreWindowingMode = INVALID_WINDOWING_MODE;
+ requester.setWindowingMode(targetWindowingMode);
}
- requester.setWindowingMode(targetWindowingMode);
if (targetWindowingMode == WINDOWING_MODE_FULLSCREEN) {
requester.setBounds(null);
}
diff --git a/services/core/java/com/android/server/wm/BackNavigationController.java b/services/core/java/com/android/server/wm/BackNavigationController.java
index 7144445..f6681c5 100644
--- a/services/core/java/com/android/server/wm/BackNavigationController.java
+++ b/services/core/java/com/android/server/wm/BackNavigationController.java
@@ -359,6 +359,7 @@
mAnimationHandler.prepareAnimation(
backType,
adapter,
+ mNavigationMonitor,
currentTask,
prevTask,
currentActivity,
@@ -667,7 +668,8 @@
mAnimationHandler.markWindowHasDrawn(openActivity);
}
- private class NavigationMonitor {
+ @VisibleForTesting
+ class NavigationMonitor {
// The window which triggering the back navigation.
private WindowState mNavigatingWindow;
private RemoteCallback mObserver;
@@ -1492,28 +1494,31 @@
ScheduleAnimationBuilder prepareAnimation(
int backType,
BackAnimationAdapter adapter,
+ NavigationMonitor monitor,
Task currentTask,
Task previousTask,
ActivityRecord currentActivity,
ArrayList<ActivityRecord> previousActivity,
WindowContainer removedWindowContainer) {
+ final ScheduleAnimationBuilder builder =
+ new ScheduleAnimationBuilder(backType, adapter, monitor);
switch (backType) {
case BackNavigationInfo.TYPE_RETURN_TO_HOME:
- return new ScheduleAnimationBuilder(backType, adapter)
+ return builder
.setIsLaunchBehind(true)
.setComposeTarget(currentTask, previousTask);
case BackNavigationInfo.TYPE_CROSS_ACTIVITY:
ActivityRecord[] prevActs = new ActivityRecord[previousActivity.size()];
prevActs = previousActivity.toArray(prevActs);
- return new ScheduleAnimationBuilder(backType, adapter)
+ return builder
.setComposeTarget(currentActivity, prevActs)
.setIsLaunchBehind(false);
case BackNavigationInfo.TYPE_CROSS_TASK:
- return new ScheduleAnimationBuilder(backType, adapter)
+ return builder
.setComposeTarget(currentTask, previousTask)
.setIsLaunchBehind(false);
case BackNavigationInfo.TYPE_DIALOG_CLOSE:
- return new ScheduleAnimationBuilder(backType, adapter)
+ return builder
.setComposeTarget(removedWindowContainer, currentActivity)
.setIsLaunchBehind(false);
}
@@ -1523,13 +1528,16 @@
class ScheduleAnimationBuilder {
final int mType;
final BackAnimationAdapter mBackAnimationAdapter;
+ final NavigationMonitor mNavigationMonitor;
WindowContainer mCloseTarget;
WindowContainer[] mOpenTargets;
boolean mIsLaunchBehind;
- ScheduleAnimationBuilder(int type, BackAnimationAdapter backAnimationAdapter) {
+ ScheduleAnimationBuilder(int type, BackAnimationAdapter adapter,
+ NavigationMonitor monitor) {
mType = type;
- mBackAnimationAdapter = backAnimationAdapter;
+ mBackAnimationAdapter = adapter;
+ mNavigationMonitor = monitor;
}
ScheduleAnimationBuilder setComposeTarget(@NonNull WindowContainer close,
@@ -1610,8 +1618,13 @@
return () -> {
try {
- mBackAnimationAdapter.getRunner().onAnimationStart(
- targets, null, null, callback);
+ if (hasTargetDetached() || !validateAnimationTargets(targets)) {
+ mNavigationMonitor.cancelBackNavigating("cancelAnimation");
+ mBackAnimationAdapter.getRunner().onAnimationCancelled();
+ } else {
+ mBackAnimationAdapter.getRunner().onAnimationStart(
+ targets, null, null, callback);
+ }
} catch (RemoteException e) {
e.printStackTrace();
}
@@ -1641,6 +1654,21 @@
}
/**
+ * Validate animation targets.
+ */
+ private static boolean validateAnimationTargets(RemoteAnimationTarget[] apps) {
+ if (apps == null || apps.length == 0) {
+ return false;
+ }
+ for (int i = apps.length - 1; i >= 0; --i) {
+ if (!apps[i].leash.isValid()) {
+ return false;
+ }
+ }
+ return true;
+ }
+
+ /**
* Finds next opening activity(ies) based on open targets, which could be:
* 1. If the open window is Task, then the open activity can either be an activity, or
* two activities inside two TaskFragments
diff --git a/services/core/java/com/android/server/wm/DisplayContent.java b/services/core/java/com/android/server/wm/DisplayContent.java
index fe280cb..0de0e57 100644
--- a/services/core/java/com/android/server/wm/DisplayContent.java
+++ b/services/core/java/com/android/server/wm/DisplayContent.java
@@ -2705,7 +2705,11 @@
* Returns true if the specified UID has access to this display.
*/
boolean hasAccess(int uid) {
- return mDisplay.hasAccess(uid);
+ int userId = UserHandle.getUserId(uid);
+ boolean isUserVisibleOnDisplay = mWmService.mUmInternal.isUserVisible(
+ userId, mDisplayId);
+ return mDisplay.hasAccess(uid)
+ && (userId == UserHandle.USER_SYSTEM || isUserVisibleOnDisplay);
}
boolean isPrivate() {
diff --git a/services/core/java/com/android/server/wm/ImeInsetsSourceProvider.java b/services/core/java/com/android/server/wm/ImeInsetsSourceProvider.java
index 8c4f9ef..2dbb370 100644
--- a/services/core/java/com/android/server/wm/ImeInsetsSourceProvider.java
+++ b/services/core/java/com/android/server/wm/ImeInsetsSourceProvider.java
@@ -67,8 +67,9 @@
/** @see #setServerVisible(boolean) */
private boolean mServerVisible;
- ImeInsetsSourceProvider(InsetsSource source,
- InsetsStateController stateController, DisplayContent displayContent) {
+ ImeInsetsSourceProvider(@NonNull InsetsSource source,
+ @NonNull InsetsStateController stateController,
+ @NonNull DisplayContent displayContent) {
super(source, stateController, displayContent);
}
@@ -230,7 +231,7 @@
if (mImeRequesterStatsToken != null) {
// Cancel the pre-existing stats token, if any.
// Log state on pre-existing request cancel.
- logShowImePostLayoutState();
+ logShowImePostLayoutState(false /* aborted */);
ImeTracker.forLogging().onCancelled(
mImeRequesterStatsToken, ImeTracker.PHASE_WM_SHOW_IME_RUNNER);
}
@@ -310,7 +311,7 @@
ProtoLog.d(WM_DEBUG_IME, "abortShowImePostLayout");
if (mImeRequesterStatsToken != null) {
// Log state on abort.
- logShowImePostLayoutState();
+ logShowImePostLayoutState(true /* aborted */);
ImeTracker.forLogging().onFailed(
mImeRequesterStatsToken, ImeTracker.PHASE_WM_ABORT_SHOW_IME_POST_LAYOUT);
mImeRequesterStatsToken = null;
@@ -333,11 +334,30 @@
// actual IME target.
final InsetsControlTarget dcTarget = mDisplayContent.getImeTarget(IME_TARGET_LAYERING);
if (dcTarget == null || mImeRequester == null) {
+ // Not ready to show if there is no IME layering target, or no IME requester.
return false;
}
- // Not ready to show if there is no IME control target.
- final InsetsControlTarget controlTarget = mDisplayContent.getImeTarget(IME_TARGET_CONTROL);
+ final InsetsControlTarget controlTarget = getControlTarget();
if (controlTarget == null) {
+ // Not ready to show if there is no IME control target.
+ return false;
+ }
+ if (controlTarget != mDisplayContent.getImeTarget(IME_TARGET_CONTROL)) {
+ // Not ready to show if control target does not match the one in DisplayContent.
+ return false;
+ }
+ if (!mServerVisible || mFrozen) {
+ // Not ready to show if the window container is not available and considered visible.
+ // If frozen, the server visibility is not set until unfrozen.
+ return false;
+ }
+ if (mStateController.hasPendingControls(controlTarget)) {
+ // Not ready to show if control target has pending controls.
+ return false;
+ }
+ if (getLeash(controlTarget) == null) {
+ // Not ready to show if control target has no source control leash (or leash is not
+ // ready for dispatching).
return false;
}
@@ -353,35 +373,56 @@
}
/**
- * Logs the current state required for scheduleShowImePostLayout's runnable to be triggered.
+ * Logs the current state required for showImePostLayout to be triggered.
+ *
+ * @param aborted whether the showImePostLayout was aborted or cancelled.
*/
- private void logShowImePostLayoutState() {
+ private void logShowImePostLayoutState(boolean aborted) {
final var windowState = mWindowContainer != null ? mWindowContainer.asWindowState() : null;
final var dcTarget = mDisplayContent.getImeTarget(IME_TARGET_LAYERING);
- final var controlTarget = mDisplayContent.getImeTarget(IME_TARGET_CONTROL);
+ final var controlTarget = getControlTarget();
final var sb = new StringBuilder();
- sb.append("mWindowContainer: ").append(mWindowContainer);
- sb.append(" windowState: ").append(windowState);
+ sb.append("showImePostLayout ").append(aborted ? "aborted" : "cancelled");
+ sb.append(", mWindowContainer is: ");
+ sb.append(mWindowContainer != null ? "non-null" : "null");
+ sb.append(", windowState: ").append(windowState);
if (windowState != null) {
- sb.append(" windowState.isDrawn(): ").append(windowState.isDrawn());
- sb.append(" windowState.mGivenInsetsPending: ").append(windowState.mGivenInsetsPending);
+ sb.append(", windowState.isDrawn(): ");
+ sb.append(windowState.isDrawn());
+ sb.append(", windowState.mGivenInsetsPending: ");
+ sb.append(windowState.mGivenInsetsPending);
}
- sb.append(" mIsImeLayoutDrawn: ").append(mIsImeLayoutDrawn);
- sb.append(" mShowImeRunner: ").append(mShowImeRunner);
- sb.append(" mImeRequester: ").append(mImeRequester);
- sb.append(" dcTarget: ").append(dcTarget);
- sb.append(" controlTarget: ").append(controlTarget);
- sb.append(" isReadyToShowIme(): ").append(isReadyToShowIme());
+ sb.append(", mIsImeLayoutDrawn: ").append(mIsImeLayoutDrawn);
+ sb.append(", mShowImeRunner: ").append(mShowImeRunner);
+ sb.append(", mImeRequester: ").append(mImeRequester);
+ sb.append(", dcTarget: ").append(dcTarget);
+ sb.append(", controlTarget: ").append(controlTarget);
+ sb.append("\n");
+ sb.append("isReadyToShowIme(): ").append(isReadyToShowIme());
if (mImeRequester != null && dcTarget != null && controlTarget != null) {
- sb.append(" isImeLayeringTarget: ");
+ sb.append(", controlTarget == DisplayContent.controlTarget: ");
+ sb.append(controlTarget == mDisplayContent.getImeTarget(IME_TARGET_CONTROL));
+ sb.append(", hasPendingControls: ");
+ sb.append(mStateController.hasPendingControls(controlTarget));
+ sb.append(", serverVisible: ");
+ sb.append(mServerVisible);
+ sb.append(", frozen: ");
+ sb.append(mFrozen);
+ sb.append(", leash is: ");
+ sb.append(getLeash(controlTarget) != null ? "non-null" : "null");
+ sb.append(", control is: ");
+ sb.append(mControl != null ? "non-null" : "null");
+ sb.append(", mIsLeashReadyForDispatching: ");
+ sb.append(mIsLeashReadyForDispatching);
+ sb.append(", isImeLayeringTarget: ");
sb.append(isImeLayeringTarget(mImeRequester, dcTarget));
- sb.append(" isAboveImeLayeringTarget: ");
+ sb.append(", isAboveImeLayeringTarget: ");
sb.append(isAboveImeLayeringTarget(mImeRequester, dcTarget));
- sb.append(" isImeFallbackTarget: ");
+ sb.append(", isImeFallbackTarget: ");
sb.append(isImeFallbackTarget(mImeRequester));
- sb.append(" isImeInputTarget: ");
+ sb.append(", isImeInputTarget: ");
sb.append(isImeInputTarget(mImeRequester));
- sb.append(" sameAsImeControlTarget: ");
+ sb.append(", sameAsImeControlTarget: ");
sb.append(sameAsImeControlTarget());
}
Slog.d(TAG, sb.toString());
diff --git a/services/core/java/com/android/server/wm/InsetsSourceProvider.java b/services/core/java/com/android/server/wm/InsetsSourceProvider.java
index 83f44d2..a8cbc62 100644
--- a/services/core/java/com/android/server/wm/InsetsSourceProvider.java
+++ b/services/core/java/com/android/server/wm/InsetsSourceProvider.java
@@ -64,15 +64,16 @@
private static final Rect EMPTY_RECT = new Rect();
- protected final DisplayContent mDisplayContent;
protected final @NonNull InsetsSource mSource;
- protected WindowContainer mWindowContainer;
+ protected final @NonNull DisplayContent mDisplayContent;
+ protected final @NonNull InsetsStateController mStateController;
+ protected @Nullable WindowContainer mWindowContainer;
+ protected @Nullable InsetsSourceControl mControl;
+ protected boolean mIsLeashReadyForDispatching;
private final Rect mTmpRect = new Rect();
- private final InsetsStateController mStateController;
private final InsetsSourceControl mFakeControl;
private final Consumer<Transaction> mSetLeashPositionConsumer;
- private @Nullable InsetsSourceControl mControl;
private @Nullable InsetsControlTarget mControlTarget;
private @Nullable InsetsControlTarget mPendingControlTarget;
private @Nullable InsetsControlTarget mFakeControlTarget;
@@ -82,7 +83,6 @@
private SparseArray<TriFunction<DisplayFrames, WindowContainer, Rect, Integer>>
mOverrideFrameProviders;
private final SparseArray<Rect> mOverrideFrames = new SparseArray<Rect>();
- private boolean mIsLeashReadyForDispatching;
private final Rect mSourceFrame = new Rect();
private final Rect mLastSourceFrame = new Rect();
private @NonNull Insets mInsetsHint = Insets.NONE;
@@ -114,8 +114,9 @@
*/
private boolean mCropToProvidingInsets = false;
- InsetsSourceProvider(InsetsSource source, InsetsStateController stateController,
- DisplayContent displayContent) {
+ InsetsSourceProvider(@NonNull InsetsSource source,
+ @NonNull InsetsStateController stateController,
+ @NonNull DisplayContent displayContent) {
mClientVisible = (WindowInsets.Type.defaultVisible() & source.getType()) != 0;
mSource = source;
mDisplayContent = displayContent;
@@ -560,7 +561,7 @@
mDisplayContent.mWmService.mWindowPlacerLocked.requestTraversal();
}
- @VisibleForTesting
+ @VisibleForTesting(visibility = VisibleForTesting.Visibility.PROTECTED)
void setServerVisible(boolean serverVisible) {
mServerVisible = serverVisible;
updateSourceFrameForServerVisibility();
@@ -575,6 +576,14 @@
mServerVisible, mClientVisible);
}
+ /**
+ * Gets the source control for the given control target. If this is the provider's control
+ * target, but the leash is not ready for dispatching, a new source control object with the
+ * leash set to {@code null} is returned.
+ *
+ * @param target the control target to get the source control for.
+ */
+ @Nullable
InsetsSourceControl getControl(InsetsControlTarget target) {
if (target == mControlTarget) {
if (!mIsLeashReadyForDispatching && mControl != null) {
@@ -593,10 +602,25 @@
return null;
}
+ /**
+ * Gets the leash of the source control for the given control target. If this is not the
+ * provider's control target, or the leash is not ready for dispatching, this will
+ * return {@code null}.
+ *
+ * @param target the control target to get the source control leash for.
+ */
+ @Nullable
+ protected SurfaceControl getLeash(@NonNull InsetsControlTarget target) {
+ return target == mControlTarget && mIsLeashReadyForDispatching && mControl != null
+ ? mControl.getLeash() : null;
+ }
+
+ @Nullable
InsetsControlTarget getControlTarget() {
return mControlTarget;
}
+ @Nullable
InsetsControlTarget getFakeControlTarget() {
return mFakeControlTarget;
}
diff --git a/services/core/java/com/android/server/wm/InsetsStateController.java b/services/core/java/com/android/server/wm/InsetsStateController.java
index 6b9fcf4..3a04bcd 100644
--- a/services/core/java/com/android/server/wm/InsetsStateController.java
+++ b/services/core/java/com/android/server/wm/InsetsStateController.java
@@ -388,6 +388,9 @@
onRequestedVisibleTypesChanged(newControlTargets.valueAt(i));
}
newControlTargets.clear();
+ // Check for and try to run the scheduled show IME request (if it exists), as we
+ // now applied the surface transaction and notified the target of the new control.
+ getImeSourceProvider().checkShowImePostLayout();
});
}
@@ -395,6 +398,15 @@
mDisplayContent.notifyInsetsChanged(mDispatchInsetsChanged);
}
+ /**
+ * Checks if the control target has pending controls.
+ *
+ * @param target the control target to check.
+ */
+ boolean hasPendingControls(@NonNull InsetsControlTarget target) {
+ return mPendingControlChanged.contains(target);
+ }
+
void dump(String prefix, PrintWriter pw) {
pw.println(prefix + "WindowInsetsStateController");
prefix = prefix + " ";
diff --git a/services/core/java/com/android/server/wm/RootWindowContainer.java b/services/core/java/com/android/server/wm/RootWindowContainer.java
index d66005f..9dba8c6 100644
--- a/services/core/java/com/android/server/wm/RootWindowContainer.java
+++ b/services/core/java/com/android/server/wm/RootWindowContainer.java
@@ -31,6 +31,7 @@
import static android.view.WindowManager.LayoutParams.PRIVATE_FLAG_SUSTAINED_PERFORMANCE_MODE;
import static android.view.WindowManager.LayoutParams.TYPE_KEYGUARD_DIALOG;
import static android.view.WindowManager.LayoutParams.TYPE_NOTIFICATION_SHADE;
+import static android.view.WindowManager.TRANSIT_FLAG_KEYGUARD_OCCLUDING;
import static android.view.WindowManager.TRANSIT_NONE;
import static android.view.WindowManager.TRANSIT_PIP;
import static android.view.WindowManager.TRANSIT_SLEEP;
@@ -2496,15 +2497,17 @@
// Use NONE if keyguard is not showing.
int transit = TRANSIT_NONE;
Task startTask = null;
+ int flags = 0;
+ if (display.isKeyguardOccluded()) {
+ startTask = display.getTaskOccludingKeyguard();
+ flags = TRANSIT_FLAG_KEYGUARD_OCCLUDING;
+ transit = WindowManager.TRANSIT_KEYGUARD_OCCLUDE;
+ }
if (wasSleeping) {
transit = TRANSIT_WAKE;
- } else if (display.isKeyguardOccluded()) {
- // The display was awake so this is resuming activity for occluding keyguard.
- transit = WindowManager.TRANSIT_KEYGUARD_OCCLUDE;
- startTask = display.getTaskOccludingKeyguard();
}
display.mTransitionController.requestStartTransition(
- display.mTransitionController.createTransition(transit),
+ display.mTransitionController.createTransition(transit, flags),
startTask, null /* remoteTransition */, null /* displayChange */);
}
// Set the sleeping state of the root tasks on the display.
diff --git a/services/core/java/com/android/server/wm/Task.java b/services/core/java/com/android/server/wm/Task.java
index 1ce2cd8..d79d113 100644
--- a/services/core/java/com/android/server/wm/Task.java
+++ b/services/core/java/com/android/server/wm/Task.java
@@ -4682,9 +4682,10 @@
@Override
public void setWindowingMode(int windowingMode) {
- // Calling Task#setWindowingMode() for leaf task since this is the a specialization of
+ // Calling Task#setWindowingMode() for leaf task since this is a specialization of
// {@link #setWindowingMode(int)} for root task.
if (!isRootTask()) {
+ mMultiWindowRestoreWindowingMode = INVALID_WINDOWING_MODE;
super.setWindowingMode(windowingMode);
return;
}
@@ -4728,6 +4729,9 @@
return;
}
+ // Reset multi-window restore windowing mode.
+ mMultiWindowRestoreWindowingMode = INVALID_WINDOWING_MODE;
+
final ActivityRecord topActivity = getTopNonFinishingActivity();
// For now, assume that the root task's windowing mode is what will actually be used
diff --git a/services/core/java/com/android/server/wm/TransitionController.java b/services/core/java/com/android/server/wm/TransitionController.java
index ac03a1b..222abc3 100644
--- a/services/core/java/com/android/server/wm/TransitionController.java
+++ b/services/core/java/com/android/server/wm/TransitionController.java
@@ -300,7 +300,7 @@
* Creates a transition. It can immediately collect participants.
*/
@NonNull
- private Transition createTransition(@WindowManager.TransitionType int type,
+ Transition createTransition(@WindowManager.TransitionType int type,
@WindowManager.TransitionFlags int flags) {
if (mTransitionPlayer == null) {
throw new IllegalStateException("Shell Transitions not enabled");
diff --git a/services/core/java/com/android/server/wm/WindowState.java b/services/core/java/com/android/server/wm/WindowState.java
index aca3119..b716dc6 100644
--- a/services/core/java/com/android/server/wm/WindowState.java
+++ b/services/core/java/com/android/server/wm/WindowState.java
@@ -4977,8 +4977,15 @@
displayInfo.appWidth, displayInfo.appHeight);
anim.restrictDuration(MAX_ANIMATION_DURATION);
anim.scaleCurrentDuration(mWmService.getWindowAnimationScaleLocked());
+ final Point position = new Point();
+ if (com.android.window.flags.Flags.removePrepareSurfaceInPlacement()) {
+ transformFrameToSurfacePosition(mWindowFrames.mFrame.left, mWindowFrames.mFrame.top,
+ position);
+ } else {
+ position.set(mSurfacePosition);
+ }
final AnimationAdapter adapter = new LocalAnimationAdapter(
- new WindowAnimationSpec(anim, mSurfacePosition, false /* canSkipFirstFrame */,
+ new WindowAnimationSpec(anim, position, false /* canSkipFirstFrame */,
0 /* windowCornerRadius */),
mWmService.mSurfaceAnimationRunner);
startAnimation(getPendingTransaction(), adapter);
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/VpnTests/java/com/android/server/VpnManagerServiceTest.java b/services/tests/VpnTests/java/com/android/server/VpnManagerServiceTest.java
index ecc70e3..8495de4 100644
--- a/services/tests/VpnTests/java/com/android/server/VpnManagerServiceTest.java
+++ b/services/tests/VpnTests/java/com/android/server/VpnManagerServiceTest.java
@@ -397,4 +397,35 @@
// Even lockdown is enabled but no Vpn is created for SECONDARY_USER.
assertNull(mService.getVpnLockdownAllowlist(SECONDARY_USER.id));
}
+
+ @Test
+ public void testGetFromVpnProfileStore() {
+ final String name = Credentials.VPN + TEST_VPN_PKG;
+ mService.getFromVpnProfileStore(name);
+ verify(mVpnProfileStore).get(name);
+ }
+
+ @Test
+ public void testPutIntoVpnProfileStore() {
+ final String name = Credentials.VPN + TEST_VPN_PKG;
+ final VpnProfile vpnProfile = new VpnProfile(TEST_VPN_PKG);
+ final byte[] encodedProfile = vpnProfile.encode();
+
+ mService.putIntoVpnProfileStore(name, encodedProfile);
+ verify(mVpnProfileStore).put(name, encodedProfile);
+ }
+
+ @Test
+ public void testRemoveFromVpnProfileStore() {
+ final String name = Credentials.VPN + TEST_VPN_PKG;
+ mService.removeFromVpnProfileStore(name);
+ verify(mVpnProfileStore).remove(name);
+ }
+
+ @Test
+ public void testListFromVpnProfileStore() {
+ final String name = Credentials.VPN + TEST_VPN_PKG;
+ mService.listFromVpnProfileStore(name);
+ verify(mVpnProfileStore).list(name);
+ }
}
diff --git a/services/tests/displayservicetests/src/com/android/server/display/LogicalDisplayMapperTest.java b/services/tests/displayservicetests/src/com/android/server/display/LogicalDisplayMapperTest.java
index d0c7077..5a50510 100644
--- a/services/tests/displayservicetests/src/com/android/server/display/LogicalDisplayMapperTest.java
+++ b/services/tests/displayservicetests/src/com/android/server/display/LogicalDisplayMapperTest.java
@@ -20,6 +20,8 @@
import static android.view.Display.DEFAULT_DISPLAY;
import static android.view.Display.DEFAULT_DISPLAY_GROUP;
import static android.view.Display.FLAG_REAR;
+import static android.view.Display.STATE_OFF;
+import static android.view.Display.STATE_ON;
import static android.view.Display.TYPE_EXTERNAL;
import static android.view.Display.TYPE_INTERNAL;
import static android.view.Display.TYPE_VIRTUAL;
@@ -28,6 +30,7 @@
import static com.android.server.display.DisplayAdapter.DISPLAY_DEVICE_EVENT_ADDED;
import static com.android.server.display.DisplayAdapter.DISPLAY_DEVICE_EVENT_CHANGED;
import static com.android.server.display.DisplayAdapter.DISPLAY_DEVICE_EVENT_REMOVED;
+import static com.android.server.display.DisplayDeviceInfo.DIFF_EVERYTHING;
import static com.android.server.display.DisplayDeviceInfo.FLAG_ALLOWED_TO_BE_DEFAULT_DISPLAY;
import static com.android.server.display.LogicalDisplayMapper.LOGICAL_DISPLAY_EVENT_ADDED;
import static com.android.server.display.LogicalDisplayMapper.LOGICAL_DISPLAY_EVENT_CONNECTED;
@@ -35,6 +38,9 @@
import static com.android.server.display.LogicalDisplayMapper.LOGICAL_DISPLAY_EVENT_REMOVED;
import static com.android.server.display.layout.Layout.Display.POSITION_REAR;
import static com.android.server.display.layout.Layout.Display.POSITION_UNKNOWN;
+import static com.android.server.utils.FoldSettingProvider.SETTING_VALUE_SELECTIVE_STAY_AWAKE;
+import static com.android.server.utils.FoldSettingProvider.SETTING_VALUE_SLEEP_ON_FOLD;
+import static com.android.server.utils.FoldSettingProvider.SETTING_VALUE_STAY_AWAKE_ON_FOLD;
import static com.google.common.truth.Truth.assertThat;
@@ -72,6 +78,7 @@
import androidx.test.ext.junit.runners.AndroidJUnit4;
import androidx.test.filters.SmallTest;
+import com.android.internal.foldables.FoldGracePeriodProvider;
import com.android.server.display.feature.DisplayManagerFlags;
import com.android.server.display.layout.DisplayIdProducer;
import com.android.server.display.layout.Layout;
@@ -96,9 +103,13 @@
@RunWith(AndroidJUnit4.class)
public class LogicalDisplayMapperTest {
private static int sUniqueTestDisplayId = 0;
+ private static final int TIMEOUT_STATE_TRANSITION_MILLIS = 500;
+ private static final int FOLD_SETTLE_DELAY = 1000;
private static final int DEVICE_STATE_CLOSED = 0;
+ private static final int DEVICE_STATE_HALF_OPEN = 1;
private static final int DEVICE_STATE_OPEN = 2;
private static final int FLAG_GO_TO_SLEEP_ON_FOLD = 0;
+ private static final int FLAG_GO_TO_SLEEP_FLAG_SOFT_SLEEP = 2;
private static int sNextNonDefaultDisplayId = DEFAULT_DISPLAY + 1;
private static final File NON_EXISTING_FILE = new File("/non_existing_folder/should_not_exist");
@@ -116,6 +127,7 @@
@Mock LogicalDisplayMapper.Listener mListenerMock;
@Mock Context mContextMock;
@Mock FoldSettingProvider mFoldSettingProviderMock;
+ @Mock FoldGracePeriodProvider mFoldGracePeriodProvider;
@Mock Resources mResourcesMock;
@Mock IPowerManager mIPowerManagerMock;
@Mock IThermalService mIThermalServiceMock;
@@ -160,6 +172,7 @@
.thenReturn(Context.POWER_SERVICE);
when(mFoldSettingProviderMock.shouldStayAwakeOnFold()).thenReturn(false);
when(mFoldSettingProviderMock.shouldSleepOnFold()).thenReturn(false);
+ when(mFoldSettingProviderMock.shouldSelectiveStayAwakeOnFold()).thenReturn(true);
when(mIPowerManagerMock.isInteractive()).thenReturn(true);
when(mContextMock.getSystemService(PowerManager.class)).thenReturn(mPowerManager);
when(mContextMock.getResources()).thenReturn(mResourcesMock);
@@ -177,6 +190,7 @@
mLooper = new TestLooper();
mHandler = new Handler(mLooper.getLooper());
mLogicalDisplayMapper = new LogicalDisplayMapper(mContextMock, mFoldSettingProviderMock,
+ mFoldGracePeriodProvider,
mDisplayDeviceRepo,
mListenerMock, new DisplayManagerService.SyncRoot(), mHandler,
mDeviceStateToLayoutMapSpy, mFlagsMock);
@@ -681,22 +695,147 @@
when(mFoldSettingProviderMock.shouldSleepOnFold()).thenReturn(true);
finishBootAndFoldDevice();
+ advanceTime(FOLD_SETTLE_DELAY);
verify(mIPowerManagerMock, atLeastOnce()).goToSleep(anyLong(), anyInt(),
eq(FLAG_GO_TO_SLEEP_ON_FOLD));
}
@Test
+ public void testDeviceShouldPutToSleepWhenFoldSettingSelective() throws RemoteException {
+ when(mFoldSettingProviderMock.shouldSelectiveStayAwakeOnFold()).thenReturn(true);
+
+ finishBootAndFoldDevice();
+ advanceTime(FOLD_SETTLE_DELAY);
+
+ verify(mIPowerManagerMock, atLeastOnce()).goToSleep(anyLong(), anyInt(),
+ eq(FLAG_GO_TO_SLEEP_FLAG_SOFT_SLEEP));
+ }
+
+ @Test
public void testDeviceShouldNotBePutToSleepWhenSleepSettingFalse() throws RemoteException {
when(mFoldSettingProviderMock.shouldSleepOnFold()).thenReturn(false);
finishBootAndFoldDevice();
+ advanceTime(FOLD_SETTLE_DELAY);
verify(mIPowerManagerMock, never()).goToSleep(anyLong(), anyInt(),
eq(FLAG_GO_TO_SLEEP_ON_FOLD));
}
@Test
+ public void testWaitForSleepWhenFoldSettingSleep() {
+ // Test device should not be marked ready for transition immediately, when 'Continue
+ // using app on fold' set to 'Never'
+ setFoldLockBehaviorSettingValue(SETTING_VALUE_SLEEP_ON_FOLD);
+ setGracePeriodAvailability(false);
+ FoldableDisplayDevices foldableDisplayDevices = createFoldableDeviceStateToLayoutMap();
+
+ finishBootAndFoldDevice();
+ foldableDisplayDevices.mInner.setState(STATE_OFF);
+ notifyDisplayChanges(foldableDisplayDevices.mOuter);
+
+ assertDisplayDisabled(foldableDisplayDevices.mOuter);
+ assertDisplayEnabled(foldableDisplayDevices.mInner);
+ }
+
+ @Test
+ public void testSwapDeviceStateWithDelayWhenFoldSettingSleep() {
+ // Test device should be marked ready for transition after a delay when 'Continue using
+ // app on fold' set to 'Never'
+ setFoldLockBehaviorSettingValue(SETTING_VALUE_SLEEP_ON_FOLD);
+ setGracePeriodAvailability(false);
+ FoldableDisplayDevices foldableDisplayDevices = createFoldableDeviceStateToLayoutMap();
+
+ finishBootAndFoldDevice();
+ foldableDisplayDevices.mInner.setState(STATE_OFF);
+ notifyDisplayChanges(foldableDisplayDevices.mOuter);
+ advanceTime(TIMEOUT_STATE_TRANSITION_MILLIS);
+
+ assertDisplayEnabled(foldableDisplayDevices.mOuter);
+ assertDisplayDisabled(foldableDisplayDevices.mInner);
+ }
+
+ @Test
+ public void testDoNotWaitForSleepWhenFoldSettingStayAwake() {
+ // Test device should be marked ready for transition immediately when 'Continue using app
+ // on fold' set to 'Always'
+ setFoldLockBehaviorSettingValue(SETTING_VALUE_STAY_AWAKE_ON_FOLD);
+ setGracePeriodAvailability(false);
+ FoldableDisplayDevices foldableDisplayDevices = createFoldableDeviceStateToLayoutMap();
+
+ finishBootAndFoldDevice();
+ foldableDisplayDevices.mInner.setState(STATE_OFF);
+ notifyDisplayChanges(foldableDisplayDevices.mOuter);
+
+ assertDisplayEnabled(foldableDisplayDevices.mOuter);
+ assertDisplayDisabled(foldableDisplayDevices.mInner);
+ }
+
+ @Test
+ public void testDoNotWaitForSleepWhenFoldSettingSelectiveStayAwake() {
+ // Test device should be marked ready for transition immediately when 'Continue using app
+ // on fold' set to 'Swipe up to continue'
+ setFoldLockBehaviorSettingValue(SETTING_VALUE_SELECTIVE_STAY_AWAKE);
+ setGracePeriodAvailability(true);
+ FoldableDisplayDevices foldableDisplayDevices = createFoldableDeviceStateToLayoutMap();
+
+ finishBootAndFoldDevice();
+ foldableDisplayDevices.mInner.setState(STATE_OFF);
+ notifyDisplayChanges(foldableDisplayDevices.mOuter);
+
+ assertDisplayEnabled(foldableDisplayDevices.mOuter);
+ assertDisplayDisabled(foldableDisplayDevices.mInner);
+ }
+
+ @Test
+ public void testWaitForSleepWhenGracePeriodSettingDisabled() {
+ // Test device should not be marked ready for transition immediately when 'Continue using
+ // app on fold' set to 'Swipe up to continue' but Grace Period flag is disabled
+ setFoldLockBehaviorSettingValue(SETTING_VALUE_SELECTIVE_STAY_AWAKE);
+ setGracePeriodAvailability(false);
+ FoldableDisplayDevices foldableDisplayDevices = createFoldableDeviceStateToLayoutMap();
+
+ finishBootAndFoldDevice();
+ foldableDisplayDevices.mInner.setState(STATE_OFF);
+ notifyDisplayChanges(foldableDisplayDevices.mOuter);
+
+ assertDisplayDisabled(foldableDisplayDevices.mOuter);
+ assertDisplayEnabled(foldableDisplayDevices.mInner);
+ }
+
+ @Test
+ public void testWaitForSleepWhenTransitionDisplayStaysOn() {
+ // Test device should not be marked ready for transition immediately, when 'Continue
+ // using app on fold' set to 'Always' but not all transitioning displays are OFF.
+ setFoldLockBehaviorSettingValue(SETTING_VALUE_STAY_AWAKE_ON_FOLD);
+ setGracePeriodAvailability(false);
+ FoldableDisplayDevices foldableDisplayDevices = createFoldableDeviceStateToLayoutMap();
+
+ finishBootAndFoldDevice();
+ notifyDisplayChanges(foldableDisplayDevices.mOuter);
+
+ assertDisplayDisabled(foldableDisplayDevices.mOuter);
+ assertDisplayEnabled(foldableDisplayDevices.mInner);
+ }
+
+ @Test
+ public void testSwapDeviceStateWithDelayWhenTransitionDisplayStaysOn() {
+ // Test device should be marked ready for transition after a delay, when 'Continue using
+ // app on fold' set to 'Never' but not all transitioning displays are OFF.
+ setFoldLockBehaviorSettingValue(SETTING_VALUE_SLEEP_ON_FOLD);
+ setGracePeriodAvailability(false);
+ FoldableDisplayDevices foldableDisplayDevices = createFoldableDeviceStateToLayoutMap();
+
+ finishBootAndFoldDevice();
+ notifyDisplayChanges(foldableDisplayDevices.mOuter);
+ advanceTime(TIMEOUT_STATE_TRANSITION_MILLIS);
+
+ assertDisplayEnabled(foldableDisplayDevices.mOuter);
+ assertDisplayDisabled(foldableDisplayDevices.mInner);
+ }
+
+ @Test
public void testDeviceStateLocked() {
DisplayDevice device1 = createDisplayDevice(TYPE_INTERNAL, 600, 800,
FLAG_ALLOWED_TO_BE_DEFAULT_DISPLAY);
@@ -950,13 +1089,77 @@
// Helper Methods
/////////////////
+ private void setGracePeriodAvailability(boolean isGracePeriodEnabled) {
+ when(mFoldGracePeriodProvider.isEnabled()).thenReturn(isGracePeriodEnabled);
+ }
+
+ private void setFoldLockBehaviorSettingValue(String foldLockBehaviorSettingValue) {
+ when(mFoldSettingProviderMock.shouldSleepOnFold()).thenReturn(false);
+ when(mFoldSettingProviderMock.shouldStayAwakeOnFold()).thenReturn(false);
+ when(mFoldSettingProviderMock.shouldSelectiveStayAwakeOnFold()).thenReturn(false);
+
+ switch (foldLockBehaviorSettingValue) {
+ case SETTING_VALUE_STAY_AWAKE_ON_FOLD:
+ when(mFoldSettingProviderMock.shouldStayAwakeOnFold()).thenReturn(true);
+ break;
+
+ case SETTING_VALUE_SLEEP_ON_FOLD:
+ when(mFoldSettingProviderMock.shouldSleepOnFold()).thenReturn(true);
+ break;
+
+ default:
+ when(mFoldSettingProviderMock.shouldSelectiveStayAwakeOnFold()).thenReturn(true);
+ break;
+ }
+ }
+
+ private FoldableDisplayDevices createFoldableDeviceStateToLayoutMap() {
+ TestDisplayDevice outer = createDisplayDevice(TYPE_INTERNAL, 600, 800,
+ FLAG_ALLOWED_TO_BE_DEFAULT_DISPLAY);
+ TestDisplayDevice inner = createDisplayDevice(TYPE_INTERNAL, 600, 800,
+ FLAG_ALLOWED_TO_BE_DEFAULT_DISPLAY);
+ outer.setState(STATE_OFF);
+ inner.setState(STATE_ON);
+
+ Layout layout = new Layout();
+ createDefaultDisplay(layout, outer);
+ createNonDefaultDisplay(layout, inner, /* enabled= */ false, /* group= */ null);
+ when(mDeviceStateToLayoutMapSpy.get(DEVICE_STATE_CLOSED)).thenReturn(layout);
+
+ layout = new Layout();
+ createNonDefaultDisplay(layout, outer, /* enabled= */ false, /* group= */ null);
+ createDefaultDisplay(layout, inner);
+ when(mDeviceStateToLayoutMapSpy.get(DEVICE_STATE_HALF_OPEN)).thenReturn(layout);
+ when(mDeviceStateToLayoutMapSpy.get(DEVICE_STATE_OPEN)).thenReturn(layout);
+ when(mDeviceStateToLayoutMapSpy.size()).thenReturn(4);
+
+ add(outer);
+ add(inner);
+
+ return new FoldableDisplayDevices(outer, inner);
+ }
+
private void finishBootAndFoldDevice() {
mLogicalDisplayMapper.setDeviceStateLocked(DEVICE_STATE_OPEN);
+ mLogicalDisplayMapper.onEarlyInteractivityChange(true);
advanceTime(1000);
mLogicalDisplayMapper.onBootCompleted();
advanceTime(1000);
mLogicalDisplayMapper.setDeviceStateLocked(DEVICE_STATE_CLOSED);
- advanceTime(1000);
+ }
+
+ private void notifyDisplayChanges(TestDisplayDevice displayDevice) {
+ mLogicalDisplayMapper.onDisplayDeviceChangedLocked(displayDevice, DIFF_EVERYTHING);
+ }
+
+ private void assertDisplayEnabled(DisplayDevice displayDevice) {
+ assertThat(
+ mLogicalDisplayMapper.getDisplayLocked(displayDevice).isEnabledLocked()).isTrue();
+ }
+
+ private void assertDisplayDisabled(DisplayDevice displayDevice) {
+ assertThat(
+ mLogicalDisplayMapper.getDisplayLocked(displayDevice).isEnabledLocked()).isFalse();
}
private void createDefaultDisplay(Layout layout, DisplayDevice device) {
@@ -1058,6 +1261,16 @@
assertNotEquals(DEFAULT_DISPLAY, id(displayRemoved));
}
+ private final static class FoldableDisplayDevices {
+ final TestDisplayDevice mOuter;
+ final TestDisplayDevice mInner;
+
+ FoldableDisplayDevices(TestDisplayDevice outer, TestDisplayDevice inner) {
+ this.mOuter = outer;
+ this.mInner = inner;
+ }
+ }
+
class TestDisplayDevice extends DisplayDevice {
private DisplayDeviceInfo mInfo;
private DisplayDeviceInfo mSentInfo;
@@ -1083,6 +1296,16 @@
mSentInfo = null;
}
+ public void setState(int state) {
+ mState = state;
+ if (mSentInfo == null) {
+ mInfo.state = state;
+ } else {
+ mInfo.state = state;
+ mSentInfo.state = state;
+ }
+ }
+
@Override
public boolean hasStableUniqueId() {
return true;
diff --git a/services/tests/servicestests/src/com/android/server/biometrics/sensors/face/FaceServiceTest.java b/services/tests/servicestests/src/com/android/server/biometrics/sensors/face/FaceServiceTest.java
index e015e97..9f3f297 100644
--- a/services/tests/servicestests/src/com/android/server/biometrics/sensors/face/FaceServiceTest.java
+++ b/services/tests/servicestests/src/com/android/server/biometrics/sensors/face/FaceServiceTest.java
@@ -161,7 +161,7 @@
}
@Test
- @RequiresFlagsEnabled(Flags.FLAG_DE_HIDL)
+ @RequiresFlagsEnabled({Flags.FLAG_DE_HIDL, Flags.FLAG_FACE_VHAL_FEATURE})
public void registerAuthenticatorsLegacy_virtualOnly() throws Exception {
initService();
Settings.Secure.putInt(mSettingsRule.mockContentResolver(mContext),
diff --git a/services/tests/servicestests/src/com/android/server/companion/virtual/GenericWindowPolicyControllerTest.java b/services/tests/servicestests/src/com/android/server/companion/virtual/GenericWindowPolicyControllerTest.java
index ec3e97b..0678140 100644
--- a/services/tests/servicestests/src/com/android/server/companion/virtual/GenericWindowPolicyControllerTest.java
+++ b/services/tests/servicestests/src/com/android/server/companion/virtual/GenericWindowPolicyControllerTest.java
@@ -123,6 +123,7 @@
@Test
public void containsUid() {
GenericWindowPolicyController gwpc = createGwpc();
+ gwpc.setDisplayId(DISPLAY_ID, /* isMirrorDisplay= */ false);
assertThat(gwpc.containsUid(TEST_UID)).isFalse();
@@ -136,6 +137,7 @@
@Test
public void isEnteringPipAllowed_falseByDefault() {
GenericWindowPolicyController gwpc = createGwpc();
+ gwpc.setDisplayId(DISPLAY_ID, /* isMirrorDisplay= */ false);
assertThat(gwpc.isEnteringPipAllowed(TEST_UID)).isFalse();
verify(mPipBlockedCallback, timeout(TIMEOUT_MILLIS)).onEnteringPipBlocked(TEST_UID);
@@ -144,6 +146,7 @@
@Test
public void isEnteringPipAllowed_dpcSupportsPinned_allowed() {
GenericWindowPolicyController gwpc = createGwpc();
+ gwpc.setDisplayId(DISPLAY_ID, /* isMirrorDisplay= */ false);
gwpc.setSupportedWindowingModes(new HashSet<>(
Arrays.asList(WindowConfiguration.WINDOWING_MODE_FULLSCREEN,
WindowConfiguration.WINDOWING_MODE_PINNED)));
@@ -160,11 +163,25 @@
NONBLOCKED_APP_PACKAGE_NAME,
NONBLOCKED_APP_PACKAGE_NAME,
/* displayOnRemoteDevices */ true,
- /* targetDisplayCategory */ null);
+ /* targetDisplayCategory */ null,
+ /* uid */ UserHandle.PER_USER_RANGE + 1);
assertActivityIsBlocked(gwpc, activityInfo);
}
@Test
+ public void userNotAllowlisted_systemUser_isNotBlocked() {
+ GenericWindowPolicyController gwpc = createGwpcWithNoAllowedUsers();
+ gwpc.setDisplayId(DISPLAY_ID, /* isMirrorDisplay= */ false);
+
+ ActivityInfo activityInfo = getActivityInfo(
+ NONBLOCKED_APP_PACKAGE_NAME,
+ NONBLOCKED_APP_PACKAGE_NAME,
+ /* displayOnRemoteDevices */ true,
+ /* targetDisplayCategory */ null);
+ assertActivityCanBeLaunched(gwpc, activityInfo);
+ }
+
+ @Test
public void userNotAllowlisted_systemUserCanLaunchBlockedAppStreamingActivity() {
GenericWindowPolicyController gwpc = createGwpcWithNoAllowedUsers();
gwpc.setDisplayId(DISPLAY_ID, /* isMirrorDisplay= */ false);
@@ -521,6 +538,7 @@
public void registerRunningAppsChangedListener_onRunningAppsChanged_listenersNotified() {
ArraySet<Integer> uids = new ArraySet<>(Arrays.asList(TEST_UID));
GenericWindowPolicyController gwpc = createGwpc();
+ gwpc.setDisplayId(DISPLAY_ID, /* isMirrorDisplay= */ false);
gwpc.registerRunningAppsChangedListener(mRunningAppsChangedListener);
gwpc.onRunningAppsChanged(uids);
@@ -545,6 +563,7 @@
public void noRunningAppsChangedListener_onRunningAppsChanged_doesNotThrowException() {
ArraySet<Integer> uids = new ArraySet<>(Arrays.asList(TEST_UID));
GenericWindowPolicyController gwpc = createGwpc();
+ gwpc.setDisplayId(DISPLAY_ID, /* isMirrorDisplay= */ false);
gwpc.onRunningAppsChanged(uids);
@@ -557,6 +576,7 @@
public void registerUnregisterRunningAppsChangedListener_onRunningAppsChanged_doesNotThrowException() {
ArraySet<Integer> uids = new ArraySet<>(Arrays.asList(TEST_UID));
GenericWindowPolicyController gwpc = createGwpc();
+ gwpc.setDisplayId(DISPLAY_ID, /* isMirrorDisplay= */ false);
gwpc.registerRunningAppsChangedListener(mRunningAppsChangedListener);
gwpc.unregisterRunningAppsChangedListener(mRunningAppsChangedListener);
@@ -579,6 +599,7 @@
doReturn(interceptor).when(interceptor).queryLocalInterface(anyString());
GenericWindowPolicyController gwpc = createGwpc();
+ gwpc.setDisplayId(DISPLAY_ID, /* isMirrorDisplay= */ false);
ActivityInfo activityInfo = getActivityInfo(
NONBLOCKED_APP_PACKAGE_NAME,
NONBLOCKED_APP_PACKAGE_NAME,
@@ -603,6 +624,7 @@
Intent intent = new Intent(Intent.ACTION_VIEW, Uri.parse("testing"));
GenericWindowPolicyController gwpc = createGwpc();
+ gwpc.setDisplayId(DISPLAY_ID, /* isMirrorDisplay= */ false);
ActivityInfo activityInfo = getActivityInfo(
NONBLOCKED_APP_PACKAGE_NAME,
NONBLOCKED_APP_PACKAGE_NAME,
@@ -621,6 +643,7 @@
@Test
public void onTopActivitychanged_null_noCallback() {
GenericWindowPolicyController gwpc = createGwpc();
+ gwpc.setDisplayId(DISPLAY_ID, /* isMirrorDisplay= */ false);
gwpc.onTopActivityChanged(null, 0, 0);
verify(mActivityListener, after(TIMEOUT_MILLIS).never())
@@ -697,6 +720,7 @@
@Test
public void getCustomHomeComponent_noneSet() {
GenericWindowPolicyController gwpc = createGwpc();
+ gwpc.setDisplayId(DISPLAY_ID, /* isMirrorDisplay= */ false);
assertThat(gwpc.getCustomHomeComponent()).isNull();
}
@@ -705,6 +729,7 @@
public void getCustomHomeComponent_returnsHomeComponent() {
GenericWindowPolicyController gwpc = createGwpcWithCustomHomeComponent(
NONBLOCKED_COMPONENT);
+ gwpc.setDisplayId(DISPLAY_ID, /* isMirrorDisplay= */ false);
assertThat(gwpc.getCustomHomeComponent()).isEqualTo(NONBLOCKED_COMPONENT);
}
diff --git a/services/tests/servicestests/src/com/android/server/graphics/fonts/UpdatableFontDirTest.java b/services/tests/servicestests/src/com/android/server/graphics/fonts/UpdatableFontDirTest.java
index dacff4c..fa89278 100644
--- a/services/tests/servicestests/src/com/android/server/graphics/fonts/UpdatableFontDirTest.java
+++ b/services/tests/servicestests/src/com/android/server/graphics/fonts/UpdatableFontDirTest.java
@@ -999,6 +999,563 @@
assertThat(mUpdatableFontFilesDir.list()).hasLength(0);
}
+ private UpdatableFontDir createNewUpdateDir() {
+ UpdatableFontDir dir = new UpdatableFontDir(
+ mUpdatableFontFilesDir, mParser, mFakeFsverityUtil,
+ mConfigFile, mCurrentTimeSupplier, mConfigSupplier);
+ dir.loadFontFileMap();
+ return dir;
+ }
+
+ private UpdatableFontDir installTestFontFamilies(int version) {
+ UpdatableFontDir dir = createNewUpdateDir();
+ try {
+ dir.update(Arrays.asList(
+ newFontUpdateRequest("foo.ttf," + version + ",foo", GOOD_SIGNATURE),
+ newFontUpdateRequest("bar.ttf," + version + ",bar", GOOD_SIGNATURE),
+ newAddFontFamilyRequest("<family name='foobar'>"
+ + " <font>foo.ttf</font>"
+ + " <font>bar.ttf</font>"
+ + "</family>")));
+ } catch (Exception e) {
+ throw new RuntimeException(e);
+ }
+ return dir;
+ }
+
+ private UpdatableFontDir installTestFontFile(int numFonts, int version) {
+ UpdatableFontDir dir = createNewUpdateDir();
+ List<FontUpdateRequest> requests = new ArrayList<>();
+ if (numFonts <= 0 || numFonts > 3) {
+ throw new IllegalArgumentException("numFont must be 1, 2 or 3");
+ }
+ try {
+ requests.add(newFontUpdateRequest("foo.ttf," + version + ",foo", GOOD_SIGNATURE));
+ if (numFonts >= 2) {
+ requests.add(newFontUpdateRequest("bar.ttf," + version + ",bar", GOOD_SIGNATURE));
+ }
+ if (numFonts == 3) {
+ requests.add(newFontUpdateRequest("baz.ttf," + version + ",baz", GOOD_SIGNATURE));
+ }
+ dir.update(requests);
+ } catch (Exception e) {
+ throw new RuntimeException(e);
+ }
+ return dir;
+ }
+
+ private List<File> collectSignatureFiles() {
+ return Arrays.stream(mUpdatableFontFilesDir.listFiles())
+ .map((file) -> file.listFiles((unused, s) -> s.endsWith(".fsv_sig")))
+ .flatMap(Arrays::stream)
+ .toList();
+ }
+
+ private List<File> collectFontFiles() {
+ return Arrays.stream(mUpdatableFontFilesDir.listFiles())
+ .map((file) -> file.listFiles((unused, s) -> s.endsWith(".ttf")))
+ .flatMap(Arrays::stream)
+ .toList();
+ }
+
+ private void removeAll(List<File> files) {
+ files.forEach((File file) -> {
+ if (file.isDirectory()) {
+ removeAll(List.of(file.listFiles()));
+ } else {
+ assertThat(file.delete()).isTrue();
+ }
+ });
+ }
+
+ private void assertTestFontFamilyInstalled(UpdatableFontDir dir, int version) {
+ try {
+ assertNamedFamilyExists(dir.getSystemFontConfig(), "foobar");
+ assertThat(dir.getFontFamilyMap()).containsKey("foobar");
+ assertThat(dir.getFontFamilyMap().get("foobar").getFamilies().size()).isEqualTo(1);
+ FontConfig.FontFamily foobar = dir.getFontFamilyMap().get("foobar").getFamilies()
+ .get(0);
+ assertThat(foobar.getFontList()).hasSize(2);
+ assertThat(foobar.getFontList().get(0).getFile())
+ .isEqualTo(dir.getPostScriptMap().get("foo"));
+ assertThat(mParser.getRevision(dir.getPostScriptMap().get("foo"))).isEqualTo(version);
+ assertThat(foobar.getFontList().get(1).getFile())
+ .isEqualTo(dir.getPostScriptMap().get("bar"));
+ assertThat(mParser.getRevision(dir.getPostScriptMap().get("bar"))).isEqualTo(version);
+ } catch (Exception e) {
+ throw new RuntimeException(e);
+ }
+ }
+
+ private void assertTestFontInstalled(UpdatableFontDir dir, int version) {
+ try {
+ assertThat(dir.getPostScriptMap().containsKey("foo")).isTrue();
+ assertThat(mParser.getRevision(dir.getPostScriptMap().get("foo"))).isEqualTo(version);
+ } catch (Exception e) {
+ throw new RuntimeException(e);
+ }
+ }
+
+ @Test
+ public void signatureMissingCase_fontFamilyInstalled_fontFamilyInstallLater() {
+ // Install font families, foo.ttf, bar.ttf.
+ installTestFontFamilies(1 /* version */);
+
+ // Delete one signature file
+ assertThat(collectSignatureFiles().get(0).delete()).isTrue();
+
+ // New instance of UpdatableFontDir, this emulate a device reboot.
+ UpdatableFontDir dir = installTestFontFamilies(2 /* version */);
+
+ // Make sure the font installation succeeds.
+ assertTestFontFamilyInstalled(dir, 2 /* version */);
+
+ // Make sure after the reboot, the configuration remains.
+ UpdatableFontDir nextDir = createNewUpdateDir();
+ assertTestFontFamilyInstalled(nextDir, 2 /* version */);
+ }
+
+ @Test
+ public void signatureMissingCase_fontFamilyInstalled_fontInstallLater() {
+ // Install font families, foo.ttf, bar.ttf.
+ installTestFontFamilies(1);
+
+ // Delete one signature file
+ assertThat(collectSignatureFiles().get(0).delete()).isTrue();
+
+ // New instance of UpdatableFontDir, this emulate a device reboot.
+ UpdatableFontDir dir = installTestFontFile(1 /* numFonts */, 2 /* version */);
+
+ // Make sure the font installation succeeds.
+ assertTestFontInstalled(dir, 2 /* version */);
+
+ // Make sure after the reboot, the configuration remains.
+ UpdatableFontDir nextDir = createNewUpdateDir();
+ assertTestFontInstalled(nextDir, 2 /* version */);
+ }
+
+ @Test
+ public void signatureMissingCase_fontFileInstalled_fontFamilyInstallLater() {
+ // Install font file, foo.ttf and bar.ttf
+ installTestFontFile(2 /* numFonts */, 1 /* version */);
+
+ // Delete one signature file
+ assertThat(collectSignatureFiles().get(0).delete()).isTrue();
+
+ // New instance of UpdatableFontDir, this emulate a device reboot.
+ UpdatableFontDir dir = installTestFontFamilies(2 /* version */);
+
+ // Make sure the font installation succeeds.
+ assertTestFontFamilyInstalled(dir, 2 /* version */);
+
+ // Make sure after the reboot, the configuration remains.
+ UpdatableFontDir nextDir = createNewUpdateDir();
+ assertTestFontFamilyInstalled(nextDir, 2 /* version */);
+ }
+
+ @Test
+ public void signatureMissingCase_fontFileInstalled_fontFileInstallLater() {
+ // Install font file, foo.ttf and bar.ttf
+ installTestFontFile(2 /* numFonts */, 1 /* version */);
+
+ // Delete one signature file
+ assertThat(collectSignatureFiles().get(0).delete()).isTrue();
+
+ // New instance of UpdatableFontDir, this emulate a device reboot.
+ UpdatableFontDir dir = installTestFontFile(2 /* numFonts */, 2 /* version */);
+
+ // Make sure the font installation succeeds.
+ assertTestFontInstalled(dir, 2 /* version */);
+
+ // Make sure after the reboot, the configuration remains.
+ UpdatableFontDir nextDir = createNewUpdateDir();
+ assertTestFontInstalled(nextDir, 2 /* version */);
+ }
+
+ @Test
+ public void signatureAllMissingCase_fontFamilyInstalled_fontFamilyInstallLater() {
+ // Install font families, foo.ttf, bar.ttf.
+ installTestFontFamilies(1 /* version */);
+
+ // Delete all signature files
+ removeAll(collectSignatureFiles());
+
+ // New instance of UpdatableFontDir, this emulate a device reboot.
+ UpdatableFontDir dir = installTestFontFamilies(2 /* version */);
+
+ // Make sure the font installation succeeds.
+ assertTestFontFamilyInstalled(dir, 2 /* version */);
+
+ // Make sure after the reboot, the configuration remains.
+ UpdatableFontDir nextDir = createNewUpdateDir();
+ assertTestFontFamilyInstalled(nextDir, 2 /* version */);
+ }
+
+ @Test
+ public void signatureAllMissingCase_fontFamilyInstalled_fontInstallLater() {
+ // Install font families, foo.ttf, bar.ttf.
+ installTestFontFamilies(1 /* version */);
+
+ // Delete all signature files
+ removeAll(collectSignatureFiles());
+
+ // New instance of UpdatableFontDir, this emulate a device reboot.
+ UpdatableFontDir dir = installTestFontFile(1 /* numFonts */, 2 /* version */);
+
+ // Make sure the font installation succeeds.
+ assertTestFontInstalled(dir, 2 /* version */);
+
+ // Make sure after the reboot, the configuration remains.
+ UpdatableFontDir nextDir = createNewUpdateDir();
+ assertTestFontInstalled(nextDir, 2 /* version */);
+ }
+
+ @Test
+ public void signatureAllMissingCase_fontFileInstalled_fontFamilyInstallLater() {
+ // Install font file, foo.ttf
+ installTestFontFile(1 /* numFonts */, 1 /* version */);
+
+ // Delete all signature files
+ removeAll(collectSignatureFiles());
+
+ // New instance of UpdatableFontDir, this emulate a device reboot.
+ UpdatableFontDir dir = installTestFontFamilies(2 /* version */);
+
+ // Make sure the font installation succeeds.
+ assertTestFontFamilyInstalled(dir, 2 /* version */);
+
+ // Make sure after the reboot, the configuration remains.
+ UpdatableFontDir nextDir = createNewUpdateDir();
+ assertTestFontFamilyInstalled(nextDir, 2 /* version */);
+ }
+
+ @Test
+ public void signatureAllMissingCase_fontFileInstalled_fontFileInstallLater() {
+ // Install font file, foo.ttf
+ installTestFontFile(1 /* numFonts */, 1 /* version */);
+
+ // Delete all signature files
+ removeAll(collectSignatureFiles());
+
+ // New instance of UpdatableFontDir, this emulate a device reboot.
+ UpdatableFontDir dir = installTestFontFile(1 /* numFonts */, 2 /* version */);
+
+ // Make sure the font installation succeeds.
+ assertTestFontInstalled(dir, 2 /* version */);
+
+ // Make sure after the reboot, the configuration remains.
+ UpdatableFontDir nextDir = createNewUpdateDir();
+ assertTestFontInstalled(nextDir, 2 /* version */);
+ }
+
+ @Test
+ public void fontMissingCase_fontFamilyInstalled_fontFamilyInstallLater() {
+ // Install font families, foo.ttf, bar.ttf.
+ installTestFontFamilies(1 /* version */);
+
+ // Delete one font file
+ assertThat(collectFontFiles().get(0).delete()).isTrue();
+
+ // New instance of UpdatableFontDir, this emulate a device reboot.
+ UpdatableFontDir dir = installTestFontFamilies(2 /* version */);
+
+ // Make sure the font installation succeeds.
+ assertTestFontFamilyInstalled(dir, 2 /* version */);
+
+ // Make sure after the reboot, the configuration remains.
+ UpdatableFontDir nextDir = createNewUpdateDir();
+ assertTestFontFamilyInstalled(nextDir, 2 /* version */);
+ }
+
+ @Test
+ public void fontMissingCase_fontFamilyInstalled_fontInstallLater() {
+ // Install font families, foo.ttf, bar.ttf.
+ installTestFontFamilies(1);
+
+ // Delete one font file
+ assertThat(collectFontFiles().get(0).delete()).isTrue();
+
+ // New instance of UpdatableFontDir, this emulate a device reboot.
+ UpdatableFontDir dir = installTestFontFile(1 /* numFonts */, 2 /* version */);
+
+ // Make sure the font installation succeeds.
+ assertTestFontInstalled(dir, 2 /* version */);
+
+ // Make sure after the reboot, the configuration remains.
+ UpdatableFontDir nextDir = createNewUpdateDir();
+ assertTestFontInstalled(nextDir, 2 /* version */);
+ }
+
+ @Test
+ public void fontMissingCase_fontFileInstalled_fontFamilyInstallLater() {
+ // Install font file, foo.ttf and bar.ttf
+ installTestFontFile(2 /* numFonts */, 1 /* version */);
+
+ // Delete one font file
+ assertThat(collectFontFiles().get(0).delete()).isTrue();
+
+ // New instance of UpdatableFontDir, this emulate a device reboot.
+ UpdatableFontDir dir = installTestFontFamilies(2 /* version */);
+
+ // Make sure the font installation succeeds.
+ assertTestFontFamilyInstalled(dir, 2 /* version */);
+
+ // Make sure after the reboot, the configuration remains.
+ UpdatableFontDir nextDir = createNewUpdateDir();
+ assertTestFontFamilyInstalled(nextDir, 2 /* version */);
+ }
+
+ @Test
+ public void fontMissingCase_fontFileInstalled_fontFileInstallLater() {
+ // Install font file, foo.ttf and bar.ttf
+ installTestFontFile(2 /* numFonts */, 1 /* version */);
+
+ // Delete one font file
+ assertThat(collectFontFiles().get(0).delete()).isTrue();
+
+ // New instance of UpdatableFontDir, this emulate a device reboot.
+ UpdatableFontDir dir = installTestFontFile(2 /* numFonts */, 2 /* version */);
+
+ // Make sure the font installation succeeds.
+ assertTestFontInstalled(dir, 2 /* version */);
+
+ // Make sure after the reboot, the configuration remains.
+ UpdatableFontDir nextDir = createNewUpdateDir();
+ assertTestFontInstalled(nextDir, 2 /* version */);
+ }
+
+ @Test
+ public void fontAllMissingCase_fontFamilyInstalled_fontFamilyInstallLater() {
+ // Install font families, foo.ttf, bar.ttf.
+ installTestFontFamilies(1 /* version */);
+
+ // Delete all font files
+ removeAll(collectFontFiles());
+
+ // New instance of UpdatableFontDir, this emulate a device reboot.
+ UpdatableFontDir dir = installTestFontFamilies(2 /* version */);
+
+ // Make sure the font installation succeeds.
+ assertTestFontFamilyInstalled(dir, 2 /* version */);
+
+ // Make sure after the reboot, the configuration remains.
+ UpdatableFontDir nextDir = createNewUpdateDir();
+ assertTestFontFamilyInstalled(nextDir, 2 /* version */);
+ }
+
+ @Test
+ public void fontAllMissingCase_fontFamilyInstalled_fontInstallLater() {
+ // Install font families, foo.ttf, bar.ttf.
+ installTestFontFamilies(1 /* version */);
+
+ // Delete all font files
+ removeAll(collectFontFiles());
+
+ // New instance of UpdatableFontDir, this emulate a device reboot.
+ UpdatableFontDir dir = installTestFontFile(1 /* numFonts */, 2 /* version */);
+
+ // Make sure the font installation succeeds.
+ assertTestFontInstalled(dir, 2 /* version */);
+
+ // Make sure after the reboot, the configuration remains.
+ UpdatableFontDir nextDir = createNewUpdateDir();
+ assertTestFontInstalled(nextDir, 2 /* version */);
+ }
+
+ @Test
+ public void fontAllMissingCase_fontFileInstalled_fontFamilyInstallLater() {
+ // Install font file, foo.ttf
+ installTestFontFile(1 /* numFonts */, 1 /* version */);
+
+ // Delete all font files
+ removeAll(collectFontFiles());
+
+ // New instance of UpdatableFontDir, this emulate a device reboot.
+ UpdatableFontDir dir = installTestFontFamilies(2 /* version */);
+
+ // Make sure the font installation succeeds.
+ assertTestFontFamilyInstalled(dir, 2 /* version */);
+
+ // Make sure after the reboot, the configuration remains.
+ UpdatableFontDir nextDir = createNewUpdateDir();
+ assertTestFontFamilyInstalled(nextDir, 2 /* version */);
+ }
+
+ @Test
+ public void fontAllMissingCase_fontFileInstalled_fontFileInstallLater() {
+ // Install font file, foo.ttf
+ installTestFontFile(1 /* numFonts */, 1 /* version */);
+
+ // Delete all font files
+ removeAll(collectFontFiles());
+
+ // New instance of UpdatableFontDir, this emulate a device reboot.
+ UpdatableFontDir dir = installTestFontFile(1 /* numFonts */, 2 /* version */);
+
+ // Make sure the font installation succeeds.
+ assertTestFontInstalled(dir, 2 /* version */);
+
+ // Make sure after the reboot, the configuration remains.
+ UpdatableFontDir nextDir = createNewUpdateDir();
+ assertTestFontInstalled(nextDir, 2 /* version */);
+ }
+
+ @Test
+ public void fontDirAllMissingCase_fontFamilyInstalled_fontFamilyInstallLater() {
+ // Install font families, foo.ttf, bar.ttf.
+ installTestFontFamilies(1 /* version */);
+
+ // Delete all font files
+ removeAll(List.of(mUpdatableFontFilesDir.listFiles()));
+
+ // New instance of UpdatableFontDir, this emulate a device reboot.
+ UpdatableFontDir dir = installTestFontFamilies(2 /* version */);
+
+ // Make sure the font installation succeeds.
+ assertTestFontFamilyInstalled(dir, 2 /* version */);
+
+ // Make sure after the reboot, the configuration remains.
+ UpdatableFontDir nextDir = createNewUpdateDir();
+ assertTestFontFamilyInstalled(nextDir, 2 /* version */);
+ }
+
+ @Test
+ public void fontDirAllMissingCase_fontFamilyInstalled_fontInstallLater() {
+ // Install font families, foo.ttf, bar.ttf.
+ installTestFontFamilies(1 /* version */);
+
+ // Delete all font files
+ removeAll(List.of(mUpdatableFontFilesDir.listFiles()));
+
+ // New instance of UpdatableFontDir, this emulate a device reboot.
+ UpdatableFontDir dir = installTestFontFile(1 /* numFonts */, 2 /* version */);
+
+ // Make sure the font installation succeeds.
+ assertTestFontInstalled(dir, 2 /* version */);
+
+ // Make sure after the reboot, the configuration remains.
+ UpdatableFontDir nextDir = createNewUpdateDir();
+ assertTestFontInstalled(nextDir, 2 /* version */);
+ }
+
+ @Test
+ public void fontDirAllMissingCase_fontFileInstalled_fontFamilyInstallLater() {
+ // Install font file, foo.ttf
+ installTestFontFile(1 /* numFonts */, 1 /* version */);
+
+ // Delete all font files
+ removeAll(List.of(mUpdatableFontFilesDir.listFiles()));
+
+ // New instance of UpdatableFontDir, this emulate a device reboot.
+ UpdatableFontDir dir = installTestFontFamilies(2 /* version */);
+
+ // Make sure the font installation succeeds.
+ assertTestFontFamilyInstalled(dir, 2 /* version */);
+
+ // Make sure after the reboot, the configuration remains.
+ UpdatableFontDir nextDir = createNewUpdateDir();
+ assertTestFontFamilyInstalled(nextDir, 2 /* version */);
+ }
+
+ @Test
+ public void fontDirAllMissingCase_fontFileInstalled_fontFileInstallLater() {
+ // Install font file, foo.ttf
+ installTestFontFile(1 /* numFonts */, 1 /* version */);
+
+ // Delete all font files
+ removeAll(List.of(mUpdatableFontFilesDir.listFiles()));
+
+ // New instance of UpdatableFontDir, this emulate a device reboot.
+ UpdatableFontDir dir = installTestFontFile(1 /* numFonts */, 2 /* version */);
+
+ // Make sure the font installation succeeds.
+ assertTestFontInstalled(dir, 2 /* version */);
+
+ // Make sure after the reboot, the configuration remains.
+ UpdatableFontDir nextDir = createNewUpdateDir();
+ assertTestFontInstalled(nextDir, 2 /* version */);
+ }
+
+ @Test
+ public void dirContentAllMissingCase_fontFamilyInstalled_fontFamilyInstallLater() {
+ // Install font families, foo.ttf, bar.ttf.
+ installTestFontFamilies(1 /* version */);
+
+ // Delete all font files
+ removeAll(collectFontFiles());
+ removeAll(collectSignatureFiles());
+
+ // New instance of UpdatableFontDir, this emulate a device reboot.
+ UpdatableFontDir dir = installTestFontFamilies(2 /* version */);
+
+ // Make sure the font installation succeeds.
+ assertTestFontFamilyInstalled(dir, 2 /* version */);
+
+ // Make sure after the reboot, the configuration remains.
+ UpdatableFontDir nextDir = createNewUpdateDir();
+ assertTestFontFamilyInstalled(nextDir, 2 /* version */);
+ }
+
+ @Test
+ public void dirContentAllMissingCase_fontFamilyInstalled_fontInstallLater() {
+ // Install font families, foo.ttf, bar.ttf.
+ installTestFontFamilies(1 /* version */);
+
+ // Delete all font files
+ removeAll(collectFontFiles());
+ removeAll(collectSignatureFiles());
+
+ // New instance of UpdatableFontDir, this emulate a device reboot.
+ UpdatableFontDir dir = installTestFontFile(1 /* numFonts */, 2 /* version */);
+
+ // Make sure the font installation succeeds.
+ assertTestFontInstalled(dir, 2 /* version */);
+
+ // Make sure after the reboot, the configuration remains.
+ UpdatableFontDir nextDir = createNewUpdateDir();
+ assertTestFontInstalled(nextDir, 2 /* version */);
+ }
+
+ @Test
+ public void dirContentAllMissingCase_fontFileInstalled_fontFamilyInstallLater() {
+ // Install font file, foo.ttf
+ installTestFontFile(1 /* numFonts */, 1 /* version */);
+
+ // Delete all font files
+ removeAll(collectFontFiles());
+ removeAll(collectSignatureFiles());
+
+ // New instance of UpdatableFontDir, this emulate a device reboot.
+ UpdatableFontDir dir = installTestFontFamilies(2 /* version */);
+
+ // Make sure the font installation succeeds.
+ assertTestFontFamilyInstalled(dir, 2 /* version */);
+
+ // Make sure after the reboot, the configuration remains.
+ UpdatableFontDir nextDir = createNewUpdateDir();
+ assertTestFontFamilyInstalled(nextDir, 2 /* version */);
+ }
+
+ @Test
+ public void dirContentAllMissingCase_fontFileInstalled_fontFileInstallLater() {
+ // Install font file, foo.ttf
+ installTestFontFile(1 /* numFonts */, 1 /* version */);
+
+ // Delete all font files
+ removeAll(collectFontFiles());
+ removeAll(collectSignatureFiles());
+
+ // New instance of UpdatableFontDir, this emulate a device reboot.
+ UpdatableFontDir dir = installTestFontFile(1 /* numFonts */, 2 /* version */);
+
+ // Make sure the font installation succeeds.
+ assertTestFontInstalled(dir, 2 /* version */);
+
+ // Make sure after the reboot, the configuration remains.
+ UpdatableFontDir nextDir = createNewUpdateDir();
+ assertTestFontInstalled(nextDir, 2 /* version */);
+ }
+
private FontUpdateRequest newFontUpdateRequest(String content, String signature)
throws Exception {
File file = File.createTempFile("font", "ttf", mCacheDir);
diff --git a/services/tests/servicestests/src/com/android/server/hdmi/HdmiCecLocalDevicePlaybackTest.java b/services/tests/servicestests/src/com/android/server/hdmi/HdmiCecLocalDevicePlaybackTest.java
index b7175bc8..28da97c 100644
--- a/services/tests/servicestests/src/com/android/server/hdmi/HdmiCecLocalDevicePlaybackTest.java
+++ b/services/tests/servicestests/src/com/android/server/hdmi/HdmiCecLocalDevicePlaybackTest.java
@@ -21,6 +21,9 @@
import static com.android.server.hdmi.Constants.ADDR_BROADCAST;
import static com.android.server.hdmi.Constants.ADDR_INVALID;
import static com.android.server.hdmi.Constants.ADDR_TV;
+import static com.android.server.hdmi.HdmiCecLocalDevicePlayback.POPUP_AFTER_ACTIVE_SOURCE_LOST_DELAY_MS;
+import static com.android.server.hdmi.HdmiCecLocalDevicePlayback.STANDBY_AFTER_ACTIVE_SOURCE_LOST_DELAY_MS;
+import static com.android.server.hdmi.HdmiControlService.INITIATED_BY_BOOT_UP;
import static com.android.server.hdmi.HdmiControlService.INITIATED_BY_ENABLE_CEC;
import static com.google.common.truth.Truth.assertThat;
@@ -89,6 +92,8 @@
private FakePowerManagerInternalWrapper mPowerManagerInternal =
new FakePowerManagerInternalWrapper();
+ private boolean mIsOnActiveSourceLostPopupActive;
+
@Before
public void setUp() {
MockitoAnnotations.initMocks(this);
@@ -143,6 +148,18 @@
mHdmiControlService, mNativeWrapper, mHdmiControlService.getAtomWriter());
mHdmiControlService.setCecController(mHdmiCecController);
mHdmiControlService.setHdmiMhlController(HdmiMhlControllerStub.create(mHdmiControlService));
+ mHdmiCecLocalDevicePlayback = new HdmiCecLocalDevicePlayback(mHdmiControlService) {
+ @Override
+ void startHdmiCecActiveSourceLostActivity() {
+ mIsOnActiveSourceLostPopupActive = true;
+ }
+
+ @Override
+ void dismissUiOnActiveSourceStatusRecovered() {
+ mIsOnActiveSourceLostPopupActive = false;
+ }
+ };
+ mHdmiCecLocalDevicePlayback.init();
HdmiPortInfo[] hdmiPortInfos = new HdmiPortInfo[1];
hdmiPortInfos[0] =
new HdmiPortInfo.Builder(1, HdmiPortInfo.PORT_OUTPUT, 0x0000)
@@ -160,14 +177,15 @@
mPlaybackPhysicalAddress = 0x2000;
mNativeWrapper.setPhysicalAddress(mPlaybackPhysicalAddress);
mTestLooper.dispatchAll();
- mHdmiCecLocalDevicePlayback = mHdmiControlService.playback();
mLocalDevices.add(mHdmiCecLocalDevicePlayback);
- mPlaybackLogicalAddress = mHdmiCecLocalDevicePlayback.getDeviceInfo().getLogicalAddress();
mHdmiControlService.getHdmiCecNetwork().addCecDevice(INFO_TV);
mNativeWrapper.clearResultMessages();
mHdmiCecLocalDevicePlayback.mPlaybackDeviceActionOnRoutingControl =
HdmiProperties.playback_device_action_on_routing_control_values.NONE;
mHdmiControlService.setPowerStatus(HdmiControlManager.POWER_STATUS_ON);
+ mHdmiControlService.allocateLogicalAddress(mLocalDevices, INITIATED_BY_BOOT_UP);
+ mTestLooper.dispatchAll();
+ mPlaybackLogicalAddress = mHdmiCecLocalDevicePlayback.getDeviceInfo().getLogicalAddress();
}
@Test
@@ -381,6 +399,8 @@
assertThat(mHdmiCecLocalDevicePlayback.handleRoutingChange(message))
.isEqualTo(Constants.HANDLED);
assertThat(mHdmiCecLocalDevicePlayback.isActiveSource()).isFalse();
+ // After 30s of device inactivity, device would go to sleep.
+ skipActiveSourceLostUi(STANDBY_AFTER_ACTIVE_SOURCE_LOST_DELAY_MS);
assertThat(mPowerManager.isInteractive()).isFalse();
}
@@ -422,6 +442,8 @@
assertThat(mHdmiCecLocalDevicePlayback.handleRoutingChange(message))
.isEqualTo(Constants.HANDLED);
assertThat(mHdmiCecLocalDevicePlayback.isActiveSource()).isFalse();
+ // After 30s of device inactivity, device would go to sleep.
+ skipActiveSourceLostUi(STANDBY_AFTER_ACTIVE_SOURCE_LOST_DELAY_MS);
assertThat(mPowerManager.isInteractive()).isFalse();
}
@@ -580,6 +602,8 @@
assertThat(mHdmiCecLocalDevicePlayback.handleRoutingInformation(message))
.isEqualTo(Constants.HANDLED);
assertThat(mHdmiCecLocalDevicePlayback.isActiveSource()).isFalse();
+ // After 30s of device inactivity, device would go to sleep.
+ skipActiveSourceLostUi(STANDBY_AFTER_ACTIVE_SOURCE_LOST_DELAY_MS);
assertThat(mPowerManager.isInteractive()).isFalse();
}
@@ -683,6 +707,8 @@
// See {@link HdmiCecLocalDevicePlayback#handleRoutingChangeAndInformation}.
assertThat(mHdmiCecLocalDevicePlayback.getActiveSource().logicalAddress).isEqualTo(
ADDR_INVALID);
+ // After 30s of device inactivity, device would go to sleep.
+ skipActiveSourceLostUi(STANDBY_AFTER_ACTIVE_SOURCE_LOST_DELAY_MS);
assertThat(mPowerManager.isInteractive()).isFalse();
}
@@ -1225,6 +1251,9 @@
assertThat(mHdmiCecLocalDevicePlayback.handleActiveSource(message))
.isEqualTo(Constants.HANDLED);
mTestLooper.dispatchAll();
+
+ // After 30s of device inactivity, device would go to sleep.
+ skipActiveSourceLostUi(STANDBY_AFTER_ACTIVE_SOURCE_LOST_DELAY_MS);
assertThat(mPowerManager.isInteractive()).isFalse();
assertThat(mHdmiCecLocalDevicePlayback.isActiveSource()).isFalse();
}
@@ -1299,6 +1328,8 @@
assertThat(mHdmiCecLocalDevicePlayback.handleActiveSource(message2))
.isEqualTo(Constants.HANDLED);
assertThat(mHdmiCecLocalDevicePlayback.isActiveSource()).isFalse();
+ // After 30s of device inactivity, device would go to sleep.
+ skipActiveSourceLostUi(STANDBY_AFTER_ACTIVE_SOURCE_LOST_DELAY_MS);
assertThat(mPowerManager.isInteractive()).isFalse();
mHdmiControlService.onStandby(HdmiControlService.STANDBY_SCREEN_OFF);
// 3. DUT becomes <AS> again.
@@ -1659,6 +1690,9 @@
assertThat(mHdmiCecLocalDevicePlayback.handleSetStreamPath(message))
.isEqualTo(Constants.HANDLED);
assertThat(mHdmiCecLocalDevicePlayback.isActiveSource()).isFalse();
+
+ // After 30s of device inactivity, device would go to sleep.
+ skipActiveSourceLostUi(STANDBY_AFTER_ACTIVE_SOURCE_LOST_DELAY_MS);
assertThat(mPowerManager.isInteractive()).isFalse();
}
@@ -2255,6 +2289,159 @@
}
@Test
+ public void onActiveSourceLostToTv_noInteractionWithDut_standbyAfterTimeout() {
+ mHdmiCecLocalDevicePlayback.mService.getHdmiCecConfig().setStringValue(
+ HdmiControlManager.CEC_SETTING_NAME_POWER_STATE_CHANGE_ON_ACTIVE_SOURCE_LOST,
+ HdmiControlManager.POWER_STATE_CHANGE_ON_ACTIVE_SOURCE_LOST_STANDBY_NOW);
+
+ mHdmiCecLocalDevicePlayback.setActiveSource(mPlaybackLogicalAddress,
+ mPlaybackPhysicalAddress, "HdmiCecLocalDevicePlaybackTest");
+ mPowerManager.setInteractive(true);
+ mNativeWrapper.clearResultMessages();
+ mTestLooper.dispatchAll();
+
+ HdmiCecMessage activeSourceFromTv =
+ HdmiCecMessageBuilder.buildActiveSource(ADDR_TV, 0x0000);
+
+ assertThat(mHdmiCecLocalDevicePlayback.handleActiveSource(activeSourceFromTv))
+ .isEqualTo(Constants.HANDLED);
+ assertThat(mHdmiCecLocalDevicePlayback.getActiveSource().logicalAddress).isEqualTo(ADDR_TV);
+ mTestLooper.dispatchAll();
+
+ // After 30s of device inactivity, device would go to sleep.
+ skipActiveSourceLostUi(STANDBY_AFTER_ACTIVE_SOURCE_LOST_DELAY_MS);
+ assertThat(mPowerManager.isInteractive()).isFalse();
+ }
+
+ @Test
+ public void onActiveSourceLost_interactionWithDut_noStandbyAfterTimeout() {
+ mHdmiCecLocalDevicePlayback.mService.getHdmiCecConfig().setStringValue(
+ HdmiControlManager.CEC_SETTING_NAME_POWER_STATE_CHANGE_ON_ACTIVE_SOURCE_LOST,
+ HdmiControlManager.POWER_STATE_CHANGE_ON_ACTIVE_SOURCE_LOST_STANDBY_NOW);
+ mHdmiCecLocalDevicePlayback.setActiveSource(mPlaybackLogicalAddress,
+ mPlaybackPhysicalAddress, "HdmiCecLocalDevicePlaybackTest");
+ mPowerManager.setInteractive(true);
+ mNativeWrapper.clearResultMessages();
+ mTestLooper.dispatchAll();
+
+ HdmiCecMessage activeSourceFromTv =
+ HdmiCecMessageBuilder.buildActiveSource(ADDR_TV, 0x0000);
+ HdmiCecMessage activeSourceFromPlayback =
+ HdmiCecMessageBuilder.buildActiveSource(mPlaybackLogicalAddress,
+ mPlaybackPhysicalAddress);
+
+ assertThat(mHdmiCecLocalDevicePlayback.handleActiveSource(activeSourceFromTv))
+ .isEqualTo(Constants.HANDLED);
+ assertThat(mHdmiCecLocalDevicePlayback.getActiveSource().logicalAddress).isEqualTo(ADDR_TV);
+ mTestLooper.dispatchAll();
+
+ // User interacted with the DUT, so the device will not go to standby.
+ skipActiveSourceLostUi(0);
+ assertThat(mIsOnActiveSourceLostPopupActive).isFalse();
+ assertThat(mPowerManager.isInteractive()).isTrue();
+ assertThat(mNativeWrapper.getResultMessages().contains(activeSourceFromPlayback)).isTrue();
+ assertThat(mHdmiCecLocalDevicePlayback.getActiveSource().logicalAddress)
+ .isEqualTo(mPlaybackLogicalAddress);
+ assertThat(mHdmiCecLocalDevicePlayback.getActiveSource().physicalAddress)
+ .isEqualTo(mPlaybackPhysicalAddress);
+ }
+
+ @Test
+ public void onActiveSourceLost_incomingSetStreamPathToDut_noStandbyAfterTimeout() {
+ mHdmiCecLocalDevicePlayback.mService.getHdmiCecConfig().setStringValue(
+ HdmiControlManager.CEC_SETTING_NAME_POWER_STATE_CHANGE_ON_ACTIVE_SOURCE_LOST,
+ HdmiControlManager.POWER_STATE_CHANGE_ON_ACTIVE_SOURCE_LOST_STANDBY_NOW);
+ mHdmiCecLocalDevicePlayback.setActiveSource(mPlaybackLogicalAddress,
+ mPlaybackPhysicalAddress, "HdmiCecLocalDevicePlaybackTest");
+ mPowerManager.setInteractive(true);
+ mNativeWrapper.clearResultMessages();
+ mTestLooper.dispatchAll();
+
+ HdmiCecMessage activeSourceFromTv =
+ HdmiCecMessageBuilder.buildActiveSource(ADDR_TV, 0x0000);
+ HdmiCecMessage activeSourceFromPlayback =
+ HdmiCecMessageBuilder.buildActiveSource(mPlaybackLogicalAddress,
+ mPlaybackPhysicalAddress);
+ HdmiCecMessage setStreamPathToPlayback = HdmiCecMessageBuilder.buildSetStreamPath(ADDR_TV,
+ mPlaybackPhysicalAddress);
+
+ assertThat(mHdmiCecLocalDevicePlayback.handleActiveSource(activeSourceFromTv))
+ .isEqualTo(Constants.HANDLED);
+ assertThat(mHdmiCecLocalDevicePlayback.getActiveSource().logicalAddress).isEqualTo(ADDR_TV);
+ mTestLooper.dispatchAll();
+
+ // Pop-up is triggered.
+ mTestLooper.moveTimeForward(POPUP_AFTER_ACTIVE_SOURCE_LOST_DELAY_MS);
+ mTestLooper.dispatchAll();
+ assertThat(mIsOnActiveSourceLostPopupActive).isTrue();
+
+ assertThat(mHdmiCecLocalDevicePlayback.handleSetStreamPath(setStreamPathToPlayback))
+ .isEqualTo(Constants.HANDLED);
+ mTestLooper.dispatchAll();
+
+ assertThat(mIsOnActiveSourceLostPopupActive).isFalse();
+ assertThat(mNativeWrapper.getResultMessages().contains(activeSourceFromPlayback)).isTrue();
+ assertThat(mHdmiCecLocalDevicePlayback.getActiveSource().logicalAddress)
+ .isEqualTo(mPlaybackLogicalAddress);
+ assertThat(mHdmiCecLocalDevicePlayback.getActiveSource().physicalAddress)
+ .isEqualTo(mPlaybackPhysicalAddress);
+ mTestLooper.moveTimeForward(STANDBY_AFTER_ACTIVE_SOURCE_LOST_DELAY_MS);
+ mTestLooper.dispatchAll();
+
+ assertThat(mPowerManager.isInteractive()).isTrue();
+ }
+
+ @Test
+ public void onActiveSourceLost_incomingRoutingChangeToDut_noStandbyAfterTimeout() {
+ mHdmiCecLocalDevicePlayback.mService.getHdmiCecConfig().setStringValue(
+ HdmiControlManager.CEC_SETTING_NAME_POWER_STATE_CHANGE_ON_ACTIVE_SOURCE_LOST,
+ HdmiControlManager.POWER_STATE_CHANGE_ON_ACTIVE_SOURCE_LOST_STANDBY_NOW);
+ mHdmiCecLocalDevicePlayback.mPlaybackDeviceActionOnRoutingControl =
+ HdmiProperties
+ .playback_device_action_on_routing_control_values
+ .WAKE_UP_AND_SEND_ACTIVE_SOURCE;
+ mHdmiCecLocalDevicePlayback.setActiveSource(mPlaybackLogicalAddress,
+ mPlaybackPhysicalAddress, "HdmiCecLocalDevicePlaybackTest");
+ mPowerManager.setInteractive(true);
+ mNativeWrapper.clearResultMessages();
+ mTestLooper.dispatchAll();
+
+ HdmiCecMessage activeSourceFromTv =
+ HdmiCecMessageBuilder.buildActiveSource(ADDR_TV, 0x0000);
+ HdmiCecMessage activeSourceFromPlayback =
+ HdmiCecMessageBuilder.buildActiveSource(mPlaybackLogicalAddress,
+ mPlaybackPhysicalAddress);
+ HdmiCecMessage routingChangeToPlayback =
+ HdmiCecMessageBuilder.buildRoutingChange(ADDR_TV, 0x0000,
+ mPlaybackPhysicalAddress);
+
+ assertThat(mHdmiCecLocalDevicePlayback.handleActiveSource(activeSourceFromTv))
+ .isEqualTo(Constants.HANDLED);
+ assertThat(mHdmiCecLocalDevicePlayback.getActiveSource().logicalAddress).isEqualTo(ADDR_TV);
+ mTestLooper.dispatchAll();
+
+ // Pop-up is triggered.
+ mTestLooper.moveTimeForward(POPUP_AFTER_ACTIVE_SOURCE_LOST_DELAY_MS);
+ mTestLooper.dispatchAll();
+ assertThat(mIsOnActiveSourceLostPopupActive).isTrue();
+
+ assertThat(mHdmiCecLocalDevicePlayback.handleRoutingChange(routingChangeToPlayback))
+ .isEqualTo(Constants.HANDLED);
+ mTestLooper.dispatchAll();
+
+ assertThat(mIsOnActiveSourceLostPopupActive).isFalse();
+ assertThat(mNativeWrapper.getResultMessages().contains(activeSourceFromPlayback)).isTrue();
+ assertThat(mHdmiCecLocalDevicePlayback.getActiveSource().logicalAddress)
+ .isEqualTo(mPlaybackLogicalAddress);
+ assertThat(mHdmiCecLocalDevicePlayback.getActiveSource().physicalAddress)
+ .isEqualTo(mPlaybackPhysicalAddress);
+ mTestLooper.moveTimeForward(STANDBY_AFTER_ACTIVE_SOURCE_LOST_DELAY_MS);
+ mTestLooper.dispatchAll();
+
+ assertThat(mPowerManager.isInteractive()).isTrue();
+ }
+
+ @Test
public void handleRoutingChange_addressNotAllocated_removeActiveSourceAction() {
long allocationDelay = TimeUnit.SECONDS.toMillis(60);
mHdmiCecLocalDevicePlayback.mPlaybackDeviceActionOnRoutingControl =
@@ -2360,4 +2547,14 @@
assertThat(mHdmiCecLocalDevicePlayback.getActions(ActiveSourceAction.class)).isEmpty();
assertThat(mNativeWrapper.getResultMessages()).doesNotContain(unexpectedMessage);
}
+
+ private void skipActiveSourceLostUi(long idleDuration) {
+ mTestLooper.moveTimeForward(POPUP_AFTER_ACTIVE_SOURCE_LOST_DELAY_MS);
+ mTestLooper.dispatchAll();
+ assertThat(mIsOnActiveSourceLostPopupActive).isTrue();
+
+ mPowerManagerInternal.setIdleDuration(idleDuration);
+ mTestLooper.moveTimeForward(STANDBY_AFTER_ACTIVE_SOURCE_LOST_DELAY_MS);
+ mTestLooper.dispatchAll();
+ }
}
diff --git a/services/tests/servicestests/src/com/android/server/power/hint/TEST_MAPPING b/services/tests/servicestests/src/com/android/server/power/hint/TEST_MAPPING
index 2d5df07..874eec7 100644
--- a/services/tests/servicestests/src/com/android/server/power/hint/TEST_MAPPING
+++ b/services/tests/servicestests/src/com/android/server/power/hint/TEST_MAPPING
@@ -1,5 +1,5 @@
{
- "postsubmit": [
+ "presubmit": [
{
"name": "FrameworksServicesTests",
"options": [
diff --git a/services/tests/uiservicestests/src/com/android/server/notification/NotificationChannelExtractorTest.java b/services/tests/uiservicestests/src/com/android/server/notification/NotificationChannelExtractorTest.java
index 77ce2f0..ad25d76 100644
--- a/services/tests/uiservicestests/src/com/android/server/notification/NotificationChannelExtractorTest.java
+++ b/services/tests/uiservicestests/src/com/android/server/notification/NotificationChannelExtractorTest.java
@@ -16,26 +16,43 @@
package com.android.server.notification;
+import static android.app.Notification.CATEGORY_ALARM;
import static android.app.NotificationManager.IMPORTANCE_HIGH;
import static android.app.NotificationManager.IMPORTANCE_LOW;
+import static android.media.AudioAttributes.USAGE_ALARM;
+import static android.media.AudioAttributes.USAGE_MEDIA;
+import static android.media.AudioAttributes.USAGE_NOTIFICATION;
+import static android.media.AudioAttributes.USAGE_NOTIFICATION_RINGTONE;
+import static android.media.AudioAttributes.USAGE_UNKNOWN;
+import static android.platform.test.flag.junit.SetFlagsRule.DefaultInitValueType.DEVICE_DEFAULT;
+import static com.google.common.truth.Truth.assertThat;
import static junit.framework.Assert.assertEquals;
import static junit.framework.Assert.assertNull;
import static org.mockito.Matchers.any;
import static org.mockito.Matchers.anyInt;
import static org.mockito.Matchers.eq;
+import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.when;
+import android.app.Flags;
import android.app.Notification;
import android.app.NotificationChannel;
+import android.app.PendingIntent;
+import android.app.Person;
+import android.media.AudioAttributes;
+import android.net.Uri;
import android.os.UserHandle;
+import android.platform.test.annotations.EnableFlags;
+import android.platform.test.flag.junit.SetFlagsRule;
import android.provider.Settings;
import android.service.notification.StatusBarNotification;
import com.android.server.UiServiceTestCase;
import org.junit.Before;
+import org.junit.Rule;
import org.junit.Test;
import org.mockito.Mock;
import org.mockito.MockitoAnnotations;
@@ -44,25 +61,34 @@
@Mock RankingConfig mConfig;
+ @Rule
+ public final SetFlagsRule mSetFlagsRule = new SetFlagsRule(DEVICE_DEFAULT);
+
+ NotificationChannelExtractor mExtractor;
+
@Before
public void setUp() {
MockitoAnnotations.initMocks(this);
+
+ mExtractor = new NotificationChannelExtractor();
+ mExtractor.setConfig(mConfig);
+ mExtractor.initialize(mContext, null);
+ }
+
+ private NotificationRecord getRecord(NotificationChannel channel, Notification n) {
+ StatusBarNotification sbn = new StatusBarNotification("", "", 0, "", 0,
+ 0, n, UserHandle.ALL, null, System.currentTimeMillis());
+ return new NotificationRecord(getContext(), sbn, channel);
}
@Test
- public void testExtractsUpdatedChannel() {
- NotificationChannelExtractor extractor = new NotificationChannelExtractor();
- extractor.setConfig(mConfig);
- extractor.initialize(mContext, null);
-
+ public void testExtractsUpdatedConversationChannel() {
NotificationChannel channel = new NotificationChannel("a", "a", IMPORTANCE_LOW);
- final Notification.Builder builder = new Notification.Builder(getContext())
+ final Notification n = new Notification.Builder(getContext())
.setContentTitle("foo")
- .setSmallIcon(android.R.drawable.sym_def_app_icon);
- Notification n = builder.build();
- StatusBarNotification sbn = new StatusBarNotification("", "", 0, "", 0,
- 0, n, UserHandle.ALL, null, System.currentTimeMillis());
- NotificationRecord r = new NotificationRecord(getContext(), sbn, channel);
+ .setSmallIcon(android.R.drawable.sym_def_app_icon)
+ .build();
+ NotificationRecord r = getRecord(channel, n);
NotificationChannel updatedChannel =
new NotificationChannel("a", "", IMPORTANCE_HIGH);
@@ -70,26 +96,19 @@
any(), anyInt(), eq("a"), eq(null), eq(true), eq(false)))
.thenReturn(updatedChannel);
- assertNull(extractor.process(r));
+ assertNull(mExtractor.process(r));
assertEquals(updatedChannel, r.getChannel());
}
@Test
- public void testInvalidShortcutFlagEnabled_looksUpCorrectChannel() {
-
- NotificationChannelExtractor extractor = new NotificationChannelExtractor();
- extractor.setConfig(mConfig);
- extractor.initialize(mContext, null);
-
+ public void testInvalidShortcutFlagEnabled_looksUpCorrectNonChannel() {
NotificationChannel channel = new NotificationChannel("a", "a", IMPORTANCE_LOW);
- final Notification.Builder builder = new Notification.Builder(getContext())
+ final Notification n = new Notification.Builder(getContext())
.setContentTitle("foo")
.setStyle(new Notification.MessagingStyle("name"))
- .setSmallIcon(android.R.drawable.sym_def_app_icon);
- Notification n = builder.build();
- StatusBarNotification sbn = new StatusBarNotification("", "", 0, "tag", 0,
- 0, n, UserHandle.ALL, null, System.currentTimeMillis());
- NotificationRecord r = new NotificationRecord(getContext(), sbn, channel);
+ .setSmallIcon(android.R.drawable.sym_def_app_icon)
+ .build();
+ NotificationRecord r = getRecord(channel, n);
NotificationChannel updatedChannel =
new NotificationChannel("a", "", IMPORTANCE_HIGH);
@@ -98,26 +117,19 @@
eq(true), eq(false)))
.thenReturn(updatedChannel);
- assertNull(extractor.process(r));
+ assertNull(mExtractor.process(r));
assertEquals(updatedChannel, r.getChannel());
}
@Test
public void testInvalidShortcutFlagDisabled_looksUpCorrectChannel() {
-
- NotificationChannelExtractor extractor = new NotificationChannelExtractor();
- extractor.setConfig(mConfig);
- extractor.initialize(mContext, null);
-
NotificationChannel channel = new NotificationChannel("a", "a", IMPORTANCE_LOW);
- final Notification.Builder builder = new Notification.Builder(getContext())
+ final Notification n = new Notification.Builder(getContext())
.setContentTitle("foo")
.setStyle(new Notification.MessagingStyle("name"))
- .setSmallIcon(android.R.drawable.sym_def_app_icon);
- Notification n = builder.build();
- StatusBarNotification sbn = new StatusBarNotification("", "", 0, "tag", 0,
- 0, n, UserHandle.ALL, null, System.currentTimeMillis());
- NotificationRecord r = new NotificationRecord(getContext(), sbn, channel);
+ .setSmallIcon(android.R.drawable.sym_def_app_icon)
+ .build();
+ NotificationRecord r = getRecord(channel, n);
NotificationChannel updatedChannel =
new NotificationChannel("a", "", IMPORTANCE_HIGH);
@@ -125,7 +137,129 @@
any(), anyInt(), eq("a"), eq(null), eq(true), eq(false)))
.thenReturn(updatedChannel);
- assertNull(extractor.process(r));
+ assertNull(mExtractor.process(r));
assertEquals(updatedChannel, r.getChannel());
}
+
+ @Test
+ @EnableFlags(Flags.FLAG_RESTRICT_AUDIO_ATTRIBUTES_CALL)
+ public void testAudioAttributes_callStyleCanUseCallUsage() {
+ NotificationChannel channel = new NotificationChannel("a", "a", IMPORTANCE_HIGH);
+ channel.setSound(Uri.EMPTY, new AudioAttributes.Builder()
+ .setUsage(USAGE_NOTIFICATION_RINGTONE)
+ .build());
+ final Notification n = new Notification.Builder(getContext())
+ .setContentTitle("foo")
+ .setStyle(Notification.CallStyle.forIncomingCall(
+ new Person.Builder().setName("A Caller").build(),
+ mock(PendingIntent.class),
+ mock(PendingIntent.class)
+ ))
+ .setSmallIcon(android.R.drawable.sym_def_app_icon)
+ .build();
+ NotificationRecord r = getRecord(channel, n);
+
+ assertThat(mExtractor.process(r)).isNull();
+ assertThat(r.getAudioAttributes().getUsage()).isEqualTo(USAGE_NOTIFICATION_RINGTONE);
+ assertThat(r.getChannel()).isEqualTo(channel);
+ }
+
+ @Test
+ @EnableFlags(Flags.FLAG_RESTRICT_AUDIO_ATTRIBUTES_CALL)
+ public void testAudioAttributes_nonCallStyleCannotUseCallUsage() {
+ NotificationChannel channel = new NotificationChannel("a", "a", IMPORTANCE_HIGH);
+ channel.setSound(Uri.EMPTY, new AudioAttributes.Builder()
+ .setUsage(USAGE_NOTIFICATION_RINGTONE)
+ .build());
+ final Notification n = new Notification.Builder(getContext())
+ .setContentTitle("foo")
+ .setSmallIcon(android.R.drawable.sym_def_app_icon)
+ .build();
+ NotificationRecord r = getRecord(channel, n);
+
+ assertThat(mExtractor.process(r)).isNull();
+ // instance updated
+ assertThat(r.getAudioAttributes().getUsage()).isEqualTo(USAGE_NOTIFICATION);
+ // in-memory channel unchanged
+ assertThat(channel.getAudioAttributes().getUsage()).isEqualTo(USAGE_NOTIFICATION_RINGTONE);
+ }
+
+ @Test
+ @EnableFlags(Flags.FLAG_RESTRICT_AUDIO_ATTRIBUTES_ALARM)
+ public void testAudioAttributes_alarmCategoryCanUseAlarmUsage() {
+ NotificationChannel channel = new NotificationChannel("a", "a", IMPORTANCE_HIGH);
+ channel.setSound(Uri.EMPTY, new AudioAttributes.Builder()
+ .setUsage(USAGE_ALARM)
+ .build());
+ final Notification n = new Notification.Builder(getContext())
+ .setContentTitle("foo")
+ .setCategory(CATEGORY_ALARM)
+ .setSmallIcon(android.R.drawable.sym_def_app_icon)
+ .build();
+ NotificationRecord r = getRecord(channel, n);
+
+ assertThat(mExtractor.process(r)).isNull();
+ assertThat(r.getAudioAttributes().getUsage()).isEqualTo(USAGE_ALARM);
+ assertThat(r.getChannel()).isEqualTo(channel);
+ }
+
+ @Test
+ @EnableFlags(Flags.FLAG_RESTRICT_AUDIO_ATTRIBUTES_ALARM)
+ public void testAudioAttributes_nonAlarmCategoryCannotUseAlarmUsage() {
+ NotificationChannel channel = new NotificationChannel("a", "a", IMPORTANCE_HIGH);
+ channel.setSound(Uri.EMPTY, new AudioAttributes.Builder()
+ .setUsage(USAGE_ALARM)
+ .build());
+ final Notification n = new Notification.Builder(getContext())
+ .setContentTitle("foo")
+ .setSmallIcon(android.R.drawable.sym_def_app_icon)
+ .build();
+ NotificationRecord r = getRecord(channel, n);
+
+ assertThat(mExtractor.process(r)).isNull();
+ // instance updated
+ assertThat(r.getAudioAttributes().getUsage()).isEqualTo(USAGE_NOTIFICATION);
+ // in-memory channel unchanged
+ assertThat(channel.getAudioAttributes().getUsage()).isEqualTo(USAGE_ALARM);
+ }
+
+ @Test
+ @EnableFlags(Flags.FLAG_RESTRICT_AUDIO_ATTRIBUTES_MEDIA)
+ public void testAudioAttributes_noMediaUsage() {
+ NotificationChannel channel = new NotificationChannel("a", "a", IMPORTANCE_HIGH);
+ channel.setSound(Uri.EMPTY, new AudioAttributes.Builder()
+ .setUsage(USAGE_MEDIA)
+ .build());
+ final Notification n = new Notification.Builder(getContext())
+ .setContentTitle("foo")
+ .setSmallIcon(android.R.drawable.sym_def_app_icon)
+ .build();
+ NotificationRecord r = getRecord(channel, n);
+
+ assertThat(mExtractor.process(r)).isNull();
+ // instance updated
+ assertThat(r.getAudioAttributes().getUsage()).isEqualTo(USAGE_NOTIFICATION);
+ // in-memory channel unchanged
+ assertThat(channel.getAudioAttributes().getUsage()).isEqualTo(USAGE_MEDIA);
+ }
+
+ @Test
+ @EnableFlags(Flags.FLAG_RESTRICT_AUDIO_ATTRIBUTES_MEDIA)
+ public void testAudioAttributes_noUnknownUsage() {
+ NotificationChannel channel = new NotificationChannel("a", "a", IMPORTANCE_HIGH);
+ channel.setSound(Uri.EMPTY, new AudioAttributes.Builder()
+ .setUsage(USAGE_UNKNOWN)
+ .build());
+ final Notification n = new Notification.Builder(getContext())
+ .setContentTitle("foo")
+ .setSmallIcon(android.R.drawable.sym_def_app_icon)
+ .build();
+ NotificationRecord r = getRecord(channel, n);
+
+ assertThat(mExtractor.process(r)).isNull();
+ // instance updated
+ assertThat(r.getAudioAttributes().getUsage()).isEqualTo(USAGE_NOTIFICATION);
+ // in-memory channel unchanged
+ assertThat(channel.getAudioAttributes().getUsage()).isEqualTo(USAGE_UNKNOWN);
+ }
}
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 20d1e98..f6fa487 100755
--- a/services/tests/uiservicestests/src/com/android/server/notification/NotificationManagerServiceTest.java
+++ b/services/tests/uiservicestests/src/com/android/server/notification/NotificationManagerServiceTest.java
@@ -72,6 +72,8 @@
import static android.content.pm.PackageManager.FEATURE_WATCH;
import static android.content.pm.PackageManager.PERMISSION_DENIED;
import static android.content.pm.PackageManager.PERMISSION_GRANTED;
+import static android.media.AudioAttributes.USAGE_MEDIA;
+import static android.media.AudioAttributes.USAGE_NOTIFICATION;
import static android.os.Build.VERSION_CODES.O_MR1;
import static android.os.Build.VERSION_CODES.P;
import static android.os.Flags.FLAG_ALLOW_PRIVATE_PROFILE;
@@ -191,6 +193,7 @@
import android.graphics.Bitmap;
import android.graphics.Color;
import android.graphics.drawable.Icon;
+import android.media.AudioAttributes;
import android.media.AudioManager;
import android.media.session.MediaSession;
import android.net.Uri;
@@ -14868,6 +14871,33 @@
assertThat(posted.getRankingTimeMs()).isEqualTo(posted.getSbn().getPostTime());
}
+ @Test
+ @EnableFlags(android.app.Flags.FLAG_RESTRICT_AUDIO_ATTRIBUTES_MEDIA)
+ public void testRestrictAudioAttributes_listenersGetCorrectAttributes() throws Exception {
+ NotificationChannel sound = new NotificationChannel("a", "a", IMPORTANCE_DEFAULT);
+ sound.setSound(Uri.EMPTY, new AudioAttributes.Builder().setUsage(USAGE_MEDIA).build());
+ mBinderService.createNotificationChannels(mPkg, new ParceledListSlice(
+ Arrays.asList(sound)));
+
+ Notification n = new Notification.Builder(mContext, "a")
+ .setSmallIcon(android.R.drawable.sym_def_app_icon)
+ .build();
+ StatusBarNotification sbn = new StatusBarNotification(mPkg, mPkg, 9, null, mUid, 0,
+ n, UserHandle.getUserHandleForUid(mUid), null, 0);
+
+ mBinderService.enqueueNotificationWithTag(mPkg, mPkg, sbn.getTag(),
+ sbn.getId(), sbn.getNotification(), sbn.getUserId());
+ waitForIdle();
+
+ ArgumentCaptor<NotificationRecord> captor =
+ ArgumentCaptor.forClass(NotificationRecord.class);
+ verify(mListeners, times(1)).prepareNotifyPostedLocked(
+ captor.capture(), any(), anyBoolean());
+
+ assertThat(captor.getValue().getChannel().getAudioAttributes().getUsage())
+ .isEqualTo(USAGE_NOTIFICATION);
+ }
+
private NotificationRecord createAndPostCallStyleNotification(String packageName,
UserHandle userHandle, String testName) throws Exception {
Person person = new Person.Builder().setName("caller").build();
diff --git a/services/tests/uiservicestests/src/com/android/server/notification/RankingHelperTest.java b/services/tests/uiservicestests/src/com/android/server/notification/RankingHelperTest.java
index a071f0b..ad420f6 100644
--- a/services/tests/uiservicestests/src/com/android/server/notification/RankingHelperTest.java
+++ b/services/tests/uiservicestests/src/com/android/server/notification/RankingHelperTest.java
@@ -207,12 +207,12 @@
.build();
mRecentlyIntrusive = new NotificationRecord(mContext, new StatusBarNotification(
mPkg, mPkg, 1, null, 0, 0, n, mUser,
- null, System.currentTimeMillis()+100), getDefaultChannel());
+ null, 100), getDefaultChannel());
mRecentlyIntrusive.setRecentlyIntrusive(true);
mNewest = new NotificationRecord(mContext, new StatusBarNotification(
mPkg, mPkg, 2, null, 0, 0, n, mUser,
- null, System.currentTimeMillis()+10000), getDefaultChannel());
+ null, 10000), getDefaultChannel());
}
private NotificationChannel getLowChannel() {
diff --git a/services/tests/wmtests/src/com/android/server/wm/BackNavigationControllerTests.java b/services/tests/wmtests/src/com/android/server/wm/BackNavigationControllerTests.java
index 21251c3..a911131 100644
--- a/services/tests/wmtests/src/com/android/server/wm/BackNavigationControllerTests.java
+++ b/services/tests/wmtests/src/com/android/server/wm/BackNavigationControllerTests.java
@@ -94,6 +94,7 @@
private BackNavigationController mBackNavigationController;
private WindowManagerInternal mWindowManagerInternal;
private BackAnimationAdapter mBackAnimationAdapter;
+ private BackNavigationController.NavigationMonitor mNavigationMonitor;
private Task mRootHomeTask;
@Before
@@ -105,6 +106,7 @@
mWindowManagerInternal = mock(WindowManagerInternal.class);
LocalServices.addService(WindowManagerInternal.class, mWindowManagerInternal);
mBackAnimationAdapter = mock(BackAnimationAdapter.class);
+ mNavigationMonitor = mock(BackNavigationController.NavigationMonitor.class);
mRootHomeTask = initHomeActivity();
}
@@ -813,6 +815,7 @@
animationHandler.prepareAnimation(
BackNavigationInfo.TYPE_RETURN_TO_HOME,
mBackAnimationAdapter,
+ mNavigationMonitor,
task,
mRootHomeTask,
bottomActivity,
@@ -832,6 +835,7 @@
animationHandler.prepareAnimation(
BackNavigationInfo.TYPE_CROSS_ACTIVITY,
mBackAnimationAdapter,
+ mNavigationMonitor,
task,
task,
topActivity,
diff --git a/services/tests/wmtests/src/com/android/server/wm/ImeInsetsSourceProviderTest.java b/services/tests/wmtests/src/com/android/server/wm/ImeInsetsSourceProviderTest.java
index faa6d97..7380aec 100644
--- a/services/tests/wmtests/src/com/android/server/wm/ImeInsetsSourceProviderTest.java
+++ b/services/tests/wmtests/src/com/android/server/wm/ImeInsetsSourceProviderTest.java
@@ -16,8 +16,6 @@
package com.android.server.wm;
-import static android.view.InsetsSource.ID_IME;
-import static android.view.WindowInsets.Type.ime;
import static android.view.WindowManager.LayoutParams.TYPE_APPLICATION;
import static android.view.WindowManager.LayoutParams.TYPE_INPUT_METHOD;
@@ -26,7 +24,6 @@
import android.graphics.PixelFormat;
import android.platform.test.annotations.Presubmit;
-import android.view.InsetsSource;
import android.view.inputmethod.ImeTracker;
import androidx.test.filters.SmallTest;
@@ -46,57 +43,148 @@
@RunWith(WindowTestRunner.class)
public class ImeInsetsSourceProviderTest extends WindowTestsBase {
- private InsetsSource mImeSource = new InsetsSource(ID_IME, ime());
private ImeInsetsSourceProvider mImeProvider;
@Before
public void setUp() throws Exception {
- mImeSource.setVisible(true);
- mImeProvider = new ImeInsetsSourceProvider(mImeSource,
- mDisplayContent.getInsetsStateController(), mDisplayContent);
+ mImeProvider = mDisplayContent.getInsetsStateController().getImeSourceProvider();
+ mImeProvider.getSource().setVisible(true);
}
@Test
public void testTransparentControlTargetWindowCanShowIme() {
+ final WindowState ime = createWindow(null, TYPE_INPUT_METHOD, "ime");
+ makeWindowVisibleAndDrawn(ime);
+ mImeProvider.setWindowContainer(ime, null, null);
+
final WindowState appWin = createWindow(null, TYPE_APPLICATION, "app");
final WindowState popup = createWindow(appWin, TYPE_APPLICATION, "popup");
- mDisplayContent.setImeControlTarget(popup);
- mDisplayContent.setImeLayeringTarget(appWin);
popup.mAttrs.format = PixelFormat.TRANSPARENT;
+ mDisplayContent.setImeLayeringTarget(appWin);
+ mDisplayContent.updateImeInputAndControlTarget(popup);
+ performSurfacePlacementAndWaitForWindowAnimator();
+
mImeProvider.scheduleShowImePostLayout(appWin, ImeTracker.Token.empty());
assertTrue(mImeProvider.isReadyToShowIme());
}
+ /**
+ * Checks that scheduling with all the state set and manually triggering the show does succeed.
+ */
@Test
- public void testInputMethodInputTargetCanShowIme() {
- WindowState target = createWindow(null, TYPE_APPLICATION, "app");
- mDisplayContent.setImeLayeringTarget(target);
- mDisplayContent.updateImeInputAndControlTarget(target);
- mImeProvider.scheduleShowImePostLayout(target, ImeTracker.Token.empty());
- assertTrue(mImeProvider.isReadyToShowIme());
- }
-
- @Test
- public void testIsImeShowing() {
- WindowState ime = createWindow(null, TYPE_INPUT_METHOD, "ime");
+ public void testScheduleShowIme() {
+ final WindowState ime = createWindow(null, TYPE_INPUT_METHOD, "ime");
makeWindowVisibleAndDrawn(ime);
mImeProvider.setWindowContainer(ime, null, null);
- WindowState target = createWindow(null, TYPE_APPLICATION, "app");
+ final WindowState target = createWindow(null, TYPE_APPLICATION, "app");
mDisplayContent.setImeLayeringTarget(target);
- mDisplayContent.setImeControlTarget(target);
+ mDisplayContent.updateImeInputAndControlTarget(target);
+ performSurfacePlacementAndWaitForWindowAnimator();
+ // Schedule (without triggering) after everything is ready.
mImeProvider.scheduleShowImePostLayout(target, ImeTracker.Token.empty());
+ assertTrue(mImeProvider.isReadyToShowIme());
assertFalse(mImeProvider.isImeShowing());
+
+ // Manually trigger the show.
mImeProvider.checkShowImePostLayout();
+ // No longer ready as it was already shown.
+ assertFalse(mImeProvider.isReadyToShowIme());
assertTrue(mImeProvider.isImeShowing());
- mImeProvider.setImeShowing(false);
+ }
+
+ /**
+ * Checks that scheduling to show before any state is set does succeed when
+ * all the state becomes available.
+ */
+ @Test
+ public void testScheduleShowIme_noInitialState() {
+ final WindowState target = createWindow(null, TYPE_APPLICATION, "app");
+
+ // Schedule before anything is ready.
+ mImeProvider.scheduleShowImePostLayout(target, ImeTracker.Token.empty());
+ assertFalse(mImeProvider.isReadyToShowIme());
assertFalse(mImeProvider.isImeShowing());
+
+ final WindowState ime = createWindow(null, TYPE_INPUT_METHOD, "ime");
+ makeWindowVisibleAndDrawn(ime);
+ mImeProvider.setWindowContainer(ime, null, null);
+
+ mDisplayContent.setImeLayeringTarget(target);
+ mDisplayContent.updateImeInputAndControlTarget(target);
+ // Performing surface placement picks up the show scheduled above.
+ performSurfacePlacementAndWaitForWindowAnimator();
+ // No longer ready as it was already shown.
+ assertFalse(mImeProvider.isReadyToShowIme());
+ assertTrue(mImeProvider.isImeShowing());
+ }
+
+ /**
+ * Checks that scheduling to show before starting the {@code afterPrepareSurfacesRunnable}
+ * from {@link InsetsStateController#notifyPendingInsetsControlChanged}
+ * does continue and succeed when the runnable is started.
+ */
+ @Test
+ public void testScheduleShowIme_delayedAfterPrepareSurfaces() {
+ final WindowState ime = createWindow(null, TYPE_INPUT_METHOD, "ime");
+ makeWindowVisibleAndDrawn(ime);
+ mImeProvider.setWindowContainer(ime, null, null);
+
+ final WindowState target = createWindow(null, TYPE_APPLICATION, "app");
+ mDisplayContent.setImeLayeringTarget(target);
+ mDisplayContent.updateImeInputAndControlTarget(target);
+
+ // Schedule before starting the afterPrepareSurfacesRunnable.
+ mImeProvider.scheduleShowImePostLayout(target, ImeTracker.Token.empty());
+ assertFalse(mImeProvider.isReadyToShowIme());
+ assertFalse(mImeProvider.isImeShowing());
+
+ // This tries to pick up the show scheduled above, but must fail as the
+ // afterPrepareSurfacesRunnable was not started yet.
+ mDisplayContent.applySurfaceChangesTransaction();
+ assertFalse(mImeProvider.isReadyToShowIme());
+ assertFalse(mImeProvider.isImeShowing());
+
+ // Starting the afterPrepareSurfacesRunnable picks up the show scheduled above.
+ mWm.mAnimator.executeAfterPrepareSurfacesRunnables();
+ // No longer ready as it was already shown.
+ assertFalse(mImeProvider.isReadyToShowIme());
+ assertTrue(mImeProvider.isImeShowing());
+ }
+
+ /**
+ * Checks that scheduling to show before the surface placement does continue and succeed
+ * when the surface placement happens.
+ */
+ @Test
+ public void testScheduleShowIme_delayedSurfacePlacement() {
+ final WindowState ime = createWindow(null, TYPE_INPUT_METHOD, "ime");
+ makeWindowVisibleAndDrawn(ime);
+ mImeProvider.setWindowContainer(ime, null, null);
+
+ final WindowState target = createWindow(null, TYPE_APPLICATION, "app");
+ mDisplayContent.setImeLayeringTarget(target);
+ mDisplayContent.updateImeInputAndControlTarget(target);
+
+ // Schedule before surface placement.
+ mImeProvider.scheduleShowImePostLayout(target, ImeTracker.Token.empty());
+ assertFalse(mImeProvider.isReadyToShowIme());
+ assertFalse(mImeProvider.isImeShowing());
+
+ // Performing surface placement picks up the show scheduled above, and succeeds.
+ // This first executes the afterPrepareSurfacesRunnable, and then
+ // applySurfaceChangesTransaction. Both of them try to trigger the show,
+ // but only the second one can succeed, as it comes after onPostLayout.
+ performSurfacePlacementAndWaitForWindowAnimator();
+ // No longer ready as it was already shown.
+ assertFalse(mImeProvider.isReadyToShowIme());
+ assertTrue(mImeProvider.isImeShowing());
}
@Test
public void testSetFrozen() {
- WindowState ime = createWindow(null, TYPE_INPUT_METHOD, "ime");
+ final WindowState ime = createWindow(null, TYPE_INPUT_METHOD, "ime");
makeWindowVisibleAndDrawn(ime);
mImeProvider.setWindowContainer(ime, null, null);
mImeProvider.setServerVisible(true);
diff --git a/services/tests/wmtests/src/com/android/server/wm/InsetsSourceProviderTest.java b/services/tests/wmtests/src/com/android/server/wm/InsetsSourceProviderTest.java
index 4034dbc..2a025cd 100644
--- a/services/tests/wmtests/src/com/android/server/wm/InsetsSourceProviderTest.java
+++ b/services/tests/wmtests/src/com/android/server/wm/InsetsSourceProviderTest.java
@@ -24,6 +24,7 @@
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertFalse;
+import static org.junit.Assert.assertNotEquals;
import static org.junit.Assert.assertNotNull;
import static org.junit.Assert.assertNull;
import static org.junit.Assert.assertTrue;
@@ -163,6 +164,48 @@
}
@Test
+ public void testGetLeash() {
+ final WindowState statusBar = createWindow(null, TYPE_APPLICATION, "statusBar");
+ final WindowState target = createWindow(null, TYPE_APPLICATION, "target");
+ final WindowState fakeTarget = createWindow(null, TYPE_APPLICATION, "fakeTarget");
+ final WindowState otherTarget = createWindow(null, TYPE_APPLICATION, "otherTarget");
+ statusBar.getFrame().set(0, 0, 500, 100);
+
+ // We must not have control or control target before we have the insets source window,
+ // so also no leash.
+ mProvider.updateControlForTarget(target, true /* force */);
+ assertNull(mProvider.getControl(target));
+ assertNull(mProvider.getControlTarget());
+ assertNull(mProvider.getLeash(target));
+
+ // We can have the control or the control target after we have the insets source window,
+ // but no leash as this is not yet ready for dispatching.
+ mProvider.setWindowContainer(statusBar, null, null);
+ mProvider.updateControlForTarget(target, false /* force */);
+ assertNotNull(mProvider.getControl(target));
+ assertNotNull(mProvider.getControlTarget());
+ assertEquals(mProvider.getControlTarget(), target);
+ assertNull(mProvider.getLeash(target));
+
+ // After surface transactions are applied, the leash is ready for dispatching.
+ mProvider.onSurfaceTransactionApplied();
+ assertNotNull(mProvider.getLeash(target));
+
+ // We do have fake control for the fake control target, but that has no leash.
+ mProvider.updateFakeControlTarget(fakeTarget);
+ assertNotNull(mProvider.getControl(fakeTarget));
+ assertNotNull(mProvider.getFakeControlTarget());
+ assertNotEquals(mProvider.getControlTarget(), fakeTarget);
+ assertNull(mProvider.getLeash(fakeTarget));
+
+ // We don't have any control for a different (non-fake control target), so also no leash.
+ assertNull(mProvider.getControl(otherTarget));
+ assertNotNull(mProvider.getControlTarget());
+ assertNotEquals(mProvider.getControlTarget(), otherTarget);
+ assertNull(mProvider.getLeash(otherTarget));
+ }
+
+ @Test
public void testUpdateSourceFrame() {
final WindowState statusBar = createWindow(null, TYPE_APPLICATION, "statusBar");
mProvider.setWindowContainer(statusBar, null, null);
diff --git a/services/tests/wmtests/src/com/android/server/wm/InsetsStateControllerTest.java b/services/tests/wmtests/src/com/android/server/wm/InsetsStateControllerTest.java
index 2085d61..0e1a1af 100644
--- a/services/tests/wmtests/src/com/android/server/wm/InsetsStateControllerTest.java
+++ b/services/tests/wmtests/src/com/android/server/wm/InsetsStateControllerTest.java
@@ -552,6 +552,24 @@
control2.getInsetsHint().bottom);
}
+ @Test
+ public void testHasPendingControls() {
+ final WindowState statusBar = createWindow(null, TYPE_APPLICATION, "statusBar");
+ final WindowState app = createWindow(null, TYPE_APPLICATION, "app");
+ getController().getOrCreateSourceProvider(ID_STATUS_BAR, statusBars())
+ .setWindowContainer(statusBar, null, null);
+ // No controls dispatched yet.
+ assertFalse(getController().hasPendingControls(app));
+
+ getController().onBarControlTargetChanged(app, null, null, null);
+ // Controls pending to be dispatched.
+ assertTrue(getController().hasPendingControls(app));
+
+ performSurfacePlacementAndWaitForWindowAnimator();
+ // Pending controls were dispatched.
+ assertFalse(getController().hasPendingControls(app));
+ }
+
/** Creates a window which is associated with ActivityRecord. */
private WindowState createTestWindow(String name) {
final WindowState win = createWindow(null, TYPE_APPLICATION, name);
diff --git a/services/tests/wmtests/src/com/android/server/wm/WindowManagerServiceTests.java b/services/tests/wmtests/src/com/android/server/wm/WindowManagerServiceTests.java
index 8487021..3aebd70 100644
--- a/services/tests/wmtests/src/com/android/server/wm/WindowManagerServiceTests.java
+++ b/services/tests/wmtests/src/com/android/server/wm/WindowManagerServiceTests.java
@@ -101,6 +101,7 @@
import android.view.WindowInsets;
import android.view.WindowManager;
import android.view.WindowManager.LayoutParams;
+import android.view.WindowManagerGlobal;
import android.window.ActivityWindowInfo;
import android.window.ClientWindowFrames;
import android.window.InputTransferToken;
@@ -556,6 +557,7 @@
.hasListener(eq(windowContextToken));
doReturn(TYPE_INPUT_METHOD).when(mWm.mWindowContextListenerController)
.getWindowType(eq(windowContextToken));
+ doReturn(true).when(mWm.mUmInternal).isUserVisible(anyInt(), anyInt());
mWm.addWindow(session, new TestIWindow(), params, View.VISIBLE, DEFAULT_DISPLAY,
UserHandle.USER_SYSTEM, WindowInsets.Type.defaultVisible(), null, new InsetsState(),
@@ -1308,6 +1310,24 @@
assertEquals(activityWindowInfo2, activityWindowInfo3);
}
+ @Test
+ public void testAddOverlayWindowToUnassignedDisplay_notAllowed() {
+ int uid = 100000; // uid for non-system user
+ Session session = createTestSession(mAtm, 1234 /* pid */, uid);
+ DisplayContent dc = createNewDisplay();
+ int displayId = dc.getDisplayId();
+ int userId = UserHandle.getUserId(uid);
+ doReturn(false).when(mWm.mUmInternal).isUserVisible(eq(userId), eq(displayId));
+ WindowManager.LayoutParams params = new WindowManager.LayoutParams(
+ LayoutParams.TYPE_APPLICATION_OVERLAY);
+
+ int result = mWm.addWindow(session, new TestIWindow(), params, View.VISIBLE, displayId,
+ userId, WindowInsets.Type.defaultVisible(), null, new InsetsState(),
+ new InsetsSourceControl.Array(), new Rect(), new float[1]);
+
+ assertThat(result).isEqualTo(WindowManagerGlobal.ADD_INVALID_DISPLAY);
+ }
+
class TestResultReceiver implements IResultReceiver {
public android.os.Bundle resultData;
private final IBinder mBinder = mock(IBinder.class);
diff --git a/telephony/java/android/telephony/CarrierConfigManager.java b/telephony/java/android/telephony/CarrierConfigManager.java
index ebdd556..10c17c1 100644
--- a/telephony/java/android/telephony/CarrierConfigManager.java
+++ b/telephony/java/android/telephony/CarrierConfigManager.java
@@ -9890,6 +9890,16 @@
"satellite_entitlement_app_name_string";
/**
+ * URL to redirect user to get more information about the carrier support for satellite.
+ *
+ * The default value is empty string.
+ *
+ * @hide
+ */
+ public static final String KEY_SATELLITE_INFORMATION_REDIRECT_URL_STRING =
+ "satellite_information_redirect_url_string";
+
+ /**
* Indicating whether DUN APN should be disabled when the device is roaming. In that case,
* the default APN (i.e. internet) will be used for tethering.
*
@@ -11034,6 +11044,7 @@
sDefaults.putInt(KEY_SATELLITE_ENTITLEMENT_STATUS_REFRESH_DAYS_INT, 7);
sDefaults.putBoolean(KEY_SATELLITE_ENTITLEMENT_SUPPORTED_BOOL, false);
sDefaults.putString(KEY_SATELLITE_ENTITLEMENT_APP_NAME_STRING, "androidSatmode");
+ sDefaults.putString(KEY_SATELLITE_INFORMATION_REDIRECT_URL_STRING, "");
sDefaults.putBoolean(KEY_DISABLE_DUN_APN_WHILE_ROAMING_WITH_PRESET_APN_BOOL, false);
sDefaults.putString(KEY_DEFAULT_PREFERRED_APN_NAME_STRING, "");
sDefaults.putBoolean(KEY_SUPPORTS_CALL_COMPOSER_BOOL, false);
diff --git a/tools/app_metadata_bundles/Android.bp b/tools/app_metadata_bundles/Android.bp
index be6bea6..a012dca 100644
--- a/tools/app_metadata_bundles/Android.bp
+++ b/tools/app_metadata_bundles/Android.bp
@@ -5,6 +5,7 @@
// to get the below license kinds:
// SPDX-license-identifier-Apache-2.0
default_applicable_licenses: ["frameworks_base_license"],
+ default_team: "trendy_team_preload_safety",
}
java_library_host {
@@ -24,3 +25,15 @@
"asllib",
],
}
+
+java_test_host {
+ name: "aslgen-test",
+ srcs: ["src/test/java/**/*.java"],
+ exclude_srcs: [
+ ],
+ java_resource_dirs: ["src/test/resources"],
+ static_libs: [
+ "aslgen",
+ "junit",
+ ],
+}
diff --git a/tools/app_metadata_bundles/src/aslgen/java/com/android/aslgen/Main.java b/tools/app_metadata_bundles/src/aslgen/java/com/android/aslgen/Main.java
index fb7a6ab..d7edfd4 100644
--- a/tools/app_metadata_bundles/src/aslgen/java/com/android/aslgen/Main.java
+++ b/tools/app_metadata_bundles/src/aslgen/java/com/android/aslgen/Main.java
@@ -16,8 +16,8 @@
package com.android.aslgen;
-import com.android.asllib.AndroidSafetyLabel;
-import com.android.asllib.AndroidSafetyLabel.Format;
+import com.android.asllib.AslConverter;
+import com.android.asllib.AslConverter.Format;
import com.android.asllib.util.MalformedXmlException;
import org.xml.sax.SAXException;
@@ -41,9 +41,8 @@
String inFile = null;
String outFile = null;
- Format inFormat = Format.NULL;
- Format outFormat = Format.NULL;
-
+ Format inFormat = AslConverter.Format.NULL;
+ Format outFormat = AslConverter.Format.NULL;
// Except for "--help", all arguments require a value currently.
// So just make sure we have an even number and
@@ -79,11 +78,11 @@
throw new IllegalArgumentException("output file is required");
}
- if (inFormat == Format.NULL) {
+ if (inFormat == AslConverter.Format.NULL) {
throw new IllegalArgumentException("input format is required");
}
- if (outFormat == Format.NULL) {
+ if (outFormat == AslConverter.Format.NULL) {
throw new IllegalArgumentException("output format is required");
}
@@ -92,24 +91,23 @@
System.out.println("in format: " + inFormat);
System.out.println("out format: " + outFormat);
- var asl = AndroidSafetyLabel.readFromStream(new FileInputStream(inFile), inFormat);
- asl.writeToStream(new FileOutputStream(outFile), outFormat);
+ var asl = AslConverter.readFromStream(new FileInputStream(inFile), inFormat);
+ AslConverter.writeToStream(new FileOutputStream(outFile), asl, outFormat);
}
private static Format getFormat(String argValue) {
if ("hr".equals(argValue)) {
- return Format.HUMAN_READABLE;
+ return AslConverter.Format.HUMAN_READABLE;
} else if ("od".equals(argValue)) {
- return Format.ON_DEVICE;
+ return AslConverter.Format.ON_DEVICE;
} else {
- return Format.NULL;
+ return AslConverter.Format.NULL;
}
}
private static void showUsage() {
- AndroidSafetyLabel.test();
System.err.println(
- "Usage:\n"
- );
+ "Usage: aslgen --in-path [input-file] --out-path [output-file] --in-format [hr|od]"
+ + " --out-format [hr|od]");
}
}
diff --git a/tools/app_metadata_bundles/src/lib/java/com/android/asllib/AndroidSafetyLabel.java b/tools/app_metadata_bundles/src/lib/java/com/android/asllib/AndroidSafetyLabel.java
index bc8063e..cdb559b 100644
--- a/tools/app_metadata_bundles/src/lib/java/com/android/asllib/AndroidSafetyLabel.java
+++ b/tools/app_metadata_bundles/src/lib/java/com/android/asllib/AndroidSafetyLabel.java
@@ -16,107 +16,47 @@
package com.android.asllib;
-import com.android.asllib.util.MalformedXmlException;
-
import org.w3c.dom.Document;
import org.w3c.dom.Element;
-import org.xml.sax.SAXException;
-import java.io.IOException;
-import java.io.InputStream;
-import java.io.OutputStream;
import java.util.List;
-import javax.xml.parsers.DocumentBuilderFactory;
-import javax.xml.parsers.ParserConfigurationException;
-import javax.xml.transform.OutputKeys;
-import javax.xml.transform.Transformer;
-import javax.xml.transform.TransformerException;
-import javax.xml.transform.TransformerFactory;
-import javax.xml.transform.dom.DOMSource;
-import javax.xml.transform.stream.StreamResult;
-
public class AndroidSafetyLabel implements AslMarshallable {
- public enum Format {
- NULL, HUMAN_READABLE, ON_DEVICE;
- }
-
+ private final Long mVersion;
+ private final SystemAppSafetyLabel mSystemAppSafetyLabel;
private final SafetyLabels mSafetyLabels;
+ private final TransparencyInfo mTransparencyInfo;
public SafetyLabels getSafetyLabels() {
return mSafetyLabels;
}
- public AndroidSafetyLabel(SafetyLabels safetyLabels) {
+ public AndroidSafetyLabel(
+ Long version,
+ SystemAppSafetyLabel systemAppSafetyLabel,
+ SafetyLabels safetyLabels,
+ TransparencyInfo transparencyInfo) {
+ this.mVersion = version;
+ this.mSystemAppSafetyLabel = systemAppSafetyLabel;
this.mSafetyLabels = safetyLabels;
- }
-
- /** Reads a {@link AndroidSafetyLabel} from an {@link InputStream}. */
- // TODO(b/329902686): Support parsing from on-device.
- public static AndroidSafetyLabel readFromStream(InputStream in, Format format)
- throws IOException, ParserConfigurationException, SAXException, MalformedXmlException {
- DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
- factory.setNamespaceAware(true);
- Document document = factory.newDocumentBuilder().parse(in);
-
- switch (format) {
- case HUMAN_READABLE:
- Element appMetadataBundles =
- XmlUtils.getSingleElement(document, XmlUtils.HR_TAG_APP_METADATA_BUNDLES);
-
- return new AndroidSafetyLabelFactory()
- .createFromHrElements(
- List.of(
- XmlUtils.getSingleElement(
- document, XmlUtils.HR_TAG_APP_METADATA_BUNDLES)));
- case ON_DEVICE:
- throw new IllegalArgumentException(
- "Parsing from on-device format is not supported at this time.");
- default:
- throw new IllegalStateException("Unrecognized input format.");
- }
- }
-
- /** Write the content of the {@link AndroidSafetyLabel} to a {@link OutputStream}. */
- // TODO(b/329902686): Support outputting human-readable format.
- public void writeToStream(OutputStream out, Format format)
- throws IOException, ParserConfigurationException, TransformerException {
- var docBuilder = DocumentBuilderFactory.newInstance().newDocumentBuilder();
- var document = docBuilder.newDocument();
-
- switch (format) {
- case HUMAN_READABLE:
- throw new IllegalArgumentException(
- "Outputting human-readable format is not supported at this time.");
- case ON_DEVICE:
- for (var child : this.toOdDomElements(document)) {
- document.appendChild(child);
- }
- break;
- default:
- throw new IllegalStateException("Unrecognized input format.");
- }
-
- TransformerFactory transformerFactory = TransformerFactory.newInstance();
- Transformer transformer = transformerFactory.newTransformer();
- transformer.setOutputProperty(OutputKeys.INDENT, "yes");
- transformer.setOutputProperty(OutputKeys.ENCODING, "UTF-8");
- transformer.setOutputProperty(OutputKeys.OMIT_XML_DECLARATION, "yes");
- StreamResult streamResult = new StreamResult(out); // out
- DOMSource domSource = new DOMSource(document);
- transformer.transform(domSource, streamResult);
+ this.mTransparencyInfo = transparencyInfo;
}
/** Creates an on-device DOM element from an {@link AndroidSafetyLabel} */
@Override
public List<Element> toOdDomElements(Document doc) {
Element aslEle = doc.createElement(XmlUtils.OD_TAG_BUNDLE);
- XmlUtils.appendChildren(aslEle, mSafetyLabels.toOdDomElements(doc));
- return List.of(aslEle);
- }
-
- public static void test() {
- // TODO(b/329902686): Add tests.
+ aslEle.appendChild(XmlUtils.createOdLongEle(doc, XmlUtils.OD_NAME_VERSION, mVersion));
+ if (mSafetyLabels != null) {
+ XmlUtils.appendChildren(aslEle, mSafetyLabels.toOdDomElements(doc));
+ }
+ if (mSystemAppSafetyLabel != null) {
+ XmlUtils.appendChildren(aslEle, mSystemAppSafetyLabel.toOdDomElements(doc));
+ }
+ if (mTransparencyInfo != null) {
+ XmlUtils.appendChildren(aslEle, mTransparencyInfo.toOdDomElements(doc));
+ }
+ return XmlUtils.listOf(aslEle);
}
}
diff --git a/tools/app_metadata_bundles/src/lib/java/com/android/asllib/AndroidSafetyLabelFactory.java b/tools/app_metadata_bundles/src/lib/java/com/android/asllib/AndroidSafetyLabelFactory.java
index 7e7fcf9..3dc725b 100644
--- a/tools/app_metadata_bundles/src/lib/java/com/android/asllib/AndroidSafetyLabelFactory.java
+++ b/tools/app_metadata_bundles/src/lib/java/com/android/asllib/AndroidSafetyLabelFactory.java
@@ -29,11 +29,29 @@
public AndroidSafetyLabel createFromHrElements(List<Element> appMetadataBundles)
throws MalformedXmlException {
Element appMetadataBundlesEle = XmlUtils.getSingleElement(appMetadataBundles);
+ long version = XmlUtils.tryGetVersion(appMetadataBundlesEle);
+
Element safetyLabelsEle =
XmlUtils.getSingleChildElement(
- appMetadataBundlesEle, XmlUtils.HR_TAG_SAFETY_LABELS);
+ appMetadataBundlesEle, XmlUtils.HR_TAG_SAFETY_LABELS, false);
SafetyLabels safetyLabels =
- new SafetyLabelsFactory().createFromHrElements(List.of(safetyLabelsEle));
- return new AndroidSafetyLabel(safetyLabels);
+ new SafetyLabelsFactory().createFromHrElements(XmlUtils.listOf(safetyLabelsEle));
+
+ Element systemAppSafetyLabelEle =
+ XmlUtils.getSingleChildElement(
+ appMetadataBundlesEle, XmlUtils.HR_TAG_SYSTEM_APP_SAFETY_LABEL, false);
+ SystemAppSafetyLabel systemAppSafetyLabel =
+ new SystemAppSafetyLabelFactory()
+ .createFromHrElements(XmlUtils.listOf(systemAppSafetyLabelEle));
+
+ Element transparencyInfoEle =
+ XmlUtils.getSingleChildElement(
+ appMetadataBundlesEle, XmlUtils.HR_TAG_TRANSPARENCY_INFO, false);
+ TransparencyInfo transparencyInfo =
+ new TransparencyInfoFactory()
+ .createFromHrElements(XmlUtils.listOf(transparencyInfoEle));
+
+ return new AndroidSafetyLabel(
+ version, systemAppSafetyLabel, safetyLabels, transparencyInfo);
}
}
diff --git a/tools/app_metadata_bundles/src/lib/java/com/android/asllib/AppInfo.java b/tools/app_metadata_bundles/src/lib/java/com/android/asllib/AppInfo.java
new file mode 100644
index 0000000..f94b659
--- /dev/null
+++ b/tools/app_metadata_bundles/src/lib/java/com/android/asllib/AppInfo.java
@@ -0,0 +1,143 @@
+/*
+ * 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.asllib;
+
+import org.w3c.dom.Document;
+import org.w3c.dom.Element;
+
+import java.util.List;
+
+/** AppInfo representation */
+public class AppInfo implements AslMarshallable {
+ private final String mTitle;
+ private final String mDescription;
+ private final Boolean mContainsAds;
+ private final Boolean mObeyAps;
+ private final Boolean mAdsFingerprinting;
+ private final Boolean mSecurityFingerprinting;
+ private final String mPrivacyPolicy;
+ private final List<String> mSecurityEndpoints;
+ private final List<String> mFirstPartyEndpoints;
+ private final List<String> mServiceProviderEndpoints;
+ private final String mCategory;
+ private final String mEmail;
+ private final String mWebsite;
+
+ public AppInfo(
+ String title,
+ String description,
+ Boolean containsAds,
+ Boolean obeyAps,
+ Boolean adsFingerprinting,
+ Boolean securityFingerprinting,
+ String privacyPolicy,
+ List<String> securityEndpoints,
+ List<String> firstPartyEndpoints,
+ List<String> serviceProviderEndpoints,
+ String category,
+ String email,
+ String website) {
+ this.mTitle = title;
+ this.mDescription = description;
+ this.mContainsAds = containsAds;
+ this.mObeyAps = obeyAps;
+ this.mAdsFingerprinting = adsFingerprinting;
+ this.mSecurityFingerprinting = securityFingerprinting;
+ this.mPrivacyPolicy = privacyPolicy;
+ this.mSecurityEndpoints = securityEndpoints;
+ this.mFirstPartyEndpoints = firstPartyEndpoints;
+ this.mServiceProviderEndpoints = serviceProviderEndpoints;
+ this.mCategory = category;
+ this.mEmail = email;
+ this.mWebsite = website;
+ }
+
+ /** Creates an on-device DOM element from the {@link SafetyLabels}. */
+ @Override
+ public List<Element> toOdDomElements(Document doc) {
+ Element appInfoEle = XmlUtils.createPbundleEleWithName(doc, XmlUtils.OD_NAME_APP_INFO);
+ if (this.mTitle != null) {
+ appInfoEle.appendChild(XmlUtils.createOdStringEle(doc, XmlUtils.OD_NAME_TITLE, mTitle));
+ }
+ if (this.mDescription != null) {
+ appInfoEle.appendChild(
+ XmlUtils.createOdStringEle(doc, XmlUtils.OD_NAME_DESCRIPTION, mDescription));
+ }
+ if (this.mContainsAds != null) {
+ appInfoEle.appendChild(
+ XmlUtils.createOdBooleanEle(doc, XmlUtils.OD_NAME_CONTAINS_ADS, mContainsAds));
+ }
+ if (this.mObeyAps != null) {
+ appInfoEle.appendChild(
+ XmlUtils.createOdBooleanEle(doc, XmlUtils.OD_NAME_OBEY_APS, mObeyAps));
+ }
+ if (this.mAdsFingerprinting != null) {
+ appInfoEle.appendChild(
+ XmlUtils.createOdBooleanEle(
+ doc, XmlUtils.OD_NAME_ADS_FINGERPRINTING, mAdsFingerprinting));
+ }
+ if (this.mSecurityFingerprinting != null) {
+ appInfoEle.appendChild(
+ XmlUtils.createOdBooleanEle(
+ doc,
+ XmlUtils.OD_NAME_SECURITY_FINGERPRINTING,
+ mSecurityFingerprinting));
+ }
+ if (this.mPrivacyPolicy != null) {
+ appInfoEle.appendChild(
+ XmlUtils.createOdStringEle(
+ doc, XmlUtils.OD_NAME_PRIVACY_POLICY, mPrivacyPolicy));
+ }
+ if (this.mSecurityEndpoints != null) {
+ appInfoEle.appendChild(
+ XmlUtils.createOdArray(
+ doc,
+ XmlUtils.OD_TAG_STRING_ARRAY,
+ XmlUtils.OD_NAME_SECURITY_ENDPOINT,
+ mSecurityEndpoints));
+ }
+ if (this.mFirstPartyEndpoints != null) {
+ appInfoEle.appendChild(
+ XmlUtils.createOdArray(
+ doc,
+ XmlUtils.OD_TAG_STRING_ARRAY,
+ XmlUtils.OD_NAME_FIRST_PARTY_ENDPOINT,
+ mFirstPartyEndpoints));
+ }
+ if (this.mServiceProviderEndpoints != null) {
+ appInfoEle.appendChild(
+ XmlUtils.createOdArray(
+ doc,
+ XmlUtils.OD_TAG_STRING_ARRAY,
+ XmlUtils.OD_NAME_SERVICE_PROVIDER_ENDPOINT,
+ mServiceProviderEndpoints));
+ }
+ if (this.mCategory != null) {
+ appInfoEle.appendChild(
+ XmlUtils.createOdStringEle(doc, XmlUtils.OD_NAME_CATEGORY, this.mCategory));
+ }
+ if (this.mEmail != null) {
+ appInfoEle.appendChild(
+ XmlUtils.createOdStringEle(doc, XmlUtils.OD_NAME_EMAIL, this.mEmail));
+ }
+ if (this.mWebsite != null) {
+ appInfoEle.appendChild(
+ XmlUtils.createOdStringEle(doc, XmlUtils.OD_NAME_WEBSITE, this.mWebsite));
+ }
+ return XmlUtils.listOf(appInfoEle);
+ }
+}
diff --git a/tools/app_metadata_bundles/src/lib/java/com/android/asllib/AppInfoFactory.java b/tools/app_metadata_bundles/src/lib/java/com/android/asllib/AppInfoFactory.java
new file mode 100644
index 0000000..26d94c1
--- /dev/null
+++ b/tools/app_metadata_bundles/src/lib/java/com/android/asllib/AppInfoFactory.java
@@ -0,0 +1,84 @@
+/*
+ * 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.asllib;
+
+import com.android.asllib.util.AslgenUtil;
+import com.android.asllib.util.MalformedXmlException;
+
+import org.w3c.dom.Element;
+
+import java.util.Arrays;
+import java.util.List;
+
+public class AppInfoFactory implements AslMarshallableFactory<AppInfo> {
+
+ /** Creates a {@link AppInfo} from the human-readable DOM element. */
+ @Override
+ public AppInfo createFromHrElements(List<Element> elements) throws MalformedXmlException {
+ Element appInfoEle = XmlUtils.getSingleElement(elements);
+ if (appInfoEle == null) {
+ AslgenUtil.logI("No AppInfo found in hr format.");
+ return null;
+ }
+
+ String title = XmlUtils.getStringAttr(appInfoEle, XmlUtils.HR_ATTR_TITLE);
+ String description = XmlUtils.getStringAttr(appInfoEle, XmlUtils.HR_ATTR_DESCRIPTION);
+ Boolean containsAds = XmlUtils.getBoolAttr(appInfoEle, XmlUtils.HR_ATTR_CONTAINS_ADS);
+ Boolean obeyAps = XmlUtils.getBoolAttr(appInfoEle, XmlUtils.HR_ATTR_OBEY_APS);
+ Boolean adsFingerprinting =
+ XmlUtils.getBoolAttr(appInfoEle, XmlUtils.HR_ATTR_ADS_FINGERPRINTING);
+ Boolean securityFingerprinting =
+ XmlUtils.getBoolAttr(appInfoEle, XmlUtils.HR_ATTR_SECURITY_FINGERPRINTING);
+ String privacyPolicy = XmlUtils.getStringAttr(appInfoEle, XmlUtils.HR_ATTR_PRIVACY_POLICY);
+ List<String> securityEndpoints =
+ Arrays.stream(
+ appInfoEle
+ .getAttribute(XmlUtils.HR_ATTR_SECURITY_ENDPOINTS)
+ .split("\\|"))
+ .toList();
+ List<String> firstPartyEndpoints =
+ Arrays.stream(
+ appInfoEle
+ .getAttribute(XmlUtils.HR_ATTR_FIRST_PARTY_ENDPOINTS)
+ .split("\\|"))
+ .toList();
+ List<String> serviceProviderEndpoints =
+ Arrays.stream(
+ appInfoEle
+ .getAttribute(XmlUtils.HR_ATTR_SERVICE_PROVIDER_ENDPOINTS)
+ .split("\\|"))
+ .toList();
+ String category = XmlUtils.getStringAttr(appInfoEle, XmlUtils.HR_ATTR_CATEGORY);
+ String email = XmlUtils.getStringAttr(appInfoEle, XmlUtils.HR_ATTR_EMAIL);
+ String website = XmlUtils.getStringAttr(appInfoEle, XmlUtils.HR_ATTR_WEBSITE, false);
+
+ return new AppInfo(
+ title,
+ description,
+ containsAds,
+ obeyAps,
+ adsFingerprinting,
+ securityFingerprinting,
+ privacyPolicy,
+ securityEndpoints,
+ firstPartyEndpoints,
+ serviceProviderEndpoints,
+ category,
+ email,
+ website);
+ }
+}
diff --git a/tools/app_metadata_bundles/src/lib/java/com/android/asllib/AslConverter.java b/tools/app_metadata_bundles/src/lib/java/com/android/asllib/AslConverter.java
new file mode 100644
index 0000000..9dd5531
--- /dev/null
+++ b/tools/app_metadata_bundles/src/lib/java/com/android/asllib/AslConverter.java
@@ -0,0 +1,116 @@
+/*
+ * 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.asllib;
+
+import com.android.asllib.util.MalformedXmlException;
+
+import org.w3c.dom.Document;
+import org.w3c.dom.Element;
+import org.xml.sax.SAXException;
+
+import java.io.ByteArrayInputStream;
+import java.io.ByteArrayOutputStream;
+import java.io.IOException;
+import java.io.InputStream;
+import java.io.OutputStream;
+import java.nio.charset.StandardCharsets;
+
+import javax.xml.parsers.DocumentBuilderFactory;
+import javax.xml.parsers.ParserConfigurationException;
+import javax.xml.transform.OutputKeys;
+import javax.xml.transform.Transformer;
+import javax.xml.transform.TransformerException;
+import javax.xml.transform.TransformerFactory;
+import javax.xml.transform.dom.DOMSource;
+import javax.xml.transform.stream.StreamResult;
+
+public class AslConverter {
+ public enum Format {
+ NULL,
+ HUMAN_READABLE,
+ ON_DEVICE;
+ }
+
+ /** Reads a {@link AndroidSafetyLabel} from an {@link InputStream}. */
+ // TODO(b/329902686): Support parsing from on-device.
+ public static AndroidSafetyLabel readFromStream(InputStream in, Format format)
+ throws IOException, ParserConfigurationException, SAXException, MalformedXmlException {
+ DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
+ factory.setNamespaceAware(true);
+ Document document = factory.newDocumentBuilder().parse(in);
+
+ switch (format) {
+ case HUMAN_READABLE:
+ Element appMetadataBundles =
+ XmlUtils.getSingleElement(document, XmlUtils.HR_TAG_APP_METADATA_BUNDLES);
+
+ return new AndroidSafetyLabelFactory()
+ .createFromHrElements(XmlUtils.listOf(appMetadataBundles));
+ case ON_DEVICE:
+ throw new IllegalArgumentException(
+ "Parsing from on-device format is not supported at this time.");
+ default:
+ throw new IllegalStateException("Unrecognized input format.");
+ }
+ }
+
+ /** Reads a {@link AndroidSafetyLabel} from a String. */
+ public static AndroidSafetyLabel readFromString(String in, Format format)
+ throws IOException, ParserConfigurationException, SAXException, MalformedXmlException {
+ InputStream stream = new ByteArrayInputStream(in.getBytes(StandardCharsets.UTF_8));
+ return readFromStream(stream, format);
+ }
+
+ /** Write the content of the {@link AndroidSafetyLabel} to a {@link OutputStream}. */
+ // TODO(b/329902686): Support outputting human-readable format.
+ public static void writeToStream(
+ OutputStream out, AndroidSafetyLabel asl, AslConverter.Format format)
+ throws IOException, ParserConfigurationException, TransformerException {
+ var docBuilder = DocumentBuilderFactory.newInstance().newDocumentBuilder();
+ var document = docBuilder.newDocument();
+
+ switch (format) {
+ case HUMAN_READABLE:
+ throw new IllegalArgumentException(
+ "Outputting human-readable format is not supported at this time.");
+ case ON_DEVICE:
+ for (var child : asl.toOdDomElements(document)) {
+ document.appendChild(child);
+ }
+ break;
+ default:
+ throw new IllegalStateException("Unrecognized input format.");
+ }
+
+ TransformerFactory transformerFactory = TransformerFactory.newInstance();
+ Transformer transformer = transformerFactory.newTransformer();
+ transformer.setOutputProperty(OutputKeys.INDENT, "yes");
+ transformer.setOutputProperty(OutputKeys.ENCODING, "UTF-8");
+ transformer.setOutputProperty(OutputKeys.OMIT_XML_DECLARATION, "yes");
+ StreamResult streamResult = new StreamResult(out); // out
+ DOMSource domSource = new DOMSource(document);
+ transformer.transform(domSource, streamResult);
+ }
+
+ /** Get the content of the {@link AndroidSafetyLabel} as String. */
+ public static String getXmlAsString(AndroidSafetyLabel asl, AslConverter.Format format)
+ throws IOException, ParserConfigurationException, TransformerException {
+ ByteArrayOutputStream out = new ByteArrayOutputStream();
+ writeToStream(out, asl, format);
+ return out.toString(StandardCharsets.UTF_8);
+ }
+}
diff --git a/tools/app_metadata_bundles/src/lib/java/com/android/asllib/DataCategory.java b/tools/app_metadata_bundles/src/lib/java/com/android/asllib/DataCategory.java
index e5ed63b..b9e06fb 100644
--- a/tools/app_metadata_bundles/src/lib/java/com/android/asllib/DataCategory.java
+++ b/tools/app_metadata_bundles/src/lib/java/com/android/asllib/DataCategory.java
@@ -53,6 +53,6 @@
for (DataType dataType : mDataTypes.values()) {
XmlUtils.appendChildren(dataCategoryEle, dataType.toOdDomElements(doc));
}
- return List.of(dataCategoryEle);
+ return XmlUtils.listOf(dataCategoryEle);
}
}
diff --git a/tools/app_metadata_bundles/src/lib/java/com/android/asllib/DataCategoryFactory.java b/tools/app_metadata_bundles/src/lib/java/com/android/asllib/DataCategoryFactory.java
index d946345..d2b6712 100644
--- a/tools/app_metadata_bundles/src/lib/java/com/android/asllib/DataCategoryFactory.java
+++ b/tools/app_metadata_bundles/src/lib/java/com/android/asllib/DataCategoryFactory.java
@@ -20,7 +20,7 @@
import org.w3c.dom.Element;
-import java.util.HashMap;
+import java.util.LinkedHashMap;
import java.util.List;
import java.util.Map;
@@ -28,7 +28,7 @@
@Override
public DataCategory createFromHrElements(List<Element> elements) throws MalformedXmlException {
String categoryName = null;
- Map<String, DataType> dataTypeMap = new HashMap<String, DataType>();
+ Map<String, DataType> dataTypeMap = new LinkedHashMap<String, DataType>();
for (Element ele : elements) {
categoryName = ele.getAttribute(XmlUtils.HR_ATTR_DATA_CATEGORY);
String dataTypeName = ele.getAttribute(XmlUtils.HR_ATTR_DATA_TYPE);
@@ -36,7 +36,8 @@
throw new MalformedXmlException(
String.format("Unrecognized data type name: %s", dataTypeName));
}
- dataTypeMap.put(dataTypeName, new DataTypeFactory().createFromHrElements(List.of(ele)));
+ dataTypeMap.put(
+ dataTypeName, new DataTypeFactory().createFromHrElements(XmlUtils.listOf(ele)));
}
return new DataCategory(categoryName, dataTypeMap);
diff --git a/tools/app_metadata_bundles/src/lib/java/com/android/asllib/DataLabels.java b/tools/app_metadata_bundles/src/lib/java/com/android/asllib/DataLabels.java
index d2fffc0..96ec93c 100644
--- a/tools/app_metadata_bundles/src/lib/java/com/android/asllib/DataLabels.java
+++ b/tools/app_metadata_bundles/src/lib/java/com/android/asllib/DataLabels.java
@@ -74,7 +74,7 @@
maybeAppendDataUsages(doc, dataLabelsEle, mDataCollected, XmlUtils.OD_NAME_DATA_COLLECTED);
maybeAppendDataUsages(doc, dataLabelsEle, mDataShared, XmlUtils.OD_NAME_DATA_SHARED);
- return List.of(dataLabelsEle);
+ return XmlUtils.listOf(dataLabelsEle);
}
private void maybeAppendDataUsages(
diff --git a/tools/app_metadata_bundles/src/lib/java/com/android/asllib/DataLabelsFactory.java b/tools/app_metadata_bundles/src/lib/java/com/android/asllib/DataLabelsFactory.java
index 1adb140..79edab7 100644
--- a/tools/app_metadata_bundles/src/lib/java/com/android/asllib/DataLabelsFactory.java
+++ b/tools/app_metadata_bundles/src/lib/java/com/android/asllib/DataLabelsFactory.java
@@ -16,13 +16,14 @@
package com.android.asllib;
+import com.android.asllib.util.AslgenUtil;
import com.android.asllib.util.MalformedXmlException;
import org.w3c.dom.Element;
import org.w3c.dom.NodeList;
-import java.util.HashMap;
import java.util.HashSet;
+import java.util.LinkedHashMap;
import java.util.List;
import java.util.Map;
import java.util.Set;
@@ -33,6 +34,10 @@
@Override
public DataLabels createFromHrElements(List<Element> elements) throws MalformedXmlException {
Element ele = XmlUtils.getSingleElement(elements);
+ if (ele == null) {
+ AslgenUtil.logI("Found no DataLabels in hr format.");
+ return null;
+ }
Map<String, DataCategory> dataAccessed =
getDataCategoriesWithTag(ele, XmlUtils.HR_TAG_DATA_ACCESSED);
Map<String, DataCategory> dataCollected =
@@ -88,7 +93,7 @@
private static Map<String, DataCategory> getDataCategoriesWithTag(
Element dataLabelsEle, String dataCategoryUsageTypeTag) throws MalformedXmlException {
NodeList dataUsedNodeList = dataLabelsEle.getElementsByTagName(dataCategoryUsageTypeTag);
- Map<String, DataCategory> dataCategoryMap = new HashMap<String, DataCategory>();
+ Map<String, DataCategory> dataCategoryMap = new LinkedHashMap<String, DataCategory>();
Set<String> dataCategoryNames = new HashSet<String>();
for (int i = 0; i < dataUsedNodeList.getLength(); i++) {
diff --git a/tools/app_metadata_bundles/src/lib/java/com/android/asllib/DataType.java b/tools/app_metadata_bundles/src/lib/java/com/android/asllib/DataType.java
index 5ba2975..d011cfe 100644
--- a/tools/app_metadata_bundles/src/lib/java/com/android/asllib/DataType.java
+++ b/tools/app_metadata_bundles/src/lib/java/com/android/asllib/DataType.java
@@ -29,15 +29,13 @@
public class DataType implements AslMarshallable {
public enum Purpose {
- PURPOSE_APP_FUNCTIONALITY(1),
- PURPOSE_ANALYTICS(2),
- PURPOSE_DEVELOPER_COMMUNICATIONS(3),
- PURPOSE_FRAUD_PREVENTION_SECURITY(4),
- PURPOSE_ADVERTISING(5),
- PURPOSE_PERSONALIZATION(6),
- PURPOSE_ACCOUNT_MANAGEMENT(7);
-
- private static final String PURPOSE_PREFIX = "PURPOSE_";
+ APP_FUNCTIONALITY(1),
+ ANALYTICS(2),
+ DEVELOPER_COMMUNICATIONS(3),
+ FRAUD_PREVENTION_SECURITY(4),
+ ADVERTISING(5),
+ PERSONALIZATION(6),
+ ACCOUNT_MANAGEMENT(7);
private final int mValue;
@@ -57,7 +55,7 @@
return e;
}
}
- throw new IllegalArgumentException("No enum for value: " + value);
+ throw new IllegalArgumentException("No Purpose enum for value: " + value);
}
/** Get the Purpose associated with the human-readable String. */
@@ -67,33 +65,30 @@
return e;
}
}
- throw new IllegalArgumentException("No enum for str: " + s);
+ throw new IllegalArgumentException("No Purpose enum for str: " + s);
}
/** Human-readable String representation of Purpose. */
public String toString() {
- if (!this.name().startsWith(PURPOSE_PREFIX)) {
- return this.name();
- }
- return this.name().substring(PURPOSE_PREFIX.length()).toLowerCase();
+ return this.name().toLowerCase();
}
}
private final String mDataTypeName;
- private final Set<Purpose> mPurposeSet;
+ private final List<Purpose> mPurposes;
private final Boolean mIsCollectionOptional;
private final Boolean mIsSharingOptional;
private final Boolean mEphemeral;
public DataType(
String dataTypeName,
- Set<Purpose> purposeSet,
+ List<Purpose> purposes,
Boolean isCollectionOptional,
Boolean isSharingOptional,
Boolean ephemeral) {
this.mDataTypeName = dataTypeName;
- this.mPurposeSet = purposeSet;
+ this.mPurposes = purposes;
this.mIsCollectionOptional = isCollectionOptional;
this.mIsSharingOptional = isSharingOptional;
this.mEphemeral = ephemeral;
@@ -107,8 +102,8 @@
* Returns {@link Set} of valid {@link Integer} purposes for using the associated data category
* and type
*/
- public Set<Purpose> getPurposeSet() {
- return mPurposeSet;
+ public List<Purpose> getPurposes() {
+ return mPurposes;
}
/**
@@ -138,17 +133,15 @@
@Override
public List<Element> toOdDomElements(Document doc) {
Element dataTypeEle = XmlUtils.createPbundleEleWithName(doc, this.getDataTypeName());
- if (!this.getPurposeSet().isEmpty()) {
- Element purposesEle = doc.createElement(XmlUtils.OD_TAG_INT_ARRAY);
- purposesEle.setAttribute(XmlUtils.OD_ATTR_NAME, XmlUtils.OD_NAME_PURPOSES);
- purposesEle.setAttribute(
- XmlUtils.OD_ATTR_NUM, String.valueOf(this.getPurposeSet().size()));
- for (DataType.Purpose purpose : this.getPurposeSet()) {
- Element purposeEle = doc.createElement(XmlUtils.OD_TAG_ITEM);
- purposeEle.setAttribute(XmlUtils.OD_ATTR_VALUE, String.valueOf(purpose.getValue()));
- purposesEle.appendChild(purposeEle);
- }
- dataTypeEle.appendChild(purposesEle);
+ if (!this.getPurposes().isEmpty()) {
+ dataTypeEle.appendChild(
+ XmlUtils.createOdArray(
+ doc,
+ XmlUtils.OD_TAG_INT_ARRAY,
+ XmlUtils.OD_NAME_PURPOSES,
+ this.getPurposes().stream()
+ .map(p -> String.valueOf(p.getValue()))
+ .toList()));
}
maybeAddBoolToOdElement(
@@ -162,7 +155,7 @@
this.getIsSharingOptional(),
XmlUtils.OD_NAME_IS_SHARING_OPTIONAL);
maybeAddBoolToOdElement(doc, dataTypeEle, this.getEphemeral(), XmlUtils.OD_NAME_EPHEMERAL);
- return List.of(dataTypeEle);
+ return XmlUtils.listOf(dataTypeEle);
}
private static void maybeAddBoolToOdElement(
diff --git a/tools/app_metadata_bundles/src/lib/java/com/android/asllib/DataTypeFactory.java b/tools/app_metadata_bundles/src/lib/java/com/android/asllib/DataTypeFactory.java
index e3d1587..27c1b59 100644
--- a/tools/app_metadata_bundles/src/lib/java/com/android/asllib/DataTypeFactory.java
+++ b/tools/app_metadata_bundles/src/lib/java/com/android/asllib/DataTypeFactory.java
@@ -29,19 +29,16 @@
public DataType createFromHrElements(List<Element> elements) {
Element hrDataTypeEle = XmlUtils.getSingleElement(elements);
String dataTypeName = hrDataTypeEle.getAttribute(XmlUtils.HR_ATTR_DATA_TYPE);
- Set<DataType.Purpose> purposeSet =
+ List<DataType.Purpose> purposes =
Arrays.stream(hrDataTypeEle.getAttribute(XmlUtils.HR_ATTR_PURPOSES).split("\\|"))
.map(DataType.Purpose::forString)
- .collect(Collectors.toUnmodifiableSet());
+ .collect(Collectors.toList());
Boolean isCollectionOptional =
- XmlUtils.fromString(
- hrDataTypeEle.getAttribute(XmlUtils.HR_ATTR_IS_COLLECTION_OPTIONAL));
+ XmlUtils.getBoolAttr(hrDataTypeEle, XmlUtils.HR_ATTR_IS_COLLECTION_OPTIONAL);
Boolean isSharingOptional =
- XmlUtils.fromString(
- hrDataTypeEle.getAttribute(XmlUtils.HR_ATTR_IS_SHARING_OPTIONAL));
- Boolean ephemeral =
- XmlUtils.fromString(hrDataTypeEle.getAttribute(XmlUtils.HR_ATTR_EPHEMERAL));
+ XmlUtils.getBoolAttr(hrDataTypeEle, XmlUtils.HR_ATTR_IS_SHARING_OPTIONAL);
+ Boolean ephemeral = XmlUtils.getBoolAttr(hrDataTypeEle, XmlUtils.HR_ATTR_EPHEMERAL);
return new DataType(
- dataTypeName, purposeSet, isCollectionOptional, isSharingOptional, ephemeral);
+ dataTypeName, purposes, isCollectionOptional, isSharingOptional, ephemeral);
}
}
diff --git a/tools/app_metadata_bundles/src/lib/java/com/android/asllib/DeveloperInfo.java b/tools/app_metadata_bundles/src/lib/java/com/android/asllib/DeveloperInfo.java
new file mode 100644
index 0000000..44a5b12
--- /dev/null
+++ b/tools/app_metadata_bundles/src/lib/java/com/android/asllib/DeveloperInfo.java
@@ -0,0 +1,140 @@
+/*
+ * 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.asllib;
+
+import org.w3c.dom.Document;
+import org.w3c.dom.Element;
+
+import java.util.List;
+
+/** DeveloperInfo representation */
+public class DeveloperInfo implements AslMarshallable {
+ public enum DeveloperRelationship {
+ OEM(0),
+ ODM(1),
+ SOC(2),
+ OTA(3),
+ CARRIER(4),
+ AOSP(5),
+ OTHER(6);
+
+ private final int mValue;
+
+ DeveloperRelationship(int value) {
+ this.mValue = value;
+ }
+
+ /** Get the int value associated with the DeveloperRelationship. */
+ public int getValue() {
+ return mValue;
+ }
+
+ /** Get the DeveloperRelationship associated with the int value. */
+ public static DeveloperInfo.DeveloperRelationship forValue(int value) {
+ for (DeveloperInfo.DeveloperRelationship e : values()) {
+ if (e.getValue() == value) {
+ return e;
+ }
+ }
+ throw new IllegalArgumentException("No DeveloperRelationship enum for value: " + value);
+ }
+
+ /** Get the DeveloperRelationship associated with the human-readable String. */
+ public static DeveloperInfo.DeveloperRelationship forString(String s) {
+ for (DeveloperInfo.DeveloperRelationship e : values()) {
+ if (e.toString().equals(s)) {
+ return e;
+ }
+ }
+ throw new IllegalArgumentException("No DeveloperRelationship enum for str: " + s);
+ }
+
+ /** Human-readable String representation of DeveloperRelationship. */
+ public String toString() {
+ return this.name().toLowerCase();
+ }
+ }
+
+ private final String mName;
+ private final String mEmail;
+ private final String mAddress;
+ private final String mCountryRegion;
+ private final DeveloperRelationship mDeveloperRelationship;
+ private final String mWebsite;
+ private final String mAppDeveloperRegistryId;
+
+ public DeveloperInfo(
+ String name,
+ String email,
+ String address,
+ String countryRegion,
+ DeveloperRelationship developerRelationship,
+ String website,
+ String appDeveloperRegistryId) {
+ this.mName = name;
+ this.mEmail = email;
+ this.mAddress = address;
+ this.mCountryRegion = countryRegion;
+ this.mDeveloperRelationship = developerRelationship;
+ this.mWebsite = website;
+ this.mAppDeveloperRegistryId = appDeveloperRegistryId;
+ }
+
+ /** Creates an on-device DOM element from the {@link SafetyLabels}. */
+ @Override
+ public List<Element> toOdDomElements(Document doc) {
+ Element developerInfoEle =
+ XmlUtils.createPbundleEleWithName(doc, XmlUtils.OD_NAME_DEVELOPER_INFO);
+ if (mName != null) {
+ developerInfoEle.appendChild(
+ XmlUtils.createOdStringEle(doc, XmlUtils.OD_NAME_NAME, mName));
+ }
+ if (mEmail != null) {
+ developerInfoEle.appendChild(
+ XmlUtils.createOdStringEle(doc, XmlUtils.OD_NAME_EMAIL, mEmail));
+ }
+ if (mAddress != null) {
+ developerInfoEle.appendChild(
+ XmlUtils.createOdStringEle(doc, XmlUtils.OD_NAME_ADDRESS, mAddress));
+ }
+ if (mCountryRegion != null) {
+ developerInfoEle.appendChild(
+ XmlUtils.createOdStringEle(
+ doc, XmlUtils.OD_NAME_COUNTRY_REGION, mCountryRegion));
+ }
+ if (mDeveloperRelationship != null) {
+ developerInfoEle.appendChild(
+ XmlUtils.createOdLongEle(
+ doc,
+ XmlUtils.OD_NAME_DEVELOPER_RELATIONSHIP,
+ mDeveloperRelationship.getValue()));
+ }
+ if (mWebsite != null) {
+ developerInfoEle.appendChild(
+ XmlUtils.createOdStringEle(doc, XmlUtils.OD_NAME_WEBSITE, mWebsite));
+ }
+ if (mAppDeveloperRegistryId != null) {
+ developerInfoEle.appendChild(
+ XmlUtils.createOdStringEle(
+ doc,
+ XmlUtils.OD_NAME_APP_DEVELOPER_REGISTRY_ID,
+ mAppDeveloperRegistryId));
+ }
+
+ return XmlUtils.listOf(developerInfoEle);
+ }
+}
diff --git a/tools/app_metadata_bundles/src/lib/java/com/android/asllib/DeveloperInfoFactory.java b/tools/app_metadata_bundles/src/lib/java/com/android/asllib/DeveloperInfoFactory.java
new file mode 100644
index 0000000..4961892
--- /dev/null
+++ b/tools/app_metadata_bundles/src/lib/java/com/android/asllib/DeveloperInfoFactory.java
@@ -0,0 +1,59 @@
+/*
+ * 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.asllib;
+
+import com.android.asllib.util.AslgenUtil;
+import com.android.asllib.util.MalformedXmlException;
+
+import org.w3c.dom.Element;
+
+import java.util.List;
+
+public class DeveloperInfoFactory implements AslMarshallableFactory<DeveloperInfo> {
+
+ /** Creates a {@link DeveloperInfo} from the human-readable DOM element. */
+ @Override
+ public DeveloperInfo createFromHrElements(List<Element> elements) throws MalformedXmlException {
+ Element developerInfoEle = XmlUtils.getSingleElement(elements);
+ if (developerInfoEle == null) {
+ AslgenUtil.logI("No DeveloperInfo found in hr format.");
+ return null;
+ }
+ String name = XmlUtils.getStringAttr(developerInfoEle, XmlUtils.HR_ATTR_NAME);
+ String email = XmlUtils.getStringAttr(developerInfoEle, XmlUtils.HR_ATTR_EMAIL);
+ String address = XmlUtils.getStringAttr(developerInfoEle, XmlUtils.HR_ATTR_ADDRESS);
+ String countryRegion =
+ XmlUtils.getStringAttr(developerInfoEle, XmlUtils.HR_ATTR_COUNTRY_REGION);
+ DeveloperInfo.DeveloperRelationship developerRelationship =
+ DeveloperInfo.DeveloperRelationship.forString(
+ XmlUtils.getStringAttr(
+ developerInfoEle, XmlUtils.HR_ATTR_DEVELOPER_RELATIONSHIP));
+ String website = XmlUtils.getStringAttr(developerInfoEle, XmlUtils.HR_ATTR_WEBSITE, false);
+ String appDeveloperRegistryId =
+ XmlUtils.getStringAttr(
+ developerInfoEle, XmlUtils.HR_ATTR_APP_DEVELOPER_REGISTRY_ID, false);
+
+ return new DeveloperInfo(
+ name,
+ email,
+ address,
+ countryRegion,
+ developerRelationship,
+ website,
+ appDeveloperRegistryId);
+ }
+}
diff --git a/tools/app_metadata_bundles/src/lib/java/com/android/asllib/SafetyLabels.java b/tools/app_metadata_bundles/src/lib/java/com/android/asllib/SafetyLabels.java
index f06522f..40ef48d 100644
--- a/tools/app_metadata_bundles/src/lib/java/com/android/asllib/SafetyLabels.java
+++ b/tools/app_metadata_bundles/src/lib/java/com/android/asllib/SafetyLabels.java
@@ -47,7 +47,11 @@
public List<Element> toOdDomElements(Document doc) {
Element safetyLabelsEle =
XmlUtils.createPbundleEleWithName(doc, XmlUtils.OD_NAME_SAFETY_LABELS);
- XmlUtils.appendChildren(safetyLabelsEle, mDataLabels.toOdDomElements(doc));
- return List.of(safetyLabelsEle);
+ safetyLabelsEle.appendChild(
+ XmlUtils.createOdLongEle(doc, XmlUtils.OD_NAME_VERSION, mVersion));
+ if (mDataLabels != null) {
+ XmlUtils.appendChildren(safetyLabelsEle, mDataLabels.toOdDomElements(doc));
+ }
+ return XmlUtils.listOf(safetyLabelsEle);
}
}
diff --git a/tools/app_metadata_bundles/src/lib/java/com/android/asllib/SafetyLabelsFactory.java b/tools/app_metadata_bundles/src/lib/java/com/android/asllib/SafetyLabelsFactory.java
index 80b9f57..ab81b1d 100644
--- a/tools/app_metadata_bundles/src/lib/java/com/android/asllib/SafetyLabelsFactory.java
+++ b/tools/app_metadata_bundles/src/lib/java/com/android/asllib/SafetyLabelsFactory.java
@@ -16,6 +16,7 @@
package com.android.asllib;
+import com.android.asllib.util.AslgenUtil;
import com.android.asllib.util.MalformedXmlException;
import org.w3c.dom.Element;
@@ -28,18 +29,16 @@
@Override
public SafetyLabels createFromHrElements(List<Element> elements) throws MalformedXmlException {
Element safetyLabelsEle = XmlUtils.getSingleElement(elements);
- Long version;
- try {
- version = Long.parseLong(safetyLabelsEle.getAttribute(XmlUtils.HR_ATTR_VERSION));
- } catch (Exception e) {
- throw new IllegalArgumentException(
- "Malformed or missing required version in safety labels.");
+ if (safetyLabelsEle == null) {
+ AslgenUtil.logI("No SafetyLabels found in hr format.");
+ return null;
}
+ long version = XmlUtils.tryGetVersion(safetyLabelsEle);
DataLabels dataLabels =
new DataLabelsFactory()
.createFromHrElements(
- List.of(
+ XmlUtils.listOf(
XmlUtils.getSingleChildElement(
safetyLabelsEle, XmlUtils.HR_TAG_DATA_LABELS)));
return new SafetyLabels(version, dataLabels);
diff --git a/tools/app_metadata_bundles/src/lib/java/com/android/asllib/SystemAppSafetyLabel.java b/tools/app_metadata_bundles/src/lib/java/com/android/asllib/SystemAppSafetyLabel.java
new file mode 100644
index 0000000..93d9c2b
--- /dev/null
+++ b/tools/app_metadata_bundles/src/lib/java/com/android/asllib/SystemAppSafetyLabel.java
@@ -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.asllib;
+
+import org.w3c.dom.Document;
+import org.w3c.dom.Element;
+
+import java.util.List;
+
+/** Safety Label representation containing zero or more {@link DataCategory} for data shared */
+public class SystemAppSafetyLabel implements AslMarshallable {
+
+ private final String mUrl;
+
+ public SystemAppSafetyLabel(String url) {
+ this.mUrl = url;
+ }
+
+ /** Returns the system app safety label URL. */
+ public String getUrl() {
+ return mUrl;
+ }
+
+ /** Creates an on-device DOM element from the {@link SystemAppSafetyLabel}. */
+ @Override
+ public List<Element> toOdDomElements(Document doc) {
+ Element systemAppSafetyLabelEle =
+ XmlUtils.createPbundleEleWithName(doc, XmlUtils.OD_NAME_SYSTEM_APP_SAFETY_LABEL);
+ systemAppSafetyLabelEle.appendChild(
+ XmlUtils.createOdStringEle(doc, XmlUtils.OD_NAME_URL, mUrl));
+ return XmlUtils.listOf(systemAppSafetyLabelEle);
+ }
+}
diff --git a/tools/app_metadata_bundles/src/lib/java/com/android/asllib/SystemAppSafetyLabelFactory.java b/tools/app_metadata_bundles/src/lib/java/com/android/asllib/SystemAppSafetyLabelFactory.java
new file mode 100644
index 0000000..c8c1c7b
--- /dev/null
+++ b/tools/app_metadata_bundles/src/lib/java/com/android/asllib/SystemAppSafetyLabelFactory.java
@@ -0,0 +1,41 @@
+/*
+ * 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.asllib;
+
+import com.android.asllib.util.AslgenUtil;
+import com.android.asllib.util.MalformedXmlException;
+
+import org.w3c.dom.Element;
+
+import java.util.List;
+
+public class SystemAppSafetyLabelFactory implements AslMarshallableFactory<SystemAppSafetyLabel> {
+
+ /** Creates a {@link SystemAppSafetyLabel} from the human-readable DOM element. */
+ @Override
+ public SystemAppSafetyLabel createFromHrElements(List<Element> elements)
+ throws MalformedXmlException {
+ Element systemAppSafetyLabelEle = XmlUtils.getSingleElement(elements);
+ if (systemAppSafetyLabelEle == null) {
+ AslgenUtil.logI("No SystemAppSafetyLabel found in hr format.");
+ return null;
+ }
+
+ String url = XmlUtils.getStringAttr(systemAppSafetyLabelEle, XmlUtils.HR_ATTR_URL);
+ return new SystemAppSafetyLabel(url);
+ }
+}
diff --git a/tools/app_metadata_bundles/src/lib/java/com/android/asllib/TransparencyInfo.java b/tools/app_metadata_bundles/src/lib/java/com/android/asllib/TransparencyInfo.java
new file mode 100644
index 0000000..88717b9
--- /dev/null
+++ b/tools/app_metadata_bundles/src/lib/java/com/android/asllib/TransparencyInfo.java
@@ -0,0 +1,58 @@
+/*
+ * 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.asllib;
+
+import org.w3c.dom.Document;
+import org.w3c.dom.Element;
+
+import java.util.List;
+
+/** TransparencyInfo representation containing {@link DeveloperInfo} and {@link AppInfo} */
+public class TransparencyInfo implements AslMarshallable {
+
+ private final DeveloperInfo mDeveloperInfo;
+ private final AppInfo mAppInfo;
+
+ public TransparencyInfo(DeveloperInfo developerInfo, AppInfo appInfo) {
+ this.mDeveloperInfo = developerInfo;
+ this.mAppInfo = appInfo;
+ }
+
+ /** Gets the {@link DeveloperInfo} of the {@link TransparencyInfo}. */
+ public DeveloperInfo getDeveloperInfo() {
+ return mDeveloperInfo;
+ }
+
+ /** Gets the {@link AppInfo} of the {@link TransparencyInfo}. */
+ public AppInfo getAppInfo() {
+ return mAppInfo;
+ }
+
+ /** Creates an on-device DOM element from the {@link TransparencyInfo}. */
+ @Override
+ public List<Element> toOdDomElements(Document doc) {
+ Element transparencyInfoEle =
+ XmlUtils.createPbundleEleWithName(doc, XmlUtils.OD_NAME_TRANSPARENCY_INFO);
+ if (mDeveloperInfo != null) {
+ XmlUtils.appendChildren(transparencyInfoEle, mDeveloperInfo.toOdDomElements(doc));
+ }
+ if (mAppInfo != null) {
+ XmlUtils.appendChildren(transparencyInfoEle, mAppInfo.toOdDomElements(doc));
+ }
+ return XmlUtils.listOf(transparencyInfoEle);
+ }
+}
diff --git a/tools/app_metadata_bundles/src/lib/java/com/android/asllib/TransparencyInfoFactory.java b/tools/app_metadata_bundles/src/lib/java/com/android/asllib/TransparencyInfoFactory.java
new file mode 100644
index 0000000..13a7eb6
--- /dev/null
+++ b/tools/app_metadata_bundles/src/lib/java/com/android/asllib/TransparencyInfoFactory.java
@@ -0,0 +1,51 @@
+/*
+ * 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.asllib;
+
+import com.android.asllib.util.AslgenUtil;
+import com.android.asllib.util.MalformedXmlException;
+
+import org.w3c.dom.Element;
+
+import java.util.List;
+
+public class TransparencyInfoFactory implements AslMarshallableFactory<TransparencyInfo> {
+
+ /** Creates a {@link TransparencyInfo} from the human-readable DOM element. */
+ @Override
+ public TransparencyInfo createFromHrElements(List<Element> elements)
+ throws MalformedXmlException {
+ Element transparencyInfoEle = XmlUtils.getSingleElement(elements);
+ if (transparencyInfoEle == null) {
+ AslgenUtil.logI("No TransparencyInfo found in hr format.");
+ return null;
+ }
+
+ Element developerInfoEle =
+ XmlUtils.getSingleChildElement(
+ transparencyInfoEle, XmlUtils.HR_TAG_DEVELOPER_INFO, false);
+ DeveloperInfo developerInfo =
+ new DeveloperInfoFactory().createFromHrElements(XmlUtils.listOf(developerInfoEle));
+
+ Element appInfoEle =
+ XmlUtils.getSingleChildElement(
+ transparencyInfoEle, XmlUtils.HR_TAG_APP_INFO, false);
+ AppInfo appInfo = new AppInfoFactory().createFromHrElements(XmlUtils.listOf(appInfoEle));
+
+ return new TransparencyInfo(developerInfo, appInfo);
+ }
+}
diff --git a/tools/app_metadata_bundles/src/lib/java/com/android/asllib/XmlUtils.java b/tools/app_metadata_bundles/src/lib/java/com/android/asllib/XmlUtils.java
index 3bc9ccc..cc8fe79 100644
--- a/tools/app_metadata_bundles/src/lib/java/com/android/asllib/XmlUtils.java
+++ b/tools/app_metadata_bundles/src/lib/java/com/android/asllib/XmlUtils.java
@@ -23,16 +23,27 @@
import org.w3c.dom.NodeList;
import java.util.ArrayList;
+import java.util.Arrays;
import java.util.List;
public class XmlUtils {
public static final String HR_TAG_APP_METADATA_BUNDLES = "app-metadata-bundles";
+ public static final String HR_TAG_SYSTEM_APP_SAFETY_LABEL = "system-app-safety-label";
public static final String HR_TAG_SAFETY_LABELS = "safety-labels";
+ public static final String HR_TAG_TRANSPARENCY_INFO = "transparency-info";
+ public static final String HR_TAG_DEVELOPER_INFO = "developer-info";
+ public static final String HR_TAG_APP_INFO = "app-info";
public static final String HR_TAG_DATA_LABELS = "data-labels";
public static final String HR_TAG_DATA_ACCESSED = "data-accessed";
public static final String HR_TAG_DATA_COLLECTED = "data-collected";
public static final String HR_TAG_DATA_SHARED = "data-shared";
-
+ public static final String HR_ATTR_NAME = "name";
+ public static final String HR_ATTR_EMAIL = "email";
+ public static final String HR_ATTR_ADDRESS = "address";
+ public static final String HR_ATTR_COUNTRY_REGION = "countryRegion";
+ public static final String HR_ATTR_DEVELOPER_RELATIONSHIP = "relationship";
+ public static final String HR_ATTR_WEBSITE = "website";
+ public static final String HR_ATTR_APP_DEVELOPER_REGISTRY_ID = "registryId";
public static final String HR_ATTR_DATA_CATEGORY = "dataCategory";
public static final String HR_ATTR_DATA_TYPE = "dataType";
public static final String HR_ATTR_IS_COLLECTION_OPTIONAL = "isCollectionOptional";
@@ -40,16 +51,55 @@
public static final String HR_ATTR_EPHEMERAL = "ephemeral";
public static final String HR_ATTR_PURPOSES = "purposes";
public static final String HR_ATTR_VERSION = "version";
+ public static final String HR_ATTR_URL = "url";
+ public static final String HR_ATTR_TITLE = "title";
+ public static final String HR_ATTR_DESCRIPTION = "description";
+ public static final String HR_ATTR_CONTAINS_ADS = "containsAds";
+ public static final String HR_ATTR_OBEY_APS = "obeyAps";
+ public static final String HR_ATTR_ADS_FINGERPRINTING = "adsFingerprinting";
+ public static final String HR_ATTR_SECURITY_FINGERPRINTING = "securityFingerprinting";
+ public static final String HR_ATTR_PRIVACY_POLICY = "privacyPolicy";
+ public static final String HR_ATTR_SECURITY_ENDPOINTS = "securityEndpoints";
+ public static final String HR_ATTR_FIRST_PARTY_ENDPOINTS = "firstPartyEndpoints";
+ public static final String HR_ATTR_SERVICE_PROVIDER_ENDPOINTS = "serviceProviderEndpoints";
+ public static final String HR_ATTR_CATEGORY = "category";
public static final String OD_TAG_BUNDLE = "bundle";
public static final String OD_TAG_PBUNDLE_AS_MAP = "pbundle_as_map";
public static final String OD_TAG_BOOLEAN = "boolean";
+ public static final String OD_TAG_LONG = "long";
+ public static final String OD_TAG_STRING = "string";
public static final String OD_TAG_INT_ARRAY = "int-array";
+ public static final String OD_TAG_STRING_ARRAY = "string-array";
public static final String OD_TAG_ITEM = "item";
public static final String OD_ATTR_NAME = "name";
public static final String OD_ATTR_VALUE = "value";
public static final String OD_ATTR_NUM = "num";
public static final String OD_NAME_SAFETY_LABELS = "safety_labels";
+ public static final String OD_NAME_TRANSPARENCY_INFO = "transparency_info";
+ public static final String OD_NAME_DEVELOPER_INFO = "developer_info";
+ public static final String OD_NAME_NAME = "name";
+ public static final String OD_NAME_EMAIL = "email";
+ public static final String OD_NAME_ADDRESS = "address";
+ public static final String OD_NAME_COUNTRY_REGION = "country_region";
+ public static final String OD_NAME_DEVELOPER_RELATIONSHIP = "relationship";
+ public static final String OD_NAME_WEBSITE = "website";
+ public static final String OD_NAME_APP_DEVELOPER_REGISTRY_ID = "app_developer_registry_id";
+ public static final String OD_NAME_APP_INFO = "app_info";
+ public static final String OD_NAME_TITLE = "title";
+ public static final String OD_NAME_DESCRIPTION = "description";
+ public static final String OD_NAME_CONTAINS_ADS = "contains_ads";
+ public static final String OD_NAME_OBEY_APS = "obey_aps";
+ public static final String OD_NAME_ADS_FINGERPRINTING = "ads_fingerprinting";
+ public static final String OD_NAME_SECURITY_FINGERPRINTING = "security_fingerprinting";
+ public static final String OD_NAME_PRIVACY_POLICY = "privacy_policy";
+ public static final String OD_NAME_SECURITY_ENDPOINT = "security_endpoint";
+ public static final String OD_NAME_FIRST_PARTY_ENDPOINT = "first_party_endpoint";
+ public static final String OD_NAME_SERVICE_PROVIDER_ENDPOINT = "service_provider_endpoint";
+ public static final String OD_NAME_CATEGORY = "category";
+ public static final String OD_NAME_VERSION = "version";
+ public static final String OD_NAME_URL = "url";
+ public static final String OD_NAME_SYSTEM_APP_SAFETY_LABEL = "system_app_safety_label";
public static final String OD_NAME_DATA_LABELS = "data_labels";
public static final String OD_NAME_DATA_ACCESSED = "data_accessed";
public static final String OD_NAME_DATA_COLLECTED = "data_collected";
@@ -75,17 +125,39 @@
public static Element getSingleChildElement(Element parentEle, String tagName)
throws MalformedXmlException {
var elements = parentEle.getElementsByTagName(tagName);
- return getSingleElement(elements, tagName);
+ return getSingleElement(elements, tagName, true);
+ }
+
+ /**
+ * Gets the single {@link Element} within {@param parentEle} and having the {@param tagName}.
+ */
+ public static Element getSingleChildElement(Element parentEle, String tagName, boolean required)
+ throws MalformedXmlException {
+ var elements = parentEle.getElementsByTagName(tagName);
+ return getSingleElement(elements, tagName, required);
}
/** Gets the single {@link Element} from {@param elements} */
public static Element getSingleElement(NodeList elements, String tagName)
throws MalformedXmlException {
- if (elements.getLength() != 1) {
+ return getSingleElement(elements, tagName, true);
+ }
+
+ /** Gets the single {@link Element} from {@param elements} */
+ public static Element getSingleElement(NodeList elements, String tagName, boolean required)
+ throws MalformedXmlException {
+ if (elements.getLength() > 1) {
throw new MalformedXmlException(
String.format(
"Expected 1 element \"%s\" in NodeList but got %s.",
tagName, elements.getLength()));
+ } else if (elements.getLength() == 0) {
+ if (required) {
+ throw new MalformedXmlException(
+ String.format("Found no element \"%s\" in NodeList.", tagName));
+ } else {
+ return null;
+ }
}
var elementAsNode = elements.item(0);
if (!(elementAsNode instanceof Element)) {
@@ -108,7 +180,7 @@
public static List<Element> asElementList(NodeList nodeList) {
List<Element> elementList = new ArrayList<Element>();
for (int i = 0; i < nodeList.getLength(); i++) {
- var elementAsNode = nodeList.item(0);
+ var elementAsNode = nodeList.item(i);
if (elementAsNode instanceof Element) {
elementList.add(((Element) elementAsNode));
}
@@ -124,7 +196,7 @@
}
/** Gets the Boolean from the String value. */
- public static Boolean fromString(String s) {
+ private static Boolean fromString(String s) {
if (s == null) {
return null;
}
@@ -151,8 +223,86 @@
return ele;
}
+ /** Create an on-device Long DOM Element with the given attribute name. */
+ public static Element createOdLongEle(Document doc, String name, long l) {
+ var ele = doc.createElement(XmlUtils.OD_TAG_LONG);
+ ele.setAttribute(XmlUtils.OD_ATTR_NAME, name);
+ ele.setAttribute(XmlUtils.OD_ATTR_VALUE, String.valueOf(l));
+ return ele;
+ }
+
+ /** Create an on-device Long DOM Element with the given attribute name. */
+ public static Element createOdStringEle(Document doc, String name, String val) {
+ var ele = doc.createElement(XmlUtils.OD_TAG_STRING);
+ ele.setAttribute(XmlUtils.OD_ATTR_NAME, name);
+ ele.setAttribute(XmlUtils.OD_ATTR_VALUE, val);
+ return ele;
+ }
+
+ /** Create OD style array DOM Element, which can represent any time but is stored as Strings. */
+ public static Element createOdArray(
+ Document doc, String arrayTag, String arrayName, List<String> arrayVals) {
+ Element arrEle = doc.createElement(arrayTag);
+ arrEle.setAttribute(XmlUtils.OD_ATTR_NAME, arrayName);
+ arrEle.setAttribute(XmlUtils.OD_ATTR_NUM, String.valueOf(arrayVals.size()));
+ for (String s : arrayVals) {
+ Element itemEle = doc.createElement(XmlUtils.OD_TAG_ITEM);
+ itemEle.setAttribute(XmlUtils.OD_ATTR_VALUE, s);
+ arrEle.appendChild(itemEle);
+ }
+ return arrEle;
+ }
+
/** Returns whether the String is null or empty. */
public static boolean isNullOrEmpty(String s) {
return s == null || s.isEmpty();
}
+
+ /** Tries getting required version attribute and throws exception if it doesn't exist */
+ public static Long tryGetVersion(Element ele) {
+ long version;
+ try {
+ version = Long.parseLong(ele.getAttribute(XmlUtils.HR_ATTR_VERSION));
+ } catch (Exception e) {
+ throw new IllegalArgumentException(
+ String.format(
+ "Malformed or missing required version in: %s", ele.getTagName()));
+ }
+ return version;
+ }
+
+ /** Gets an optional Boolean attribute. */
+ public static Boolean getBoolAttr(Element ele, String attrName) {
+ return XmlUtils.fromString(ele.getAttribute(attrName));
+ }
+
+ /** Gets a required String attribute. */
+ public static String getStringAttr(Element ele, String attrName) throws MalformedXmlException {
+ return getStringAttr(ele, attrName, true);
+ }
+
+ /** Gets a String attribute; throws exception if required and non-existent. */
+ public static String getStringAttr(Element ele, String attrName, boolean required)
+ throws MalformedXmlException {
+ String s = ele.getAttribute(attrName);
+ if (isNullOrEmpty(s)) {
+ if (required) {
+ throw new MalformedXmlException(
+ String.format(
+ "Malformed or missing required %s in: %s",
+ attrName, ele.getTagName()));
+ } else {
+ return null;
+ }
+ }
+ return s;
+ }
+
+ /**
+ * Utility method for making a List from one element, to support easier refactoring if needed.
+ * For example, List.of() doesn't support null elements.
+ */
+ public static List<Element> listOf(Element e) {
+ return Arrays.asList(e);
+ }
}
diff --git a/tools/app_metadata_bundles/src/lib/java/com/android/asllib/util/AslgenUtil.java b/tools/app_metadata_bundles/src/lib/java/com/android/asllib/util/AslgenUtil.java
new file mode 100644
index 0000000..7d54215
--- /dev/null
+++ b/tools/app_metadata_bundles/src/lib/java/com/android/asllib/util/AslgenUtil.java
@@ -0,0 +1,26 @@
+/*
+ * 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.asllib.util;
+
+public class AslgenUtil {
+ private static final String ASLGEN_TAG = "ASLGEN";
+
+ /** Log info. */
+ public static void logI(String s) {
+ System.out.println(String.format("%s -- INFO: %s", ASLGEN_TAG, s));
+ }
+}
diff --git a/tools/app_metadata_bundles/src/test/java/com/android/aslgen/AllTests.java b/tools/app_metadata_bundles/src/test/java/com/android/aslgen/AllTests.java
new file mode 100644
index 0000000..7ebb7a1
--- /dev/null
+++ b/tools/app_metadata_bundles/src/test/java/com/android/aslgen/AllTests.java
@@ -0,0 +1,26 @@
+/*
+ * Copyright (C) 2017 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.aslgen;
+
+import org.junit.runner.RunWith;
+import org.junit.runners.Suite;
+
+@RunWith(Suite.class)
+@Suite.SuiteClasses({
+ AslgenTests.class,
+})
+public class AllTests {}
diff --git a/tools/app_metadata_bundles/src/test/java/com/android/aslgen/AslgenTests.java b/tools/app_metadata_bundles/src/test/java/com/android/aslgen/AslgenTests.java
new file mode 100644
index 0000000..3026f8b
--- /dev/null
+++ b/tools/app_metadata_bundles/src/test/java/com/android/aslgen/AslgenTests.java
@@ -0,0 +1,105 @@
+/*
+ * Copyright (C) 2017 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.aslgen;
+
+import static org.junit.Assert.assertEquals;
+
+import com.android.asllib.AndroidSafetyLabel;
+import com.android.asllib.AslConverter;
+
+import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.junit.runners.JUnit4;
+import org.w3c.dom.Document;
+import org.xml.sax.SAXException;
+
+import java.io.ByteArrayInputStream;
+import java.io.ByteArrayOutputStream;
+import java.io.IOException;
+import java.io.InputStream;
+import java.nio.charset.StandardCharsets;
+import java.nio.file.Path;
+import java.nio.file.Paths;
+import java.util.List;
+
+import javax.xml.parsers.DocumentBuilderFactory;
+import javax.xml.parsers.ParserConfigurationException;
+import javax.xml.transform.OutputKeys;
+import javax.xml.transform.Transformer;
+import javax.xml.transform.TransformerException;
+import javax.xml.transform.TransformerFactory;
+import javax.xml.transform.dom.DOMSource;
+import javax.xml.transform.stream.StreamResult;
+
+@RunWith(JUnit4.class)
+public class AslgenTests {
+ private static final String VALID_MAPPINGS_PATH = "com/android/aslgen/validmappings";
+ private static final List<String> VALID_MAPPINGS_SUBDIRS = List.of("location", "contacts");
+ private static final String HR_XML_FILENAME = "hr.xml";
+ private static final String OD_XML_FILENAME = "od.xml";
+
+ /** Logic for setting up tests (empty if not yet needed). */
+ public static void main(String[] params) throws Exception {}
+
+ /** Tests valid mappings between HR and OD. */
+ @Test
+ public void testValidMappings() throws Exception {
+ System.out.println("start testing valid mappings.");
+
+ for (String subdir : VALID_MAPPINGS_SUBDIRS) {
+ Path hrPath = Paths.get(VALID_MAPPINGS_PATH, subdir, HR_XML_FILENAME);
+ Path odPath = Paths.get(VALID_MAPPINGS_PATH, subdir, OD_XML_FILENAME);
+
+ System.out.println("hr path: " + hrPath.toString());
+ System.out.println("od path: " + odPath.toString());
+
+ InputStream hrStream =
+ getClass().getClassLoader().getResourceAsStream(hrPath.toString());
+ String hrContents = new String(hrStream.readAllBytes(), StandardCharsets.UTF_8);
+ InputStream odStream =
+ getClass().getClassLoader().getResourceAsStream(odPath.toString());
+ String odContents = new String(odStream.readAllBytes(), StandardCharsets.UTF_8);
+ AndroidSafetyLabel asl =
+ AslConverter.readFromString(hrContents, AslConverter.Format.HUMAN_READABLE);
+ String out = AslConverter.getXmlAsString(asl, AslConverter.Format.ON_DEVICE);
+ System.out.println("out: " + out);
+
+ assertEquals(getFormattedXml(out), getFormattedXml(odContents));
+ }
+ }
+
+ private static String getFormattedXml(String xmlStr)
+ throws ParserConfigurationException, IOException, SAXException, TransformerException {
+ InputStream stream = new ByteArrayInputStream(xmlStr.getBytes(StandardCharsets.UTF_8));
+ DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
+ factory.setNamespaceAware(true);
+ Document document = factory.newDocumentBuilder().parse(stream);
+
+ TransformerFactory transformerFactory = TransformerFactory.newInstance();
+ Transformer transformer = transformerFactory.newTransformer();
+ transformer.setOutputProperty(OutputKeys.INDENT, "yes");
+ transformer.setOutputProperty(OutputKeys.ENCODING, "UTF-8");
+ transformer.setOutputProperty(OutputKeys.OMIT_XML_DECLARATION, "no");
+
+ ByteArrayOutputStream outStream = new ByteArrayOutputStream();
+ StreamResult streamResult = new StreamResult(outStream); // out
+ DOMSource domSource = new DOMSource(document);
+ transformer.transform(domSource, streamResult);
+
+ return outStream.toString(StandardCharsets.UTF_8);
+ }
+}
diff --git a/tools/app_metadata_bundles/src/test/resources/com/android/aslgen/validmappings/contacts/hr.xml b/tools/app_metadata_bundles/src/test/resources/com/android/aslgen/validmappings/contacts/hr.xml
new file mode 100644
index 0000000..b2ff449
--- /dev/null
+++ b/tools/app_metadata_bundles/src/test/resources/com/android/aslgen/validmappings/contacts/hr.xml
@@ -0,0 +1,11 @@
+<app-metadata-bundles version="123">
+ <safety-labels version="12345">
+ <data-labels>
+ <data-shared dataCategory="contacts"
+ dataType="contacts"
+ isSharingOptional="false"
+ ephemeral="true"
+ purposes="analytics" />
+ </data-labels>
+ </safety-labels>
+</app-metadata-bundles>
\ No newline at end of file
diff --git a/tools/app_metadata_bundles/src/test/resources/com/android/aslgen/validmappings/contacts/od.xml b/tools/app_metadata_bundles/src/test/resources/com/android/aslgen/validmappings/contacts/od.xml
new file mode 100644
index 0000000..81277bf
--- /dev/null
+++ b/tools/app_metadata_bundles/src/test/resources/com/android/aslgen/validmappings/contacts/od.xml
@@ -0,0 +1,19 @@
+<bundle>
+ <long name="version" value="123"/>
+ <pbundle_as_map name="safety_labels">
+ <long name="version" value="12345"/>
+ <pbundle_as_map name="data_labels">
+ <pbundle_as_map name="data_shared">
+ <pbundle_as_map name="contacts">
+ <pbundle_as_map name="contacts">
+ <int-array name="purposes" num="1">
+ <item value="2"/>
+ </int-array>
+ <boolean name="is_sharing_optional" value="false"/>
+ <boolean name="ephemeral" value="true"/>
+ </pbundle_as_map>
+ </pbundle_as_map>
+ </pbundle_as_map>
+ </pbundle_as_map>
+ </pbundle_as_map>
+</bundle>
\ No newline at end of file
diff --git a/tools/app_metadata_bundles/src/test/resources/com/android/aslgen/validmappings/location/hr.xml b/tools/app_metadata_bundles/src/test/resources/com/android/aslgen/validmappings/location/hr.xml
new file mode 100644
index 0000000..ac844b3
--- /dev/null
+++ b/tools/app_metadata_bundles/src/test/resources/com/android/aslgen/validmappings/location/hr.xml
@@ -0,0 +1,16 @@
+<app-metadata-bundles version="123">
+ <safety-labels version="12345">
+ <data-labels>
+ <data-shared dataCategory="location"
+ dataType="precise_location"
+ isSharingOptional="true"
+ ephemeral="true"
+ purposes="app_functionality|analytics" />
+ <data-shared dataCategory="location"
+ dataType="approx_location"
+ isSharingOptional="false"
+ ephemeral="false"
+ purposes="app_functionality" />
+ </data-labels>
+ </safety-labels>
+</app-metadata-bundles>
\ No newline at end of file
diff --git a/tools/app_metadata_bundles/src/test/resources/com/android/aslgen/validmappings/location/od.xml b/tools/app_metadata_bundles/src/test/resources/com/android/aslgen/validmappings/location/od.xml
new file mode 100644
index 0000000..d0a3bfa
--- /dev/null
+++ b/tools/app_metadata_bundles/src/test/resources/com/android/aslgen/validmappings/location/od.xml
@@ -0,0 +1,27 @@
+<bundle>
+ <long name="version" value="123"/>
+ <pbundle_as_map name="safety_labels">
+ <long name="version" value="12345"/>
+ <pbundle_as_map name="data_labels">
+ <pbundle_as_map name="data_shared">
+ <pbundle_as_map name="location">
+ <pbundle_as_map name="precise_location">
+ <int-array name="purposes" num="2">
+ <item value="1"/>
+ <item value="2"/>
+ </int-array>
+ <boolean name="is_sharing_optional" value="true"/>
+ <boolean name="ephemeral" value="true"/>
+ </pbundle_as_map>
+ <pbundle_as_map name="approx_location">
+ <int-array name="purposes" num="1">
+ <item value="1"/>
+ </int-array>
+ <boolean name="is_sharing_optional" value="false"/>
+ <boolean name="ephemeral" value="false"/>
+ </pbundle_as_map>
+ </pbundle_as_map>
+ </pbundle_as_map>
+ </pbundle_as_map>
+ </pbundle_as_map>
+</bundle>
\ No newline at end of file
diff --git a/tools/app_metadata_bundles/src/test/resources/test.xml b/tools/app_metadata_bundles/src/test/resources/test.xml
new file mode 100644
index 0000000..202cc1e
--- /dev/null
+++ b/tools/app_metadata_bundles/src/test/resources/test.xml
@@ -0,0 +1,16 @@
+<app-metadata-bundles>
+ <safety-labels version="12345">
+ <data-labels>
+ <data-shared dataCategory="location"
+ dataType="precise_location"
+ isSharingOptional="true"
+ ephemeral="true"
+ purposes="app_functionality|analytics" />
+ <data-shared dataCategory="location"
+ dataType="approx_location"
+ isSharingOptional="false"
+ ephemeral="false"
+ purposes="app_functionality" />
+ </data-labels>
+ </safety-labels>
+</app-metadata-bundles>
\ No newline at end of file
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"